ZVON > References > VoiceXML Reference
Element:form
Attributes: | id | scope |
Parents: | vxml |
Children: | block | catch | dtmf | error | field | filled | grammar | help | initial | link | noinput | nomatch | object | property | record | subdialog | transfer | var |
Description:

Go to Standard

Examples:


<vxml version="1.0">
     <form>
          <block>Hello World!</block>
     </form>
</vxml>


<form scope="document">
     <grammar> … </grammar>
     <grammar scope="dialog"> … </grammar>
</form>


<vxml version="1.0">
     <property name="caching" value="fast"/> …
     <form id="test">
          <block>
               <audio src="http://www.weather4U.example/vxml/welcome.wav"/>
               <audio caching="safe" src="http://www.onlineads.example/weather4U/ad17"/>
          </block> …
     </form> …
</vxml>


<vxml version="1.0">
     <form>
          <field name="birthday" type="date"> What is your birthday? </field>
          <subdialog name="result" src="/cgi-bin/getlib#getdriverslicense" namelist="birthday">
               <filled>
                    <submit next="http://myservice.example/cgi-bin/process"/>
               </filled>
          </subdialog>
     </form>
</vxml>


<form id="gather_pager_message">
     <object name="message" classid="builtin://keypad_text_input">
          <prompt> Enter your message by pressing your keypad once per letter. For a space, enter star. To end the message, press the pound sign. </prompt>
     </object>
     <block>
          <assign name="document.pager_message" expr="message.text"/>
          <goto next="#confirm_pager_message"/>
     </block>
</form>


<form>
     <subdialog name="result" src="http://another.example/#getssn">
          <param name="firstname" expr="document.first"/>
          <param name="lastname" expr="document.last"/>
          <filled>
               <submit namelist="result.ssn" next="http://myservice.example/cgi-bin/process"/>
          </filled>
     </subdialog>
</form>


<form>
     <subdialog name="result" src="#getssn">
          <nomatch>
               <goto next="http://myservice.example/ssn-problems.vxml"/>
          </nomatch>
          <filled>
               <submit namelist="result.ssn" next="http://myservice.example/cgi-bin/process"/>
          </filled>
     </subdialog>
</form>


<vxml version="1.0">
     <form>
          <field name="drink">
               <prompt>Would you like coffee, tea, milk, or nothing?</prompt>
               <grammar src="drink.gram" type="application/x-jsgf"/>
          </field>
          <block>
               <submit next="http://www.drink.example/drink2.asp"/>
          </block>
     </form>
</vxml>


<vxml version="1.0">
     <meta name="author" content="John Doe"/>
     <meta name="maintainer" content="hello-support@hi.example"/>
     <var name="hi" expr="'Hello World!'"/>
     <form>
          <block>
               <value expr="hi"/>Goodbye!
          </block>
     </form>
</vxml>


<form id="get_city">
     <field name="city">
          <grammar src="http://www.ship-it.example/grammars/served_cities.gram"/>
          <prompt>What is the city?</prompt>
          <filled>
               <if cond="city == 'Novosibirsk'">
                    <prompt> Note, Novosibirsk service ends next year. </prompt>
               </if>
          </filled>
     </field>
</form>


<form id="no_bargein_form">
     <property name="bargein" value="false"/>
     <block>
          <prompt> This introductory prompt cannot be barged into. </prompt>
          <prompt> And neither can this prompt. </prompt>
          <prompt bargein="true"> But this one
               <emp>can</emp> be barged into.
          </prompt>
     </block> …
</form>


<vxml version="1.0">
     <form id="basic">
          <field name="acctnum" type="digits">
               <prompt> What is your account number? </prompt>
          </field>
          <field name="acctphone" type="phone">
               <prompt> What is your home telephone number? </prompt>
               <filled>
                    <return namelist="acctnum acctphone"/>
               </filled>
          </field>
     </form>
</vxml>


<form id="test">
     <var name="one" expr="1"/>
     <field name="two" expr="one+1" type="number"/>
     <var name="three" expr="two+1"/>
     <field name="go_on" type="boolean">
          <prompt>Say yes or no to continue</prompt>
     </field>
     <filled>
          <goto next="#tally"/>
     </filled>
</form>


<form id="tapered">
     <block>
          <prompt bargein="false"> Welcome to the ice cream survey. </prompt>
     </block>
     <field name="flavor">
          <grammar>vanilla|chocolate|strawberry</grammar>
          <prompt count="1">What is your favorite flavor?</prompt>
          <prompt count="3">Say chocolate, vanilla, or strawberry.</prompt>
          <help>Sorry, no help is available.</help>
     </field>
</form>


<form id="another_joke">
     <var name="r" expr="Math.random()"/>
     <field name="another" type="boolean">
          <prompt cond="r < .50"> Would you like to hear another elephant joke? </prompt>
          <prompt cond="r >= .50"> For another joke say yes. To exit say no. </prompt>
          <filled>
               <if cond="another">
                    <goto next="#pick_joke"/>
               </if>
          </filled>
     </field>
</form>


<form id="getssn">
     <field name="ssn">
          <grammar src="http://grammarlib/ssn.gram" type="application/x-jsgf"/>
          <prompt> Please say social security number.</prompt>
          <nomatch count="3">
               <return event="nomatch"/>
          </nomatch>
          <filled>
               <return namelist="ssn"/>
          </filled>
     </field>
</form>


<vxml version="1.0" application="app-root.vxml">
     <form id="say_goodbye">
          <field name="answer" type="boolean">
               <prompt>Shall we say
                    <value expr="application.bye"/>?
               </prompt>
               <filled>
                    <if cond="answer">
                         <exit/>
                    </if>
                    <clear namelist="answer"/>
               </filled>
          </field>
     </form>
</vxml>


<form>
     <field name="maincourse">
          <prompt> Please select an entree. Today, we’re featuring
               <enumerate/>
          </prompt>
          <option dtmf="1" value="fish"> swordfish </option>
          <option dtmf="2" value="beef"> roast beef </option>
          <option dtmf="3" value="chicken"> frog legs </option>
          <filled>
               <submit next="/cgi-bin/maincourse.cgi" method="post" namelist="maincourse"/>
          </filled>
     </field>
</form>


<vxml version="1.0">
     <script> function factorial(n) { return (n <= 1)? 1 : n * factorial(n-1); } </script>
     <form id="form">
          <field name="fact" type="number">
               <prompt> Tell me a number and I'll tell you its factorial. </prompt>
               <filled>
                    <prompt>
                         <value expr="fact"/> factorial is
                         <value expr="factorial(fact)"/>
                    </prompt>
               </filled>
          </field>
     </form>
</vxml>


<vxml version="1.0">
     <meta name="author" content="John Doe"/>
     <meta name="maintainer" content="hello-support@hi.example"/>
     <var name="hi" expr="'Hello World!'"/>
     <form>
          <block>
               <value expr="hi"/>
               <goto next="#say_goodbye"/>
          </block>
     </form>
     <form id="say_goodbye">
          <block> Goodbye! </block>
     </form>
</vxml>


<form id="launch_missiles">
     <field name="password">
          <prompt>What is the code word?</prompt>
          <grammar>rutabaga</grammar>
          <help>It is the name of an obscure vegetable.</help>
          <catch event="nomatch noinput" count="3">
               <prompt>Security violation!</prompt>
               <submit next="apprehend_felon" namelist="user_id"/>
          </catch>
     </field>
     <block>
          <goto next="#get_city"/>
     </block>
</form>


<form id="get_starting_and_ending_cities">
     <field name="start_city">
          <grammar src="http://www.grammars.example/voicexml/city.gram"/>
          <prompt>What is the starting city?</prompt>
     </field>
     <field name="end_city">
          <grammar src="http://www.grammars.example/voicexml/city.gram"/>
          <prompt>What is the ending city?</prompt>
     </field>
     <filled mode="any" namelist="start_city end_city">
          <if cond="start_city == end_city">
               <prompt> You can't fly from and to the same city. </prompt>
               <clear/>
          </if>
     </filled>
</form>


<vxml version="1.0">
     <form id="billing_adjustment">
          <var name="account_number"/>
          <var name="home_phone"/>
          <subdialog name="accountinfo" src="acct_info.vxml#basic">
               <filled>
                    <assign name="account_number" expr="accountinfo.acctnum"/>
                    <assign name="home_phone" expr="accountinfo.acctphone"/>
               </filled>
          </subdialog>
          <field name="adjustment_amount" type="currency">
               <prompt> What is the value of your account adjustment? </prompt>
               <filled>
                    <submit next="/cgi-bin/updateaccount"/>
               </filled>
          </field>
     </form>
</vxml>


<form id="weather_info">
     <block>Welcome to the weather information service.</block>
     <field name="state">
          <prompt>What state?</prompt>
          <grammar src="state.gram" type="application/x-jsgf"/>
          <catch event="help"> Please speak the state for which you want the weather. </catch>
     </field>
     <field name="city">
          <prompt>What city?</prompt>
          <grammar src="city.gram" type="application/x-jsgf"/>
          <catch event="help"> Please speak the city for which you want the weather. </catch>
     </field>
     <block>
          <submit next="/servlet/weather" namelist="city state"/>
     </block>
</form>


<form id="get_from_and_to_cities">
     <grammar src="http://www.directions.example/grammars/from_to.gram"/>
     <block> Welcome to the Driving Directions By Phone. </block>
     <initial name="bypass_init">
          <prompt> Where do you want to drive from and to? </prompt>
          <nomatch count="1"> Please say something like "from Atlanta Georgia to Toledo Ohio". </nomatch>
          <nomatch count="2"> I’m sorry, I still don’t understand. I’ll ask you for information one piece at a time.
               <assign name="bypass_init" expr="true"/>
               <reprompt/>
          </nomatch>
     </initial>
     <field name="from_city">
          <grammar src="http://www.directions.example/grammars/city.gram"/>
          <prompt>From which city are you leaving?</prompt> … etc. …
     </field> … etc. …
</form>


<vxml version="1.0">
     <form id="getdriverlicense">
          <var name="birthday" expr="'1980-02-10'"/>
          <field name="drivelicense">
               <grammar src="http://grammarlib/drivegrammar.gram" type="application/x-jsgf"/>
               <prompt> Please say your driver’s license number. </prompt>
               <filled>
                    <if cond="validdrivelicense(drivelicense,birthday)">
                         <var name="status" expr="true"/>
                         <else/>
                         <var name="status" expr="false"/>
                    </if>
                    <return namelist="drivelicense status"/>
               </filled>
          </field>
     </form>
</vxml>


<vxml version="1.0">
     <form>
          <record name="greeting" beep="true" maxtime="10s" finalsilence="4000ms" dtmfterm="true" type="audio/wav">
               <prompt> At the tone, please say your greeting. </prompt>
               <noinput> I didn't hear anything, please try again. </noinput>
          </record>
          <field name="confirm" type="boolean">
               <prompt> Your greeting is
                    <value expr="greeting"/>.
               </prompt>
               <prompt> To keep it, say yes. To discard it, say no. </prompt>
               <filled>
                    <if cond="confirm">
                         <submit next="save_greeting.pl" method="post" namelist="greeting"/>
                    </if>
                    <clear/>
               </filled>
          </field>
     </form>
</vxml>


<form name="transfer">
     <var name="mydur" expr="0"/>
     <block>
          <audio src="chopin12.wav"/>
     </block>
     <transfer name="mycall" dest="phone://18005551234" connecttimeout="30s" bridge="true">
          <filled>
               <assign name="mydur" expr="mycall$.duration"/>
               <if cond="mycall == 'busy'">
                    <prompt> Sorry, our customer support team is busy serving other customers. Please try again later. </prompt>
                    <elseif cond="mycall == 'noanswer'"/>
                    <prompt> Sorry, our customer support team's normal hours are 9 am to 7 pm Monday through Saturday. </prompt>
               </if>
          </filled>
     </transfer>
     <block>
          <submit namelist="mycall mydur" next="/cgi-bin/report"/>
     </block>
</form>


<form id="getssn">
     <var name="firstname"/>
     <var name="lastname"/>
     <field name="ssn">
          <grammar src="http://grammarlib/ssn.gram" type="application/x-jsgf"/>
          <prompt> Please say social security number. </prompt>
          <filled>
               <if cond="validssn(firstname,lastname,ssn)">
                    <assign name="status" expr="true"/>
                    <return namelist="status ssn"/>
                    <else/>
                    <assign name="status" expr="false"/>
                    <return namelist="status"/>
               </if>
          </filled>
     </field>
</form>


<vxml version="1.0">
     <form>
          <transcribe name="message" beep="true" maxtime="30s">
               <prompt> What is the message you want to leave? </prompt>
               <nomatch count="2"> Try to make your message simpler. </nomatch>
               <nomatch count="3"> Transferring to operator.
                    <goto next="queue_caller.pl"/>
               </nomatch>
          </transcribe>
          <field name="confirm" type="boolean">
               <prompt> Your message is
                    <value expr="message"/>.
               </prompt>
               <prompt> To send it, say yes. To discard it, say no. </prompt>
               <filled>
                    <if cond="confirm">
                         <submit next="send_page.pl" namelist="message"/>
                    </if>
                    <clear/>
               </filled>
          </field>
     </form>
</vxml>


<form>
     <subdialog name="result" src="#getdriverslicense">
          <param name="birthday" expr="'2000-02-10'"/>
          <filled>
               <submit next="http://myservice.example/cgi-bin/process"/>
          </filled>
     </subdialog>
</form>
<form id="getdriverslicense">
     <var name="birthday"/>
     <field name="drivelicense">
          <grammar src="http://grammarlib/drivegrammar.gram" type="application/x-jsgf"/>
          <prompt> Please say your driver's license. </prompt>
          <filled>
               <if cond="validdrivelicense(drivelicense,birthday)">
                    <var name="status" expr="true"/>
                    <else/>
                    <var name="status" expr="false"/>
               </if>
               <return namelist="drivelicense status"/>
          </filled>
     </field>
</form>


<vxml version="1.0">
     <form>
          <var name="hours"/>
          <var name="minutes"/>
          <var name="seconds"/>
          <block>
               <script> var d = new Date(); hours = d.getHours(); minutes = d.getMinutes(); seconds = d.getSeconds(); </script>
          </block>
          <field name="hear_another" type="boolean">
               <prompt> The time is
                    <value expr="hours"/> hours,
                    <value expr="minutes"/> minutes, and
                    <value expr="seconds"/> seconds.
               </prompt>
               <prompt>Do you want to hear another time?</prompt>
               <filled>
                    <if cond="hear_another">
                         <clear/>
                    </if>
               </filled>
          </field>
     </form>
</vxml>


<form id="survey_2000_03_30">
     <catch event="exit">
          <goto nextitem="confirm_exit"/>
     </catch>
     <block>
          <prompt> Hello, you have been called at random to answer questions critical to U.S. foreign policy. </prompt>
     </block>
     <field name="q1" type="boolean">
          <prompt>Do you agree with the IMF position on privatizing certain functions of Burkina Faso’s agriculture ministry?</prompt>
     </field>
     <field name="q2" type="boolean">
          <prompt>If this privatization occurs, will its effects be beneficial mainly to Ouagadougou and Bobo-Dioulasso?</prompt>
     </field>
     <field name="q3" type="boolean">
          <prompt>Do you agree that sorghum and millet output might thereby increase by as much as four percent per annum?</prompt>
     </field>
     <block>
          <submit next="register" namelist="q1 q2 q3"/>
     </block>
     <field name="confirm_exit" type="boolean">
          <prompt>You have elected to exit. Are you sure you want to do this, and perhaps adversely affect U.S. foreign policy vis-à-vis sub-Saharan Africa for decades to come?</prompt>
          <filled>
               <if cond="confirm_exit"> Okay, but the U.S. State Department is displeased.
                    <exit/>
                    <else/> Good, let’s pick up where we left off.
                    <clear namelist="confirm_exit"/>
               </if>
          </filled>
     </field>
</form>


<vxml version="1.0">
     <form id="getcredit">
          <var name="status" expr="'no_result'"/>
          <var name="username"/>
          <field name="creditcardnum">
               <prompt> What is your credit card number? </prompt>
               <help> I am trying to collect your credit card information.
                    <reprompt/>
               </help>
               <nomatch>
                    <return namelist="status"/>
               </nomatch>
               <grammar/>
          </field>
          <field name="expirydate" type="date">
               <prompt> What is the expiry date of this card? </prompt>
               <help> I am trying to collect the expiry date of the credit card number you provided.
                    <reprompt/>
               </help>
               <nomatch>
                    <return namelist="status"/>
               </nomatch>
          </field>
          <block>
               <assign name="status" expr="'result'"/>
               <return namelist="status creditcardnum expirydate"/>
          </block>
     </form>
</vxml>


<vxml version="1.0">
     <var name="username"/>
     <form id="buysoftware">
          <var name="ccn"/>
          <var name="exp"/>
          <grammar/>
          <initial name="start">
               <prompt> Please tell us the software product you wish to buy and the operating system on which it must run. </prompt>
               <noinput>
                    <assign name="start" expr="true"/>
               </noinput>
          </initial>
          <field name="product">
               <prompt> Which software product would you like to buy? </prompt>
          </field>
          <field mname="operatingsystem">
               <prompt> Which operating system does this software need to run on? </prompt>
          </field>
          <subdialog name="cc_results" src="http://somedomain.example/ccn.vxml">
               <filled>
                    <if cond="cc_results.status=='no_result'"> Sorry, your credit card information could not be Obtained. This order is cancelled.
                         <exit/>
                         <else/>
                         <assign name="ccn" expr="cc_results.creditcardnum"/>
                         <asssign name="exp" expr="cc_results.expirydate"/>
                    </if>
               </filled>
          </subdialog>
          <block> We will now process your order. Please hold.
               <submit namelist="username product operatingsystem ccn exp"/>
          </block>
     </form>
</vxml>


<vxml version="1.0">
     <property name="caching" value="safe"/>
     <property name="audiofetchhint" value="safe"/>
     <property name="confidence" value="0.75"/>
     <form>
          <property name="confidence" value="0.5"/>
          <property name="bargein" value="false"/>
          <grammar src="address_book.gram" type="application/x-jsgf"/>
          <block>
               <prompt> Welcome to the Voice Address Book </prompt>
          </block>
          <initial name="start">
               <property name="timeout" value="5s"/>
               <prompt> Who would you like to call? </prompt>
          </initial>
          <field name="person">
               <prompt> Say the name of the person you would like to call. </prompt>
          </field>
          <field name="location">
               <prompt> Say the location of the person you would like to call. </prompt>
          </field>
          <field name="confirm" type="boolean">
               <prompt> You said to call
                    <value expr="person$.utterance"/> at
                    <value expr="location$.utterance"/>. Is this correct?
               </prompt>
               <filled>
                    <if cond="confirm">
                         <submit next="http://www.messagecentral.example/voice/make_call" namelist="person location"/>
                    </if>
                    <clear/>
               </filled>
          </field>
     </form>
</vxml>


<form id="weather_info">
     <grammar src="cityandstate.gram" type="application/x-jsgf"/>
     <block>
          <prompt bargein="false"> Welcome to the weather information service.
               <audio src="http://www.online-ads.example/wis.wav"/>
          </prompt>
     </block>
     <initial name="start">
          <prompt> For what city and state would you like the weather? </prompt>
          <help> Please say the name of the city and state for which you you would like a weather report.</help>
          <noinput count="1">
               <reprompt/>
          </noinput>
          <noinput count="2">
               <reprompt/>
               <assign name="start" expr="true"/>
          </noinput>
     </initial>
     <field name="state">
          <prompt>What state?</prompt>
          <help>Please speak the state for which you want the weather.</help>
     </field>
     <field name="city">
          <prompt>Please say the city in
               <value expr="state"/> for which you want the weather.
          </prompt>
          <help>Please speak the city for which you want the weather.</help>
          <filled>
               <if cond="city == 'Los Angeles' && state == undefined">
                    <assign name="state" expr="'California'"/>
               </if>
          </filled>
     </field>
     <field name="go_ahead" type="boolean" modal="true">
          <prompt>Do you want to hear the weather for
               <value expr="city"/>,
               <value expr="state"/>?
          </prompt>
          <filled>
               <if cond="go_ahead">
                    <prompt bargein="false">
                         <audio src="http://www.online-ads.example/wis2.wav"/>
                    </prompt>
                    <submit next="/servlet/weather" namelist="city state"/>
               </if>
               <clear namelist="start city state go_ahead"/>
          </filled>
     </field>
</form>