0

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.

  1. Have you ever encountered a similar problem with call forwarding to an external number in an IVR module?
  2. Are there any specific parameters we may have overlooked in our IVR configuration?

thank you in advance for help!

Simo
  • 33
  • 8

1 Answers1

1

Make sure your VR configuration and carrier mechanism for transfer are aligned and if there is a local switch, the configuration between the switch and those components.

Internal transfers behind a pbx are typically thinks like wink/hook-flash then extension. Carrier transfers, when supported, are usually things like play *80 pause then the 10 digit number. The latter is usually not done with the transfer function. SIP servers have their own messaging and could be the source of your specific error message.

Or, even worse, your carrier doesn't support external transfers and you need to bridge the call between an inbound port and an outbound port.

There may be other transfer mechanisms that work through call control outside of VoiceXML.

Jim Rush
  • 4,143
  • 3
  • 25
  • 27