|
Your
First Pizza
(Continued
from Part 1)
Changing
Your Mind
What if the user decides to change his or her mind in
the midst of ordering a pizza? VoiceXML includes built-in
support for the cancel event as well. Cancel
is thrown whenever the interpreter is collecting input,
and the caller says 'cancel'. In our example, we're
going to add an event handler at the form level. This
means that the cancel event handler will be in scope
for the entire form (i.e., all of the fields). So if
the caller decides to back out, or retry while being
prompted for the number of pizzas they want, they can
say 'cancel', and the interpreter will generate the
cancel event. Here is a fragment of the new application
that includes this support:
<form>
<catch event="cancel">
Cancelling your order.
<clear namelist="orderItem orderCount"/>
<reprompt/>
</catch>
<block>
<prompt>
Welcome to the VoiceXML Review pizza franchise
</prompt>
</block>
.
.
.
</form>
|
The
event handler can do any of a variety of things. In
this case, we clear the contents of the form variables
we might have collected thus far (orderItem, orderCount),
and then inform the interpreter that it should reissue
the prompts when next collecting input. The end result
of this is that the form interpretation algorithm of
the interpreter will start to collect the fields again.
We might also have thanked the caller for calling us
before hanging up, , or transferred them to an operator.
Although
VoiceXML 1.0 defines behavior for 'help', 'cancel',
and 'exit', there is no way to turn off these global
commands. A future version of the language, and a number
of current interpreters, should allow you to turn off
this default behavior using the new universals
property.
Improving
Accessibility
What
if the system is having difficulty recognizing the callers
input? It is always a good idea to have a fallback to
DTMF (touch-tone) input, if feasible. In this case,
we can add a DTMF grammar to the item selection field:
<dtmf>
1 {pizza} | 2 {drinks} | 3 {salad} | 4 {wings}
</dtmf>
|
The
dtmf tag defines acceptable DTMF input for the
field. In this case, we're also returning tags
so that the results are a bit easier to deal with. So,
when the caller types '1' on their phone's keypad, the
field variable will receive the value 'pizza'.
How
about the second field? Well, with the built in grammar
types (such as number or digit), we get both ASR and
DTMF grammars, so we don't have to define a DTMF grammar.
In other words, we get one for free! We could also use
the option tag in the first field to provide
similar functionality. We'll have a peek at this next
month.
The
Current Version
Here
is a complete version of the current script, with the
enhancements we've made:
<?xml version="1.0"?>
<vxml version="1.0">
<meta name="MAINTAINER" content="rob@voicegenie.com"/>
<property name="caching" value="safe"/>
<form>
<catch event="cancel">
Cancelling your order.
<clear namelist="orderItem orderCount"/>
<reprompt/>
</catch>
<block>
<prompt>
Welcome to the VoiceXML Review pizza franchise.
</prompt>
</block>
<field name="orderItem">
<grammar>
pizza | drinks | salad | wings
</grammar>
<dtmf>
1 {pizza} | 2 {drinks} | 3 {salad} | 4 {wings}
</dtmf>
<prompt>
What would you like to order?
We have pizza, drinks, salad or wings.
</prompt>
<noinput>
Say pizza, drinks, salad, or wings.
</noinput>
<nomatch>
You can say pizza, drinks, salad, or wings.
</nomatch>
<help>
<reprompt/>
</help>
</field>
<field name="orderCount" type="number">
<prompt>
How many <value expr="orderItem"/> would you like?
</prompt>
<noinput>
I need to know how many <value expr="orderItem"/> you want.
</noinput>
<nomatch>
Please say how many <value expr="orderItem"/> you want.
</nomatch>
<help>
You should tell me how many items you want.
</help>
</field>
<block>
One moment while I add
<value expr="orderCount"/>
<value expr="orderItem"/>
to your order.
<submit next="/cgi-bin/pizzaCart.pl" namelist="orderItem orderCount"/>
</block>
</form>
</vxml>
|
Further
Improvements
Here
are some actions we could take to improve the current
version:
- Alter
the prompts to inform the user that they can use DTMF;
- Make
use of different prompts to better inform the caller
of what their options are;
- Handle
'cancel' in a more reasonable way.
And
I'm sure you can think of lots of other things.
What's
Next
Next
month we're going to build this application out, and
take advantage of even more VoiceXML features. While
we may never show a profit on our pizza dot-com, we
will be learning more about VoiceXML!
back
to the top
Copyright
© 2001 VoiceXML Forum. All rights reserved.
The VoiceXML Forum is a program of the
IEEE
Industry Standards and Technology Organization (IEEE-ISTO).
|