The ways of implementing blind transfer and attended transfer with SIP are described.
As described in Call transfer, two types of SIP call transfer are implemented by Blueworx Voice Response SIP support:
In the blind transfer mode using State Tables, Blueworx Voice Response initiates an immediate transfer using the SIP 'REFER' method, which will eventually result in the Blueworx Voice Response application’s calling party being connected to a third party and Blueworx Voice Response being disconnected. There is a single phase to this operation. A Blind Transfer is initiated by a State Table TransferCall action with SV541 containing the TO_HDR URI for the transfer target (No SIP CONSULT or SIP TRANSFER tags are set). The Ring Wait and Ring Time parameters must also be set to zero. XFER_TIMER can be set in SV541 to define a timeout value for the transfer. See VoIP SIP blind transfer, How to write a SIP blind transfer application using state tables, and Transfer control tags for details.
In the attended transfer mode using State Tables, Blueworx Voice Response initially starts a second application, which talks independently to the third party by using a SIP outbound call. This operation is what is known as the ‘Consultation Phase’. Assuming that it is still required to proceed with the transfer after the consultation, the actual call transfer phase then proceeds using the SIP ‘REFER/REPLACES’ sequence. As with the Blind Transfer, the result is that the Blueworx Voice Response application’s calling party is connected to the third party and Blueworx Voice Response is disconnected. See VoIP SIP attended transfer, How to write a SIP attended transfer application using state tables, and Transfer control tags for details.
The System Configuration window opens.
The VoIP SIP Signalling window opens.
The following example uses the VoiceXML <transfer> element to transfer a non-secure SIP call:
<form id="Transfer1"> <transfer name="Blind1" dest="sip:12345@xxxxx.hursley.ibm.com" type="blind"> <filled> <log> Sample Blind Transfer form filled. Blind1 (form variable)= <value expr="Blind1"/> </log> </filled> </transfer> <block> <log>Sample Blind Transfer goto exit_app</log> <goto next="#exit_app"/> </block> </form> <catch event="connection.disconnect.transfer"> <log>Sample Blind Transfer Caught Event result : connection.disconnect.transfer</log> <goto next="#exit_app"/> </catch> <form id="exit_app"> <block> <log>Exit Sample Blind Transfer Application</log> <exit expr="'hangup'"/> </block> </form>
When the VoiceXML <transfer> element is executed, Blueworx Voice Response calls the DTJConsult state table followed by the DTJTransfer state table. The DTJConsult state table does a simple blind call transfer, and the DTJTransfer state table simply hangs up to complete the transfer. If necessary, the DTJConsult state table can be easily modified to change the transfer timeout value.
There is an alternative way of implementing blind transfer from VoiceXML that does not use the VoiceXML <transfer> element, but instead uses the <object> element to call a state table that performs the SIP blind transfer. For more information, see Accessing SIP and Call Transfer tags from your voice application.
An attended transfer consists of two steps, Consultation and Actual Transfer:
See Call transfer for more details of how to program SIP Call Transfer.
For an attended (consultation) transfer to work:
The System Configuration window opens.
The VoIP SIP Signalling window opens.
The following example uses the VoiceXML <transfer> element to transfer a non-secure SIP call:
<form id="Transfer1"> <transfer name="Attended1" dest="sip:12345@uptonsip.hursley.ibm.com" type="consultation" connecttimeout ="33s"> <filled> <log> Sample Attended Transfer form filled. Attended1 (form variable) = <value expr="Attended1"/> </log> <if cond="Attended1 == 'busy'"> <log>Sample Attended Transfer filled = busy.</log> <elseif cond="Attended1 == 'noanswer'"/> <log>Sample Attended Transfer filled = no answer.</log> <elseif cond="Attended1 == 'network_busy'"/> <log>Sample Attended Transfer filled = network busy.</log> <elseif cond="Attended1 == 'unknown'"/> <log>Sample Attended Transfer filled = unknown.</log> </if> </filled> </transfer> <block> <log>Sample Attended Transfer goto exit_app</log> <goto next="#exit_app"/> </block> </form> <catch event="error.connection.baddestination"> <log>Sample Attended Transfer Caught Event result : error.connection.baddestination</log> <goto next="#exit_app"/> </catch> <catch event="error.connection.noauthorization"> <log>Caught Event result : error.connection.noauthorization</log> <goto next="#exit_app"/> </catch> <catch event="error.unsupported.uri"> <log>Sample Attended Transfer Caught Event result : error.unsupported.uri</log> <goto next="#exit_app"/> </catch> <catch event="error.unsupported.noroute"> <log>Sample Attended Transfer Caught Event result : error.unsupported.noroute</log> <goto next="#exit_app"/> </catch> <catch event="error.unsupported.noresource"> <log>Sample Attended Transfer Caught Event result : error.unsupported.noresource</log> <goto next="#exit_app"/> </catch>
<catch event="connection.disconnect.hangup"> <log>Sample Attended Transfer Caught Event result : connection.disconnect.hangup</log> <goto next="#exit_app"/> </catch> <catch event="connection.disconnect.transfer"> <log>Sample Attended Transfer Caught Event result : connection.disconnect.transfer</log> <goto next="#exit_app"/> </catch> <form id="exit_app"> <block> <log>Exit Sample Attended Transfer Application</log> <exit expr="'hangup'"/> </block> </form>
There is an alternative way of implementing attended transfer from VoiceXML that does not use the VoiceXML <transfer> element, but instead uses the <object> element to call a state table that performs the SIP attended transfer. For more information, see Accessing SIP and Call Transfer tags from your voice application.
Bridge Transfer is not supported by Blueworx Voice Response.