Cisco IOS Tcl IVR and VoiceXML Application Guide - 12.3(14)T and later
Configuring SIP and TEL URL Support

Table Of Contents

Configuring SIP and TEL URL Support

Contents

Prerequisites for SIP and TEL URL Support

Restrictions for SIP and TEL URL Support

Information About SIP and TEL URL Support

SIP and TEL URL Support for Voice Applications

Benefits of SIP and TEL URL Support

How to Configure SIP and TEL URL Support

Creating a Voice Class for URIs

Creating a Voice Class for SIP URLs

Creating a Voice Class for TEL URLs

Configuring an Inbound Dial Peer to Match on a URI

Prerequisites

Configuring an Inbound Dial Peer to Match the URI in H.323 Calls

Configuring an Inbound Dial Peer to Match the URI in SIP Calls

Verifying Dial Peer Configuration for an Incoming URI

Configuring an Outbound Dial Peer for URI Destinations

Prerequisites

Restrictions

Verifying Dial-Peer Configuration for an Outgoing URI

Troubleshooting Tips

Troubleshooting URI Matching

Configuration Examples for SIP and TEL URL Support

Originating Gateway

Terminating Gateway

Where to Go Next

Additional References


Configuring SIP and TEL URL Support


Revised: June 20, 2007, OL-11176-01

SIP and TEL URL support enables Cisco gateways to direct incoming calls to a voice application based on the URL and Tcl IVR 2.0 and VoiceXML applications to place outbound calls to a Session Initiation Protocol (SIP) or telephone (TEL) URL. It expands call-control capabilities by allowing voice applications to use URL destinations and dialing plans to be implemented using SIP or TEL URLs rather than telephone numbers.


Note In this document, the terms uniform resource identifier (URI) and uniform resource locator (URL) are used interchangeably.


For more information about this and related Cisco IOS voice features, see the following:

Overview of Cisco IOS Tcl IVR and VoiceXML Applications

Entire Cisco IOS Voice Configuration Library—including library preface and glossary, other feature documents, and troubleshooting documentation—at http://www.cisco.com/en/US/docs/ios/12_3/vvf_c/cisco_ios_voice_configuration_library_glossary/vcl.htm.


Note For releases prior to Cisco IOS Release 12.3(14)T, see the previous version of the Cisco Tcl IVR and VoiceXML Application Guide at: http://www.cisco.com/univercd/cc/td/doc/product/software/ios123/123cgcr/vvfax_c/tcl_leg/index.htm


Release
Modification

12.3(4)T

This feature was introduced.

12.3(14)T

A new command-line interface structure for configuring Tcl and IVR applications was introduced and affected the commands for configuring this feature.


Feature History for SIP and TEL URL Support

Contents

Prerequisites for SIP and TEL URL Support

Restrictions for SIP and TEL URL Support

Information About SIP and TEL URL Support

How to Configure SIP and TEL URL Support

Configuration Examples for SIP and TEL URL Support

Where to Go Next

Additional References

Prerequisites for SIP and TEL URL Support

Install Cisco IOS Release 12.3(4)T or later on the voice gateway.

Configure basic voice application functionality on the gateway. For information, see "Configuring Basic Functionality for Tcl IVR and VoiceXML Applications" on page 15.

Write a Tcl IVR 2.0 script or VoiceXML document that implements SIP or TEL URL support. For information, refer to the Tcl IVR API Version 2.0 Programmer's Guide or Cisco VoiceXML Programmer's Guide.

Restrictions for SIP and TEL URL Support

Access is provided only to headers in the SIP Invite, Subscribe, and Notify messages and H.323 Setup message.

SIP and TEL URLs are not supported destinations for H.450 or SIP call transfers or call forwarding using Tcl IVR or VoiceXML applications.

A destination URL can have a maximum length of 1024 bytes.

H.323 rejects a call if the URL is more than 512 characters because H.225 limits the URL length to 512 bytes.

Information About SIP and TEL URL Support

To configure voice application enhancements on a Cisco gateway, you should understand the following concepts:

SIP and TEL URL Support for Voice Applications

Benefits of SIP and TEL URL Support

SIP and TEL URL Support for Voice Applications

Cisco IOS Release 12.3(4)T allows Tcl IVR 2.0 and VoiceXML applications to place calls to SIP and TEL URL destinations in addition to E.164 telephone numbers. For outgoing calls, the voice application provides the destination, as either a URL or an E.164 number. Incoming calls are matched to a dial peer based on the URL, triggering the voice application that is configured in the dial peer. New dial-peer matching rules are implemented for URLs. The standard dial-peer matching rules apply to telephone number destinations. VoiceXML applications can use the transfer tag to place calls to URL destinations. Tcl IVR 2.0 scripts can do a leg setup to a URL instead of a telephone number.

For configuration information, use the following references:

To create a voice class that defines the criteria for matching a URL, see the "Creating a Voice Class for URIs" section.

To assign the URL voice class to an inbound or outbound dial peer, see the "Configuring an Inbound Dial Peer to Match on a URI" section or the "Configuring an Outbound Dial Peer for URI Destinations" section.

For a description of the new dial-peer matching rules for URLs, refer to the destination uri command and incoming uri command in the Cisco IOS Voice Command Reference, Release 12.3 T.

To enable voice applications to read and pass SIP headers, refer to the Cisco IOS SIP Configuration Guide, Release 12.3.

To specify SIP and TEL URLs in a Tcl IVR 2.0 script or VoiceXML document, refer to the Tcl IVR API Version 2.0 Programmer's Guide or the Cisco VoiceXML Enhancements document.

Benefits of SIP and TEL URL Support

Enhances call-control features by supporting SIP and TEL URL destinations for a VoiceXML transfer or Tcl leg setup. Incoming calls can be directed to voice applications based on a SIP or TEL URL, and outbound calls can be placed using a URL to route the call.

Complies with the W3C VoiceXML 2.0 Working Draft requirement for TEL URL support, enabling additional information such as the account number to be provided when a call is transferred to or from a VoiceXML application.

Allows dialing plans to be implemented using SIP URLs instead of telephone numbers, simplifying the management of SIP telephony networks.

How to Configure SIP and TEL URL Support

This section contains the following procedures:

Creating a Voice Class for URIs (required)

Configuring an Inbound Dial Peer to Match on a URI (required)

Verifying Dial Peer Configuration for an Incoming URI (optional)

Configuring an Outbound Dial Peer for URI Destinations (required)

Verifying Dial-Peer Configuration for an Outgoing URI (optional)

Troubleshooting URI Matching (optional)

Creating a Voice Class for URIs

To match a dial peer to a call based on the URI, you must first configure a URI voice class and then assign it to an inbound or outbound dial peer.

Choose one of the following tasks, depending on whether a call has a SIP or TEL URI:

Creating a Voice Class for SIP URLs

Creating a Voice Class for TEL URLs

You define sets of related dial-peer attributes in voice classes. The SIP and TEL URL Support feature introduces a new type of voice class for URI attributes. A URI voice class defines the criteria for matching the URI in a call. You can configure a voice class to match either the entire URI or specific fields within the URI, however, not both. You then assign the voice class to an inbound or outbound dial peer and calls are matched to the dial peer based on the URI.

Creating a Voice Class for SIP URLs

This section describes how to configure a voice class to match on a SIP URI.

SUMMARY STEPS

1. enable

2. configure terminal

3. voice class uri tag sip

4. pattern uri-pattern

5. host hostname-pattern

6. user-id username-pattern

7. phone context context-pattern

8. end

DETAILED STEPS


Step 1 Enable privileged EXEC mode:

enable
Example: Router> enable

Enter your password if prompted.

Step 2 Enter global configuration mode:

configure terminal
Example: Router(config)# configure terminal

Step 3 Enter voice-class configuration mode for a SIP URI:

voice class uri tag sip
Example: Router(config)# voice class uri ab200 sip

Step 4 (Optional) Specify a regular expression (regex) pattern for matching the entire SIP URI:

pattern uri-pattern
Example: Router(config-voice-uri-class)# pattern ^408

Note If you use the pattern command you cannot use the following commands because the pattern command matches on the entire URI.


Step 5 (Optional) Specify a regex pattern for matching the host-name field in the SIP URI:

host hostname-pattern
Example: Router(config-voice-uri-class)# host server1

Step 6 (Optional) Specify a regex pattern for matching the username field in the SIP URI:

user-id username-pattern
Example: Router(config-voice-uri-class)# user-id elmo

Step 7 (Optional) Specify that only calls with a matching phone-context field in the URI are selected:

phone context context-pattern
Example: Router(config-voice-uri-class)# phone context 408

Note You must use the phone context command with either the host or user-id command or both. Using this command alone does not result in any matches on the voice class.


Step 8 Exit to privileged EXEC mode:

end
Example: Router(config-voice-uri-class)# end

What to Do Next

To use the URI voice class to handle incoming calls, continue with the "Configuring an Inbound Dial Peer to Match on a URI" section.

To use the URI voice class to handle outbound calls, continue with the "Configuring an Outbound Dial Peer for URI Destinations" section.

Creating a Voice Class for TEL URLs

This section describes how to configure a voice class to match on a TEL URI.

SUMMARY STEPS

1. enable

2. configure terminal

3. voice class uri tag tel

4. pattern uri-pattern

5. phone number phone-number-pattern

6. phone context context-pattern

7. end

DETAILED STEPS


Step 1 Enable privileged EXEC mode:

enable
Example: Router> enable

Enter your password if prompted.

Step 2 Enter global configuration mode:

configure terminal
Example: Router(config)# configure terminal

Step 3 Enter voice-class configuration mode for a TEL URI:

voice class uri tag tel
Example: Router(config)# voice class uri ab400 tel

Step 4 (Optional) Specify a regex pattern for matching the entire TEL URI:

pattern uri-pattern
Example: Router(config-voice-uri-class)# pattern ^408

Note If you use the pattern command you cannot use the phone number or phone context commands in the following steps because the pattern command matches on the entire URI.


Step 5 (Optional) Specify a regex pattern for matching the phone number field in the TEL URI:

phone number phone-number-pattern
Example: Router(config-voice-uri-class)# phone number ^408555

Step 6 (Optional) Specify that only calls with a matching phone-context field are selected:

phone context context-pattern
Example: Router(config-voice-uri-class)# phone context 555

Note You must use the phone context command with the phone number command. Using this command alone does not result in any matches on the voice class.


Step 7 Exit to privileged EXEC mode:

end
Example: Router(config-voice-uri-class)# end

Configuring an Inbound Dial Peer to Match on a URI

To match the URI in an incoming call to a dial peer, you must configure a URI voice class in the inbound VoIP dial peer.

Choose one of the following tasks, depending on whether the dial peer uses SIP or H.323.

Configuring an Inbound Dial Peer to Match the URI in H.323 Calls

Configuring an Inbound Dial Peer to Match the URI in SIP Calls

Prerequisites

Enable SIP header passing. For information, refer to the Cisco IOS SIP Configuration Guide, Release 12.3.

Write a Tcl IVR 2.0 script or VoiceXML document that accepts a SIP or TEL URI. For information, refer to the Tcl IVR API Version 2.0 Programmer's Guide or Cisco VoiceXML Programmer's Guide.

Configuring an Inbound Dial Peer to Match the URI in H.323 Calls

This section describes how to configure an inbound dial peer to trigger a voice application based on the URI in an incoming H.323 call.

SUMMARY STEPS

1. enable

2. configure terminal

3. dial-peer voice number voip

4. service name

5. incoming uri {called | calling} tag

6. end

DETAILED STEPS


Step 1 Enable privileged EXEC mode:

enable
Example: Router> enable

Enter your password if prompted.

Step 2 Enter global configuration mode:

configure terminal
Example: Router(config)# configure terminal

Step 3 Enter dial-peer configuration mode for a VoIP dial peer:

dial-peer voice number voip
Example: Router(config)# dial-peer voice 2 voip

Step 4 Associate an application with this VoIP dial peer:

service name
Example: Router(config-dial-peer)# service vapp1

Step 5 Specify the URI voice class that matches calls to this dial peer based on the destination URI or source URI in the H.225 message:

incoming uri {called | calling} tag
Example: Router(config-dial-peer)# incoming uri called ab400

This URI voice class must already be configured by using the voice class uri command.

Incoming calls with a URI that matches this voice class are linked to this dial peer and to the VoiceXML or Tcl IVR application you configured in Step 4.

Step 6 Exit to privileged EXEC mode:

end
Example: Router(config-dial-peer)# end

Configuring an Inbound Dial Peer to Match the URI in SIP Calls

This section describes how to configure an inbound dial peer that triggers a voice application based on the URI in an incoming SIP call.

SUMMARY STEPS

1. enable

2. configure terminal

3. dial-peer voice number voip

4. service name

5. session protocol sipv2

6. incoming uri {request | to | from} tag

7. end

DETAILED STEPS


Step 1 Enable privileged EXEC mode:

enable
Example: Router> enable

Enter your password if prompted.

Step 2 Enter global configuration mode:

configure terminal
Example: Router(config)# configure terminal

Step 3 Enter dial-peer configuration mode for a VoIP dial peer:

dial-peer voice number voip
Example: Router(config)# dial-peer voice 2 voip

Step 4 Associate an application with this VoIP dial peer:

service name
Example: Router(config-dial-peer)# service vapp1

Step 5 Specify SIP as the session protocol for calls between the local and remote routers:

session protocol sipv2
Example: Router(config-dial-peer)# session protocol sipv2

Step 6 Specify the URI voice class that matches calls to this dial peer based on the from header, to header, or request-URI in an incoming SIP Invite message:

incoming uri {from | request | to} tag
Example: Router(config-dial-peer)# incoming uri request ab200

You must have already configured this URI voice class by using the voice class uri command.

Incoming calls with a URI that matches the voice class are linked to this dial peer and to the VoiceXML or Tcl application that is configured in Step 4.

Step 7 Exit to privileged EXEC mode:

end
Example: Router(config-dial-peer)# end

Verifying Dial Peer Configuration for an Incoming URI

SUMMARY STEPS

1. show running-config

2. show voice class uri [tag | summary]

3. show dialplan incall uri h323 {called | calling} uri

or

show dialplan incall uri sip {from | request | to} uri

4. Follow the steps in the "Verifying Loading of Service" section on page 41.

DETAILED STEPS


Step 1 Use the show running-config command to display your configuration of the URI voice class, the inbound dial peer, and the voice application.

The following example shows that voice class 700 is assigned to dial peer 766, which triggers the get_headers_tcl application for calls that contain elmo@sip.tgw.com in the request field in the incoming SIP URI.

Router# show running-config
.
.
.
voice class uri  700 sip
 pattern elmo@sip.tgw.com*
!
application
 service get_headers_tcl tftp://demo/sample/scripts/get_headers.tcl
  paramspace english language en
  paramspace english index 1
  paramspace english location tftp://demo/class/AUDIO/en/
 !
!
dial-peer voice 766 voip
 service get_headers_tcl
 session protocol sipv2
 incoming uri request 700
 codec g711ulaw
!

Step 2 Use the show voice class uri command to display the configuration of the voice class that you have configured, for example:

Router# show voice class uri 700

Voice URI class: 700
    Schema = sip
    pattern = elmo@sip.tgw.com*

Step 3 Use the show dialplan incall uri command to test that the correct dial peer is matched for the URI.

The following example shows that dial peer 766 is linked to voice class 700 and to the application named get_headers_tcl. It also shows that the operational state of the dial peer is up.

Router# show dialplan incall uri sip request sip:elmo@sip.tgw.com

Inbound VoIP dialpeer matching based on SIP URI's

VoiceOverIpPeer766
        peer type = voice, information type = voice,
        description = `',
        tag = 766, destination-pattern = `',
        answer-address = `', preference=0,
        CLID Restriction = None
        CLID Network Number = `'
        CLID Second Number sent 
        source carrier-id = `', target carrier-id = `',
        source trunk-group-label = `',  target trunk-group-label = `',
        numbering Type = `unknown'
        group = 766, Admin state is up, Operation state is up,
        incoming called-number = `', connections/maximum = 0/unlimited,
        DTMF Relay = disabled,
        modem transport = system,
        URI classes:
            Incoming (Request) = 700
            Incoming (To) = 
            Incoming (From) = 
            Destination = 
        huntstop = disabled,
        in bound application associated: 'get_headers_tcl'
        out bound application associated: ''
        dnis-map = 
        permission :both
        incoming COR list:maximum capability
        outgoing COR list:minimum requirement
        Translation profile (Incoming):
        Translation profile (Outgoing):
        incoming call blocking:
        translation-profile = `'
        disconnect-cause = `no-service'
        type = voip, session-target = `10.10.1.1',
        technology prefix: 
        settle-call = disabled
        ip media DSCP = ef, ip signaling DSCP = af31, UDP checksum = disabled,
        session-protocol = sipv2, session-transport = system, req-qos = best-ef 
        acc-qos = best-effort, 
        RTP dynamic payload type values: NTE = 101
        Cisco: NSE=100, fax=96, fax-ack=97, dtmf=121, fax-relay=122
               CAS=123, ClearChan=125, PCM switch over u-law=0,A-law=8
        RTP comfort noise payload type = 19
        fax rate = voice,   payload size =  20 bytes
        fax protocol = system
        fax-relay ecm enable
        fax NSF = 0xAD0051 (default)
        codec = g711ulaw,   payload size =  20 bytes,
        Expect factor = 0, Icpif = 20,
        Playout Mode is set to default,
        Initial 60 ms, Max 300 ms
        Playout-delay Minimum mode is set to default, value 40 ms 
        Fax nominal 300 ms
        Max Redirects = 1, signaling-type = ext-signal,
        VAD = enabled, Poor QOV Trap = disabled, 
        Source Interface = NONE
        voice class sip url = system,
        voice class sip rel1xx = system,
        voice class perm tag = `'
        Time elapsed since last clearing of voice call statistics never
        Connect Time = 0, Charged Units = 0,
        Successful Calls = 0, Failed Calls = 0, Incomplete Calls = 0
        Accepted Calls = 0, Refused Calls = 0,
        Last Disconnect Cause is "",
        Last Disconnect Text is "",
        Last Setup Time = 0.
Matched:    Digits: 0
Target: 


Note For a description of the fields in this output, refer to the show dialplan incall uri command in the Cisco IOS Voice Command Reference, Release 12.3 T.


Step 4 Follow the steps in the "Verifying Loading of Service" section on page 41 to verify that the voice application is loaded and running on the gateway.


Configuring an Outbound Dial Peer for URI Destinations

This section describes how to configure an outbound dial peer for calls placed to a URI destination.

Prerequisites

Write a Tcl IVR 2.0 script or VoiceXML document that implements call transfer to a SIP or TEL URI. For information, refer to the Tcl IVR API Version 2.0 Programmer's Guide or Cisco VoiceXML Programmer's Guide.

Restrictions

Outbound calls to a SIP URL cannot be placed to a PSTN leg because dial-peer matching does not support this. Outbound calls to a TEL URL can be placed to a PSTN call leg. The telephone number is pulled from the URL and used as the destination number.

Underscores are not supported in the From header or in the callinfo originationNum field of a SIP URI in a Tcl script or VoiceXML document.

SUMMARY STEPS

1. enable

2. configure terminal

3. dial-peer voice number voip

4. session target ipv4:ip-address

5. session protocol sipv2

6. destination uri tag

7. end

DETAILED STEPS


Step 1 Enable privileged EXEC mode:

enable
Example: Router> enable

Enter your password if prompted.

Step 2 Enter global configuration mode:

configure terminal
Example: Router(config)# configure terminal

Step 3 Enter dial-peer configuration mode for a VoIP dial peer:

dial-peer voice number voip
Example: Router(config)# dial-peer voice 2 voip

Step 4 (Optional) Specify the IP address of the terminating gateway:

session target ipv4:ip-address
Example: Router(config-dial-peer)# session target ipv4:10.10.1.1

Note The session target command is required when placing a call to a TEL URI; it is optional for a SIP URI. If you do not configure a session target for a SIP URI, the call is sent to the host address in the SIP URI that is passed from the application initiating the outbound call.


Step 5 (Optional) Specify the session protocol if you are using SIP for calls between the local and remote gateways:

session protocol sipv2
Example: Router(config-dial-peer)# session protocol sipv2

Note If you are using H.323 do not configure the session protocol command.


Step 6 Specify the URI class that links voice calls to this dial peer:

destination uri tag
Example: Router(config-dial-peer)# destination uri 700

This URI voice class must already have been configured by using the voice class uri command.

Step 7 Exit to privileged EXEC mode:

end
Example: Router(config-dial-peer)# end

Verifying Dial-Peer Configuration for an Outgoing URI

SUMMARY STEPS

1. show running-config

2. show voice class uri [tag | summary]

3. show dialplan uri h323 uri

DETAILED STEPS


Step 1 Use the show running-config command to display your configuration of the URI voice class and the outbound dial peer.

The following example shows that voice class 500 is assigned to dial peer 599, which matches on calls that have a pattern beginning with 123 in the outgoing SIP URI.

Router# show running-config
.
.
.
voice class uri  500 sip
 pattern 123...
!
!
dial-peer voice 599 voip
 session protocol sipv2
 session target ipv4:10.10.1.1
 destination uri 500
 codec g711ulaw
!

Step 2 Use the show voice class uri command to display the configuration of the voice class, for example:

Router# show voice class uri 500

Voice URI class: 500
    Schema = sip
    pattern = 123...

To view a list of all voice classes, use the show voice class uri summary command, for example:

Router# show voice class uri summary
__________________________________________
Class Name                       Schema
------------------------------------------
100                              sip
300                              tel
500                              sip
__________________________________________

Step 3 Use the show dialplan uri command to test that the correct dial peer is matched for the URI.

The following example shows that dial peer 599 is linked to voice class 500, which matches on the specified URI. It also shows that the operational state of the dial peer is up.

Router# show dialplan uri sip:123456

 Outbound dialpeer matching based on destination URI

VoiceOverIpPeer599
        peer type = voice, information type = voice,
        description = `',
        tag = 599, destination-pattern = `',
        answer-address = `', preference=0,
        CLID Restriction = None
        CLID Network Number = `'
        CLID Second Number sent 
        source carrier-id = `', target carrier-id = `',
        source trunk-group-label = `',  target trunk-group-label = `',
        numbering Type = `unknown'
        group = 599, Admin state is up, Operation state is up,
        incoming called-number = `', connections/maximum = 0/unlimited,
        DTMF Relay = disabled,
        modem transport = system,
        URI classes:
            Incoming (Request) = 
            Incoming (To) = 
            Incoming (From) = 
            Destination = 500
        huntstop = disabled,
        in bound application associated: 'DEFAULT'
        out bound application associated: ''
        dnis-map = 
        permission :both
        incoming COR list:maximum capability
        outgoing COR list:minimum requirement
        Translation profile (Incoming):
        Translation profile (Outgoing):
        incoming call blocking:
        translation-profile = `'
        disconnect-cause = `no-service'
        type = voip, session-target = `10.10.1.1',
        technology prefix: 
        settle-call = disabled
        ip media DSCP = ef, ip signaling DSCP = af31, UDP checksum = disabled,
        session-protocol = sipv2, session-transport = system, req-qos = best-ef 
        acc-qos = best-effort, 
        RTP dynamic payload type values: NTE = 101
        Cisco: NSE=100, fax=96, fax-ack=97, dtmf=121, fax-relay=122
               CAS=123, ClearChan=125, PCM switch over u-law=0,A-law=8
        RTP comfort noise payload type = 19
        fax rate = voice,   payload size =  20 bytes
        fax protocol = system
        fax-relay ecm enable
        fax NSF = 0xAD0051 (default)
        codec = g711ulaw,   payload size =  20 bytes,
        Expect factor = 0, Icpif = 20,
        Playout Mode is set to default,
        Initial 60 ms, Max 300 ms
        Playout-delay Minimum mode is set to default, value 40 ms 
        Fax nominal 300 ms
        Max Redirects = 1, signaling-type = ext-signal,
        VAD = enabled, Poor QOV Trap = disabled, 
        Source Interface = NONE
        voice class sip url = system,
        voice class sip rel1xx = system,
        voice class perm tag = `'
        Time elapsed since last clearing of voice call statistics never
        Connect Time = 0, Charged Units = 0,
        Successful Calls = 0, Failed Calls = 0, Incomplete Calls = 0
        Accepted Calls = 0, Refused Calls = 0,
        Last Disconnect Cause is "",
        Last Disconnect Text is "",
        Last Setup Time = 0.
Matched:    Digits: 0
Target: 


Note For a description of the fields shown in this output, refer to the show dialplan uri command in the Cisco IOS Voice Command Reference, Release 12.3 T.



Troubleshooting Tips

Do not use underscores in the From header or in the callinfo originationNum field of a SIP URI in a Tcl script or VoiceXML document. Using underscores in these fields, as shown in the following examples, causes call transfer to fail:

set callInfo(originationNum) "sip:firstname_lastname@cisco.com"

set headers(From) "sip:firstname_lastname"

Use Tcl puts commands or VoiceXML log commands in your script to help with debugging. To view the output from these commands, use the debug voip ivr script command for Tcl IVR 2.0 scripts, or the debug vxml puts command for VoiceXML documents.

For information on using the Tcl put command, refer to the Tcl IVR API Version 2.0 Programmer's Guide. For information about the VoiceXML log command, refer to the Cisco VoiceXML Programmer's Guide.

Troubleshooting URI Matching

SUMMARY STEPS

1. debug dialpeer

2. debug voice uri

3. debug voice ccapi error

DETAILED STEPS


Step 1 Use the debug dialpeer command to determine whether there is a dial peer with a voice class that matches the URI in the Tcl script or VoiceXML document.

In the following example, the incoming call is matched to dial peer 1000, then the gateway searches through the dial peers looking for a voice class that matches the URI in the outbound script:

Router# debug dialpeer

dialpeer detailed info debugging is on

*Mar  1 00:56:40.711: dpAssociateIncomingPeerSPI: 
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match rule (DP_MATCH_INCOMING_DNIS)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match incoming called number; called 
(50267)
*Mar  1 00:56:40.711: dpMatchCore: 
*Mar  1 00:56:40.711: dpMatchCore: dialstring(50267); expanded string(50267); calling()
*Mar  1 00:56:40.711: FillTarget: pDest(50267T) pPatn(50267)
*Mar  1 00:56:40.711: MatchNextPeer: peer 1000 matched
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Result=0 after DP_MATCH_INCOMING_DNIS; 
peers (0x62F2E454)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerSPI: 
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match rule (DP_MATCH_INCOMING_DNIS)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match incoming called number; called 
(50267)
*Mar  1 00:56:40.711: dpMatchCore: 
*Mar  1 00:56:40.711: dpMatchCore: dialstring(50267); expanded string(50267); calling()
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Result=-1 after DP_MATCH_INCOMING_DNIS; 
peers (0x0)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match rule (DP_MATCH_ANSWER)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match answer address; calling (50006)
*Mar  1 00:56:40.711: dpMatchCore: 
*Mar  1 00:56:40.711: dpMatchCore: dialstring(); expanded string(); calling(50006T)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Result=-1 after DP_MATCH_ANSWER; peers 
(0x0)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match rule (DP_MATCH_ORIGINATE)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match destination pattern; calling 
(50006)
*Mar  1 00:56:40.711: dpMatchCore: 
*Mar  1 00:56:40.711: dpMatchCore: dialstring(); expanded string(); calling(50006T)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Result=-1 after DP_MATCH_ORIGINATE; 
peers (0x0)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match rule (DP_MATCH_PORT)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Result=-1 after DP_MATCH_PORT; peers 
(0x0)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match rule (DP_MATCH_SRC_CARRIER)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Result=-1 after DP_MATCH_SRC_CARRIER; 
peers (0x0)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerSPI: 
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match rule (DP_MATCH_INCOMING_DNIS)
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Match incoming called number; called 
(50267)
*Mar  1 00:56:40.711: dpMatchCore: 
*Mar  1 00:56:40.711: dpMatchCore: dialstring(50267); expanded string(50267); calling()
*Mar  1 00:56:40.711: FillTarget: pDest(50267T) pPatn(50267)
*Mar  1 00:56:40.711: MatchNextPeer: peer 1000 matched
*Mar  1 00:56:40.711: dpAssociateIncomingPeerCore: Result=0 after DP_MATCH_INCOMING_DNIS; 
peers (0x62F2E454)
*Mar  1 00:56:49.203: dpMatchPeersMoreArg: 
*Mar  1 00:56:49.203: dpMatchPeersCore: 
*Mar  1 00:56:49.203: dpMatchPeersCore: Match rule (DP_MATCH_DEST_URI_AND_TGT_CARRIER)
*Mar  1 00:56:49.203: dpMatchPeersCore: Result=-1 after DP_MATCH_DEST_URI_AND_TGT_CARRIER
*Mar  1 00:56:49.203: dpMatchPeersCore: Match rule (DP_MATCH_DEST_AND_TGT_CARRIER)
*Mar  1 00:56:49.203: dpMatchPeersCore: Result=-1 after DP_MATCH_DEST_AND_TGT_CARRIER
*Mar  1 00:56:49.203: dpMatchPeersCore: Match rule (DP_MATCH_DEST_URI)
*Mar  1 00:56:49.203: dpMatchPeersCore: Match Dest. URI; URI 
(sip:xxx_no_under@anglee.com?Subject=Hello&Priority=Urgent&testID=AL_FEAT_SIP_URL_O_RV_11) 
*Mar  1 00:56:49.203: dpMatchCore: 
*Mar  1 00:56:49.203: dpMatchCore: dialstring(); expanded string(); calling()
*Mar  1 00:56:49.203: dpMatchPeersCore: Result=-1 after DP_MATCH_DEST_URI
*Mar  1 00:56:49.203: dpMatchPeersCore: Match rule (DP_MATCH_DEST)
*Mar  1 00:56:49.203: dpMatchPeersCore: Result=-1 after DP_MATCH_DEST
*Mar  1 00:56:49.203: dpMatchPeersCore: Match rule (DP_MATCH_TGT_CARRIER)
*Mar  1 00:56:49.203: dpMatchPeersCore: Result=-1 after DP_MATCH_TGT_CARRIER
*Mar  1 00:56:49.203: //-1//TCL2:HN0033E40C:/tcl_PutsCmd: 
 STATUS=ls_004
*Mar  1 00:56:49.203: 

A message showing Result=-1 indicates that a dial peer was not matched. Because this output does not display another dial peer match statement, you know that the gateway failed to find a match.

Step 2 Use the debug voice uri command to verify whether there is a voice class that matches the URI in the Tcl script or VoiceXML document.

In the following example, the gateway failed to match the URI in the script to the only configured voice class, 805:

Router# debug voice uri

Voice URI debugging is enabled
Router#
*Mar  1 01:09:03.319: vuri_match_class: tag (805)
*Mar  1 01:09:03.319: vuri_match_class_sip: Match with phone context
*Mar  1 01:09:03.319: vuri_match_class_sip: input ()
*Mar  1 01:09:03.319: vuri_match_class_sip: Match with host
*Mar  1 01:09:03.319: vuri_match_class_sip: input (anglee.com)
*Mar  1 01:09:03.319: vuri_match_class_sip: Match with user-id
*Mar  1 01:09:03.319: vuri_match_class_sip: input (xxx_no_under)
*Mar  1 01:09:03.319: vuri_match_class_sip: Match failed

Step 3 Use the debug voice ccapi error command to display any errors that might occur during the call transfer, for example:

Router# debug voice ccapi error

*Mar  1 01:39:59.319: //32/7FAB684B8022/CCAPI/cc_get_associated_stream: Matched the 
                                        Stream CallID 0x21::
*Mar  1 01:40:04.279: //32/7FAB684B8022/CCAPI/cc_api_call_disconnect_done: 
cause=28,retry=0,vcCauseCode=0

Any output from this command means that the call transfer did not complete, although the reason for the error might not be obvious from the messages.


Configuration Examples for SIP and TEL URL Support

The following examples show the configuration for an originating and terminating gateway, each configured to handle both SIP and TEL URIs.

Originating Gateway

Terminating Gateway


Note For information about reading and passing SIP headers, refer to the Cisco IOS SIP Configuration Guide, Release 12.3.


Originating Gateway

SIP URI with Header Passing Using SIP Protocol

In the following example, when a SIP call comes into the originating gateway, the application sip_headers_tcl asks the caller to enter an account number. After the account number is collected, it is assigned to a header named AccountInfo. The AccountInfo is passed to the leg setup along with other standard and user-defined headers in the destination URL.

The outgoing call matches on dial peer 766, which is configured with the destination uri command to match on voice class 766. Voice class 766 is configured with the voice class uri command to match destination SIP URI sip:elmo@sip.tgw.com. The gateway places a call to sip:elmo@sip.tgw.com.

When the call setup request is received by the gateway, the headers that are passed from the application are included in the SIP INVITE message.

TEL URI with Header Passing Using H.323 Protocol

In the following example, when an H.323 call comes into the originating gateway, the application tel_headers_vxml asks the caller to enter an account number. After the account number is collected, it is assigned to a header named AccountInfo. The AccountInfo is passed to the leg setup along with other user-defined headers in the destination URL.

The outgoing call matches on dial peer 767, which is configured with the destination uri command to match on voice class 767. Voice class 767 is configured with the voice class uri command to match telephone number 7671234 and a phone context of 408. The voice class can also match against a URL pattern. This example uses the phone number and phone context as a matching criteria. The gateway places a call to a TEL URL with the header of tel:7671234;phone-context=408;tsp=xyz.com;Subject=HelloTelVXML;To=oscar@abc.com; From=nobody; Priority=urgent'+';AccountInfo='+acctInfo.

When the call setup request is received by the gateway, the destination URL with headers and parameters is passed in the setup message as part of the destination address.

!
version 12.3
service timestamps debug datetime msec localtime
service timestamps log datetime msec localtime
no service password-encryption
service internal
!
hostname 1.7.102.32
!
no logging buffered
enable password lab
!
username 1111
username 2222 password 0 2222
!
!
resource-pool disable
!
aaa new-model
!
!
aaa authentication login h323 local group radius
aaa authorization exec h323 group radius 
aaa accounting connection h323 start-stop group radius
aaa session-id common
ip subnet-zero
ip ftp username dump
ip ftp password dump123
ip host px1-sun 1.7.100.1
ip host rtsp-ws 1.7.153.4
ip host dev 223.255.254.254
ip host px1-sun.cisco.com 1.7.100.1
ip host tgw.com 1.7.104.89
!
!
isdn switch-type primary-5ess
isdn voice-call-failure 0
!
!
voice service voip 
 sip
!
!
voice class uri  766 sip
 pattern elmo@sip.tgw.com*
!
voice class uri  767 tel
 phone number 767....
 phone context 408
!
!
!
!
!
no voice hpi capture buffer
no voice hpi capture destination 
!
!
ivr prompt memory 16384
ivr record memory system 256000
ivr record memory session 256000
ivr asr-server rtsp://nuance-asr/recognizer
ivr tts-server rtsp://nuance-asr/synthesizer
ivr record memory system 256000
ivr record memory session 256000
ivr asr-server rtsp://nuance-asr/recognizer
ivr tts-server rtsp://nuance-asr/synthesizer
rtsp client session history duration 1
rtsp client session history records 1
http client cache memory pool 0
http client cache memory file 10000
http client cache refresh 30
http client connection timeout 10
http client response timeout 10
fax interface-type modem
mta receive maximum-recipients 0
call-history-mib retain-timer 0
call-history-mib max-size 0
!
controller T1 0
 framing esf
 clock source line primary
 linecode b8zs
 cablelength short 133
 pri-group timeslots 1-24
!
controller T1 1
 framing esf
 clock source line secondary 1
 linecode b8zs
 cablelength short 133
 pri-group timeslots 1-24
!
controller T1 2
 framing esf
 clock source line secondary 2
 linecode b8zs
 cablelength short 133
 pri-group timeslots 1-24
!
controller T1 3
 framing esf
 clock source line secondary 3
 linecode b8zs
 cablelength short 133
 pri-group timeslots 1-24
!
gw-accounting h323
gw-accounting h323 vsa
gw-accounting voip
!
!
interface Ethernet0
 ip address 1.7.102.32 255.255.0.0
 ip helper-address 223.255.254.254
 no ip route-cache
 no ip mroute-cache
 no cdp enable
!
interface Serial0
 no ip address
 shutdown
 clockrate 2015232
 no fair-queue
 no cdp enable
!
interface Serial1
 no ip address
 shutdown
 clockrate 2015232
 no fair-queue
 no cdp enable
!
interface Serial2
 no ip address
 shutdown
 clockrate 2015232
 no fair-queue
 no cdp enable
!
interface Serial3
 no ip address
 shutdown
 clockrate 2015232
 no fair-queue
 no cdp enable
!
interface Serial0:23
 no ip address
 no logging event link-status
 dialer-group 1
 isdn switch-type primary-5ess
 isdn incoming-voice modem
 isdn disconnect-cause 1
 fair-queue 64 256 0
 no cdp enable
!
interface Serial1:23
 no ip address
 no logging event link-status
 isdn switch-type primary-5ess
 no cdp enable
!
interface Serial2:23
 no ip address
 no logging event link-status
 isdn switch-type primary-5ess
 no cdp enable
!
interface Serial3:23
 no ip address
 no logging event link-status
 isdn switch-type primary-5ess
 no cdp enable
!
interface FastEthernet0
 no ip address
 shutdown
 duplex auto
 speed auto
 no cdp enable
!
ip default-gateway 1.7.0.1
ip classless
ip route 223.255.254.0 255.255.255.0 1.7.0.1
no ip http server
ip pim bidir-enable
!
!
no cdp run
!
!
radius-server retransmit 3
radius-server authorization permit missing Service-Type
call rsvp-sync
!
application 
 service sip_headers_tcl tftp://dev/demo/TCL/scripts/sip_headers.tcl
  paramspace english language en 
  paramspace english index 1
  paramspace english location tftp://dev/demo/AUDIO/en/
 !
 service sip_headers_vxml tftp://dev/demo/VXML/scripts/sip_headers.vxml
  paramspace english language en 
  paramspace english index 1
  paramspace english location tftp://dev/demo/AUDIO/en/
 !
 service tel_headers_tcl tftp://dev/demo/TCL/scripts/tel_headers.tcl
  paramspace english language en 
  paramspace english index 1
  paramspace english location tftp://dev/demo/AUDIO/en/
 !
 service tel_headers_vxml tftp://dev/demo/VXML/scripts/tel_headers.vxml
  paramspace english language en 
  paramspace english index 1
  paramspace english location tftp://dev/demo/AUDIO/en/
 !
!
voice-port 0:D
!
voice-port 1:D
!
voice-port 2:D
!
voice-port 3:D
!
mgcp modem passthrough voip mode ca
no mgcp timer receive-rtcp
!
mgcp profile default
!
dial-peer cor custom
!
!
dial-peer voice 1 pots
 service sip_headers_tcl
 incoming called-number 52948
 port 0:D
!
dial-peer voice 2 pots
 application tel_headers_vxml
 incoming called-number 52950
 port 0:D
!
dial-peer voice 767 voip
 session target ipv4:1.7.104.89
 destination uri 767
 codec g711ulaw
!
dial-peer voice 766 voip
 session protocol sipv2
 session target ipv4:1.7.104.89
 destination uri 766
 codec g711ulaw
!
dial-peer voice 7671234 voip
 service get_headers_vxml out-bound
 destination-pattern .......
 session protocol sipv2
 session target ipv4:1.7.104.89
 codec g711ulaw
!
sip-ua 
 sip-server ipv4:1.7.112.1
!
!
line con 0
 exec-timeout 0 0
line aux 0
line vty 0 4
!
exception core-file special3
exception dump 1.7.100.1
end

Terminating Gateway

SIP URI with Header Passing Using SIP Protocol

In the following example, when the call arrives at the terminating gateway and dial peer 766 is matched, the gateway stores all headers received in the incoming INVITE message so they can be accessed by the application.

The inbound dial peer can be configured to match the request-URI, or the "To" or "From" header in the incoming INVITE message. This example uses the request-URI for matching. The incoming call matches on dial peer 766, which is configured with the incoming uri request command to match on voice class 766. Voice class 766 is configured to match the incoming SIP request-URI sip:elmo@sip.tgw.com.

When the call is handed to the application configured in the inbound dial peer, get_headers_tcl, this Tcl application can read any header that is part of the incoming INVITE message.

TEL URI with Header Passing Using H.323 Protocol

In the following example, when the call arrives at the terminating gateway and dial peer 767 is matched, the gateway stores the incoming URI so it can be accessed by the application.

The inbound dial peer can be configured to match the entire TEL URL pattern, the E.164 number portion, or the phone context of the TEL URL. This example uses the phone number and phone context for matching. The incoming call matches on dial peer 767, which is configured with the incoming uri called command to match on voice class 767. Voice class 767 is configured to match the incoming called URL with the header of tel:7671234;phone-context=408;tsp=xyz.com;Subject=HelloTelVXML;To=oscar@abc.com;From=nobody;Priority=urgent'+';AccountInfo='+acctInfo.

When the call is handed to the application configured in the inbound dial peer, get_headers_vxml, this VoiceXML application can read any header which is part of the incoming called URI received in the setup indication.

!
version 12.3
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
service internal
!
hostname as5300-09
!
enable secret 5 $1$KRsb$cFAQFOylLr9j5Fof.eLgx1
enable password lab
!
!
!
resource-pool disable
clock timezone PDT -8
clock calendar-valid
!
ip subnet-zero
no ip domain lookup
ip domain name fieldlabs.cisco.com
ip host dcl1server 1.7.108.2
ip host px1-sun 1.14.99.1
ip host dirt 223.255.254.254
ip host jurai 223.255.254.254
ip host dclserver 1.7.108.2
ip host dcl2server 1.7.112.2
ip host ts 1.7.100.1
!
!
isdn switch-type primary-5ess
isdn voice-call-failure 0
!
!
voice service voip 
 sip
  header-passing 
!
!
voice class uri  766 sip
 pattern elmo@sip.tgw.com*
!
voice class uri  767 tel
 phone number 767....
 phone context 408
!
!
!
!
!
no voice hpi capture buffer
no voice hpi capture destination 
!
!
ivr record memory system 100000
ivr record memory session 100000
ivr record memory system 100000
ivr record memory session 100000
fax interface-type modem
mta receive maximum-recipients 0
!
controller T1 0
 framing esf
 clock source line primary
 linecode b8zs
 pri-group timeslots 1-24
!
controller T1 1
 framing sf
 clock source line secondary 1
 linecode ami
!
controller T1 2
 framing sf
 linecode ami
!
controller T1 3
 framing sf
 linecode ami
!
!
!
interface Ethernet0
 ip address 1.7.104.89 255.255.0.0
 ip helper-address 223.255.254.254
 no ip route-cache
 no ip mroute-cache
 no cdp enable
!
interface Serial0:23
 no ip address
 dialer-group 1
 isdn switch-type primary-5ess
 isdn incoming-voice modem
 fair-queue 64 256 0
 no cdp enable
!
interface FastEthernet0
 ip address 128.107.196.9 255.255.255.240
 no ip route-cache
 no ip mroute-cache
 duplex half
 speed 10
 no cdp enable
!
ip default-gateway 1.7.0.1
ip classless
ip route 207.104.210.0 255.255.255.0 128.107.196.1
ip route 223.255.254.0 255.255.255.0 1.7.0.1
no ip http server
ip pim bidir-enable
!
!
no cdp run
!
!
call rsvp-sync
!
application 
 service get_headers_tcl tftp://dev/demo/TCL/scripts/get_headers.tcl
  paramspace english language en
  paramspace english index 1
  paramspace english location tftp://dirt/cchiu/AUDIO/en/
 !
 service voice get_headers_vxml tftp://dev/demo/VXML/scripts/get_headers.vxml
  paramspace english language en
  paramspace english index 1
  paramspace english location tftp://dirt/cchiu/AUDIO/en/
 !
!
voice-port 0:D
!
mgcp ip qos dscp cs5 media
mgcp ip qos dscp cs3 signaling
!
mgcp profile default
!
dial-peer cor custom
!
!
!
dial-peer voice 1 pots
 service test
 incoming called-number 52950
 port 0:D
!
dial-peer voice 767 voip
 service get_headers_vxml
 session target ipv4:1.7.104.89
 incoming uri called 767
 codec g711ulaw
!
dial-peer voice 766 voip
 service get_headers_tcl
 session protocol sipv2
 session target ipv4:1.7.104.89
 incoming uri request 766
 codec g711ulaw
!
dial-peer voice 2 pots
 destination-pattern 767....
 port 0:D
 prefix 9767
!
sip-ua 
!
!
line con 0
 exec-timeout 0 0
 logging synchronous
line aux 0
line vty 0 4
 password lab
 login
!
scheduler interval 1000
end

Where to Go Next

To configure properties for audio files, see "Configuring Audio File Properties for Tcl IVR and VoiceXML Applications" on page 99.

To configure voice recording using a VoiceXML application, see "Configuring VoiceXML Voice Store and Forward" on page 117.

To configure properties for speech recognition or speech synthesis, see "Configuring ASR and TTS Properties" on page 151.

To configure a VoiceXML fax detection application, see "Configuring Fax Detection for VoiceXML" on page 175.

To configure telephony call-redirect features for voice applications, see "Configuring Telephony Call-Redirect Features" on page 209.

To configure session interaction for a Tcl IVR 2.0 application, see "Configuring Tcl IVR 2.0 Session Interaction" on page 229.

To monitor and troubleshoot voice applications, see "Monitoring and Troubleshooting Voice Applications" on page 273.

Additional References

"Overview of Cisco IOS Tcl IVR and VoiceXML Applications" on page 5—Describes how to access Cisco Feature Navigator; also lists and describes, by Cisco IOS release, Tcl IVR and VoiceXML features for that release

"Overview of Cisco IOS Tcl IVR and VoiceXML Applications" on page 5—Describes underlying Cisco IOS Tcl IVR and VoiceXML technology; also lists related documents, standards, MIBs, RFCs, and how to obtain technical assistance