navbar
Section Strip

VoiceXML Gateway
Frequently Asked Questions

VoiceXML Home
If you still have question, Contact Us


Tools, Maintenance, and Troubleshooting Tips for Cisco IOS Software in general

This document contains FAQs that address the most common problem areas dealing with VoiceXML Gateway. There are four FAQ categories:
"How To", "VXML", "Debugging Tips", and "What is the Problem".


A.
How To:  
B.
VXML:  
C.
Debugging Tips  
D.
What is the Problem  

HOW TO: (back to top of page)

A1 Q. Is there a CLI command to refresh the cache other than the "http client cache refresh 100" ?

This command sets the lifetime of a cached HTTP entry to 100 seconds. Beyond that time, it will be marked (internally) as "stale". The document will not be refreshed until the http client requests it from the server.

Another method to reload the documents or audio files is to use "caching=safe". Setting caching to "safe" will only ask if it is current and not reload the document. To reload the document every time, you can add "?1=1" suffix in the URL.

For the VXML applications configured using the CLI command "call application voice <NAME> <URL> , the command "call application voice load <NAME>" ensures that the latest version of it is loaded.

(back to question category)

A2 Q. Which audio file formats is supported?

Only au audio files are supported.
The format is 8000 HZ sample rate, Mono, 16-bit, 8bit mu-Law encoded
Next/Sun .au.

(back to question category)

A3 Q. What is dynamic prompting and how it is used?

When the <value> tag is used in a VXML document, the CISCO IOS software is capable of concatenating a list of audio files and play it to the user. The audio files are pre-recorded audio files and the location of the audio files needs to be configured or specified in the VXML document. One example of how dynamic prompting is used is to play out the duration of a voice call in minutes and seconds.

(back to question category)

A4 Q. How are pre-recorded audio files configured on the router?

Pre-recorded audio files can be configured on the router or they can be specified in the VXML document itself. To configure it on the router, the first thing that needs to be configured in the CLI is the language for the audio files. The location of the audio files need to be configured as well. They are configured with the VXML application, SAMPLE in the example shown below:

call application voice SAMPLE http://vxml/sample.vxml
call application voice SAMPLE language 1 en
call application voice SAMPLE set-location tftp://prompts/english/

(back to question category)

A5 Q. How are pre-recorded audio files used in a VXML document?

There are two ways to specify pre-recorded audio files in a VXML document. Under the <audio>

Under the <value> tag, the location of the pre-recorded audio files are defined in the <resrc> attribute. This is required if the CLI for language and location of the pre-recorded audio files are not configured on the router. If the CLI for language and location of the audio files are present, the <resrc> overrides the CLI configuration.

(back to question category)

A6 Q. What is the maximum amount of time I can record audio?

The max time you can record an audio is dependent upon the recording codec and available memory.

There are 2 different ways to specify maxtime for recording audio :
1) The maximum amount of time for recording can be specified by the 'maxtime' attribute in the <record> tag.
Example:
<record name="myRecording" beep="true" maxtime="60s" dtmfterm="true" type="audio/basic;codec=g711ulaw">

2) The property, com.cisco.record_maxtime can be defined.
Example:
<property name="com.cisco.record_maxtime" value="60s"/>

(back to question category)

A7 Q. How does the application specify a maximum recording duration and/or memory usage?

The maxmem can be configured through CLI :

For memory usage per system
ivr record memory system <0-256000> memory in KBytes
The default system memory for recording is 10Mbytes. If "0" is configured, then recording will be disabled.

For memory usage per session
ivr record mem session <0-256000> memory in Kbytes
The default maximum session memory for recording is 256Kbytes.

Example:
For g711 - requires 8K per sec
256000000/8000 - 32000 sec - 533 min

For GSMFR - requires 2K per sec
--> 128000 sec - 2133 min

(back to question category)

A8 Q. How do I specify the codec type for the recording?

User can specify the codec type by specifying a parameter in "codec=value" format after the MIME type.
Codec type support include: g711ulaw, g723r53, g723r63, gsmfr.

Example:
        <record name="myRecording" beep="true" maxtime="10s" dtmfterm="true" type="audio/basic;codec=g711ulaw>

(back to question category)

A9 Q. Is the beep attribute supported? If not, how can I play a beep before the recording takes place?

The <beep> attribute is not supported. If user wants a beep proceeding the recording, a pre-recorded beep audio file need to be manually prompted under <record>.

(back to question category)


A10 Q.The problem is the content length in the response from the web server to a request from the VXML doc is not available.
The POST request sent by the gateway uses a Transfer-Encoding: chunked.
What needs to be configured on the web server to enable trunk transfer?


The chunked transfer capability to accept streaming recording needs to be enabled on the web server. There is a flag needs to be turned on for compilation to use chunked transfer.

With Apache/PHP server, the flag needs to be turned on is
./php-4.0.3pl1/sapi/apache/mod_php4.c

    /* Apache 1.2 has a more complex mechanism for reading POST data */
#if MODULE_MAGIC_NUMBER > 19961007
    if ((retval = setup_client_block(r, REQUEST_CHUNKED_DECHUNK)))
         return retval;
#endif

After turn this flag on, the apache/php needs to be recompiled and linked together.

(back to question category)

A11 Q.How are the audio recordings submitted to an HTTP server processed? How do I playback the audio recording.

An server side script is needed to store the audio recording and the location is needed for playback of this recording. Here is an example of a simple php script, saveRecording.php which saves the audio recording.


<vxml version="1.0">
<form id="SaveAudio">
<block>

<!-- example of how to submit the recording in VXML doc -->
<!-- <submit next="http://http_server/saveRecording.php?audio_file=audio_1" method="post" enctype="multipart/form-data" namelist="my_recording"/> -->

<?php

if($audio_file=="") {
echo( "<cisco-puts>Specify audio file name to be saved ! </cisco-puts> ");
}
else {
$path="/http_server/$audio_file" ;
}
if (is_uploaded_file($my_recording)) {
copy($my_recording, $path);
} else {
echo "Upload file: '$my_recording'";
}
?>
</block>
</form>
</vxml>

Here’s an example of the VXML document that records and submits the audio recording to the web server.

<?xml version="1.0"?>
<vxml version="1.0">

<form id="record_to_http">
<record name="myrec"
beep="true"
maxtime="15s"
finalsilence="10s"
dtmfterm="true"
type="audio/basic;codec=g711ulaw">
<prompt><audio src="record.au"/></prompt>
</record>

<block>
<cisco-puts> DURATION: <cisco-putvar namelist="myrec$.duration"/></cisco-puts>
<cisco-puts> SIZE: <cisco-putvar namelist="myrec$.size"/></cisco-puts>
<cisco-puts> CHAR: <cisco-putvar namelist="myrec$.termchar"/></cisco-puts>

<submit next="http://http-server/saveRecording.php?audio_file=audio_1.au" method="post" enctype="multipart/form-data" namelist="myrec"/>

</block>
</form>
</vxml>

(back to question category)


A12 Q.How do I configure the router to do transcoding?

TDM transcoding allows incoming IP calls to record and play in any codec supported by the gateway. This feature is not available yet. The following describes a workaround to achieve transcoding with loopback configuration.

VOIP Call ---- Gateway ----PSTN (T1) physical loop back

The VOIP call comes in to the gateway and the default session application forwards the call to the first POTS dialpeer. With the physical loopback the call comes in through the 2nd pots dialpeer which have a vxml application configured. 2 DSPs are used for the call and we can play/record in any codec.
Here is an example of the configuration with a physical loopback between ports 2 & 3:

dial-peer voice 10002 pots
destination-pattern 1408527....
port 2:D
!
dial-peer voice 10003 pots
application test
incoming called-number 4800
port 3:D

(back to question category)


A13 Q. What mechanism is used to pass information passed between a VXML application and a TCL application?

When a VXML app does a handoff to a TCL app, information can be passed between
the 2 apps in dest attribute of the <transfer> tag. The attribute value pairs (separated by semicolon) are added after the '?' at the end of the phone:// URL. The syntax is similar to how information is send in a submit request to a web server.

Example syntax :
<transfer name="mycall" dest="phone://1234567?prompt=hello.au;name="pete"> The TCL app received "prompt=hello.au;name=pete" in the handoff string. If it was handed off to another VXML app, the attribute value pair is in the available in the session variable, session.handoff_string.
When the handoff to TCL app occurs, the script gets a ev_handoff event indicating that it received a call leg from another application. The information is stored in the evt_handoff_string. The script will parse the evt_handoff_string to retrieve the attribute value pairs.
This capability to pass information between 2 apps by overloading the dest attribute is available in the XB release. In the future release, we have further enhanced the tansfer capability by adding a new set of parameters as attributes. These are Cisco proprietary attribues that provides information useful for call control activities. Examples are cisco-ani, cisco-dnis etc. Note that this will only be available in a future release.

(back to question category)


A14 Q. We were considering using subdialogs to hold the TTS Prompts.Are the events in the subdialog passed up to the calling dialog?What happens when the caller disconnects when he is listening to a TTS prompt from a subdialog? What happens to the subdialog? Does the calling VXML document know that the caller disconnected? Is what I'm describing handled on the gateway or the TTS server?

By default, no event will be passed back from a subdialog to the calling dialog unless there is a event handler in the subdialog that catches that event. It can then return that event to the calling dialog.
The subdialog will receive a telephone.hangup.disconnect event. If the subdialog does not have an event handler for this event, the calling dialog won't know that the caller has disconnected, and both the calling and subdialog will terminate. If the subdialog has an event handler and the event handler explicitly returns the disconnect event back to the calling dialog, the calling dialog will know that the caller has disconnected.

All this is handled on the gateway. In other words, the same holds ture even if the subdialog is just playing a pre-recorded audio prompt on the gateway.

(back to question category)


A15 Q. What type of grammars are supported?

Cisco VoiceXML implementation supports 2 types of grammar, W3C XML grammar and Cisco proprietary DTMF regex grammar.
By default, all automatically generated grammars (including builtin) are in XML format. If explicit Cisco DTMF (Regex) grammar is used in the document,then the generated grammars from teh same document will be in Regex format

(back to question category)


A16 Q. What mechanism should be used to transfer information from a VoiceXML application to a Tcl application?

There are a few ways an VoiceXML application can pass information to a Tcl application.
When a VoiceXML app does a handoff to a TCL app, information can be passed between the 2 apps in dest attribute of the <transfer> tag. The attribute value pairs (separated by semicolon) are added after the '?' at the end of the phone:// URL. The syntax is similar to how information is send in a submit request to a web server.

Example syntax :
<transfer name="mycall" dest="phone://1234567?prompt=hello.au;name="pete">
The Tcl app received "prompt=hello.au;name=pete" in the handoff string. If it was handed off to another VXML app, the attribute value pair is in the available in the session variable, session.handoff_string.
When the handoff to Tcl app occurs, the script gets a ev_handoff event indicating that it received a call leg from another application. The information is stored in the evt_handoff_string. The script will parse the evt_handoff_string to retrieve the attribute value pairs.
This capability to pass information between 2 apps by overloading the dest attribute is available in the XB release. In the future release, we have further enhanced the tansfer capability by adding a new set of parameters as attributes. These are Cisco proprietary attribues that provides information useful for call control activities. Examples are cisco-ani, cisco-dnis etc.
Note that this will only be available in the 12.2(11)T release.

A VoiceXML dialog that is embedded in a Tcl application can also pass information to the Tcl application. When the dialog has finished its execution, the parameters are passed to the Tcl application through the </exit> tag with a namelist attribute. When the Tcl application receives the "vxml.session.complete" event, it can retrieve the parameters that may come with that event.

(back to question category)


A17 Q. How do you upgrade the firmware?

Please follow the instructions to use the new firmware.

1) Copy the firmware to the flash:
copy tftp://dirt/server/np_128_0_0_124.spe flash:

2) make your interface point to the new firmware

spe 1/00 1/17
firmware location flash:np_128_0_0_124.spe
spe 3/00 3/17
firmware location flash:np_128_0_0_124.spe

make sure all the ISDN interface use the new firmware. you could verify with the following command

5400-3#sh spe vers
IOS-Bundled Default Firmware-Filename Version Firmware-Type
===================================== ============ =============
system:/ucode/spe_firmware-1 0.7.10.1 SPE firmware

On-Flash Firmware-Filename Version Firmware-Type
===================================== ============ =============
flash:np_128_0_0_124.spe 0.7.10.11 SPE firmware

SPE-# Type Port-Range Version UPG Firmware-Filename
1/00 CSMV6 0000-0005 0.7.10.11 N/A flash:np_128_0_0_124.spe
1/01 CSMV6 0006-0011 0.7.10.11 N/A flash:np_128_0_0_124.spe
1/02 CSMV6 0012-0017 0.7.10.11 N/A flash:np_128_0_0_124.spe
1/03 CSMV6 0018-0023 0.7.10.11 N/A flash:np_128_0_0_124.spe
1/04 CSMV6 0024-0029 0.7.10.11 N/A flash:np_128_0_0_124.spe
1/05 CSMV6 0030-0035 0.7.10.11 N/A flash:np_128_0_0_124.spe
...
..

(back to question category)



VXML: (back to top of page)


B1 Q. What is the use of the <dtmf> tag and what parameters are allowed? What is type "regex"?

The <dtmf> tag is used to specifiy the types of dtmf tones entered by the user via the phone. The dtmf grammar supported is of type "regex",regular expresssions. The attribute type=regex must be specified. The following rules for regular expression are:
-Optional and is matched at most once.
-Matched zero or more times.
-Matched one or more times.

Example :
For a 7 digit phone input, the grammar is:
<DTMF TYPE="regex">......<./DTMF>

For one or more digits terminated by '#', the dtmf grammar is:
<PROPERTY NAME="termchar" VALUE="#"/>
< DTMF TYPE="regex"> .+ < /DTMF>

(back to top of category)

B2 Q: What are the regular expressions that are supported of type "regex"?

This is the current set of regular expression supported : "^$.[()|?+*\_"

B3 Q. What is the timeout for getting dtmf input how can I set the parameter?

To set the timeout value for getting dtmf inputs, you need to set the interdigittimeout value under the <PROPERTY> tag.
For example:

<FORM ID="digit_collect" SCOPE="document">
<PROPERTY NAME="interdigittimeout" VALUE="3s"/>
    <BLOCK>
      <PROMPT BARGEIN="false" >
        <AUDIO flash"Enter_number.au"/>
      </PROMPT>
    </BLOCK>
<FIELD NAME="digits" TYPE="number">
  <DTMF TYPE="regex">.....<./DTMF>
</FIELD>

(back to top of category)

B4 Q. Is the enctype attribute of submit supported?

Only the default enctype attribute, "application/x-www-form-urlencoded" is supported. An error will be generated for any other enctype attributes.

(back to top of category)

B5 Q. What can I expect when I use an element that is not supported?

Please refer to the Townsend Feature Documentation for the list of all unsupported elements. If an unsupported element is used in a VXML document, an error event will be thrown:
     event=error.unsupported.<element>
Here is an example of the debug trace when "debug vxml" is turned on. In this example, the unsupported element, <subdialog> is used. ....
21:52:22:   <form>: id=test scope=document
21:52:22: http://1.7.100.1/test.vxml at line 26: element <subdialog> is not supported
21:52:22: <event>: event=error.unsupported.subdialog status=0
21:52:22: <catch>: name=error count=1
21:52:22: <prompt>:(default_prompt) bargein=1 count=1 timeout=5 ....

(back to top of category)

B6 Q: What are the other error events besides error.bad_fetch and error.unsupported.<element>?

error.unsupported.format

For example dtmf must be of type="regex" but if you define type="number" instead:
<dtmf type="number">8</dtmf>, you will see this error in the debug trace below.....

22:15:27: <form>: id=userAuthentication   scope=document
22:15:27: <field>: type=undefined name=accountNumber modal=all prompt_counter=1
22:15:27: <prompt>: bargein=1 count=1 timeout=10
22:15:27: <audio>: URI(abs):audio/enterAccount.au scheme=http host=1.7.100.1 path=/audio/enterAccount.au caching=safe fetchhing=invalid etchtimeout=20
22:15:27: vxml_vapp_media_play: bargein=1 timeout=10 audio=http://1.7.100.1/audio/enterAccount.au cachable=0 timeout20
22:15:27: http://1.7.100.1/userAuthenticate.vxml at line 28: <dtmf type> number is not supported
22:15:27: <event>: event=error.unsupported.format status=0
22:15:27: <catch>: name=error count=1

(back to top of category)

B7 Q: The links I have defined are not triggered. How are they triggered?

Link elements will not be triggered if the VXML application is not soliciting input from the user.In addition, the dtmf input must be of type "regex" and a pattern must be defined.Here is an example of how a link defined in a VXML root document is triggered.

Root.vxml :
....
    <link next="operator.vxml">
        <dtmf type="regex">00</dtmf>
    </link>
....

Main.vxml :
....
        <field name="memberID" type="number">
            <dtmf type="regex"> ...... </dtmf>
            <prompt bargein="false"><audio src="enterMemberId.au"/></prompt>
            <filled>
                <cisco-puts> MEMBER ID is <cisco-putvar namelist="memberID"/></cisco-puts>
            </filled>
....

(back to top of category)

B8 Q: I cannot get <transfer> to work? What should I do?

First make sure that you are able to make an outgoing call to the number that you are transferring to. The dial peer on the gateway which is terminating the call needs to be configured for the number used in <transfer> tag.Verify that the syntax for transfer is used correctly.

Here is an example of how tranfer is used:
....
    <transfer name="mycall" destexpr="phone://123456" bridge="true" connecttimeout="15s" maxtime="180s"
      cisco-longpound ="true">
                <filled>
                    <assign name="mydur" expr="mycall$.duration"/>
                        <if cond = "mycall == 'busy'">
                            <audio src="audio/busy.au"/>
                        <elseif cond = "mycall == 'noanswer'"/>
                            <audio src="audio/noanswer.au"/>
                            <goto next="menu.vxml"/>
                        <elseif cond = "mycall == 'near_end_disconnect'"/>
                            <audio src="audio/near_end_disconnect.au"/>
                        <elseif cond = "mycall == 'far_end_disconnect'"/>
                            <audio src="audio/far_end_disconnect.au"/>
                        </if>
                        <cisco-puts>The value in mycall is <cisco-putvar namelist="mycall"/></cisco-puts>
                        <cisco-puts>Duration of call is <cisco-putvar namelist="mydur"/></cisco-puts>
                </filled>
            </transfer>
....

(back to top of category)

B9 Q: What is the maximum limit on the number of the <choice> tags I can define in a VXML menu document?

You can define up to 9 <choices dtmf=...> tags in a menu document.

If you want to have more choices, you need to use a form document instead of a menu document.

Example :
....
    <field name="cardType">
        <prompt bargein="false"><audio src="audio/cardSelection.au"/></prompt>
            <option dtmf="1" value="SAVINGS">Savings</option>
            <option dtmf="2" value="CHECKING">Checking</option>
            <option dtmf="4" value="VISA">Invalid</option>
....

(back to top of category)

B10 Q: How can I use "*" in a <choice> tag?

A "*" is treated as a wild card when used in dtmf grammar of type regex. A literal "*" is the star-key.
It is used the same way all other digits are used in the <choice> tag.
    <choice dtmf="*" next="http://xxx.vxml"/>

(back to top of category)

B11 Q: How can I use the "#" character in a <choice> tag?

The "#" character is the default termination character for digit collection. In order to use the "#" character in a <choice> tag, you need to overwrite the default termination character. Otherwise, the VXML interpreter will throw a no input event when the user enters "#" for a choice.

For example to define 0 as the termination character,
    <property name="termchar" value="0"/>

(back to top of category)

B12 Q: What is the complete list of session variables supported ?

session.telephone.ani
session.telephone.dnis
session.telephone.iidigits
session.telephone.rdnis
session.telephone.redirect_reason
session.telephone.nas_port_id
session.handoff_string

(back to top of category)


B13 Q: What codecs are supported for recording and prompt/recording playback?

Currently, we support voice recording using G711ulaw, G723.1 (r5.3/6.3) and GSMFR codecs.
For prompt/recording playback, we support G726 and G729 as well as the three codes mentioned above.

(back to top of category)

B14 Q: What is the enctypr supported when submitting a recording to a http server?

Only enctype="audio/basic" is supported.

(back to top of category)

B15 Q: What is the MIME type that is supported?

Only MIME type of "audio/basic" is supported.

(back to top of category)

B16 Q: How do I playback the recorded audio?

Example:

     <prompt>
        <value expr="myRecording"/>
     </prompt>

(back to top of category)

B17 Q: What are the default values for the attributes if they are not specified?

If the <record> attributes are not specified or the properties are not defined, the default values are used:

maxtime=30s
type=audio/basic
codec=g711ulaw
dtmfterm=true

(back to top of category)

B18 Q: What is the overall system memory limitation ?

The CLI for overall system memory limitation in Kbytes is as follows:
     Ivr record memory system <0-256000>
The default system memory for recording is 10Mbytes. If "0" is configured, then recording will be disabled.

(back to top of category)

B19 Q: What is the session memory limitation?

The CLI for per session memory limitation in Kbytes is as follows:
     Ivr record memory system <0-256000>
The default maximum session memory for recording is 256Kbytes.

(back to top of category)

B20 Q: How do I specify 0 or more digits with the # being the termination character?

<dtmf type="regex"> .+ .? </dtmf>
An example of an VXML doc that illustrates this :
<vxml version="1.0">
  <form>
     <field name="f1">
       <dtmf type="regex"> .+ .? </dtmf>
        <filled>
         <if cond="f1 == ''">
           <cisco-puts> f1 is empty </cisco-puts>
         <else/>
           <cisco-puts> f1=<cisco-putvar namelist="f1"/></cisco-puts>
         </if>
        </filled>
     </field>
  </form>
</vxml>

(back to top of category)

B21 Q: How do I specify OR? Using '|' doesn't seem to work.

To specify OR, use a space instead of '|'.
For example :
<dtmf type="regex">\* .+</dtmf> instead of <dtmf type="regex">\*|.+</dtmf>

(back to top of category)

B22 Q: How do I ensure that all the dynamic VXML documents get loaded from the server ?

To ensure that the gateway loads the VXML document from the server all the time, define the caching property to safe in the root document.
<property name="caching" value="safe"/>
Note that this does not apply to the first VXML document. The first VXML document is configured as a call application, test. For example
call application voice test http://server/test.vxml.
If this document is modified, the way to ensure that the most current version is invoked is to issue the load command from the router :
Router#call application voice load test

(back to top of category)

B23 Q: What are the http headers that are supported?

Here are examples of the request headers sent to the http server and response headers received from the server.

Supported Request Headers:
===============================================================
Accept: text/vxml; level = 1, text/plain, text/html, audio/basic
Connection: closed/Keep-Alive
Content-Length:
Content-Type:
Host:
If-Modified-Since:
If-NoneMatch:
Transfer-Encoding:
User-Agent:
User-Agent: Cisco-IOS-family/Version Sub-Product-Name
User-Agent: Cisco-IOS-C5300/12.2(20011107:234726) VoiceXML/1.0


Supported Response Headers:
===============================================================
Age:
Cache-Control:
Connection:
Content-Length:
Content-Type:
Date:
ETag:
Expires:
Keep-Alive: timeout=5, max=10
Last-Modified:
Location:
Pragma:
Transfer-Encoding:

Example of GET request message sent to server test.cisco.com
for request URL: http://test.cisco.com/vxml/test/init.vxml
===============================================================
GET /vxml/test/init.vxml HTTP/1.1
Host: test.cisco.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
Accept: text/vxml; level = 1, text/plain, text/html, audio/basic
User-Agent: Cisco-IOS-C5300/12.2(20011107:234726) VoiceXML/1.0

(back to top of category)

B24 Q: Which codec is used when recording on a IP call leg?

The codec configured in the VoIP dial-peer needs to match the codec in the <record> attribute in the VXML document. If they do not match, the codec negotiated by the OGW and TGW has precedence.

(back to top of category)

B25 Q: What is the granularity for the final silence attribute in the <record> tag?

The granularity for final silence is 1 sec, anything smaller than 1 sec is rounded off.

(back to top of category)

B26 Q: What happens to the audio that has been recorded if the user hangs up the phone during the recording?

When a user hangs up during the recording, the recording terminates and a telephone.disconnect.hang-up event will be thrown. The applications can catch the disconnect event and play a prompt or submit the recording to an external server. If it was recording to RAM , the recorded audio file is accessible through the record variable. If it was stream recording to an external HTTP/RTSP or SMTP server, whatever was recorded before the disconnect event will be stored in the external server.

(back to top of category)

B27 Q: What are the different enconding types supported for <submit> ?

When doing a <submit> using the POST method, the following enctype are supported, application/x-www-form-urlencoded, audio/basic and multipart/form-data. For multipart/form-data, chunked encoding is used.

(back to top of category)


DEBUGGING/TROUBLESHOOTING TIPS (back to top of page)


C1 Q. How do I debug VXML related errors?

For VXML related errors, turn on debug vxml all or turn on a specific VXML debug

debug vxml errors  - for VXML errors
debug vxml events  - for VXML asynchronous events thrown and received
debug vxml trace   - for a trace of all VXML activities
debug vxml puts    - for <cisco-puts> and <cisco-putvar> debugging statments

For errors in fetching documents or audio files from the Web server, turn on debug http client (for general client errors) debug http client msg

For errors in the call control application programming interface (API), turn on debug voice ccapi error

To trace the execution path through the call control application programming interface (API),turn on debug voice ccapi inout

For errors in playing audio prompts, turn on debug voip ivr all

(back to top of category)

C2 Q. How can debug statements in a VXML document be printed to the console?

The <cisco-puts> tag was implemented to allow debugging statements to be printed to the console when VXML debugs are turned on. They can be used where ever executable content is allowed. In addition to that, the <cisco-putvar> tag was implemented to print out variables used in the VXML document. Please refer to the Townsend Feature Module for the DTD. NOTE that these tags are not officially supported.

Sample Usage of the <cisco-puts> and <cisco-putvar> tags in a VXML script:

<?xml version="1.0"?>
<vxml version="1.0"><var name="x" expr="20"/>
    <form id="testing">
        <block>
            <cisco-puts>The value of x is <cisco-putvar namelist="x"/></cisco-puts>
        </block>
    </form>
<vxml>

Possible errors if the VXML application is not configured correctly on the dial peers.

(back to top of category)

C3 Q: After I dial in to the router, I hear a dial tone instead of the first prompt in my VXML document. What is happening?

First check to see if the VXML application is configured correctly on the dial peer for a given destination pattern.

Example:
Router#show dial-peer voice 1

VoiceEncapPeer1
        information type = voice,
        description = `',
        tag = 1, destination-pattern = `5452947',
        answer-address = `', preference=0,
        numbering Type = `unknown'
        group = 1, Admin state is up, Operation state is up,
        incoming called-number = `', connections/maximum = 0/unlimited,
        DTMF Relay = disabled,
        huntstop = disabled,
        in bound application associated: 'vxml_app'
        out bound application associated: ''
....

You can also turn on "debug voip ccapi in", if you see the following debug trace, it means that the the VXML application was not configured on the dial peer.
...
*Jan  1 02:54:14.591: cc_process_call_setup_ind (event=0x622EA710)
*Jan  1 02:54:14.591: >>>>CCAPI handed cid 71 with tag 1111 to app
...

The call was transferred to the "DEFAULT" application which played a dial tone to the user.

(back to top of category)

C4 Q: You get the following trace, what does it mean?

*Jan  1 02:58:14.987: cc_process_call_setup_ind (event=0x622EB1C0)
*Jan  1 02:58:14.987: %CALL_CONTROL-6-APP_NOT_FOUND: Application
getdigit in dial-peer 1111 not found.
Handing callid 73 to default app.
*Jan  1 02:58:14.987: >>>>CCAPI handed cid 73 with tag 1111 to app
"DEFAULT"

This means that the application can not be found by the router (either it has not been configured or there is a problem accessing the corresponding server).

Check the following:

1)Configuration of the VXML application.
      For example:
      call application voice test tftp://myServer/test.vxml

2) The server where your VXML document resides is up and can be reached by the gateway.

(back to top of category)

C5 Q: A handoff to an outbound application or a transfer to a destination number does not work?

Turn on "debug voip ivr"

If you see a debug trace similar to the following :

*Jan  4 20:51:57.084: InitiateCallSetup: Incoming[77] AlertTime 0
Destinations(1) [ 5274800  ]
*Jan  4 20:51:57.084: DNInitiate: Destination[5274800]
*Jan  4 20:51:57.084: DNInitiate: 5274800 Did not match any peers

This means that there there isn't an outgoing voip dial peer to handle the call. Make sure you have configured a voip dial peer to handle the outgoing call. It should include destination-pattern and/or out-bound application.

(back to top of category)

C6 Q: I do have a voip dial peer with an outbound VXML application configured, but the handoff still does not seem to work.

The incoming dial peer probably does not have the correct application configured. Make sure that the application configured on the incoming dial peer is either a VXML document or a TCL IVR 2.0 script.

To verify the version of the TCL IVR script:
Issue this command :
Router#show call application voice SAMPLE_APP
Application SAMPLE_APP
      Interpreted by insfrasture version 2.0

(back to top of category)

C7 Q: The outbound application in the dnis-map does not seem to be handling the call. Only a dial tone is heard.

Check that the dnis-map is configured correctly:
1) As an internal list :
      voice dnis 123456 url tftp://myServer/outbound.vxml
2) As an external file :
      voice dnis-map externalmap tftp://myServer/extmap

(back to top of category)

C8 Q: I see a "media record fail" error when I tried to record using the GSMFR codec.

Check that the VCWARE compatibility matrix at the following URL : http://www.cisco.com/univercd/cc/td/doc/product/access/acs_serv/5300/sw_conf/vcwrmtrx.htm#67559

Instructions on how to upgrade VCWARE on the router :

erase vfc <slot #>
copy tftp://your_server/vcw-vfc-mz.c549.hc.9.15.bin vfc:vcw-vfc-mz.c549.hc.9.15.bin
clear vfc <slot #>
unbundle vfc <slot #>

(back to top of category)

C9 Q: No audio is heard while doing VOIP audio playback from an RTSP server and VOIP recording to an RTSP server.

Check the router configuration to see if a "no ip redirects" command for Ethernet interface used to communicate to the RTSP server is present.
This is required for doing RTSP playback and recording where both the input media and RTSP server are connected through same Ethernet interface.

(back to top of category)

C10 Q: I am not able to send the voice recording to the ESMTP server. What debugs should be enabled?

Enable the following debugs :

debug mta send all
debug foip onramp
    1.Verify the following in your router configuration
      fax interface-type fax-mail
      mta send server your-email-server-address[name]
      Note : If the mta send server is in server name format, make sure the ip host is configured.
    2.Ping the ESMPT server to verify the connection.
    3.Check whether the mail server is running properly by simply telnet to the email server port 25, you should see something like following :
    4.router-jahuang#telnet 1.7.127.3 25
      Trying 1.7.127.3, 25 ... Open
      220 suslab1 Cisco NetWorks ESMTP server
      ehlo
      250-suslab1, hello <empty HELO/EHLO> [1.7.87.4] (really)
      250-ENHANCEDSTATUSCODES
      250-8BITMIME
      250-PIPELINING
      250-HELP
      250-DSN
      250 XACCOUNTING
    5.Check the mta debugs and make sure that the email address matches the email address specified in the VXML document.

(back to top of category)

C11 Q: Off ramp mail trigger is not working; the phone does not ring when the email is sent to the GW.

Enable the following debugs :

debug mta receive all
debug foip offramp
debug mspi receive
     1.Check whether you have following configures on your router.
     mta receive aliases hostname
     mta receive maximum-recipients 120
     2.Check the incoming-called-number configured in the MMOIP and destination pattern in the POTS dial-peer matches the number specified in the mailto address field.Make sure that the mmoip dialpeer doesn't have information-type fax configured, the email trigger uses information-type voice.
     Note : When you do a show running configuration, information-type voice is not displayed in the dial-peer configuration
     3.If the router is accessible from the email server, but the call never progresses beyond the mmoip dialpeer match, enable the following to check the call progress.
     debug voip ccapi inout
     debug voip ccapi error
     debug voip ivr all

(back to top of category)

C12 Q: Playback of recording from RTSP fails. What is wrong?

There are a few possibilities for why the file cannot be played from the RTSP server
1.1.RTSP server is not running on the server
[1]+ Floating point exception./mediaServer -v LOG_DEBUG -f mediaServer.cfg
2.The recorded file has invalid file length. Cisco gateways always generate 0-length files. The file length needs to be corrected since the RTSP server checks the length of the audio files. Please refer to Section 2.4 Data Length Correction Ultility for .au and .wav files in the Ducati Beta Documentation.
3.When playing multiple files, if one fails in the middle, the subsequent files won't play correctly.

(back to top of category)

C13 Q: How can I verify that a voice recording is successful?

There are a few possibilities for why the file cannot be played from the RTSP server
1.1.RTSP server is not running on the server
[1]+ Floating point exception./mediaServer -v LOG_DEBUG -f mediaServer.cfg
2.The recorded file has invalid file length. Cisco gateways always generate 0-length files. The file length needs to be corrected since the RTSP server checks the length of the audio files. Please refer to Section 2.4 Data Length Correction Ultility for .au and .wav files in the Ducati Beta Documentation.
3.When playing multiple files, if one fails in the middle, the subsequent files won't play correctly. Q : How can I verify that a voice recording is successful? A : You can verify the recording was successful in the following ways :
1.Play back the recorded audio
2.Check the shadow variable for the duration and size of the recorded audio file
Example of using the <cisco-puts> tag to print out the duration and size.
Debug vxml script must be enabled on the router.
<form id="record_to_http">
<record name="myrec" beep="true" maxtime="15s" finalsilence="10s" dtmfterm="true" type="audio/basic;codec=g711ulaw">
<prompt><audio src="record.au"/></prompt>
</record>

<block>
<cisco-puts>DURATION:<cisco-putvar namelist="myrec$.duration"/></cisco-puts>
<cisco-puts>SIZE:<cisco-putvar namelist="myrec$.size"/></cisco-puts>
.... 3.Enable debug voip ivr and check the record start and stop times.
*Mar 1 14:53:26.610: $ mr_record_start: stream 0x63811808 recording is now startedmc=0x63819DC8
*Mar 1 14:53:36.610: ms_stop_record: mc=0x63819DC8, cid=0x38, cause=MS_STOP_MAX_TIME, RECORDING, RAM
*Mar 1 14:53:36.610: mr_vsp_flush_stream: mc=0x63819DC8, cid=0x38
*Mar 1 14:53:36.610: ms_stop_record_done: cid=0x38 stopped at 14:53:33.376, dur=10000 (ms), DISASSOCIATING
*Mar 1 14:53:36.610: msu_recrd_ms_record_complete: callID=0x38(56), context=0x62E13E9C, cause=MS_STOP_MAX_TIME, stream_id=1
*Mar 1 14:53:36.610: msu_recrd_ms_record_complete: Recorded MC:0x63819DC8 URL ram:myrecord_6_0_56
*Mar 1 14:53:36.610: msu_call_app: app_cbf=0x610B09E0

(back to top of category)

C14 Q: The first word in the initial prompt playout is not heard. What is wrong?

When the gateway issues a CONNECT message before playing a prompt, there is no guarantee the voice path has been cut through to the caller. The workaround is to record some silence in the first prompt to act as a buffer before playing the prompt.

(back to top of category)

C15 Q: Is there a way to embed a ? in a URL in the "call" directive in an AS5300?

There is no way to enter a '?' as part of the URL, as the Cisco IOS CLI parser always treats a '?' as a help query.

(back to top of category)

C16 Q: How are multiple languages supported with TTS and ASR?

To do TTS in multiple language, the language modules for the different locale needs to be added to the directory where the Nuance Vocalizer is installed.
In the VoiceXML document, the xml:lang attribute in the <prompt> tag needs to specify the language of speech utterance. The language format is for non-English words are UTF-8 encoded. The only language elements that needs to be defined are the xml:lang attribute in the <vxml> and <prompt> tag.

Example :

<field name="name">
<prompt xml:lang="en-US"> Good Morning, Do you speak English? </prompt>
<prompt xml:lang="fr"> Bonjour, S'il vous pla\356t choisissez anglais ou fran\347ais</prompt>
etc..

To do ASR in multiple language, the language module needs to be recompiled with the MRCP engine and only 1 active language can be present at one time. To recognize more than 1 language in one application, special language modules need to be built. Please contact the Nuance Professional Service team for more information.

(back to top of category)

C17 Q: Is it possible to configure the size of the RTP packets the 5300 is sending to the media server?

There is no CLI available to configure the size of the RTP packets.
However, the workaround would be to use the codec configuration in the VoIP dialpeer to specific the size. For this to work, the VoiceXML document needs to be invoked from a VoIP dialpeer.

Example :
dial-peer voice 1001 voip
application sample-vxml
incoming called-number .......
session protocol sipv2
session target ipv4:172.19.139.205
dtmf-relay rtp-nte
codec g711ulaw bytes 160
no vad

The 3 values supported are 80 bytes, 60 bytes and 240 bytes.
codec g711ulaw bytes 80
codec g711ulaw bytes 160
codec g711ulaw bytes 240

(back to top of category)

C18 Q: On an incoming call on the IP side, Text-To-Speech prompts are not played by the IOS gateway and spoken inputs are not being recognized. What is wrong?

Check for the following :

(back to top of category)

C19 Q: The TTS prompts are not heard when a user dials in to the IOS gateway and I see vapp errors media failed error, what does the error indicate?

There could be different reasons for failure to play the TTS prompts. Check that the media server is configured either in the CLI or it is specified in the VoiceXML document itself. If it was configured, check the connection between the gateway and the media server.

Enable the following debugs :
Debug vxml error
If the media server was not configured, the VoiceXML interpreter will throw a error.badfetch event.
Example :
Jan 5 18:24:19.507: //62/36CA25A68036/VXML:/vxml_vapp_tts: tftp://server/sample.vxml at line 17: vapp_tts() fail with vapp error 1
**Jan 5 18:24:19.507: //62/36CA25A68036/VXML:/vxml_event_proc:
*Jan 5 18:24:19.507: <event>: event=error.badfetch status=0
*Jan 5 18:24:19.507: //62/36CA25A68036/VXML:/vxml_default_event_handler: use default event handler
*Jan 5 18:24:19.507: //62/36CA25A68036/VAPP:/vapp_session_exit_event_name: Exit Event error.badfetch
*Jan 5 18:24:19.507: //62/36CA25A68036/VAPP:/vapp_session_exit_event_name: Exit Event error.badfetch

If the media server was configured but for some reason, the connection between the server and gateway is down, the VoiceXML interpreter will throw a error.com.cisco.media.resource.unavailable event.
Example :

Jan 5 18:36:44.451: //83/ECD9B163804B/VXML:/vxml_media_done: : media play failed to setup with VAPP error=31, protocol_status_code=0
**Jan 5 18:36:44.451: <event>: event=error.com.cisco.media.resource.unavailable status=0
*Jan 5 18:36:44.451: //83/ECD9B163804B/VXML:/vxml_default_event_handler: use default event handler
*Jan 5 18:36:44.451: //83/ECD9B163804B/VAPP:/vapp_session_exit_event_name: Exit Event error.com.cisco.media.resource.unavailable

(back to top of category)


WHAT IS THE PROBLEM?: (back to top of page)


D1 Q. I am not seeing debug outputs on the console. I see the debugs on the hyper terminal.

Configure "terminal monitor" on the console.
Configure "no logging console" on the hyper terminal.

(back to top of category)

D2 Q. My console terminal keeps logging me out.

Configure "logging buffered N" on the console. //N is the logging buffer size :4096-2147483647

(back to top of category)

D3 Q. I have modified the VXML script but orignal VXML script is still being executed.

To reload the VXML application, type "call application voice load <APPLICATION> " on the console.

(back to top of category)

D4 Q. I am not hearing the audio prompts, why are the audio prompts not getting played?

Check to see if the VCWare version on the router is Version 7.16 or later. On the console, type "show vfc N version vcware" // N is the Slot Number in the VFC card. Make sure that the correct codec, "g711ulaw" is configured in the dial-peer where the VXML application is defined. The dial-peer on the Terminating Gateway also needs to have the same codec configured.

(back to top of category)

D5 Q: I get a event=error.bad_fetch even though all my audio files/server side scripts are present in the path locations specified. What is wrong?

First check that the connection between the router and http server is up. If all the files are in the locations specified in the VXML document,it could be an an internal HTTP client error. Turn on "debug http client errors" to capture the debug traces.

D6 Q: The user's dtmf inputs are not collected when the VXML application is configured on the IP call leg.

Make sure that "dtmf-relay h245-alphanumeric" is configured for both the Originating Gateway and Terminating Gateway.

(back to top of category)

D7 Q: Why are digits entered lost when playing prompts in different codecs in the VXML document?

The DSP gets reset when playing prompts in different codecs and digits may get lost. Prompt playout may be delayed as well. Playing mulitple prompts in the different codecs should be avoided.

(back to top of category)

D8 Q: In some of my recordings, I entered dtmf tones but when I playback the recording, I don't hear those tones.

If the recording is done on the IP call leg and the following dtmf relays are configure, the dtmf tones are not included in the recorded message.
cisco-rtp
RFC-2
H245-ALPHANUMERIC

(back to top of category)

D9 Q: I am running a VXML document if size 65668 bytes and I see an error. Is this a limitation or an error in configuration?

1d01h: cid(795)
http://10.77.4.94:8080/vhp_sim/vxml_service.php?type=85&sid=75&sat=26&diglen=0&digstr=0&apid=898&ext=0 at line 183: document size (65668) will be over memory allowance 65536
1d01h: vxml_vapp_terminate: vapp_status=0 ref_count 0
1d01h: cid(795) vxml session terminating with code=ERROR
vapp status=VAPP_SUCCESS vxml async status=VXML_ERROR_INVALID
1d01h: vapp_terminate:

The default size limitation on a single VXML document is 64K. The size limitation is implemented to prevent a single channel call from using too much memory. The recommendation is to implement the VXML application with a set of smaller VXML documents instead of a single document.

(back to top of category)

Toolbar

All contents copyright © 1992--2002 Cisco Systems Inc. Important Notices and Privacy Statement.