Search

Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Anchor
top
top

 

CSS Stylesheet
h1, h2, {font-size: 18pt !important;}
h3 {font-size: 16pt !important;}
h4 {font-size: 14pt !important;}
h5 {font-size: 14pt !important;}
CSS Stylesheet
.wiki-content h1 {
border-top: 1px solid rgb(145,150,153);
}
Section
Column
width40%
Panel
Table of Contents

Table of Contents
maxLevel4

Column
width5%

 

Column
width55%
Noprint

Add_workflow_for_appnotes
AUTH1UserResourceIdentifier{userKey=8a00a02355cd1c2f0155cd26ccd408f7, userName='null'}
REV6UserResourceIdentifier{userKey=8a00a02355cd1c2f0155cd26cd5909df, userName='null'}
REV4UserResourceIdentifier{userKey=8a00a02355cd1c2f0155cd26cb8405ed, userName='null'}
REV1UserResourceIdentifier{userKey=8a00a02355cd1c2f0155cd26cdec0ad3, userName='null'}

Pagebreak

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.

Info

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:

Caption
0Table
1Requirements
3Requirements

 

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.

Caption
0Figure
1Topology
3Topology

 

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

Anchor
Not Supported Features
Not Supported Features
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

Anchor
Switch Configuration
Switch Configuration
1. Switch Configuration

Caption
0Figure
1Switch Configuration
3Switch Configuration

Caption
0Figure
1Switch DN Configuration
3Switch DN Configuration

Caption
0Figure
1Trunks Configuration
3Trunks Configuration

Caption
0Figure
1Trunks Configuration Options
3Trunks Configuration Options

Caption
0Figure
1Extension Configuration
3Extension Configuration

Caption
0Figure
1Extension Options
3Extension Options

Caption
0Figure
1Trunk Groups Configuration
3Trunk Groups Configuration

Caption
0Figure
1Trunk Groups Option
3Trunk Groups Option

 

Anchor
GVP Configuration
GVP Configuration
2. GVP Configuration

Caption
0Figure
1IVR Profile
3IVR Profile

Caption
0Figure
1IVR Profile Options
3IVR Profile Options

Caption
0Figure
1DID Group
3DID Group

 

Anchor
VXML Script Configuration
VXML Script Configuration
3. VXML Script Configuration

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

 

Caption
0Figure
1Unattended Transfer
3Unattended Transfer

Code Block
titleUnattended Transfer Script
collapsetrue
<?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. 

 

Caption
0Figure
1Transfer with DTMF Menu
3Transfer with DTMF Menu

Code Block
titleTransfer with DTMF Menu
collapsetrue
<?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.

 

Caption
0Figure
1Attended Transfer with Announcememt
3Attended Transfer with Announcememt

Code Block
titleAttended Transfer with Announcememt
collapsetrue
<?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.

Code Block
titleSBC 9000 Configuration
collapsetrue
#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

 

Anchor
Voice Codec Configuration
Voice Codec Configuration
1. Voice Codec Configuration

Caption
0Figure
1Voice Codec
3Voice Codec

 

Anchor
Packet Service Profile
Packet Service Profile
2. Packet Service Profile

Caption
0Figure
1Packet Service Profile
3Packet Service Profile

 

Anchor
IP Signaling Profile
IP Signaling Profile
3. IP Signaling Profile

Caption
0Figure
1IP Signaling Profile
3IP Signalling Profile

Anchor
Trunk Group Configuration
Trunk Group Configuration
4. Trunk Group Configuration

Caption
0Figure
1Trunk Group External Access
3Trunk Group External Access

Caption
0Figure
1Trunk Group Internal Access
3Trunk Group Internal Access

 

Anchor
Routing Configuration
Routing Configuration
5. Routing Configuration

Caption
0Figure
1Routing Label
3Routing Label

 

Caption
0Figure
1CoS Group
3CoS Group

 

 


Anchor
Prefix Profile
Prefix Profile
6. Prefix Profile

Caption
0Figure
1Prefix Profile
3Prefix Profile

Anchor
Numbering Plan
Numbering Plan
7. Numbering Plan

Caption
0Figure
1Numbering Plan
3Numbering Plan

 

Conclusion

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.