This document provides a configuration guide for Sonus SBC 9000 Series (Session Border Controller) when connecting to the Genesys Voice Platform.
This configuration guide supports features given in the Genesys Voice Platform guide
The interoperability compliance testing focuses on verifying inbound and outbound call flows between the with AT&T IP Toll Free SIP Trunk.
for telecommunications engineers with the purpose of configuring both the Sonus SBC and the third-party product. N
| Equipment | Software Version |
---|
Sonus Networks | Sonus SBC 9000 Sonus PSX | V09.00.12F004 V09.02.02R00 |
---|
Third-party Equipment | Genesys Confserv Genesys MessageServer1 Genesys SCS1 Genesys SIPServer1 Genesys StatServer1 Genesys URS1 Genesys GVP_MCP1 Genesys GVP_Reports1 Genesys GVP_ResourceManager1 Genesys GVP_SSG1 Genesys Administrator Server | v8.1.3 v8.1.2 v8.1.2 v8.1.1 v8.1.2 v8.1.3 v8.1.5 v8.1.3 v8.1.5 v8.1.7 v8.1 |
---|
| Polycom SoundPoint IP 501 SIP | 2.1.3 |
---|
The following reference configuration shows connectivity between and Sonus SBC 9000.
Support
For any questions regarding this document or the content herein, contact your maintenance and support provider.
- Basic inbound calls
- Basic outbound calls
- DNIS Translations
- Codec Negotiation
- Fax transmission
- Infopack
- Enhanced CID
- Call Transfer with SIP Refer Method
- SIP Refer with UUI
- DTMF
Codec G729AB is not supported on the SBC 9000.
Enhanced CID - It is not supported on the Genesys SIP Server v8.1.
Genesys GVP platform forward call to desired agent based on the Refer Response SIP 401 Unauthorized.
Genesys SIP Server does not support sending UUI based on NSS implementation.
T.38 v0 was only supported on the called fax machine.
Trunks Configuration Options
Trunk Groups Configuration
ption Figure 11 as a local URL
<?xml version="1.0" encoding="utf-8"?>
<vxml version="2.1" xml:lang="en-US"
xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gvp="http://www.genesyslab.com/2006/vxml21-extension">
<!-- VXML code generated by Composer 8.1.400.21 -->
<!-- Diagram created by Composer: Composer 8.1.400.21 -->
<!-- Project version: 8.1.400.21 -->
<!-- Diagram version: 1.0 CreatedOn: -->
<!-- Application Author: -->
<!-- Release Mode: false -->
<!-- Global Scripts includes -->
<script src="../include/common.js" />
<script src="../include/ctic.js" />
<script src="../include/json.js" />
<script src="../include/DataAccess.js" />
<!-- Global Vars declarations -->
<script>
var AppState = new Object();
AppState.System = new Object();
AppState.System.RetainInputTypeVariableDefaultValue = false;
AppState.CallUUID = session.connection.uuid;
AppState.ANI = getANI();
AppState.DNIS = getDNIS();
AppState.USE_LCASE_USERDATAKEY = initSystemTypeVariable('USE_LCASE_USERDATAKEY',0);
if (session.connection.protocol.sip.headers != undefined &&
session.connection.protocol.sip.headers['x-genesys-gvp-session-id']){
AppState.GVPSessionID = session.connection.protocol.sip.headers['x-genesys-gvp-session-id'];
} else {
AppState.GVPSessionID = 'undefined';
}
AppState.APP_LANGUAGE = initSystemTypeVariable('APP_LANGUAGE','en-US');
AppState.APP_ASR_LANGUAGE = initSystemTypeVariable('APP_ASR_LANGUAGE','en-US');
AppState.PREV_APP_LANGUAGE = initSystemTypeVariable('PREV_APP_LANGUAGE','undefined');
AppState.PREV_APP_ASR_LANGUAGE = initSystemTypeVariable('PREV_APP_ASR_LANGUAGE','undefined');
AppState.GRAMMARFILEDIR = initSystemTypeVariable('GRAMMARFILEDIR','../Resources/Grammars');
AppState.VOXFILEDIR = initSystemTypeVariable('VOXFILEDIR','../Resources/Prompts');
AppState.SCRIPTSDIR = initSystemTypeVariable('SCRIPTSDIR','../Scripts');
AppState.EnableReports = initSystemTypeVariable('EnableReports',false);
AppState.EnableSNMP = initSystemTypeVariable('EnableSNMP',false);
AppState.LAST_EVENT_NAME = initSystemTypeVariable('LAST_EVENT_NAME','undefined');
AppState.LAST_EVENT_MSG = initSystemTypeVariable('LAST_EVENT_MSG','undefined');
AppState.LAST_EVENT_URL = initSystemTypeVariable('LAST_EVENT_URL','undefined');
AppState.LAST_EVENT_ELEMENT = initSystemTypeVariable('LAST_EVENT_ELEMENT','undefined');
AppState.LAST_EVENT_LINE = initSystemTypeVariable('LAST_EVENT_LINE','undefined');
AppState.EnableFCR = initSystemTypeVariable('EnableFCR',true);
AppState.COMPOSER_WSSTUBBING = initSystemTypeVariable('COMPOSER_WSSTUBBING','0');
AppState.APP_OPM = initSystemTypeVariable('APP_OPM',eval('('+session.connection.protocol.sip.requesturi['parameters']+')'));
AppState.OCS_RecordURI = initSystemTypeVariable('OCS_RecordURI',getCallflowRecordURI());
AppState.OCS_URI = initSystemTypeVariable('OCS_URI',getCallflowOCSURI());
AppState.OCS_Record = initSystemTypeVariable('OCS_Record',getCallflowOCSRecord());
AppState.TestNumber = 2;
AppState.TxDest = '3124223030';
AppState.TxResults = '';
AppState.Transfer1$ = new Object();
</script>
<!-- Global Scripts -->
<script srcexpr="AppState.VOXFILEDIR + '/PromptSwitch.js'" />
<script srcexpr="AppState.VOXFILEDIR + '/en-US/en-US.js'" />
<script>var f = new Format();</script>
<script srcexpr="AppState.VOXFILEDIR + '/en-US/customprompts.js'" />
<!-- Global Properties declarations -->
<property name="com.genesyslab.logtoasr" value="false" />
<property name="com.genesyslab.loglevel" value="5" />
<!-- Metadata information -->
<meta name="com.genesyslab.studio.resourcePath" content="/Callflows/Test2.callflow"/>
<!-- Global links -->
<form>
<block>
<goto next="#Entry1" />
</block>
</form>
<!-- This is the Entry block -->
<form id="Entry1">
<block name="Entry">
<goto next="#Welcome" />
</block>
</form>
<catch event="connection.disconnect.hangup">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<catch event="error">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<catch event=".">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<!-- This is the Prompt block -->
<form id="Welcome">
<block name="WelcomeP0">
<prompt bargein="true" gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'WelcomeToTestNumber.vox'"></audio>
<foreach item="thePrompt" array="PlayPromptSwitch(AppState.APP_LANGUAGE, AppState.VOXFILEDIR, AppState.TestNumber, 'number')">
<audio expr="thePrompt" />
</foreach>
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'TransferMessage.vox'"></audio>
</prompt>
</block>
<block>
<goto next="#Transfer1" />
</block>
</form>
<!-- This is the Transfer block -->
<form id="Transfer1">
<property name="inputmodes" value="dtmf" />
<transfer name="Transfer1Call" type="blind" destexpr="AppState.TxDest" connecttimeout="30s" gvp:method="refer"
gvp:analysis="false" gvp:connectwhen="immediate" >
<filled>
<assign name="AppState.TxResults" expr="Transfer1Call" />
<assign name="AppState.Transfer1$" expr="Transfer1Call$" />
<goto next="#LogTxResults" />
</filled>
</transfer>
</form>
<!-- This is the Log block -->
<form id="LogLastEvent">
<block>
<log gvp:level="1">
<value expr="'Top Level exception details:' + AppState.LAST_EVENT_NAME + ',' + AppState.LAST_EVENT_MSG + ',' + AppState.LAST_EVENT_URL +',' + AppState.LAST_EVENT_ELEMENT + ',' + AppState.LAST_EVENT_LINE"/>
</log>
</block>
<block>
<goto next="#Exit1" />
</block>
</form>
<!-- This is the Exit block -->
<form id="Exit1">
<block>
<exit/>
</block>
</form>
<!-- This is the Log block -->
<form id="LogTxResults">
<block>
<log gvp:level="1">
<value expr="'TxResults = ' + JSON.stringify(AppState.TxResults) + '.Transfer1$ = ' + JSON.stringify(AppState.Transfer1$)"/>
</log>
</block>
<block>
<goto next="#Exit1" />
</block>
</form>
</vxml>
This Transfer for every incoming call destination and Unnattended Transfer to a configured transfer destination.
<?xml version="1.0" encoding="utf-8"?>
<vxml version="2.1" xml:lang="en-US"
xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gvp="http://www.genesyslab.com/2006/vxml21-extension">
<!-- VXML code generated by Composer 8.1.400.21 -->
<!-- Diagram created by Composer: Composer 8.1.400.21 -->
<!-- Project version: 8.1.400.21 -->
<!-- Diagram version: 1.0 CreatedOn: -->
<!-- Application Author: -->
<!-- Release Mode: false -->
<!-- Global Scripts includes -->
<script src="../include/common.js" />
<script src="../include/ctic.js" />
<script src="../include/json.js" />
<script src="../include/DataAccess.js" />
<!-- Global Vars declarations -->
<script>
var AppState = new Object();
AppState.System = new Object();
AppState.System.RetainInputTypeVariableDefaultValue = false;
AppState.CallUUID = session.connection.uuid;
AppState.ANI = getANI();
AppState.DNIS = getDNIS();
AppState.USE_LCASE_USERDATAKEY = initSystemTypeVariable('USE_LCASE_USERDATAKEY',0);
if (session.connection.protocol.sip.headers != undefined &&
session.connection.protocol.sip.headers['x-genesys-gvp-session-id']){
AppState.GVPSessionID = session.connection.protocol.sip.headers['x-genesys-gvp-session-id'];
} else {
AppState.GVPSessionID = 'undefined';
}
AppState.APP_LANGUAGE = initSystemTypeVariable('APP_LANGUAGE','en-US');
AppState.APP_ASR_LANGUAGE = initSystemTypeVariable('APP_ASR_LANGUAGE','en-US');
AppState.PREV_APP_LANGUAGE = initSystemTypeVariable('PREV_APP_LANGUAGE','undefined');
AppState.PREV_APP_ASR_LANGUAGE = initSystemTypeVariable('PREV_APP_ASR_LANGUAGE','undefined');
AppState.GRAMMARFILEDIR = initSystemTypeVariable('GRAMMARFILEDIR','../Resources/Grammars');
AppState.VOXFILEDIR = initSystemTypeVariable('VOXFILEDIR','../Resources/Prompts');
AppState.SCRIPTSDIR = initSystemTypeVariable('SCRIPTSDIR','../Scripts');
AppState.EnableReports = initSystemTypeVariable('EnableReports',false);
AppState.EnableSNMP = initSystemTypeVariable('EnableSNMP',false);
AppState.LAST_EVENT_NAME = initSystemTypeVariable('LAST_EVENT_NAME','undefined');
AppState.LAST_EVENT_MSG = initSystemTypeVariable('LAST_EVENT_MSG','undefined');
AppState.LAST_EVENT_URL = initSystemTypeVariable('LAST_EVENT_URL','undefined');
AppState.LAST_EVENT_ELEMENT = initSystemTypeVariable('LAST_EVENT_ELEMENT','undefined');
AppState.LAST_EVENT_LINE = initSystemTypeVariable('LAST_EVENT_LINE','undefined');
AppState.EnableFCR = initSystemTypeVariable('EnableFCR',true);
AppState.COMPOSER_WSSTUBBING = initSystemTypeVariable('COMPOSER_WSSTUBBING','0');
AppState.APP_OPM = initSystemTypeVariable('APP_OPM',eval('('+session.connection.protocol.sip.requesturi['parameters']+')'));
AppState.OCS_RecordURI = initSystemTypeVariable('OCS_RecordURI',getCallflowRecordURI());
AppState.OCS_URI = initSystemTypeVariable('OCS_URI',getCallflowOCSURI());
AppState.OCS_Record = initSystemTypeVariable('OCS_Record',getCallflowOCSRecord());
AppState.TestNumber = 5;
AppState.TxDest = '2144326887';
AppState.TxResults = '';
AppState.MenuResult = '';
AppState.Transfer1$ = new Object();
</script>
<!-- Global Scripts -->
<script srcexpr="AppState.VOXFILEDIR + '/PromptSwitch.js'" />
<script srcexpr="AppState.VOXFILEDIR + '/en-US/en-US.js'" />
<script>var f = new Format();</script>
<script srcexpr="AppState.VOXFILEDIR + '/en-US/customprompts.js'" />
<!-- Global Properties declarations -->
<property name="com.genesyslab.logtoasr" value="false" />
<property name="com.genesyslab.loglevel" value="5" />
<!-- Metadata information -->
<meta name="com.genesyslab.studio.resourcePath" content="/Callflows/Test5.callflow"/>
<!-- Global links -->
<form>
<block>
<goto next="#Entry1" />
</block>
</form>
<!-- This is the Entry block -->
<form id="Entry1">
<block name="Entry">
<goto next="#Welcome" />
</block>
</form>
<catch event="connection.disconnect.hangup">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<catch event="error">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<catch event=".">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<!-- This is the Prompt block -->
<form id="Welcome">
<block name="WelcomeP0">
<prompt bargein="true" gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'WelcomeToTestNumber.vox'"></audio>
<foreach item="thePrompt" array="PlayPromptSwitch(AppState.APP_LANGUAGE, AppState.VOXFILEDIR, AppState.TestNumber, 'number')">
<audio expr="thePrompt" />
</foreach>
</prompt>
</block>
<block>
<goto next="#Menu1" />
</block>
</form>
<!-- This is the Transfer block -->
<form id="Transfer1">
<property name="inputmodes" value="dtmf" />
<transfer name="Transfer1Call" type="blind" destexpr="AppState.TxDest" gvp:method="refer"
gvp:analysis="false" gvp:connectwhen="immediate" >
</transfer>
</form>
<!-- This is the Log block -->
<form id="LogLastEvent">
<block>
<log gvp:level="1">
<value expr="'Top Level exception details:' + AppState.LAST_EVENT_NAME + ',' + AppState.LAST_EVENT_MSG + ',' + AppState.LAST_EVENT_URL +',' + AppState.LAST_EVENT_ELEMENT + ',' + AppState.LAST_EVENT_LINE"/>
</log>
</block>
<block>
<goto next="#Exit1" />
</block>
</form>
<!-- This is the Exit block -->
<form id="Exit1">
<block>
<exit/>
</block>
</form>
<!-- This is the Menu block -->
<form id="Menu1">
<property name="termchar" value="D"/>
<property name="inputmodes" value="dtmf" />
<property name="bargein" value="true" />
<block name="Menu1P0">
<prompt gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'Press0ToTransfer.vox'"></audio>
</prompt>
</block>
<var name="retryCount" expr="1"/>
<field name="Menu1Option">
<property name="timeout" value="10s"/>
<option dtmf="0" value="0" />
</field>
<filled mode="all" namelist="Menu1Option">
<assign name="AppState.MenuResult" expr="Menu1Option" />
<if cond="Menu1Option == '0'">
<goto next="#Transfer1" />
</if>
</filled>
<catch event="noinput" cond="retryCount == 1">
<assign name="retryCount" expr="retryCount + 1"/>
<prompt bargein="true" gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'NoResponse.vox'"></audio>
</prompt>
<clear namelist="Menu1P0"/>
</catch>
<catch event="nomatch" cond="retryCount == 1">
<assign name="retryCount" expr="retryCount + 1"/>
<prompt bargein="true" gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'InvalidResponse.vox'"></audio>
</prompt>
<clear namelist="Menu1P0"/>
</catch>
<catch event="noinput" cond="retryCount == 2">
<assign name="retryCount" expr="retryCount + 1"/>
<prompt bargein="true" gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'NoResponse.vox'"></audio>
</prompt>
<clear namelist="Menu1P0"/>
</catch>
<catch event="nomatch" cond="retryCount == 2">
<assign name="retryCount" expr="retryCount + 1"/>
<prompt bargein="true" gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'InvalidResponse.vox'"></audio>
</prompt>
<clear namelist="Menu1P0"/>
</catch>
<catch event="noinput" cond="retryCount==3">
<throw event="com.genesyslab.composer.toomanynoinputs" message="exceeded the number of noinput retries" />
</catch>
<catch event="nomatch" cond="retryCount==3">
<throw event="com.genesyslab.composer.toomanynomatches" message="exceeded the number of nomatch retries" />
</catch>
</form>
</vxml>
This Transfer script to a configured transfer destination based on the DTMF input.
Attended Transfer with Announcememt
<?xml version="1.0" encoding="utf-8"?>
<vxml version="2.1" xml:lang="en-US"
xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gvp="http://www.genesyslab.com/2006/vxml21-extension">
<!-- VXML code generated by Composer 8.1.400.21 -->
<!-- Diagram created by Composer: Composer 8.1.400.21 -->
<!-- Project version: 8.1.400.21 -->
<!-- Diagram version: 1.0 CreatedOn: -->
<!-- Application Author: -->
<!-- Release Mode: false -->
<!-- Global Scripts includes -->
<script src="../include/common.js" />
<script src="../include/ctic.js" />
<script src="../include/json.js" />
<script src="../include/DataAccess.js" />
<!-- Global Vars declarations -->
<script>
var AppState = new Object();
AppState.System = new Object();
AppState.System.RetainInputTypeVariableDefaultValue = false;
AppState.CallUUID = session.connection.uuid;
AppState.ANI = getANI();
AppState.DNIS = getDNIS();
AppState.USE_LCASE_USERDATAKEY = initSystemTypeVariable('USE_LCASE_USERDATAKEY',0);
if (session.connection.protocol.sip.headers != undefined &&
session.connection.protocol.sip.headers['x-genesys-gvp-session-id']){
AppState.GVPSessionID = session.connection.protocol.sip.headers['x-genesys-gvp-session-id'];
} else {
AppState.GVPSessionID = 'undefined';
}
AppState.APP_LANGUAGE = initSystemTypeVariable('APP_LANGUAGE','en-US');
AppState.APP_ASR_LANGUAGE = initSystemTypeVariable('APP_ASR_LANGUAGE','en-US');
AppState.PREV_APP_LANGUAGE = initSystemTypeVariable('PREV_APP_LANGUAGE','undefined');
AppState.PREV_APP_ASR_LANGUAGE = initSystemTypeVariable('PREV_APP_ASR_LANGUAGE','undefined');
AppState.GRAMMARFILEDIR = initSystemTypeVariable('GRAMMARFILEDIR','../Resources/Grammars');
AppState.VOXFILEDIR = initSystemTypeVariable('VOXFILEDIR','../Resources/Prompts');
AppState.SCRIPTSDIR = initSystemTypeVariable('SCRIPTSDIR','../Scripts');
AppState.EnableReports = initSystemTypeVariable('EnableReports',false);
AppState.EnableSNMP = initSystemTypeVariable('EnableSNMP',false);
AppState.LAST_EVENT_NAME = initSystemTypeVariable('LAST_EVENT_NAME','undefined');
AppState.LAST_EVENT_MSG = initSystemTypeVariable('LAST_EVENT_MSG','undefined');
AppState.LAST_EVENT_URL = initSystemTypeVariable('LAST_EVENT_URL','undefined');
AppState.LAST_EVENT_ELEMENT = initSystemTypeVariable('LAST_EVENT_ELEMENT','undefined');
AppState.LAST_EVENT_LINE = initSystemTypeVariable('LAST_EVENT_LINE','undefined');
AppState.EnableFCR = initSystemTypeVariable('EnableFCR',true);
AppState.COMPOSER_WSSTUBBING = initSystemTypeVariable('COMPOSER_WSSTUBBING','0');
AppState.APP_OPM = initSystemTypeVariable('APP_OPM',eval('('+session.connection.protocol.sip.requesturi['parameters']+')'));
AppState.OCS_RecordURI = initSystemTypeVariable('OCS_RecordURI',getCallflowRecordURI());
AppState.OCS_URI = initSystemTypeVariable('OCS_URI',getCallflowOCSURI());
AppState.OCS_Record = initSystemTypeVariable('OCS_Record',getCallflowOCSRecord());
AppState.TestNumber = 8;
AppState.TxDest = '01030';
AppState.TxResults = '';
</script>
<!-- Global Scripts -->
<script srcexpr="AppState.VOXFILEDIR + '/PromptSwitch.js'" />
<script srcexpr="AppState.VOXFILEDIR + '/en-US/en-US.js'" />
<script>var f = new Format();</script>
<script srcexpr="AppState.SCRIPTSDIR + '/' + 'sonus.js'" />
<script srcexpr="AppState.VOXFILEDIR + '/en-US/customprompts.js'" />
<!-- Global Properties declarations -->
<property name="com.genesyslab.logtoasr" value="false" />
<property name="com.genesyslab.loglevel" value="5" />
<!-- Metadata information -->
<meta name="com.genesyslab.studio.resourcePath" content="/Callflows/Test8.callflow"/>
<!-- Global links -->
<form>
<block>
<goto next="#Entry1" />
</block>
</form>
<!-- This is the Entry block -->
<form id="Entry1">
<block name="Entry">
<goto next="#Welcome" />
</block>
</form>
<catch event="connection.disconnect.hangup">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<catch event="error">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<catch event=".">
<assign name="AppState.LAST_EVENT_ELEMENT" expr="_element"/>
<assign name="AppState.LAST_EVENT_MSG" expr="_message"/>
<assign name="AppState.LAST_EVENT_NAME" expr="_event"/>
<assign name="AppState.LAST_EVENT_LINE" expr="_line"/>
<assign name="AppState.LAST_EVENT_URL" expr="_url"/>
<goto next="#LogLastEvent" />
</catch>
<!-- This is the Prompt block -->
<form id="Welcome">
<block name="WelcomeP0">
<prompt bargein="true" gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'WelcomeToTestNumber.vox'"></audio>
<foreach item="thePrompt" array="PlayPromptSwitch(AppState.APP_LANGUAGE, AppState.VOXFILEDIR, AppState.TestNumber, 'number')">
<audio expr="thePrompt" />
</foreach>
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'TransferMessage.vox'"></audio>
</prompt>
</block>
<block>
<goto next="#TransferForm" />
</block>
</form>
<!-- This is the Log block -->
<form id="LogLastEvent">
<block>
<log gvp:level="1">
<value expr="'Top Level exception details:' + AppState.LAST_EVENT_NAME + ',' + AppState.LAST_EVENT_MSG + ',' + AppState.LAST_EVENT_URL +',' + AppState.LAST_EVENT_ELEMENT + ',' + AppState.LAST_EVENT_LINE"/>
</log>
</block>
<block>
<goto next="#Exit1" />
</block>
</form>
<!-- This is the Exit block -->
<form id="Exit1">
<block>
<exit/>
</block>
</form>
<!-- This is the Log block -->
<form id="LogTxResults">
<block>
<log gvp:level="1">
<value expr="'TxResults = ' + JSON.stringify(AppState.TxResults) + '.Transfer1$ = ' + JSON.stringify(AppState.Transfer1$)"/>
</log>
</block>
<block>
<goto next="#TransferFail" />
</block>
</form>
<!-- This is the Prompt block -->
<form id="TransferFail">
<block name="TransferFailP0">
<prompt bargein="true" gvp:langexpr="AppState.APP_LANGUAGE">
<audio expr="AppState.VOXFILEDIR + '/' + AppState.APP_LANGUAGE + '/' + 'TransferBusy.vox'"></audio>
</prompt>
</block>
<block>
<goto next="#Exit1" />
</block>
</form>
<!-- This is the VXML Form block TransferForm -->
<form id="TransferForm">
<property name="inputmodes" value="dtmf" />
<script>
var MyASCIIdata = 'Hello it\'s a wonderful day!';
var MyHEXdata = asc2hex(MyASCIIdata);
var signalVar = {};
signalVar['Sip.Refer.User-to-User'] = MyHEXdata + ';encoding=hex';
</script>
<block>
<log> signalVar= <value expr="JSON.stringify(signalVar)" /> </log>
</block>
<transfer name="Transfer1Call" type="consultation" destexpr="AppState.TxDest" connecttimeout="30s" gvp:signalvar="signalVar" gvp:method="refer"
gvp:analysis="false" gvp:connectwhen="immediate" >
<filled>
<assign name="AppState.TxResults" expr="Transfer1Call" />
<assign name="AppState.Transfer1$" expr="Transfer1Call$" />
<goto next="#LogTxResults" />
</filled>
</transfer>
<block>
<goto next="#LogTxResults" />
</block>
</form>
</vxml>
This Attended Transfer script for every incoming call destination and . If the transfer was not it plays another error announcement or makes another transfer for a different destination.
#Interface Configuration
CONFIGURE LOGICAL MGMTIF SHELF 1 IPADDRESS 10.35.154.8
CONFIGURE NIF GENET-1-3-1 IPADDRESS 10.35.155.4 MASK 255.255.255.240 NEXTHOP 10.35.155.1
CONFIGURE NIF GENET-1-3-2 IPADDRESS 216.50.36.118 MASK 255.255.255.240 NEXTHOP 216.50.36.224
#Media Profile Configuration
CREATE MEDIA PROFILE CNSPROFILE BASEMEDIAPROFILE 1
CONFIGURE MEDIA PROFILE CNSPROFILE EVRC DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE AMRWB DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE ECM DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE PXPAD ENABLED
CONFIGURE MEDIA PROFILE CNSPROFILE G729 ENABLED
CONFIGURE MEDIA PROFILE CNSPROFILE G722 DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE EVRCB DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE iLBC DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE G726 DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE GSM DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE G723 DISABLED
CONFIGURE MEDIA PROFILE CNSPROFILE STATE ENABLED
#RTP Base Port
CONFIGURE RTP PORT BASE 16384
#SIP Signaling configuration
CREATE SIP SIGNALING PORT 1 IPADDRESS 10.35.155.9
CONFIGURE SIP SIGNALING PORT 1 INTERFACE NIF
CONFIGURE SIP SIGNALING PORT 1 MODE INSERVICE STATE ENABLED
CREATE SIP SIGNALING PORT 2 IPADDRESS 216.50.36.117
CONFIGURE SIP SIGNALING PORT 2 INTERFACE NIF
CONFIGURE SIP SIGNALING PORT 2 MODE INSERVICE STATE ENABLED
#Zone Configuration
CREATE ZONE PUB-ZONE
CREATE NIFGROUP NG-PUB
CREATE ZONE PRIV-ZONE
CREATE NIFGROUP NG-PRIV
#SMM Rule
CREATE SIPADAPTOR PROFILE REMOVE_JUNK
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK add rule 1
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 add criterion message criterion message message_types request method_type invite
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 criterion message condition exist
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 add criterion msgbody criterion msgbody condition exist
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 add action 1 type msgbody
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 action 1 regexp string "\-\-\\r\\n"
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 action 1 operation REGPOSTDEL
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 action 1 to msgbody content_type all
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 add action 2 type msgbody
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 action 2 operation regsub
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 action 2 regexp string "handling\=required"
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 action 2 from value "handling=optional"
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 action 2 to msgbody content_type all
CONFIGURE SIPADAPTOR PROFILE REMOVE_JUNK rule 1 action 2 regexp match_instance two
#SIP Service Configuration
CONFIGURE SIP SERVICE INT_SIP_TG_ZONE SIGNALING ZONE PRIV-ZONE
CONFIGURE SIP SERVICE INT_SIP_TG_ZONE MEDIA ZONE PRIV-ZONE
CONFIGURE SIP SERVICE EXT_SIP_TG_ZONE MEDIA NIFGROUP NG-PRIV
CONFIGURE SIP SERVICE EXT_SIP_TG_ZONE SIGNALING ZONE PUB-ZONE
CONFIGURE SIP SERVICE EXT_SIP_TG_ZONE MEDIA ZONE PUB-ZONE
CONFIGURE SIP SERVICE EXT_SIP_TG_ZONE MEDIA NIFGROUP NG-PUB
CONFIGURE SIP SERVICE EXT_SIP_TG_ZONE IN_ADAPTOR PROFILE REMOVE_JUNK
CREATE CARRIER VO-LAB
CONFIGURE CARRIER VO-LAB STATE ENABLED
#SIP Trunk Group Configuration
CREATE IP NETWORK SELECTOR TABLE EXT-IPST
CONFIGURE IP NETWORK SELECTOR TABLE EXT-IPST ADD NUMBER 207.242.225.210 MASK 255.255.255.255
CREATE IP NETWORK SELECTOR TABLE INT-IPST
CONFIGURE IP NETWORK SELECTOR TABLE INT-IPST ADD NUMBER 10.35.176.111 MASK 255.255.255.255
CREATE TRUNK GROUP SIP_TG_EXT GROUP TYPE ipSelected
CONFIGURE TRUNK GROUP SIP_TG_EXT NETWORK SELECTOR TABLE EXT-IPST
CONFIGURE TRUNK GROUP SIP_TG_EXT CARRIER VO-LAB
CONFIGURE TRUNK GROUP SIP_TG_EXT STATE ENABLED
CONFIGURE TRUNK GROUP SIP_TG_EXT MODE INSERVICE
CREATE TRUNK GROUP SIP_TG_INT GROUP TYPE ipSelected
CONFIGURE TRUNK GROUP SIP_TG_INT NETWORK SELECTOR TABLE INT-IPST
CONFIGURE TRUNK GROUP SIP_TG_INT CARRIER VO-LAB
CONFIGURE TRUNK GROUP SIP_TG_INT STATE ENABLED
CONFIGURE TRUNK GROUP SIP_TG_INT MODE INSERVICE
#Pathcheck profile configuration
CREATE PATHCHECK PING PROFILE INT_PATHCHECK1
CONFIGURE PATHCHECK PING PROFILE INT_PATHCHECK1 PROTOCOL sipOpt
CONFIGURE PATHCHECK PING PROFILE INT_PATHCHECK1 SEND INTERVAL 3000
CONFIGURE PATHCHECK PING PROFILE INT_PATHCHECK1 VERIFY INTERVAL 0
CONFIGURE PATHCHECK PING PROFILE INT_PATHCHECK1 REPLY TIMEOUT 0
CONFIGURE PATHCHECK PING PROFILE INT_PATHCHECK1 RECOVERY NUMBER 3
CONFIGURE PATHCHECK PING PROFILE INT_PATHCHECK1 TIMEOUT NUMBER 1
CONFIGURE PATHCHECK PING PROFILE INT_PATHCHECK1 STATE ENABLED
CREATE PATHCHECK PING PROFILE EXT_PATHCHECK1
CONFIGURE PATHCHECK PING PROFILE EXT_PATHCHECK1 PROTOCOL sipOpt
CONFIGURE PATHCHECK PING PROFILE EXT_PATHCHECK1 SEND INTERVAL 30000
CONFIGURE PATHCHECK PING PROFILE EXT_PATHCHECK1 VERIFY INTERVAL 0
CONFIGURE PATHCHECK PING PROFILE EXT_PATHCHECK1 REPLY TIMEOUT 0
CONFIGURE PATHCHECK PING PROFILE EXT_PATHCHECK1 RECOVERY NUMBER 3
CONFIGURE PATHCHECK PING PROFILE EXT_PATHCHECK1 TIMEOUT NUMBER 1
CONFIGURE PATHCHECK PING PROFILE EXT_PATHCHECK1 STATE ENABLED
#Static Route Configuration
CONFIGURE IP ROUTE ADD IFINDEX 8 IPADDRESS 10.35.176.0 MASK 255.255.255.0 NEXTHOP 10.35.155.1
CONFIGURE IP ROUTE ADD IFINDEX 9 IPADDRESS 207.242.225.0 MASK 255.255.255.0 NEXTHOP 216.110.2.224
#Softswitch Configuration
CREATE SONUS SOFTSWITCH mystic
CONFIGURE SONUS SOFTSWITCH mystic IPADDRESS 10.35.144.10
CONFIGURE SONUS SOFTSWITCH mystic PORT 2569
CONFIGURE SONUS SOFTSWITCH mystic RETRY TIMER 2500
CONFIGURE SONUS SOFTSWITCH mystic TRANSACTION TIMER 2500
CONFIGURE SONUS SOFTSWITCH mystic RETRY LIMIT 1
CONFIGURE SONUS SOFTSWITCH mystic KEEPALIVE TIMER 5
CONFIGURE SONUS SOFTSWITCH mystic ACTION DRYUP
CONFIGURE SONUS SOFTSWITCH mystic STATE ENABLED
CONFIGURE SONUS SOFTSWITCH mystic MODE ACTIVE
- Voice Codec Configuration
Packet Service Profile
- IP Signaling Profile
Trunk Group Configuration
Routing Configuration
Numbering Plan
Prefix Profile
Trunk Group External Access
Trunk Group Internal Access
This Application Note describes the configuration steps required for the Sonus SBC 900 to successfully interoperate with Genesys Voice Platform and AT&T IP Toll Free SIP Trunk. All feature and serviceability test cases were completed and passed with the exceptions/observations noted in Not Supported Features.