Title: VoiceXML: Events, Errors, and ECMAScript
1VoiceXMLEvents, Errors, and ECMAScript
2Acknowledgements
- Prof. Mctear, Natural Language Processing,
http//www.infj.ulst.ac.uk/nlp/index.html,
University of Ulster.
3Events
- Plain events happen normally, involve special
event handler - Error events - unexpected situations, may cause
application to terminate
Plain events Error events
cancel, help, exit (user) error.badfetch
noinput, nomatch (user input) error.semantic
connection.disconnect.hangup error.noauthorization
maxspeechtimeout error.unsupported.builtin
Note how events are handled is platform-dependent
4Default catch handlers
Event Type Action
cancel dont reprompt
error exit interpreter
exit exit interpreter
help reprompt
noinput reprompt
nomatch reprompt
maxspeechtimeout reprompt
connection.disconnect exit interpreter
all others exit interpreter
5noinput, nomatch
- ltnoinputgt
- System does not detect any speech.
- This event is thrown when the timeout interval is
exceeded (in IBM WebSphere Voice Toolkit the
default timeout interval is 500 milliseconds). - ltnomatchgt
- The users input does not match the recognition
grammar. - The default behaviour in the IBM WebSphere Voice
Toolkit for this event is to output a message and
then re-prompt. - These (and other) default event handlers can be
modified. - Properties such as timeout can also be modified.
6ltcatchgt
- ltcatch event "nomatch"gt ltpromptgt I
did not understand what you said. Please answer
the question again. lt/promptgtlt/catchgt - ltcatch event "nomatch noinput help"gt
ltpromptgt I did not understand what you said.
Please answer the question again. lt/promptgt
ltreprompt/gt lt!-- Present the original prompt
message again to the user --gtlt/catchgt - ltcatch event "nomatch" count "2"gt
- lt!-- count different occurrences of an event
--gt
7Shorthand ltcatchgt elements
- Some common events, such as noinput, nomatch,
help, and error have shorthand versions, e.g. - ltnomatchgt I did not understand, please try
again.lt/nomatchgt - ltnoinputgt
- I didnt hear anything. Please speak a little
louder. - ltnoinputgt
- With counters ltnomatch count 1gt
8ltthrowgt
- Used to define application-specific events e.g.
user has failed 3 times to enter valid id - ltcatch event nomatch" count "1gt
- That is not a valid i d lt/catchgt
-
- ltcatch event "nomatch" count "4gt
- ltthrow event "error.invalid_password"/gt
lt/catchgt - ltcatch event "error.invalid_password" gt
- ltpromptgt Please check your i d. Goodbye lt/promptgt
- ltexit/gt
- lt/catchgt
9Event handlers and scope
- Event handlers can be defined at different scope
levels - Scope levels form a hierarchy.
- Event handlers defined in a higher scope level
are inherited at lower scope levels within the
hierarchy. - A local event handler overrides or replaces an
inherited event handler. If a local event
handler has the same name as an inherited event
handler, then the local event handler replaces
the inherited event handler. - The VoiceXML interpreter examines the following
containers in the order listed to select an event
handler - Field
- Dialog
- Document
- Application
- Session
10Tutorial Exercises Error handling
- Aim to explore events such as ltnoinputgt and
ltnomatchgt and modify their default behaviours - Run the file studentsystem1b.vxml and test how
it behaves when a) You do not say anything b)
You say something that is not in the specified
recognition vocabulary. - Modify the default behaviours for ltnoinputgt and
ltnomatchgt using counters for alternative
behaviours. - Define an application specific event using
ltthrowgt that causes the application to terminate
with some form of explanation following an event
such as repeated failure to elicit valid input. - The event could be a third failure to elicit the
users spoken input, with an event thrown such as
error.no_input. This event can be caught,
causing the system to transfer to a human
operator. Include a prompt that explains what is
happening. If transfer is not possible, then use
ltexit /gt or ltdisconnect/gt to cause the
application to terminate.
11What is ECMAScript?
- Used as the scripting language of VoiceXML for
client-side processing, e.g. to validate user
input (without requiring access to the server),
or to dynamically generate values. - VoiceXML variables are completely equivalent to
ECMAScript variables. - The expr and the cond attributes reference
ECMAScript expressions. - Escaping characters to conform to the rules of
XML e.g.ltif cond age gt 21 gt - Or use the ltscriptgt element e.g.
- ltSCRIPTgt
- lt!CDATA
- ... ECMAScript code ... gt
- lt/SCRIPTgt
http//www.ecma-international.org/publications/sta
ndards/Ecma-262.htm
12ECMAScript Example
- ltform id"form"gt
- ltblockgt
- ltvar name"hours"/gt
- ltvar name"minutes"/gt
- ltvar name"seconds"/gt
- ltscriptgt
- lt!CDATA
- var nownew Date()
- hoursnow.getHours()
- minutesnow.getMinutes()
- secondsnow.getSeconds()
- gt
- lt/scriptgt
ltpromptgt The current time is ltvalue
expr"hours"/gt hours, ltvalue expr "minutes"/gt
minutes, and ltvalue expr "seconds"/gt
seconds. lt/promptgt lt/blockgt lt/formgt
13More on the date object
- The Date object stores a year, month, day, date,
hour, minute, and second. - Methods of the Date object include
- getSeconds( ) returns the seconds in Date
- get Minutes( ) returns the minutes in Date
- getHours( ) returns the hours in Date
- getDay( ) returns the day of the week in Date
beginning at 0 - getDate( ) returns the day of the month in Date
- getMonth( ) returns the month in Date beginning
at 0 - getFullYear( ) returns the year as a 4 digit
string
14Example with ltifgt Calculating variable interest
- ltform id"calculate_interest"gt
- ltvar name interest"/gt
- ltvar name"interest_calculated" /gt
- ltfield name"amount typenumbergt
- ltpromptgtWhat is the amount in your account?
lt/promptgt - ltfilledgt
- ltscriptgt
- lt!CDATA
- if (amount lt 1000) interest 0.02
- if (amount gt 1000 amount lt 10000)
interest 0.03 - if (amount gt 10000) interest 0.04
- interest_calculated interest amount
- gt
- lt/scriptgt
- ltpromptgt the interest on your balance is ltvalue
expr"interest_calculated"/gt lt/promptgt - lt/filledgt
- lt/fieldgt
- lt/formgt
15Tutorial Exercise ECMAScript
- Using the file interest.vxml as a basis, create
a file called commission.vxml that elicits the
selling price of a property and then calculates
the commission fee based on the following rules - if (amount lt 90000) fee 0.05
- if (amount gt 90000 amount lt 200000) fee
0.04 - if (amount gt 200000) fee 0.03
16Universal Commands and Navigation
17Overview
- Using a root document for global commands and
storing information - Navigation within and between documents
- The ltsubdialoggt element
- Exercises
- Using a root document
- Creating a subdialog
18Root document
- Simple applications may consist of one document.
- Larger applications may consist of several
documents, one of which is the root document, and
the others are child documents of the root
document. - The root document can contain event handlers,
grammars, variables, scripts and other constructs
in the scope of the application which are
inherited by the child documents. - These elements are active throughout the entire
application, unless otherwise specified. - The child documents must reference the root
document using the application attribute of the
ltvxmlgt element, e.g.ltvxml version2.0" applicati
on"root.vxml"gt - (assuming root document is called root.vxml
Note the root document can have any arbitrary
name)
19root.vxml
- lt!-- header information --gt
- ltvar nameuser_pin"/gt
- ltlink next"main.vxml" gt
- ltgrammar type"application/srgsxml" root"main"
version"1.0" mode"voice"gt - ltrule id"main" scope"public"gt
- ltone-ofgt
- ltitemgt main menu lt/itemgt
- ltitemgt start over lt/itemgt
- lt/one-ofgt
- lt/rulegt
- lt/grammargt
- lt/linkgt
- lt/vxmlgt
20logon.vxml
- ltfield name"pin" type"digits" gt
- ltpromptgtwhat is your four digit pinlt/promptgt
- lt/fieldgt
- ltblockgt
- ltassign name"application.user_pin" expr"pin" /gt
- ltgoto next"main.vxml" /gt
- lt/blockgt
- lt/formgt
- lt/vxmlgt
21Retrieving the value
- The value stored as an application level variable
can be retrieved as follows - ltprompt version"1.0"gt
- Your pin is
- ltsay-as interpret-as"vxmldigits"gt
- ltvalue expr"application.user_pin"/gt lt/say-asgt
- The prompt demonstrates that the value of
user-pin is available to each leaf document
that references root.vxml
22More on Navigation
- Transition to other forms etc when the FIA has
processed a form (dialog) - ltchoicegt - Used within the ltmenugt element to
select and transition to another dialog. - ltgotogt - Used within ltblockgt, ltcatchgt, lterrorgt,
ltfilledgt, ltforeachgt, lthelpgt, ltifgt, ltnoinputgt,
ltnomatchgt, and ltpromptgt - ltlinkgt - Used within ltfieldgt, ltformgt, ltinitialgt,
and ltvxmlgt - ltsubmitgt Used within ltblockgt, ltcatchgt, lterrorgt,
ltfilledgt, ltforeachgt, lthelpgt, ltifgt, ltnoinputgt,
ltnomatchgt, and ltpromptgt
23Attributes for navigation
- Specifying the target item
- next - A URI reference e.g.
- next"http//myexamples.com/student_system
(absolute reference) - nextstudents.vxml (relative e.g. in same
directory) - nextstudents.vxml first_query" (specifies
dialog within the document) - nextitem - The name of an input item within the
same form e.g. nextitem student_name - expr - A URI reference that is dynamically
determined by evaluating the ECMAScript
expression e.g. - exprstudent_system' '' first_query'
- expritem - The name of an input item within the
same form
24ltgotogt ltsubmitgt
- ltgotogt
- transition to another form item within current
form, another form within current document, or
another document - transitioning to another dialog or document using
ltgotogt will cause the old dialogs variables to
be lost. If the variables are to persist across
multiple documents, they should be stored with
application scope - ltsubmitgt
- used to submit values to the document server via
an HTTP GET or POST request - namelist attribute specifies which values are
being submitted e.g. ltsubmit nexthttpwww.myser
ver.com/getstudentdetails.jsp namelist
studentname coursename /gt - Control will not necessarily return to the
calling document. For example, the script
specified in the next attribute might generate
a VoiceXML document dynamically and execution
will continue with this document.
25ltexitgt
- ltexitgt
- terminates all loaded documents and returns
control to the voice browser which determines
what to do next - Attributes
- exprECMAScript expression that is evaluated as
the return value - namelistList of variable names to be returned
- ltexitgt example
- ltfilledgtltsubmit namelist source target
amount" /gt ltexit/gt lt/filledgt
26ltdisconnectgt
- Causes the voice browser to disconnect
- ltdisconnectgt example
- ltfilledgtltsubmit namelist source target
amount" /gt ltdisconnect/gt lt/filledgt - Note Before ending the session, developers can
catch the ltdisconnectgt event to perform some
post-disconnect processing such as submitting any
remaining data to a Web server.
27lttransfergt (1)
- Enables the user to connect via the telephone to
another voice application on another speech
server. - Also enables the user to connect to a person's
telephone. Frequently this will be an operator or
help agent that assists a user having trouble. - blind transfer
- the caller can converse only with the party on
the other end of the connection. - bridge transfer
- the caller may converse with another party and
also hear prompts and respond by speaking or
pressing the keys on a touchtone telephone. This
enables the caller to proactively end the
transferred call.
28lttransfergt (2)
- When the transfer is complete, the connection is
broken. - Once the transfer disconnects, the instructions
in the ltfilledgt element associated with the
lttransfergt element are interpreted. - The input-form-item variable may contain values
including the following which indicate why the
transfer was not successful - busy - The other person was busy.
- noanswer - The other person did not answer.
- network_busy - An intermediate network was not
able to transfer the call. - Various shadow variables contain information
about a successful transfer e.g.. - duration of the call transfer in seconds.
- mode used by the caller to terminate the
transferred call (voice or DTMF
29ltsubdialoggt
- Enables frequently used code to be saved in a
library and re-used in several applications - When invoked, a subdialog executes in a new
execution environment it does not inherit any
parameters from the calling dialog. The
subdialog proceeds until it encounters - ltreturngt elementEnds the execution of a
subdialog and returns control and data to the
calling dialog. Data is returned to the calling
dialog as a namelist. When the subdialog
returns, its execution environment is deleted. - ltexitgt elementExecution stops
- No form items remain eligible for the FIA to
select - Execution stops
30Go to subdialog to elicit name which is
returned to main dialog for greeting
ltsubdialoggt 1
- 3. ltform id"main_menu"gt
- 4. ltblockgt
- 5. Welcome to the Student System Main Menu
- 6 lt/blockgt
- 7 ltsubdialog name"result" src"validation"gt
- 8 lt/subdialoggt
- 9 ltblockgt
- 10 ltpromptgt
- 11 hello ltvalue expr "result.username" /gt
- 12 lt/promptgt
- 13 lt/blockgt
- 14 lt/formgt
- 15 lt!-- subdialog --gt
- 16 ltform id"validation"gt
- 17 ltfield name"username"gt
- 18 ltgrammargt
- 19 liz margaret mike guest
- 20 lt/grammargt
- 21 ltpromptgt Please say your user name. lt/promptgt
- 22 lt/fieldgt
- 23 ltfilledgt
- 24 ltreturn namelist"username" /gt
- 25 lt/filledgt
- 26 lt/formgt
studentsystem3a.vxml
31Pass value into subdialog for validation
ltsubdialoggt 2
ltform id"main_menu"gt ltblockgtWelcome
lt/blockgt ltfield namestudentnamegt ltgrammargt
john david rosemary jennifer
lt/grammargt ltpromptgt Please say your user name
lt/prompt lt/fieldgt ltsubdialog name"result"
src"validation"gt ltparam name username" expr
studentname" /gt lt/subdialoggt lt/formgt
lt!-- subdialog --gt ltform id"validation"gt ltvar
name username" /gt ltblockgt ltpromptgt hello
ltvalue expr username" /gt lt/promptgt ltreturn
/gt lt/blockgt lt/formgt
studentsystem3b.vxml
32Pass values in both directions elicit value and
pass to subdialog for validation, return to main
dialog with result
ltsubdialoggt 3
ltform id"main_menu"gt ltblockgtWelcome
lt/blockgt ltfield namestudentnamegt elicit name
lt/fieldgt ltsubdialog name"result"
src"validation"gt ltparam name studentname"
expr username" /gt lt/subdialoggt ltblockgt ltprompt
gt hello ltvalue expr "result.studentname" /gt the
student number is ltvalue expr
"result.studentid" /gt lt/promptgtlt/blockgt lt/formgt
lt!-- subdialog --gt ltform id"validation"gt ltvar
name studentname" /gt ltvar name "studentid"
expr" /gt ltblockgt ltif cond "name'john'"gt lta
ssign name "studentid" expr "'96050918'"
/gt lt/ifgt ltreturn namelist "studentid"
/gt lt/blockgt lt/formgt
studentsystem3c.vxml
33Tutorial Exercises Using a root document
- Assuming that you have separate documents for the
main elements of the Student System - student
details, course details, view student details,
reports, and a main menu document - create a root
document with links to these documents. Provide a
link in the root document that will enable the
user to navigate to the main menu document from
any other document in the application. - Create a variable with application scope in the
root document to hold the user's pin. Elicit a
value for the user's pin in a file such as
logon.vxml, store the value in the root document
and access it from some other child document.
34Tutorial Exercises Subdialog (1)
- Passing values back from a subdialog following
some computation within the subdialog - Load and run the file studentsystem3a.vxml. You
can say one of the student names (john, david,
rosemary or jennifer) in response to the system
prompt. - Passing values into a subdialog to be referenced
in that subdialog - Load and run the file studentsystem3b.vxml. As
before, you can say one of the student names
(John, David, Rosemary, Jennifer) in response to
the system prompt.
35Tutorial Exercises Subdialog (1)
- Passing values in both directions
- Load and run the file studentsystem3c.vxml. This
time you have to say the student name 'John' for
the conditional statement in the subdialog to
evaluate correctly. - 6. Add further conditions in the subdialog for
the names 'David' and 'Rosemary'. - Amend the code in the main dialog so that if the
user says the name 'Jennifer', the system
responds 'Sorry that student is not listed in the
database'. - Note Names that are not in the database will
still have to be included in the recognition
vocabulary to be recognised and passed on to the
subdialog.