VoiceXML Variable Scoping

August 13th, 2008 by voxeojeremyr

VoiceXML certified developer logo
Here in Support we get a fair amount of tickets asking about variables.  Namely, if a variable is created in a form can it be accessed in the field of that form or in a different form? What I am talking about is called variable scoping.  In VXML there are several different variable scopes.  You might have heard of global and local variables with other programming languages.  VXML, while not a programming language, is similar in how it approaches variables and how they can be accessed.

First lets get a proper definition for variable scope.  The scope of a variable defines when and where the variable exists and may be accessed. When the VXML browser exits the scope where the variable is defined, the variable is out-of-scope and cannot be accessed. When a variable is in scope, it can be accessed by both VoiceXML and ECMAScript.

Here is a table of the different scope levels of variables in VXML:












































Scopes Declared In Initialized In Where accessible Becomes Unavailable
Session By the VXML browser At the beginning of a session Anytime during the session At the end of the session
Application In the root document When VXML browser loads the root document Throughout the application When the VXML browser leaves the root document
document In the <vxml> document When the VXML browser loads the document Within the <vxml> element When VXML browser leaves the document
dialog In the <field> element of a <form> or <menu> element When the VXML browser loads the element Within the element When the VXML browser leaves the element
anonymous In a <block>, <filled> or <catch> element When the VXML browser begins to interpret the element Within the element When the VXML browser leaves the element

Here is an example of document scoped variable.  As you can see it is accessible throughout the current VXML document.

<?xml version=”1.0″?>
<vxml version=”2.0″>

<var name = “counter” expr = “0″/>

<form id=”F_1″>
<!– additional VXML code –>
<filled>
<assign name=”counter” expr = “counter + 1″/>
</filled>
</form>

<form id=”F_2″>
<!– additional VXML code –>
<filled>
<assign name=”counter” expr = “counter + 2″/>
</filled>
</form>

</vxml>

Here is an example of a dialog scoped document.  In form “F_1″ the value of “counter” after the assign <element> would be 1.  In form “F_2″ the value after the <assign> value would be 2.

<?xml version=”1.0″?>
<vxml version=”2.0″>

<form id=”F_1″>
<!– additional VXML code –>
<filled>
<var name = “counter” expr = “0″/>
<assign name=”counter” expr = “counter + 1″/>
</filled>
</form>

<form id=”F_2″>
<!– additional VXML code –>
<filled>
<var name = “counter” expr = “0″/>
<assign name=”counter” expr = “counter + 2″/>
</filled>
</form>

</vxml>

It is also good to know that variable references will match the closest applicable scope. You can prefix a reference with a scope name, such as application.counter, for clarity or to resolve ambiguity.

We hope this clears up a little confusion about VXML variables and where they are defined and when they can accessed.

Jeremy Richmond
VXML Certified Developer

Tags: ,

2 Responses to “VoiceXML Variable Scoping”

  1. Behind The Blog » Blog Archive » Getting rid of extra BR lines in WordPress MU Says:

    [...] we had a wee bit of fun with HTML tables… Jeremy, a member of our support team, published a post on our Voxeo Developer’s Corner blog that had an HTML <table> in it. Now it turned out that this was the first time in the 10 [...]

  2. User links about "scopes" on iLinkShare Says:

    [...] | user-saved public links | iLinkShare 2 votesVoiceXML Variable Scoping>> saved by jakedeherrera 2 days ago1 votesRegulatory T cells - between benefical and damaging [...]

Leave a Reply

Please note: By submitting a comment you agree to comply with our Comment Policy. We welcome all comments, positive or negative, but do reserve the right to remove all or part of blog comments that do not comply with our policy.