Table of Contents

 

Document Overview

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.

Introduction

The interoperability compliance testing focuses on verifying inbound and outbound call flows between the Sonus SBC 9000 and the Genesys Voice Platform with AT&T IP Toll Free SIP Trunk.

Audience

This technical document is intended for telecommunications engineers with the purpose of configuring both the Sonus SBC and the third-party product. Navigating the third-party as well as the Sonus SBC Command Line Interface (CLI) is required. Understanding the basic concepts of TCP/UDP, IP/Routing, and SIP/RTP is also required to complete the configuration and any necessary troubleshooting.

This configuration guide is offered as a convenience to Sonus customers. The specifications and information regarding the product in this guide are subject to change without notice. All statements, information, and recommendations in this guide are believed to be accurate but are presented without warranty of any kind, express or implied, and are provided “AS IS”. Users must take full responsibility for the application of the specifications and information in this guide.


Requirements

The following equipment and software were used for the sample configuration provided:

Requirements

 

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
 

Reference Configuration

The following reference configuration shows connectivity between third-party servers and Sonus SBC 9000.

Topology

 

Support

For any questions regarding this document or the content herein, contact your maintenance and support provider.

 

Third-Party Product Features

  • 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

Not Supported Features

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 cannot 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.

 

Genesys Voice Platform Configuration

The following new configurations are included in this section:

  1. Switch Configuration
  2. GVP Configuration
  3. VXML Script Configuration

1. Switch Configuration

Switch Configuration

Switch DN Configuration

Trunks Configuration

Trunks Configuration Options

Extension Configuration

Extension Options

Trunk Groups Configuration

Trunk Groups Option

 

2. GVP Configuration

IVR Profile

IVR Profile Options

DID Group

 

3. VXML Script Configuration

The VXML file is applied to IVR Profile Option (Figure 11) as a local URL link (initial-page-url option). 

 

Unattended Transfer

Unattended Transfer Script
<?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 &amp;&amp;
			    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 Unattended Transfer script plays an announcement for every incoming call with a correct destination and makes an Unnattended Transfer to a configured transfer destination. 

 

Transfer with DTMF Menu

Transfer with DTMF Menu
<?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 &amp;&amp;
			    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 makes a transfer to a configured transfer destination based on the DTMF input.

 

Attended Transfer with Announcememt

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 &amp;&amp;
			    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 plays an announcement for every incoming call with the correct destination and makes an Attended Transfer to the configured transfer destination. If the transfer was not successful it plays another error announcement for the caller or makes another transfer for a different destination.

Sonus SBC 9000 Series Configuration

This section provides example CLI configuration details for the SBC 9000.

SBC 9000 Configuration
#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


 

Sonus PSX Configuration

  1. Voice Codec Configuration
  2. Packet Service Profile

  3. IP Signaling Profile
  4. Trunk Group Configuration

  5. Routing Configuration

  6. Numbering Plan

  7. Prefix Profile

 

1. Voice Codec Configuration

Voice Codec

 

2. Packet Service Profile

Packet Service Profile

 

3. IP Signaling Profile

IP Signaling Profile

4. Trunk Group Configuration

Trunk Group External Access

Trunk Group Internal Access

 

5. Routing Configuration

Routing Label

 

CoS Group

 

 


6. Prefix Profile

Prefix Profile

7. Numbering Plan

Numbering Plan

 

Conclusion

This Application Note describes the configuration steps required for the Sonus SBC 900 to successfully inter-operate 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 near the top of this document.