I'd like to ask for your help today because I'm experiencing an authorization problem when transferring a call to an external number in an IVR (Interactive Voice Response) module. Context: I recently set up an IVR for our company to better manage incoming calls. The aim is to allow callers to be transferred to specific external numbers (e.g. cell phones) according to their needs. However, when a user attempts to perform a call transfer to an external number, they are met with an authorization error message. Problem description: When we try to perform a call transfer to an external number, the IVR system returns the following error message: "Authorization error: External call transfer not authorized." This is quite frustrating, as we have checked all the authorizations and access rights related to the user concerned, and everything seems to be correct.
here a snippet of code of transfercallExternal.tpl:
<?xml version="1.0" encoding="ISO-8859-1"?>
<vxml xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml21/vxml.xsd"
version="2.1" application="$vxmlUniverse.getDocumentRootURL($application.name)">
#set ($breakTimeMetric = "ms")
#if ($this.isCallTransferMultiple)
#set ($rerout = "enable")
#else
#set ($rerout = "disable")
#end
<form id="$this.label">
<block>
#set( $index = 1 )
#set( $languages = $vxmlUniverse.getApplicationLanguages($application.name) )
#foreach( $languageName in $languages )
#if( $index == 1 )
<if cond="application.languageCode == '$languageName'">
<goto next="#$languageName"/>
#else
#if($index == $languages.size())
<else/>
#else
<elseif cond="application.languageCode == '$languageName'"/>
#end
<goto next="#$languageName"/>
#end
#if($index == $languages.size())
</if>
#end
#set( $index = $index + 1 )
#end
</block>
</form>
#foreach( $languageName in $languages )
#generateForm( $languageName )
#end
<form id="transfert">
<var name="phoneNumber" expr="application.${this.phoneNumber.name}"/>
<!-- Use specifics atos property -->
<property name="net.company.ss.transfer.multiple" value="$rerout"/>
<property name="net.company.ss.transfer.context.binary" value="$this.isCallContextBinary"/>
<property name="net.company.ss.transfer.caller.number" value="application.${this.phoneNumber.name}"/>
<property name="net.company.ss.transfer.caller.view" value="$this.callerView"/>
<transfer
name="callTransfer"
connecttimeout="${this.connectTimeout}s"
destexpr="'tel:' + phoneNumber"
type="consultation"
#if ($this.waitingSound !="" )
transferaudio="${this.waitingSound}"
#end
>
<!-- ******************* -->
<!-- Transfer SUCCESSFUL -->
<!-- ******************* -->
<!-- catch the transfer success and exit -->
<!-- catch the transfer success and exit -->
<catch event="connection.disconnect.transfer">
<log>connection disconnect transfer</log>
#foreach( $choice in $this.outputs.successOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</catch>
<!-- **************** -->
<!-- No authorization -->
<!-- **************** -->
<catch event="error.connection.noauthorization">
<log>error connection noauthorization</log>
#foreach( $choice in $this.outputs.failureOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</catch>
<!-- *************** -->
<!-- Bad destination -->
<!-- *************** -->
<catch event="error.connection.baddestination">
<log>error connection baddestination</log>
#foreach( $choice in $this.outputs.failureOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</catch>
<!-- ******** -->
<!-- No route -->
<!-- ******** -->
<catch event="error.connection.noroute">
<log>error connection noroute</log>
#foreach( $choice in $this.outputs.failureOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</catch>
<!-- *********** -->
<!-- No resource -->
<!-- *********** -->
<catch event="error.connection.noresource">
<log>error connection noresource</log>
#foreach( $choice in $this.outputs.failureOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</catch>
<!-- **************** -->
<!-- Connection error -->
<!-- **************** -->
<!-- catch the transfer errors -->
<catch event="error.connection">
<log>error connection</log>
#foreach( $choice in $this.outputs.failureOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</catch>
<!-- ********************************* -->
<!-- Unsupported transfer consultation -->
<!-- ********************************* -->
<catch event="error.unsupported.transfer.consultation">
<log expr="error unsupported transfer consultation"/>
#foreach( $choice in $this.outputs.failureOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</catch>
<!-- *************** -->
<!-- Unsupported URI -->
<!-- *************** -->
<catch event="error.unsupported.uri">
<log expr="error unsupported uri"/>
#foreach( $choice in $this.outputs.failureOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</catch>
<filled>
#foreach( $choice in $this.outputs.successOutput)
<goto
next="$vxmlUniverse.getModuleURL($application.name, ${choice.scriptRefName}, ${choice.moduleRefName})"/>
#end
</filled>
</transfer>
</form>
</vxml>
after call transfer error, I have this error in the logs: error connection noauthorization which is the catch of noautorization in my code.
- Have you ever encountered a similar problem with call forwarding to an external number in an IVR module?
- Are there any specific parameters we may have overlooked in our IVR configuration?
thank you in advance for help!