Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
AU2003245122B2 - System and process for developing a voice application - Google Patents
[go: Go Back, main page]

AU2003245122B2 - System and process for developing a voice application - Google Patents

System and process for developing a voice application Download PDF

Info

Publication number
AU2003245122B2
AU2003245122B2 AU2003245122A AU2003245122A AU2003245122B2 AU 2003245122 B2 AU2003245122 B2 AU 2003245122B2 AU 2003245122 A AU2003245122 A AU 2003245122A AU 2003245122 A AU2003245122 A AU 2003245122A AU 2003245122 B2 AU2003245122 B2 AU 2003245122B2
Authority
AU
Australia
Prior art keywords
application
name
dialog
prompt
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
AU2003245122A
Other versions
AU2003245122A1 (en
Inventor
Khanh Thi Phuong Ho
Alvaro Kau Kam Hui
Eng Boon Law
Bradford Craig Starkie
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Telstra Corp Ltd
Original Assignee
Telstra Corp Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from AU2002950336A external-priority patent/AU2002950336A0/en
Application filed by Telstra Corp Ltd filed Critical Telstra Corp Ltd
Priority to AU2003245122A priority Critical patent/AU2003245122B2/en
Publication of AU2003245122A1 publication Critical patent/AU2003245122A1/en
Assigned to TELSTRA CORPORATION LIMITED reassignment TELSTRA CORPORATION LIMITED Request for Assignment Assignors: TELSTRA NEW WAVE PTY LTD
Application granted granted Critical
Publication of AU2003245122B2 publication Critical patent/AU2003245122B2/en
Anticipated expiration legal-status Critical
Ceased legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Description

WO 2004/010678 PCT/AU2003/000939 -1- SYSTEM AND PROCESS FOR DEVELOPING A VOICE APPLICATION FIELD OF THE INVENTION The present invention relates to a system and process for generating a voice application.
BACKGROUND
A voice application is a software application that provides an interactive audio interface, particularly a speech interface, on a machine, such as an Interactive Voice Response (IVR) system. IVRs, such as Intel's DialogicTM IVR, are used in communications networks to receive voice calls from parties. The IVR is able to generate and send voice prompts to a party and receive and interpret the party's responses made in reply.
Voice extensible markup language, or VoiceXML, is a markup language for voice or speech-driven applications. VoiceXML is used for developing speech-based telephony applications, and also enables web-based content to be accessed via voice using a telephone. VoiceXML is being developed by the VoiceXML Forum, and is described at http://www.voicexml.org. Due to the verbose nature of VoiceXML, it can be cumbersome to develop VoiceXML-based applications manually using a text or XML editor.
Consequently, voice application development systems are available that allow voice applications to be developed by manipulating graphical elements via a graphical user interface rather than coding VoiceXML directly. However, these systems are limited in their ability to assist a developer. It is desired to provide a process and system for developing a voice application that improves upon the prior art, or at least provide a useful alternative to existing voice application development systems and processes.
SUMMARY OF THE INVENTION In accordance with the present invention, there is provided a process for developing a voice application, including: P.?ERIRAB0w vice jppiicaons Mpa MandS up0 7 doc0111 112007 Q-2- Z generating graphical user interface components for defining execution paths of a voice application by arranging dialog elements in a tree structure, each path through said tree structure representing one of said execution paths, said dialog elements having user N, configurable properties and corresponding to respective predetermined sequences of
(N
VoiceXML elements; receiving user input generated by user interaction with said graphical user interface Scomponents; processing said user input to define a voice application by selecting dialog elements representing components of said application, configuring properties of the selected dialog elements, and defining execution paths of said application as respective sequences of at least a subset of the selected dialog elements; and generating application code for said application, said application code representing each dialog element of said application as a sequence of VoiceXML elements including extended attributes to allow said tree structure of said application to be determined.
The present invention also provides a system for use in developing a voice application, including: a dialog element selector for defining execution paths of said application by selecting dialog elements and adding said dialog elements to a tree structure, each path through said tree structure representing one of said execution paths, said dialog elements having user configurable properties and corresponding to respective predetennined sequences of VoiceXML elements; means for receiving user input generated by user interaction with said dialog element selector; means for processing said user input to define a voice application by selecting dialog elements representing components of said application, configuring properties of the selected dialog elements, and defining execution paths of said application as respective sequences of at least a subset of the selected dialog elements; and a code generator for generating application code for said application, said application code representing each dialog element of said application as a sequence of P QPERXFLABaw micc qpfic ims spa mwds a-pVdoc-01/1 1/2007 -3- VoiceXML elements including extended attributes to allow said tree structure of said application to be determined.
The present invention also provides a graphical user interface for use in developing a voice application, said interface including graphical user interface components for defining execution paths of said application by arranging dialog elements in a tree structure, each path through said tree structure representing one of said execution paths, said dialog elements having user configurable properties and corresponding to respective predetermined sequences of VoiceXML elements, wherein said dialog elements include three or more of: a start dialog component for defining the start of said application; a variables component for use in defining variables for said application; a menu component for defining a menu; a menu choice component for defining a choice of said menu; a decision component for defining a decision branching point; a decision branch component for defining a test condition and an execution branch of said decision branching point; a form component for defining a form to collect input from a caller; a record component for recording audio a speaker component for playing prompts, a local processing component for defining local processing; a remote processing component for performing processing on a remote system; a loop component for defining an execution loop; a loop call component for calling said loop; a loop next component for proceeding to the next cycle of said loop; a loop break component for breaking out of said loop; a subroutine component for defining a subroutine; a subroutine call component for calling said subroutine; subroutine return component for returning from said subroutine; a jump component for defining a non-sequential execution path to a dialog element P:%OPERRAB\tnw WoiC applkiMS pa ds p0do-0/l1/2007 -3Aa transfer component representing the transfer of a call to another number a hotwords component for defining a word or phrase and a non-sequential execution path to a dialog element to be followed upon receipt of said word or phrase; and an end component for defining an end of said application.
The invention also provides a computer readable storage medium having stored thereon application code for a voice application, said application code including a plurality of dialog elements representing components of said application, each of said dialog elements being a sequence of VoiceXML elements including extended attributes to allow a tree structure of execution paths of said voice application to be determined, each path through said tree structure representing one of said execution paths.
BRIEF DESCRIPTION OF THE DRAWINGS Preferred embodiments of the present invention are hereinafter described, by way of example only, with reference to the accompanying drawings, wherein: Figure 1 is a block diagram showing a preferred embodiment of a voice application development system connected to an IVR via a network, and a telephone connected to the IVR via the PSTN; Figure 2 is a schematic diagram of the voice application development system, showing how a voice application is developed; WO 2004/010678 PCT/AU20031000939 -4- Figure 3 is a flow diagram of a voice application development process executed by the system; Figure 4 is a screenshot of a graphical user interface of the voice application development system; Figure 5 is a screenshot of a dialog element selection bar of the graphical user interface; and Figure 6 is a flow diagram of a code generation process executed by the system.
DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT As shown in Figure 1, a voice application development system 100 can be connected to a VoiceXML-enabled interactive voice response system (IVR) 102 via a communications network 104. The system 100 executes a voice application development process which allows an application developer to develop a speech based application using a graphical user interface of the system 100. The application can then be transferred to the IVR 102 via the network 104. A standard telephone 106 can be used to access the IVR 102 via the public switched telephone network (PSTN) 108, allowing a user of the telephone 106 to interact with the speech based application simply by speaking into the telephone 106 to provide speech input to the application in response to voice prompts provided by the IVR 102 from the application. In the described embodiment, the voice application development system 100 is a standard computer system, such as an IntelTM-based personal computer running a Microsoft WindowsTM operating system, and the voice application development process is implemented by software modules stored on hard disk storage of the voice application development system 100. However, it will be apparent to those skilled in the art that at least parts of the voice application development process can be alternatively implemented by dedicated hardware components such as application-specific integrated circuits (ASICs). The voice application runs on the IVR 102, which may be an Intel Dialogic T M IVR with Nuance's Voice Web ServerTM software. The network 104 may be any secure communications network that enables voice applications to be loaded onto the IVR 102, such as an Ethernet LAN or TCP/IP network.
As shown in Figure 2, the voice application development system 100 includes a dialog WO 2004/010678 PCT/AU20031000939 editor module 202, a dialog transformer module 204, an application builder module 206, an IVR code generator 208, other application development modules 210, VoiceXML templates 212, and EMCAscript templates 230. The voice application development system 100 constitutes an integrated development environment (IDE) for the development of speech based applications. The system 100 executes an application development process, as shown in Figure 3, that allows a user of the system 100 to develop a voice application for a particular IVR platform.
When the process begins, the system 100 generates a graphical user interface, as shown in Figure 4. The interface is in the form of a window 400 with a project pane 402, a tools pane 404, and a messages pane 406. The window 400 also includes a main menubar 408 and a main toolbar 410. The main menubar 408 includes a Tools menu that provides access to a number of modules of the system 100 that are used to develop voice applications, as described below, and the tools pane 404 provides an interface to each tool when that tool is executed.
To develop a speech based application, a user of the system 100 can create a new project or open a saved project by selecting a corresponding menu item from the "Files" menu of the main menubar 408. The dialog editor 202 is then executed, and a tabbed dialog panel 411 is added to the tools pane 404, providing an interface to the dialog editor 202, and allowing the user to define an execution flow, referred to as a dialog, for the application.
The dialog panel 411 includes a dialog pane 412, a dialog element toolbar 414 referred to as the dialog palette, a dialog element properties pane 416, and a dialog element help pane 418.
An application can be built from a set of seventeen dialog elements represented by icons in the dialog palette 414, as shown in Figures 4 and 5. Each element represents a complete or partial component of the voice application, such as a menu, a menu choice, a form, an execution loop, a speech prompt, and so on. The full set of dialog components is given in Appendix A. A dialog element is added to the dialog by selecting the element from the dialog palette 414 using a pointing device of the system 100 such as a mouse or tablet, and WO 2004/010678 PCT/AU20031000939 -6placing the selected dialog element on the dialog editor pane 412 using a drag-and-drop action. Each dialog element has a number of properties that can be set by the user. Once placed in the dialog editor pane 412, an instance of the selected dialog element is added to the dialog and its properties can be set. When a dialog element instance in the dialog editor pane 412 is selected, its property names and associated values are displayed in the properties pane 416. The properties pane displays the name of each property, and includes controls such as check boxes and buttons to allow the user to modify the values of existing properties, and to add or delete new properties. The dialog element help pane 418 displays help information for the selected element, facilitating the rapid development of the application.
The execution flow of the application is defined by adding dialog elements to the dialog editor pane 412, setting the properties of the dialog elements, and defining the execution order of the dialog elements. The latter is achieved by dragging a dialog element and dropping it on top of an existing dialog element in the dialog editor pane 412. The dropped element becomes the next element to be executed after the element that it was dropped onto. The sequence and properties of dialog elements on the dialog editor pane 412 defines a dialog. Thus a dialog represents the execution flow of a voice application as a sequence of dialog elements. This sequence represents the main flow of the application and provides a higher-level logical view of the application that is not readily evident from the application's VoiceXML code. Thus the dialog provides a clear and logical view of the execution of the application. In addition to the main flow, non-sequential execution branches can be created by using a Jump dialog element. However, such non-sequential execution is not represented in a dialog. A subroutine is represented by an icon in the project pane 402 and appears as an icon in the dialog editor pane 412 when the main dialog is displayed. The execution flow of a subroutine can be displayed by selecting its icon in the project pane 402.
The sequencing of a dialog is facilitated by enforcing strict rules on dialog elements and by including explicit links in the dialog code to transition from one dialog element to the next.
In contrast to arbitrary VoiceXML code whose execution can be completely non-sequential WO 2004/010678 PCT/AU2003/000939 -7due to the presence of "GOTO" tags, a dialog generated by the system 100 has a tree structure, with each path through the tree representing a possible path of dialog execution.
This allows the dialog flow to be readily determined and displayed using high level graphical dialog elements, which would be much more difficult with arbitrary VoiceXML.
An application can be saved at any time by selecting a "Save" menu item of the "File" menu of the menubar 410. When an application is saved, the application dialog is translated into an extended VoiceXML format by the dialog transformer 204. Each dialog element in the dialog flow is first translated into corresponding VoiceXML code. Each of the seventeen dialog elements corresponds to one of the seventeen VoiceXML templates 212 that performs the functionality of that element. A VoiceXML template is a sequence of VoiceXML elements that produces the behaviour that the dialog element represents. It is a template because it needs to be configured by the element properties name, test condition) which are set by the user, as described above.
Some dialog elements correspond to similar VoiceXML elements a Menu dialog element corresponds to a VoiceXML <menu> element), while others map onto a complex sequence of VoiceXML elements a Loop dialog element corresponds to multiple VoiceXML <form> elements, each form specifying the next form to execute in an iterative loop). However, even dialog elements that correspond to similar VoiceXML elements represent more functionality than the equivalent VoiceXML element. For example, a Menu dialog element allows prompts to be set by the user, and the Menu dialog element actually maps onto a block of VoiceXML code that contains a <menu> element with embedded <prompt>, <audio>, and other XML elements.
Each dialog element's VoiceXML template is separate from the next and can be sequenced to produce the dialog flow. The sequencing is achieved by a reference at the bottom of each element's template to the next element's template, which causes the templates to be executed in the desired order.
WO 2004/010678 PCT/AU2003/000939 -8- The translation from high-level dialog elements into VoiceXML proceeds as follows. The dialog elements are stored in a tree structure, each branch of the tree corresponding to a path in the dialog flow. The tree is traversed in pre-order traversal to convert each element visited into VoiceXML. For each visited dialog element, VoiceXML code is generated from its corresponding VoiceXML template by filling in the missing or configurable parts of the template using the element properties set by the user, and adding a link to the next element's VoiceXML code at the bottom of the current element's generated VoiceXML code.
Although the forward transformation from dialog flow to VoiceXML is relatively straightforward, the reverse transformation from VoiceXML to dialog flow is more difficult. The sequencing of dialog elements can be recreated from the generated VoiceXML, but property settings for the elements may not be available because some information in the dialog elements is lost when they are converted to VoiceXML. This lost information may not fall within the scope of VoiceXML, and hence, cannot be naturally saved in VoiceXML code. For example, type information for a Form element is used to generate the grammar for that Form. However, the VoiceXML code simply needs to reference the generated Grammar File and is not concerned with the type information itself. Thus, the mapping of the Form element to equivalent VoiceXML code does not include the type information.
To facilitate the reverse translation from VoiceXML code to dialog, the dialog transformer 204 modifies the VoiceXML code by inserting additional attributes into various element tags, providing dialog element information that cannot be stored using the available VoiceXML tags. The resulting file 214 is effectively in an extended VoiceXML format.
The additional attributes are stored in a separate, qualified XML namespace so that they do not interfere with the standard VoiceXML elements and attributes, as described in the World Wide Web Consortium's (W3C) Namespaces in XML recommendation, available at http://www.w3.org/TR/1999/REC-xml-names-19990114/. This facilitates the parsing of extended VoiceXML files.
WO 2004/010678 WO 204/00678PCT/A1J20031000939 -9- Specifically, an extended VoiceXML file can include the following namespace declaration: <vxml version-'1 0"1 xmlns:lq="http://www.telstra.com.au/LyreQuest"> This defines a namespace prefix "lq" as bound to the universal resource indicator (URI) http://www.telstra.com.au/L3reQuest. Subsequently, the file may contain the following extended VoieeXML: <form id=" SLBROUTINECALL getMembershipI l1-q: element=ltSubroutineCall'I lq name=I"getMembership"I 1g: calls="subl.vxml#getMembershipSub"> <subdialog name="subcall" src=" subl vxml#SUfROUTNEgetMembershipSub"> <filled> <assign name=' getMembership. enrich -membership" expr-"subcall enrich-membership" lq:element-"Output"/>I illed> </subdialog> <block name=I'link'I> <goto next= "#REMOTE-book-flight"!/> </block> <z/form> where the indicated X]VL tag attributes provide the additional dialog clement information, and the remaining code is standard VoiceXML. The additional or extended attributes include the 1q namespace prefix. The lq: element, lq: name, and lg: calls attributes indicate, respectively, the dialog element that the VoiceXML corresponds to, the name given to that element by the user, and the package and name of the Subroutine element that is being called by the SubroutineCall element. Other elements will have different extended attributes.
The equivalent code in VoiceXML omits the extended attributes, but is otherwise identical: <form id="SUBROUTINECALL_getMembership"> <subdialog name="subcall" src="subl .vxml#SUBROUTINE getMembershipsub"> <filled> <assign name=",getmembership. enrich -membership" expr-"subcall.enrichmembership"/> illed> WO 2004/010678 PCT/AU2003/000939 </subdialog> <block name="link"> <goto next="#REMOTEbook_flight"/> </block> </form> Two extended VoiceXML files, including all the available extended attributes, are listed in Appendix B.
When the application is saved, the dialog transformer 204 also generates a number of other files, including a project file 216, package description files 218, and type description files 220. The project file is given a filename extension of and contains information about the packages self-contained groups of files) and other data files making up a project of the voice application development system 100.
An example project file is listed below. Within the project file, the project is defined by a "project" XML element that defines the project name as "mas". Within the "project" element are four sequential "folder" elements that define subdirectories or folders of the directory containing the project file, respectively named Packages, Transcripts, Scenarios, and Generated Code. These folders contain respectively the project's packages, transcripts of text, scenarios of interaction between the corresponding application and a user, and VoiceXML code and grammar generated for one or more specific IVR platforms. Within the "Packages" folder element is a "package" element giving the location and name of any packages used by the project. The "folder" elements can contain one or more "file" elements, each defining the type and name of a file within the encapsulating folder. The "folder" elements can be nested.
<?xml version="l.0"?> <project name="mas"> <folder name="Packages" directory="packages"> <package directory="mas" file="mas.pkg.xml"/> </folder> <folder name="Transcripts" directory="transcripts"> <file type="transcript" name="mas.in"/> <file type="negative" name="mas.negative"/> </folder> <folder name=" Scenarios" directory=" scenarios"> WO 2004/010678 WO 204/00678PCT/AJ20031000939 <-tfile type-"scenario"l name-"~mas.scen"I/> <file type-"states", name="~mas.states",/> </folder> <folder name="Generated Code", directory-"deploy"> <folder name="JSGF Code" directory-"~jsgfII> </folder> <folder name="Nuance Code" directory-"Inuance"l> </folder> older> </project> A package description file is given a filename extension of ".pkg.xml", and contains information about data files belonging to an individual Package of a project. An example of a package description file for the package named "mas" is given below. The file defines the project's dialog file as "mas.vxml", four grammnar files, four prompt files, and three type definition files, containing definitions of user-defined variable types. These files are described in more detail below.
<?xml version=l1.OT1?> <package name=I'maSI'> <file type-'dialog" name="maS .vxml"I/> <file type='gqrarnmar"I> <file type="1rulelist" name-"~mas.rulelist"I/> <file type-"cover" name="mas. cover"I/> <tile type=1"slots' rame="mas.slotsI"/> <file type=11targets," name=",mas.targets"I/> ile> <file type=I"prompt"I> <file type=I"rulelistI name=I"mas.prompts.rulelist"I/> <file type="1cover' name="~mas.prompts.cover"I/> <tile type=1slots" name="Inas.prompts.slotsII/> <file type="targets" name=I'mas.prompts.targetsII/> ile> <file type="1typedef" naie="cities.type.xml"I/> <file type=11typedef" name='fareclass.type.xml"I/> <file type-"typedef" name="collection~point.type.xml"/> </package> A Type description file is given a filename extension of ".type.xml", and contains informiation about a user-defined Type used in a Package of a project. An example of the file is given below. The file defines an enumerated type named "fare -class" with three possible values: "first", "business", and "economy". The "fare -class" type is associated with four files, respectively defining rules for the grammar, cover (a set of example WO 2004/010678 PCT/AU2003/000939 -12phrases), slots (the parameter=value fields that the grammar can return), and targets (more specific slot filling information).
<?xml version="1.0" encoding="utf-8"?> <types> <enum name="fare class"> <file type="grammar"> <file type="rulelist" name="fareclass.rulelist"/> <file type="cover" name="fareclass.cover"/> <file type="slots" name="fare class.slots"/> <file type="targets" name="fare_class.targets"/> </file> <item name="first"/> <item name="business"/> <item name="economy"/> </enum> </types> Returning to Figure 3, in order to deploy the application on the IVR 102, the application dialog is translated into VoiceXML by the application builder 206 at step 604. In addition to the dialog, voice applications require grammar and prompts. The application builder 206 generates grammar files 222 and prompts files 224 automatically, using information specified by the user and stored in the dialog, such as prompt wordings and Form input types. This information is supplied by the user entering typical phrases for 'mixed initiative' recognition input containing multiple pieces of information). By applying generalisation methods to these phrases, a combinator module of the application development modules 210 generates a starting grammar set capable of handling a large number of input phrases. The application builder 206 also invokes the dialog transformer 204 to create the extended VoiceXML file 214. The grammar 222 and prompts 224 files are used by the IVR code generator 208 to generate VoiceXML 226 for the IVR 102.
A generated grammar file is given a filename extension of ".rulelist". An example of a generated grammar file for a flight booking system is: .Ask_flight_details_destination Cities:X 2 0 destination=$X.cities .Ask_flightdetails_departure_point Cities:X 2 0 departure_point=$X.cities WO 2004/010678 PCT/AU20031000939 -13- .Askflight detailsticketclass Fareclass:X 2 0 ticket class=$X.fare_class .Askflight detailsdate Date:X 2 0 date.day=$X.date.day date.year=$X.date.year date.day_ofweek=$X.date.day_of week date.month=$X.date.month date.modifier=$X.date.modifier .Formflightdetails booking 2 1 .Askbookflight confirmation Confirmation:X 2 0 confirmation=$X.confirmation .Ask_get enrichnumberenrichnumber Digitstring:X 2 0 enrichnumber=$X.digitstring .Ask_get_collection point_collectionpoint Collectionpoint:X 2 0 collectionpoint=$X.collection_point .Askanother flightsecondflight Confirmation:X 2 0 second flight=$X.confirmation .Ask_get number getnumberforbalance Digitstring:x 2 0 get-number_forbalance=$X.digitstring .Menu main menu-booking Booking 2 0 !!Booking booking 3 0 !!Booking 1 0 .Menu mainmenumembership Membership 2 0 !Membership membership 3 0 !Membership 1 0 .Formflight details GFIWantTo:X738 book a Fare_class:X741 class ticket to Cities:X745 from Cities:X747 on Date:X749 2 1 date.day=$X749.date.day date.year=$X749.date.year ticket class=$X741.fare class date.day of week=$X749.date.day_of week date.month=$X749.date.month departurepoint=$X747.cities destination=$X745.cities date.modifier=$X749.date.modifier .Form flightdetails GF IWantTo:X750 book a Fare class:X753 class ticket to Cities:X757 2 1 ticket_class=$X753.fareclass destination=$X757.cities The first line or rule of this grammar can be used as an example: .Ask_flight_details_destination Cities:X 2 0 destination=$X.cities This grammar rule might be invoked when a flight booking application prompts a customer to provide the destination of a flight. The first field, .Ask_flight_details destination, provides the name of the grammar rule. The second field, cities indicates that the customer's response x is of type Cities. This type is defined by its own grammar that includes a list of available city names. The following two fields, 2 o, are used for grammar learning, as described in International Patent Publication No. WO 00/78022, A Method ofDeveloping an Interactive System. The first field indicates the number of training examples that use the grammar rule. The second field indicates the number of other rules that refer to the rule. The last field, destination=$X. cities, indicates that the result of the rule is that the parameter WO 2004/010678 PCT/AU20031000939 -14destination is assigned a value of type Cities having the value of x. A more complex example is provided by the last rule .Formflight_details GF_IWantTo:X750 book a Fareclass:X753 class ticket to Cities:X757 2 1 ticket_class=$X753.fareclass destination=$X757.cities In this case, the grammar rule invokes three other grammars: GF_IwantTo, Fareclass, and cities and assigns the results to parameters named X750, X753, and X757, respectively. This rule defines the application parameters ticketclass and destination.
A prompts file is given a filename extension of ".prompts.rulelist", and each line of the file defines the speech prompt that is to be provided to a user of the application when the corresponding element of the dialog is executed. An example of a generated prompts file is: .Goodbye thank you for using this application, goodbye. 1 1 .Noinput sorry, i did not hear anything. 1 1 .Nomatch sorry, i did not understand you. 1 1 .Ask_flight_details_destination where would you like to go 1 1 .Askflightdetails_destination 2 please say the destination city name 1 1 .Help_Ask_flight_details_destination please say the destination. 1 1 .Ask_flightdetails_departure_point where would you like to fly from 1 1 .Ask_flightdetails_departurepoint_2 please say the departure point 1 1 .Help_Ask_flightdetailsdeparturepoint please say the departure point.
1 1 .Ask_flight_detailsticket_class what class would you like to fly 1 1 The format of the prompts file is the same as the grammar file. This allows the prompts to be improved through machine learning as though they were a grammar, using a grammar learning method such as that described in International Patent Publication No. WO 00/78022, A Method ofDeveloping an Interactive System.
The generated prompts include dynamically prompts. An example of a dynamic prompt is: "You have selected to buy Telstra shares. How many of the Telstra shares would you like to buy?". The word, "Telstra" is dynamically inserted into the application's prompt to the user.
WO 2004/010678 PCT/AU20031000939 The voice application development system 100 generates text-to-speech (TTS) prompts within the VoiceXML code that are evaluated on the fly. Although VoiceXML syntax allows an expression to be evaluated and played as a TTS prompt, the system 100 extends this by allowing an ECMAscript or JavaScript function to be called to evaluate each variable used in a prompt. By evaluating variables in a function rather than as an inline expression, complex test conditions can be used to determine the most suitable prompt given the available information in the variables. This might result in a prompt, for example, of "six dollars" rather than "six dollars and zero cents". In addition to automatically generating and incorporate JavaScript function calls in VoiceXML, the system 100 also generates the corresponding JavaScript functions by incorporating usersupplied prompt text and variables into the JavaScript templates 230. This allows the user to develop a voice application with dynamically generated prompts without having to manually code any JavaScript.
For example, an automatically generated function call for a prompt named PromptConfirm_payment_details is: <field name="confirm"> <grammar src="mas.gsl#Confirm"/> <prompt> <value expr="PromptConfirm_payment_details( payment_details.company, paymentdetails.amount, paymentdetails.payment_date)"/> </prompt> The corresponding JavaScript prompt function generated by the system 100 is: function PromptConfirm_payment_details (company, amount,payment_date) var result; result "the company is Bpay_names(company) "the amount is Money(amount) "the payment date is Date(payment date) "is this correct? if( valid_string(result)) return result; WO 2004/010678 PCT/AU20031000939 -16return result; The system 100 represents prompts using a language model that describes all of the prompts that can be played, along with their meanings. This model contains the same type of information as a speech recognition grammar, and therefore the prompts to be played can be represented using a grammar. Prompts to be generated by the application are first represented as a grammar to enable that grammar to be improved using techniques such as grammar learning, as described in International Patent Publication No. WO 00/78022, A Method ofDeveloping an Interactive System. The grammar is subsequently converted into JavaScript and referenced by the application's VoiceXML tags, as described above.
An example of a prompt represented as a grammar is: .Confirmpayment_details the company is Bpay_names:xl the amount is Money:x2 the payment date is Date:x3 is this correct? 1 company=$xl.company amount.dollars=$x2 amount.dollars amount. cents=$x2. amount. cents payment_date=$x3 payment date Returning to Figure 3, after the application has been built at step 604, that is, the extended VoiceXML 214, the grammar 222 and the prompts 224 for the application have been generated by the application builder 206, the application can be tested and further developed at steps 606 to 610. Steps 606, 608, 610 and 612 can be executed in any order.
At step 606, the application can be simulated and refined. This involves simulating the execution of the application and refining its accuracy by allowing the user to tag phrases that do not match the existing grammar. When user input during testing does not match the grammar, a dialog box is displayed, allowing the user to tag the phrase and supply the correct 'slot' or slots corresponding to that input. A slot is a parameter=value pair for the application, such as "fare_class=business". A grammar learner module of the application development modules 210 then uses a transcript of the simulation to update the application grammar 222. New phrases learnt from this grammar are then displayed to the user, who can manually tag individual phrases as being incorrect. At step 608, the grammar WO 2004/010678 PCT/AU2003/000939 -17capabilities of the application can be further improved by a Train Grammar tool of the application development modules 210. This is similar to the simulate and refine module, but allows the user to enter a list of typical user responses for each application prompt. At step 610, a Generate Scenarios module of the application development modules 210 generates scenarios of possible interactions between the application and a human. Based on these scenarios, the user can determine whether and application prompts need improvement.
When the application has been tested and is ready for use, the IVR code generator 208 executes a code generation process at step 612 to generate pure VoiceXML suitable for a particular speech-enabled IVR such as the IVR 102 of Figure 1. As shown in Figure 6, the code generation process begins at step 702 by removing the extended attributes from the extended VoiceXML file 214 to generate pure VoiceXML. At step 704, prompts (including dynamic prompts) in the prompt file 224 are converted into JavaScript functions. At step 706, these JavaScript functions are incorporated into the pure VoiceXML by adding references to the functions in VoiceXML tags, and adding the functions themselves to the pure VoiceXML. At step 708, the IVR grammar file 228 is generated by translating the application grammar file 222 into a grammar format supported by the desired IVR platform, such as NuanceTM GSL or generic VoiceXML 1.0 JSGF grammar format, as selected by the user. Other grammar formats can be supported in the same way. At step 710, references to the IVR grammar file 228 are incorporated into the pure VoiceXML. The result is the pure VoiceXML file 226. The VoiceXML file 226 and the IVR grammar file 228 are sufficient to deploy the voice application on the IVR 102.
For the purposes of illustration, Appendix C provides a partial listing of a pure VoiceXML file corresponding to the first extended VoiceXML file listed in Appendix B. The listing in Appendix C includes the VoiceXML with the merged JavaScript for supporting Prompts.
The JavaScript code is at the end of the listing.
WO 2004/010678 PCT/AU20031000939 -18- Many modifications will be apparent to those skilled in the art without departing from the scope of the present invention as herein described with reference to the accompanying drawings.
WO 2004/010678 PCT/AU20031000939 -19- APPENDIX A: DIALOG ELEMENTS Decision I Description: A point in the dialog where a decision is made to determine which path of execution should continue.
Notes: Each Decision element is followed by one or more Decision-Branch elements.
Parameters: Decision Name: a name for this Decision element Decision branch ±1 Description: A path that is followed if the condition is true.
Notes: Can only be added after a Decision element.
Parameters: Branch Condition: an ECMAScript expression that if evaluated to true will cause execution to continue down this branch, eg. x 2, validity true, currency 'AUD'. Note that strings should be quoted in single quotes. An "else" condition is created by enabling the Otherwise checkbox.
Menu f DESCRIPTION: Prompts the user to select from a series of menu choices Notes: Each Menu element is followed by one or more Menu-Choice.
Prompts for the menu can include: Auto generated prompts (by default); User specified prompts; Audio file for playing prompts.
In addition, tapered prompts are supported.
Parameters: Menu Name: name for this Menu element.
Prompts Tapered prompts: the tapered prompts played to ask for a menu choice. The system can generate a default text prompt based on the menu choices and a default audio file name for recording the corresponding audio prompt, or you may enter in your own values. If an audio prompt is not required, the "Generate default audio file name" checkbox should be unchecked and the "Audio file" text box should be left empty.
Help prompt: the prompt played when the user requests help. As with tapered prompts, the system can generate a default text prompt and audio file name, or you may enter in your own.
WO 2004/010678 PCT/AU20031000939 Menu choice I Description: Defines a specific menu choice Notes: Can only be added after a Menu element.
This is the only Element whose name can have a space.
Parameters: Choice Choice Choice: a word or phrase for this menu choice.
Form 0 Description: Collects user inputs to fill in a 'form'.
Defines a type and prompts for each input.
These can be standard types such as Time and Date, or user defined such as a list of products.
Notes: User-defined-types need to be first created in the LHS Dialog/Project Files window, by rightclicking on 'package' icon.
Selecting "Hot link" allows jumping to the Form from anywhere in the dialog.
The Forms support mixed initiative filling of the Fields.
Other Elements can refer to Form Fields using: "FormName.FieldName".
When entering Form Fields, default string values need to be in single quotes (eg. 'telstra').
Parameters: Form Name: a name for this Form element. An object with this name will be created to store the form fields. Each field can then be accessed as SformName.$fieldName, eg. BuyForm.price.
Modal: if enabled, then only that input field's grammar is enabled when collecting each field; all other grammars are temporarily disabled (including hot-linked global grammars), This means that you cannot get out of this form by saying a hotword. For example, a form that collects a login pin should be made modal.
Confirm All: enable confirmation of all form fields together at the end.
Hot link: enable jumping to the form from anywhere in the document, by creating a document grammar for the form.
Input Field Name: name of slot to be filled.
Type: type of slot value.
Default: default value for slot. If a default is given, the user will not be prompted for the field. If the field type is a structured object, the slot will have multiple properties, one for each of the object's properties. You may specify a default by filling in some or all of these properties, depending on what is valid for a particular type. Note that strings should be quoted in single quotes, eg. 'wednesday'.
Confirm: enable individual confirmation of this field. This is in addition to the form confirmation of all fields at the end.
Input Field Prompts Tapered prompts: the tapered prompts played to collect input for this field. The system can WO 2004/010678 PCT/AU2003/000939 -21generate a default text prompt based on the field name and a default audio file name for recording the corresponding audio prompt, or you may enter in your own values. If an audio prompt is not required, the "Generate default audio file name" checkbox should be unchecked and the "Audio file" text box should be left empty.
Help prompt: the prompt played when the user requests help. As with tapered prompts, the system can generate a default text prompt and audio file name, or you may enter in your own.
Record f Description: Captures a voice recording from the user Notes: Note that the Record duration is in seconds. Setting it to too high will result in excesive memory usage possible harddisk limit problems.
PARAMETERS:
Record Name: a name for this Record element.
MIME-type: MIME-type storage format for the recording. This field may be left blank if the IVR does not allow a MIME-type specification. Please consult your IVR documentation for supported MIME-types.
Beep: enable a beep to be sounded before recording starts.
DTMF Terminate: enable a DTMF key press to terminate the recording.
Duration: maximum recording time in seconds.
Confirm: enable confirmation of the recorded material.
Prompt: the prompt played to ask for a recording. The system can generate a default text prompt and a default audio file name for recording the corresponding audio prompt, or you may enter in your own values. If an audio prompt is not required, the "Generate default audio file name" checkbox should be unchecked and the "Audio file" text box should be left empty.
Speaker L Description: Plays TTS audio to the caller.
Notes: Can say variables of predefined types, such as Date, Money, etc. The variables need to be declared as a valid object (unless it is created via a Form Field). Eg. User can use local processing to declare a variable called price, as follows: price new Object(; price.dollars price.cents 4; To use it in Speaker, type the following: PromptMoney(price) in a Speaker expression fragment.
To play back predefined Types, such as Money: add a Speaker fragment of the type "Expression"; enter in the "Expression" text box: PromptType(x), where Type is the predefined type name, x is the variable of the predefined type. E.g. If is type money (where y.cents-0), then entering PromptMoney(y) will result in the following being played: "five dollars".
Parameters: Speaker Speaker P:AOPER\RAB'A- vice -pplicivflw spo -Wods .epO 7 m 0//1112007 -22- Name: a name for this Speaker element.
Fragment Type: type of prompt fragment.
Text: a fixed text fragment. The text specifies text-to-speech (TTS) that should be played.
The audio file URL specifies a recording that should be played, in precedence to the text-tospeech, eg. greeting.wav, http.//server/welcome.wav. Either of the audio file or the text may be left empty to request that only TTS or audio with no alternate text should be played.
Expression: an evaluated prompt fragment. The ECMAScript expression is evaluated and played as text-to-speech (TTS), eg. recordedMessage, counter I. To play back a variable of a known type, you should use the function PromptType(x), where Type is the name of that type, and x is the name of the variable, eg. PromptMoney(BuyForm.price). This is particularly important for playing back structured types. The audio expression is evaluated and retrieved as an audio file URL for playing, eg. company The expressions may reference any variable defined in the package, such as in a Variables element or a Form object. Either of the audio expression or the TTS expression may be left empty to request that only TTS or audio with no alternate text should be played.
Local Processing I Description: Local computation.
Notes: This can be any ECMAScript code, eg. functions, statements, function calls. Any variable declared in the dialog may be accessed, eg. declared Variables, Form fields, SubroutineCall outputs, RemoteProcessing outputs.
Parameters: arameters: Local Processing Name: a name for this Local Processing element.
ECMAScript: any arbitrary ECMAScript code, such as variable declarations, if blocks, assignment statements, function declarations and function calls, eg. x x I; currency Note that strings should be quoted in single quotes.
Remote Processing M Description: Call a server-side script (via a HTTP URL) to perform some processing. The script should return a VoiceXML document with the results of the processing.
NOTES:
Need PHP/CGI running on remote Web server to handle this. Name of the input and output parameters needn't be declared in the Variables element. The names of the input and output parameters should match what is required at the remote server end. Other Dialog Elements can refer to the output of the Remote Processing clement using: "RemoteProcName.outputName".
Parameters: Remote Processing Name: a name for this Remote Processing element. An object with this name will be created to store the returned outputs. Each output can then be accessed as SremoteProcessingName.$output, eg. ValidatePin. validity Source URL: the URL of the remote script to execute, eg. htp:.//server/cgi-bin/script/.
P:'OPER\RAB'.,, roiec .ppicaiws spa =dss scp07 x-01 1/2007 -23- Input Name: name of the input parameter to be submitted, eg price. This is the name that the server script expects.
Value: value of the input parameter to be submitted, eg. BuyForm.price, I, 'AUD', true, x This may be any valid ECMAScript expression. The expression may reference any variable defined in the package, such as in a Variables element or a Form object. If the value is an ECMAScript object with fields fl, then the object is serialised and submitted using the names o.fl, assuming o is the declared input name.
Output Name: name of each parameter returned by the remote script, eg. outFieldl. The remote script should return a VoiceXML document containing a subdialog form whose return namelist includes all these output fields.
Loop Call 0 Description: Calls a Loop to execute a part of a dialog that should be iterated several times.
Notes: A corresponding Loop element is required.
Parameters: Loop Call Loop Call Name: a name for this Loop Call element.
Source: the loop to call. The loop must be defined in this package.
Subroutine Call EI Description: Start a subroutine. Used for breaking bigger programs into smaller components, for case of readability, reuse of code, and support of pre-packaged code.
Notes: A corresponding Subroutine element is required. Input parameter names needn't be declared.
Ouput parameter names are set by the Subroutine element. Other Dialog Elements can refer to the output parameters by calling: "SubroutineCallName.OutputParamNam".
Parameters: Subroutine Call Name: a name for this Subroutine Call element. An object with this name will be created to store the returned outputs. Each output can then be accessed as $subName.Soutput, eg. ValidatePin. validity.
Source: the subroutine to call (qualified with the package name). If the declared subroutine inputs and outputs have changed, you may need to reselect the subroutine from the Source list box to refresh the displayed inputs and outputs.
Inputs WO 2004/010678 PCT/AU20031000939 -24- This is a list of the inputs that the called subroutine expects. For each input, you must specify an ECMAScript expression whose value will be passed to the subroutine, eg. 0, BuyForm.price, pinValidity, 'AUD'. It may reference any variable defined in the package, such as in a Variables element or a Form object. Note that strings should be quoted in single quotes. Note also that you cannot leave any input value blank.
Outputs This is a list of the outputs that the called subroutine returns.
Jump I Description: Jump to a predefined block. Can jump to any element in the same MainDialog or Subroutine that has a name.
Notes: Valid destinations for Jump: Jumps within a MainDialog; Jump from a Loop in a MainPackage to the MainDialog; Within a subroutine.
Parameters: Jump Destination: the destination element to jump to. You can only jump within a main dialog or within a subroutine. You cannot jump to an element in a loop or in another package. The available elements to jump to are presented in the drop-down list box.
End ii Description: Terminate the call. End of dialog Notes: Parameters: Causes execution to terminate immediately Transfer Pi Description: Transfer the call to another number.
Notes: Parameters: Transfer Name: a name for this Transfer element.
Destination: a number to dial or an ECMAScript expression that evaluates to such a number. A valid number is a string of digits with optional spaces, eg. 1234567, 03 1234567.
The number may optionally contain a protocol specifier. Please consult your IVR documentation for specific supported number formats.
Connection Timeout: maximum time in seconds to wait for a connection before a failure is reported.
Loop Break 0s Description: Used within a Loop to break out of the loop.
Notes: Only valid within a Loop Parameters: Causes execution to break out of the loop immediately. The loop exit message, if any, is not WO 2004/010678 PCT/AU2003/000939 played Subroutine Return A Description: Return from subroutine Notes: Only valid within a Subroutine Parameters; Return from a subroutine call.
Variables HT Description: Notes: Declare "global" variables that can be accessed from anywhere within this Package, eg.
inside a Loop, LocalProcessing, Speaker element.
Form Fields, Subroutine Call outputs and Remote Processing outputs do not need to be declared. They are automatically created.
Parameters: Variables Name: a name for the variable. The name should be unique within this package.
Value: an ECMAScript expression, usually a constant, that sets the initial value for the variable, eg. 0, 'cat', true Note that strings should be quoted with single quotes. The value maybe left empty to create an ECMAScript undefined value.
Hotwords Sr Description: Create "hot words" that transition the user to a specified point in the dialog when they are uttered by the user.
Notes: Allows the user to jump from one part of the dialog to another if they want to do something else, for example.
Hotwords can only be created in the Main Package, not in Subroutine Packages.
Parameters: Hotwords Hotword: a word or phrase that will trigger a jump.
Destination: the destination element to jump to.
Start Dialog This is automatically created when you create a new project. Only the first package has a Start Dialog element. Each project must have one and only one Start Dialog element. You cannot add more Start Dialogs, nor delete any.
P\OPER\RAB.nU vi- .ppikins sp -dWp07 d0c-0111 2007 -26- Parameters: Start Dialog This is the entry point for the application.
Name: a name for this Start Dialog element.
Quit Prompt: the prompt played when the user has requested to quit, after which the dialog will terminate. The system can generate a default text prompt and a default audio file name for recording the corresponding audio prompt, or you may enter in your own values. If an audio prompt is not required, the "Generate default audio file name" checkbox should be unchecked and the "Audio file" text box should be left empty.
No Input Prompt: the prompt played when no input is detected while the user is being asked for a response. The user is then reprompted for a response. As with the Quit prompt, the system can generate a default text prompt and a default audio file name, or you may enter in your own values.
No Match Prompt: the prompt played when the detected user response cannot be recognised by the system. The user is then reprompted for another response. As with the Quit prompt, the system can generate a default text prompt and a default audio file name, or you may enter in your own values.
Subroutine ID Description: This is the entry point for a subroutine.
Notes: Subroutine elements cannot be added to the Main Package. They can only be added to non- Main Packages. More than one Subroutine can be added to a non-Main Package. However, all Subroutine inputs and outputs must be unique within the Package, ic. no two Subroutines can declare the same input name or output name. Furthermore, no input name can be the same as an output name.
The Subroutine element is created by right-clicking on the "Project" icon on the Dialogs/Project Files window (LHS) to add a new Package; and right-clicking on a Package icon on the Dialogs window (LHS) to add a new Subroutine.
Each path in the Subroutine should end with a Return element, otherwise the Subroutine will not return to the calling dialog.
Parameters: Subroutne Subroutine Name: a name for this Subroutine element.
Input Name: name of each input parameter expected, eg. pin. The input will be declared as a document variable that you can access from anywhere within the package. You do not need to (re)declare it under the Variables element.
Output P/OPER\RAB". ,oicc applicmimis spar d dssp07 do-0I1 1/2007 -27- Name: name of each return parameter, eg. validity. The output will be declared as a document variable that you can access from anywhere within the package. You do not need to (re)declare it under the Variables element.
Loop (D Description: A portion of the dialog that should be executed several times.
Notes: The Loop element is created by right-clicking on the Package icon on the Dialogs window (LHS). Variables are freely shared between the Loop body and the main dialog (of the same Package) as they are in one VoiceXML document.
Parameters: Loop Name: a name for this Loop element.
Loop Test: an ECMAScript expression that if evaluated to true will cause execution of the next iteration of the loop, eg. counter Test at start: If enabled, the test condition is evaluated at the start of the loop and the loop is equivalent to a while for loop. If disabled, the loop body is executed before the test condition is evaluated and the loop is equivalent to a do-while loop.
Exit message: a message to be played when the loop exits normally, eg. there are no more items. The system can generate a default text prompt and a default audio file name for recording the corresponding audio prompt, or you may enter in your own values. If a message is not required, the "Generate default..." checkboxes should be unchecked and the "Audio file" and "TTS" text boxes should be left empty.
Loop Init Variables to be initialised at the start of the loop.
Name: name of a variable, eg. counter. The variable must have been created elsewhere, such as in the Variables element.
Value: an ECMAScript expression that sets the initial value for the variable, eg. 0.
Loop Step Variables to be incremented before another iteration of the loop. The increment occurs before the test condition is reevaluated.
Name: name of a variable, eg. counter.
Value: an ECMAScript expression to increment the variable, eg. counter I.
WO 2004/010678 WO 204/00678PCT/AJ20031000939 -28- APPENDIX B: TWO EXTENDED VoiceXML files OF AN APPLICATION FILE 1. DEMO2_8MAY.VXML <?xml version=111.ol, encoding-",utf-8",?> <vxml version=111.O', xmlns:lq='http;//www.telstra.comf.au/LyreQuest"> <link event="help"1> <grammar src-" nulIl#Help I> </link> <link event="repeat"> <grammar src=11null#Repeat,,/> link> <link event="1quit"1> <grammar src= "null#Quit11I> </link> <script> function merge(objl, obj2) if (obj2. undefined) return obj2; else return obji; </script> <var name=-dummy"!> <var name="counter" :Lq~element="DocumentVariables <catch event-",quit"1> <prompt count=1"1 bargein=lltruell lq:text-""> <value expr=11PromptGoodbye0() </prompt> <exit/> </catch> <catch event="noinput"1> <prompt count-"11" bargein="ltrue"l lq-text=1111 <value expr="1PromptNoinput()"/> </prompt> <reprompt/> </catch> <catch event="nomatch"> <prompt count-'l"1 bargein-"true"l lg:text=11"> <value expr= "PromptNomatcho() </prompt> <reprornpt/> </catch> <form id-"DIALOG -MainDialog" lq: element-"1StartDialog11 1q:name="NMainDialog"1> WO 2004/010678 WO 204/00678PCT/AJ20031000939 29 <block name-"l~ink"I> <goto, next= "#SPEAKER sayWelcome" </block> </form> <form id-"SPEAKER -sayWelcome" lq:element="ISpeaker", lq:name=,"sayWelcome"> <block> <prompt> Welcome to the automated X Y z bank </prompt> </block> <block narne=" link"I> <goto next="*tLOOPCALL-call-authenticate loop"!> </block> form> <form id="LOOPCALL-call-authenticate loop"I lq:element=IILoopCall"I lq:name-"call-authenticate_loop"I lq~calls=I"authenticate"I> <subdialog name="loopcall" src="#LOOP -authenticate"> <param name="counter" expr="document counter"/> <param name="~getPIN"I expr-"~document getPIN'!> <param name='validatePIN" expr-",document .validatePTN"I/> <param name&' call get balance"l expr-"document.call_get -balance"/> <param name= "payment details" expr-"document .payment -details"/> <filled> <assign name="document. counter" expr="loopcall counter"!> <assign name-"document.getPIN" expr="~loopcall .get_PIN"!> <assign name="document .validatePIN" expr="~loopcall .validatePlN" <assign name-"document. call get balance"I expr= "loopcall call_get-balance" <assign name="document .payment details"I expr-"loopcall .payment-details"!> illed> </subdialog> <block name="link"y> <goto next="#DECISION-checkPINvalidity"/> </block> orm> <form id='DECTSION -checkPTNvalidity" lq element="Decision" lq name=I"checkPINvalidity"T> <block> <if ccnd-"validatePIN.x &apos;PASS&apos;"> <goto next-" #BRANCHcheckPNvalidity 0 "I> <else/> <goto next="#BRANCHcheckPNvalidity </if> </block> WO 2004/010678 WO 204/00678PCT/AJ20031000939 orm> <form id- "BRANCHI checkPINvalidityO" lq: element-"Branch" lq:condition='validatePIN.x &apos;PASS&apos;"> <block name=I"link'j> <g oto next="I#MENU-main"!/> </block> </frm> <menu id-"MENU main" lq;element-"Menu"l lq:name-"~main"I> <prompt count="1"1 bargein="true"l lq: text=" I> <value expr="IPromptMenu-mainOI> </prompt> <choice next-"#MENUITEM-main-balance"> <grammar src="ntll#Menu-main balance"/> choice> <choice next-"I#MENTJITFM-mai n-enqui ry"> <grammar src= 'null4Menu-main-enquiry"/> </choice> <choice next-"#MENUIITEMmain-leave-message"> <grammar src="nuil#menu-main-leave-message"!> </choice> <choice next=" #MENUITEM_mainpay__bills"> <grammar src="null#Menu-fainpay~bills </choice> <choice next-"I#MENUITEM-main quit"I> <grammar src=",null#Menu-main_quit"!/> </choice> <catch event= "help",> <prompt count="l"1 bargein="true"l lq:text <value expr="PromptHeip__Menu meno </prompt> </catch> <catch event-"repeat"> <reprompt/> </catch> </menu> <form id-"MENEJITEM main balance"l lq: name=I"balance"I> <block name ,"link",> <goto next="#SUBROUTINECALL_call get balance" </block> </form> <var name-"1call get balance", expr="1new Objectol" lq:references="call get -balance"!> <form id-"SUBROUTINECAL-'call get -balance' lq: element="SubroutineCall" lq~name="callget alance" lq: calls-"subroutilel .vxmlftsub..yreseflt -balanlce"> <subdialog name=" subcall" src= "subroutinel .vxml#SUBROUTINE -subpresent-balance"> <param name="pin-nunber" expr=I"getPIN. PIN"I lq: element-" Input" WO 2004/010678 WO 204/00678PCT/A1J20031000939 31 <f illed> <assign name-"call~get balance .result code" expr='subcall result-code"l lq element-",Output"/7> </filled> </subdialog> <block name-"link"> <goto next="I#SPEAKERSpeaker24I1/> </block> </form> <form id="SPEAKER-Speaker24"1 lq: element="Speaker" lq:name-"ISpeaker24"> <block> <prompt> the result of your balance enquiry is <value expr="call get balance. result code" </prompt> </block> <block lq:element="Gotol" lq:next="~main"> <goto next="#MENU-mainII/> </block> form> <form id-"MENtJITEM-main-enquiry" lq:element-"MenuChoice"l lq name-" enquiry"I> <block name="Ilink"I> <goto next=" #9PEAKERSpeaker2l1"/> </block> form> <form id-"SPEAKER-Speaker2l" lq:element="Speaker" lq~name="Speaker2l"I> <block> <prompt> you are being transfered to an operator </prompt> </block> <block name-"l~ink'I> <goto next=1"#TRANSFERTransfer22 </block> </form> <form id="TRANSFER_-Transfer22"1 lq:element="Transfer" lq:name="Transfer22"1 lq:bridge="false"l lq:destination='039253674 2 lq:destinationExpression-"null"I lq: connectTimeout=1130"I> <transfer name="Transfer22", bridge=" false"l dest-"1039253G742"1> </transfer> orm> <form id-"MENIJITEM -main-leave-message"l lq:element-"MenuChoice"l lq:name="leave message"> <block name-" link"> WO 2004/010678 WO 204/00678PCT/AJ20031000939 32 <goto next="#RECORDRecord2O"I/> </block> form> <var name-"Record2O"1 lq:references="IRecord2O"I/> <form id-"RECORD_-Record2IT lq: e2ement-"Record" lq:name="IRecord2OU lq:beep="~true"I lq: duration="13011 lq: dtmfTerminate="true"I lq:mimeType="null" lq:confirm="~true"I> <record name='IrecordRecord2O"1 beep="1true" maxtime="130s" dtmfterm="true"> <prompt count-"l"1 bargein="1true" lq:text="at the tone, please record your message. you can press hash to end."> <value expr="PromptRecordRecord2OC) </prompt> </record> <field name-"Iconfirm"l modal-"~true"I> <grammar src="null#Confirm"I/> <prompt> Your recording is <value expr="1recordRecord2O"1/> To keep it, say yes. To discard it, say no.
</prompt> <filled> <if cond-"1confirm 'yes'"> <clear/> illed> <catch event=1"help"> <prompt> Please say yes to keep your recording, or say no to record another message.
</prompt> </catch> <catch event="repeat"> <prompt> Your recording is <value expr="~recordRecord2O"I/> To keep it, say yes. To discard it, say no.
</prompt> </catch> ield> <block> <assign name="Record2O"1 expr=I"recordRecord2O" 7> </block> <block lq:element="Goto"l lq :next="main"I> <goto next=I"1fMENU-main"!/> </block> orm> <form id-"IMNMITEM mainpay bills"I lq: element="MenuChoicell lq:name="1pay bills"> <block name=I"link"I> <goto next="i#FORMpayment-details"!> </block> WO 2004/010678 WO 204/00678PCT/AJ20031000939 33 orm> <var name-"1payment details,, expr-"1new Objectol" lq:references="payment -details"/> <form id=" FaRMpayment -details" lq element=" Form' lq:name="payment -details" lq:rnodal-"false"I lq~confirm="true"I lq documentGrammar=" true"I> <grammar scope="document" src="null#Form..yaymentdetails"/> <field name '"companvl" cond-"1false"l/> <field name="amount" cond-"~false"/> <field name="payment_date" cond-"false"/> <-block> <assign name='payment details. company"I expr-"~company"I/> <assign name='payment -details. amount" expr'="amcunt"I/> <assign name="payment details .payment date"I expr= "payment date"!> </block> <subdialog name= "payment -details-company" src=" #ASK-payment_details company"> <param name="payment details" expr= "payment-details"!> <filled> <assign name= "payment details" expr= "payment details-company.payment details"!> illed> </subdialog> <subdialog name="1payment -details-amount" src="14ASIKpayment-details-amount"> <param name="payment details" expr-"~payment_detailsI"/> <filled> <assign name="payment details" expr="pay-ment-details 7amount .payment details"!> <If3illed> </subdialog> <block> <if cond-"payment-details.paymfent_date ==undefined"> <script> <I CDAT-k payment_details.payment-date =new Object 0; payment_details .payment-date ,modifier 'today';
A]>
</script> </block> <subdialog name='payment details payment-date"l src= '#ASKpayment_detailspayment-date"> <param name= "payment details" expr="~payment details"!/> <filled> <assign name="1payment -details" expr= "payment-details-payment date. payment details"/> </tilled> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -34- </subdialog> <field name="1confirm"> <grammar src=,,null#Confirm"I/> <prompt> <value expr="PromptConfirumpayment -details (payment -details. company, payment_details .amount, payment_details .payment date) "1> </prompt> <filled> <if ccnd="Iconfirm 1- 'Yes'"> <assign name="payment details .company"I expr="undefined" I> <assign name-"payment_details .amount" expr=",undefined"/> <assign name="payment details .payment date"I expr=" undefined"!/> <clear/> </filled> <catch event="help"> <prompt> <value expr="PromptHelpCofirflpaymeflt -details C)"I> </prompt> </catch> <catch event="repeat"> <reprompt/> </catch> ield> <block lq:element="Goto"l lq:next="~main"> <goto next='#MENU-main"!/> </block> </form> <form id="ASKpayment -detailscompany" lq element="FormField" lq: references="Ipayment -details" lq:name-"~company"I lq:type-"~bpay names"I lq:detault="" lq:confirm="tfalse",> <,grammar src= "null#Askpaymnent details company"!> <var name= "payment details"!/> <block> <if cond="paymnent details. company undefined"> <return namelist=",payment-details,'> </block> <field name='1company" cond="1false"l/> <field name=1'amount" cond=",false"I/> <field name-"payment -date" cond="tfalse",/> <initial naine="Tstart"> <prompt count=-l" bargein='Itrue"l lg~text="please say the company" WO 2004/010678 WO 204/00678PCT/AJ20031000939 35 <value expr="PromptAskpaymeflt -details-company() "1> </prompt> </initial> <filled mode-"afly"> <assign name="paymentdetails .company"I expr="merge(payment details.company, company)"/> <assign name= 'payment details. amount" expr="merge (paymentjdetails .amount, amount) <assign name="payment-details .payment date"I expr="merge (payment -details .payment_date, payment_date)I"1> <if cond="payment-details.company undefined"> <clear/> </if> </filled> <block> <return namelist="payment-details"/> </block> <catch event-"1help"> <prompt count-"L"1 bargein-"true"l lq:text-"please say the company. "1> <value expr= "Prompt~elp__Askymeftetails_company </prompt> </catch> <catch event="repeat"> <reprompt/> </catch> farm> <form id="ASK-payment Tdetails -amount" lq: element="FormField" lq:references="paymeflt -etails"T lq:name="afount" lq:type="Money" lq:default-" EU' lq:confirm="falseII> <grammar src="null#Ask pavment-details-amount"!/> <var name="~payment details"!> <block> <if cond="paymeflt -details .amount undefined"> <return namelist=I"paymelt details"!/> </block> <field name-"amount" cond="false"!> <field name-"paymeflt_date"l cond-1false"!/> <initial name-"1start"> <prompt count-i"11 bargein="true"l lq~text=""> <value expr-"PromptAsk~payment -details-amount </Prompt> </initial> <filled mode="1any"> WO 2004/010678 WO 204/00678PCT/AJ20031000939 36 <assign name="payment -details .amount" expr="merge (payment details. amount, amount) "I> <assign name= 'payment details .payment date"I expr="merge (payment details .paymfeft_date, payment <if cond="payment -details amount undefined"> <clear/> illed> <block> <return namelist="payment-details '1> </block> <catch event=11help"> <prompt count='l"1 bargein="Itruell lq:text=""> <value expr=TPromptelp:Zskpayment-etailsamoult C) </prompt> </catch> <catch event-"1repeat"> <reprompt/> </catch> form> <form id="ASKpayment Tdetailsypayment -date" ig: element='FormField" lq: references="payment -details" lq: name="payment date"l lq :type='Datel" lq:default=" [{mcdifier='today' lq:confirm-"~true"I> <grammar src="null#Ask-Payment_detailspayment-date"/> <var name=I"payment details"!/> <block> <if cond="payment details.payment date 1= undefined"> <assign name="1start" expr-"t rue"l/> <goto nextitem="1confirm" I> </block> <!field name="payment -date", cond="1false"l/> <initial name=1'start"> <prompt count=1"1 bargein="true'l lq:text=""I> <value expr-"PromptASkp-ymeft -details payrnent-dateol) </prompt> </initial> <filled mode="1any"> <assign name='7payment -details .payment-daue"l expr="merge (paymentdetails .payment date, payment_date) <if cond="paymentdetails.payment_date undefined"> <clear/> </filled> <field name="confirm"> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -37- <grammar src nul l#Conf irm" I> <prompt> <value (payment details .payment_ date) </prompt> <filled> <if cond-"contirm 'yes'"> <return namelist=",paynent details"!/> <else/> <assign name="payment details .payment date" expr= "undefined"!> <clear/> </filled> <catch event= 'help"I> <prompt> <value expr="PromptHelpConfir~paymentdetails~payelt.ate
C)"I>
</prompt> </catch> <catch event=1"repeat"> <reprompt/> catch> </field> <Catch event="help"I> <prompt count="l"1 bargein="true'l lq:text=I"'> <value expr=tPronptHelpAskpaymfentdetails~paymeflt-ate </prompt> </catch> <catch event="1repeat"> <reprompt/> </catch> form> <form id-"MENUITEM main quit' lq: element=&MenuChoicell lq name-" quit"I> <block lq element=I"End"I> <exit!> </block> form> <form id="BRANCH -checkPINvalidity_1", lq:element="Branch' lq: condition= "otherwise" <block name- "link",> <goto next="ItSPEAKER-failedPIN"I/> </block> orm> WO 2004/010678 WO 204/00678PCT/AJ20031000939 33- <form id-"SPEAKER-failedPlN" lq: element=" Speaker' lq: name="~failedPIN"I> <block> <prompt> You have not been authenticated. Goodbye.
</prompt> </block> <block lq:element="IEnd",> <exit/> </block> orm> <form id="1LOOP -authenticate" lq: elcent="ILoop"I lq-.name=,,authenticate"l lq:testatstart-"~true"> <var name=" counter" <var name=,"getPIN"!/> <var name=",validatePIN"I/> <var name="call get balance"/> <var name="payment details"!> <block> <assign name="document. counter" expr-"~counter"I/> <assign name=",document.get_PIN"I expr=I"get_PIN"!> <assign name="document .validatePIN" expr="validatePINI,/> <assign name="document.call get-balance"l expr="call-get-balance"!> <assign name="document .payment details"I expr="payment details"/> </block> <block> <goto next=" #LOOPINIT-authenticatell/ </block> </form> <form id="LOOPINITTauthenticate"l lq~ references="authenticate"y> <block> <assign name="counter" expr="C"1 lq:element="Looplnit"I/> <goto next="#LOOPTEST-authenticate"!> </block> </form> <form id="LOOPTEST authenticate" lq: element= "LoopTest" lq~test-"'counter&lt;3"I lq:references="authenticate"> <block> <if cond- "counter&lt;3"1> <goto next="#LOOPBODY-authenticate'!/> <else/> <goto next-"#LOOPEND-authenticate"!> </block> orm> <form id=11LOOPEND -authenticate" lq: element="LoopEnd" lq: references&' authenticate"> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -39- <block> <prompt count=-"l" bargein="true"l lq~text=""1> <value expr- "PromptLoop~xit authenticate </prompt> <return namelist-"counter get-PIN validatePlN call_get balance payment-details </block> </form> <form id='LQOPSTEP-authenticate'l lq: references="authenticate"l> <block> <assign name="counter" expr="1counter+l"1 lq: element=" LoopStep" I> <goto next=" #LOOPTEST-authenticaite" </block> form> <form id-"LOOPBODY -authenticate" lq: element="1LoopBody" lq: references="authenticate"> <block name-"1link"1> <goto next-"itfFOR4 getPIN"!/> </block> </fom <var name="1getPIN" expr="1new Objecto0" lq: references="1getPIN"/> <form id="1FORM__get_PIN"1 lq: elernent="Form" lq:name="getPIN' lq :modal="1true"1 lq: confirm="false"l lq documentGrammar="1false",> <field name="1PIN" cond-"1false"T/> <block> <assign name="1getPTN.PTN" expr=T1PIN"T/> </block> <subdialog name-"get_PIN_-PIN" src="*#ASK get PIN-PIN"1> <param name="getPIN11 expr="gqet_PIN"!/> <filled> <assign name="1getPIN" expr-" get-PIN-PIN.getPIN1/> illed> </subdialog> <block name-" link"1> <goto, next="1#REMOTE-validatePIN" I> </block> </form> <form id='"ASK -getPINPIN"I lq:elernent="FormField" lq:references="get -PIN" lq:name-"1PIN"1 lq:type="Digitstring" lq:default="" lq: confirm-"1false"1> <var name="1get-PIN'!/> <block> <if cond-"getPIN.PIN !=undefined"> <return namelist='1get-PIN"1/> </if> </block> WO 2004/010678 WO 20410 0678PCTiAU2003!000939 <field name-"1PIN11 modal=",true"> <link event=1"help"1> <grammar src-",null#H-elp'1/> </link> <link event="repeat"> <grammar src- 'null#Repeat ?I> link> <grammar src=,,nulli*Askc get PINPIN" <prompt count=11l" bargein="true"l lq.-text="1please say your four digit PIN number"> <value expr='PromptAsk get_PINPINo"/> </prompt> <prompt count='121 bargein="true"l lq: text="second prompt. please say the pin. Example is one two three four."> <value expr="PromptAsk get_PINPIN_2 </prompt> <filled> <assign name="1get_PIN.PIN"1 expr="merge (get_PIN.PIN, PIN)"/> </filled> </fileld> <block> <return namelist="1get_PIN!/> </block> <catch event="help"1> <prompt count-"1"1 bargein='1true', lq :text=""> <value expr="PromptHelp_ :sk get PINPIN </prompt> </catch> <catch event- 'repeat'> <reprompt/> </catch> </form> <var name="vaJlidatePIN" expr=11new Object lq: ref erences=1"validatePIN" <form id-"1REMOTE -validatePlN11 lq: element-"RemoteProcessing" lq name=11validatePIN1" lq:src="http://videre.trl.telstra.com.au/-c797808/cgibin/verifypin. php",> <var name="sendingpam" expr-"1getPIN. PIN11 lq: element=" Input"/> <subdialog name="remotecall" src="http://videre.trl.telstra.com.au/-c797BOB/cgi-bin/verify-Pi.php" namelist-'1sendingpam "1> <filled> <assign name="validatePIN.x" expr='remotecall.x" illed> </subdialog> <block name="1link',> <goto next='#DECISIONjpassOrFail"/> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -41- </block> frm> <form id-"DECISION-passOrFail" lq:element="Decisiol" lq name- "passOrFail <block> <if cond="validatePIN.x &apos;PASS&apos;"> <goto next=t#B3P-ANCH~passOrFail011/> <else/> <goto next="'#BRZANCH-passOrFaill 1> </block> form> <form id="BRANCHpjassOrFail_0" lq: element="Branch" lq:condition='validateTIN.x &apos;PASS&apos;"> <block iq:element-"Break"> <return namelist-"counter getPIN validatePlN call_get balance payment details </block> </fto rm> <form id=lBRANCH-passOrFail_11" lq:element "'Branch"l lq: conditicn="otherwise"> <block name-"link"> <goto next="#SPEAKER-tryAgainh!> </block> </form> <form id="SPEAKER-tryAgain' lq:element="Speaker" lq name-" tryAgain"> <block> <prompt> Your PIN is not valid. Please try again.
</prompt> </block> <block lq:element="Next"> <goto next="#LOOPSTEP authenticate </block> orm> </vxml> WO 2004/010678 WO 204/00678PCT/A1J20031000939 42 FILE 2. SUBROUTZNEI.VXML <?xml version-"l encoding="1utf-8"1?> <vxml version="1.O"1 xmlns:lq="http://www.telstra.com.au/LyreQuest"> <link event='1helpfl> <grammar src='null#Help" I> link> <link event="1repeat,,> <grammar src- "null#Repeat11/> </link> <link event=",quit'1> <grammar src-"1null#Quit"1/> link> <script> function merge (objl, obj2) if (obji undefined) return obj2; else return obji; </script> <var name="_dummy"!> <var name=" customer-balance"l lq: element= "DocumentVariables <var name-"pin -number" lq:references="subpresent-balance"!> <var name="1result code", lq: references="subpresent. balance'!> <form id= "SUBROUTINE_subpresent balance"I lq:element="Subroutinel lq:name="sub-present -balance"> <var name= "pin -number" lq -element=" Input" <var name=11result-code"l lq: element="1Output"1/> <block> <assign name= "document .pin -number" expr="1pin-nuiber"1/> <assign name="document.result-code"l expr="1result-code"!/> </block> <block name-"1link"1> <goto next-"i4FORMForm4"1/> </block> orm> <var name="Form4", expr-"1new Object()" lq:references-"1Form4"1/> <form id='1FORM_-Form411 1q:element="Form" lqnama-"1Form4"1 lq:modal=1t1falseI lq:confirm-"1true"1 lq:documentGrammar=",falSe",> <field name-'account-number" cond-"false"/> <block> <assign name="1Forn4 .account-number"T expr= "account number"!> WO 2004/010678 WO 204/00678PCT/AJ20031000939 43 </block> <subdialog name-"Form4_account-number" src="#ASKForm4_account-number"> <param name=" Form4" expr-" Form4"I/> <filled> <assign narne="Form4"' expr=" Forrn4_account numnber. Form4 illed> </subdialog> <field name-"confirm"> <grammar src="null#ConfirmII/> <prompt> <value expr="PromptConfirmForm4(Form4.account-number)'!> </prompt> <filled> <if cond-"confirm 'yes'"> <assign name="Form4.account number"i expr="-undefined"/> <Clear/> illed> <catch event="help"> <prompt> <value expr="PromptHelpConfirmForm4C) </prompt> </catch> <catch event=1"repeat"> <reprompt/> </catch> ield> <block name- "link"> <goto </block> </form> <form id="ASK Form4_account-number" lq:element "FormField"l lq: references-"Form4"' lq:name="account-number" ij: type="Digitstring"I lq:default-"" lq:confirm~IufalseII> <grammar src="null#AskForm4_account-number"!> <var name=I'Form4 I!> <block> <if cond="Form4.account number 1= undefined"> <return namelist=IForm4 Ill> </block> <field name="1account number" cond="'false"/> <initial name-"1start"> <prompt count= 1"1 bargein= "true"l lq: text=I"> <value expr="PromptAsk Form4 account-number()"/> </prompt> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -44initial> <filled mode="any"> <assign name="Form4 .account numberT 1 expr="merge (Form4.account -number, account -number),,/> <if cond-"Form4.account-number undefined"l> <clear/> if> filled> <block> <return namneli st=" Form4" </block> <catch event="help"> <prompt count=11l" bargein="true"l lq: text=""> <value expr- "PromptHelp__Ask Form4_account-number C) T!> </prompt> </catch> <catch event-" repeat"> <reprompt/> </catch> </form> <form. id="LOCAL TLocalProcessing5", lq: element="yLocalProcessilg" <block> <script> <1 [CDATA [customer balance =new Object(); if (Form4.account -number customer -balance.dollars io00'; customer-balance.cents Ielse customer -balance.dollars customer-balance.cents 2'; result-code =pin-number 1;J </script> </block> <block name= "link"l> <goto next="#SPEAKEP._Speaker6"/> /block> form> <form id="SPEAKER-Speaker6", lq:element="Speaker" lq:name="Speaker6'I> <block> <prompt> your balance is <value expr-"Promptmoney (customer-balance) </prompt> </block> WO 2004/010678 PCT/AJ20031000939 45 <block lq: element= "Return."> <return namelist="result code </block> form> </vxml> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -46 APPENDIX C: PORTION OF A SYSTEM GENERATED VoieeXML FILE FILE 1. DEMO2_8MAY.VXML (INCOMPLETE, FOR EXAMPLE ONLY) <?xml version="1.O"1 encoding="1utif-8"?> <IDOCTYPE vxml PUBLIC "1-//Nuance/DTD VoiceXML 1.2/ENII llhttl)://voicexml.nuance.com/dtd/nuancevoicexml-1-2.dtd"> <vxml version-"l application-"demc2_8may.vxml"> <link event="help1V> <grammar src=1"demo2_Bmay.gsl#Help"1/> </link> <link event=1"repeat"1> <grammar src= demo2 8may.gsl#Repeat"1/ </1link> <link event="lquit"l> <grammar arc- "demo2-8may.gsi#Quit"1/> link> <script> function merge(objl, obj2) if (objl undefined) return obj2; else return objl; </script> <var name=-dummy"!> <var name=1"counter"!/> <catch event="quit"> <prompt count-"l"1 bargein=11true"1> <value expr=' PromptGoodbyeo() </prompt> <exit!> </catch> <catch event= "noinput"> <prompt count="1"1 bargein= "true"> <value expr= I!PromptNoinputo() </prompt> <reprompt/> </catch> <catch event= "nomatch"> <prompt count&'1"1 bargein="1true"> <value expr="PromptNomatch() </prompt> <reprompt/> WO 2004/010678 WO 204/00678PCT/A1J20031000939 4'7- </catch> <form id="1DIALOGMainDialog"> <block name-"1link"> <goto next="*#SPEAKER-sayWelcome"!/> </block> </form> <form id-" SPEZXKER sayWelcome"1> <block> <prompt> Welcome to the automated X Y Z bank </prompt> </block> <block name- "link 1 <goto, next="#LOOPCALL-call-authenticate loop"!> </block> </form> <form id-"1LQOPCALL -call-authenticate loop'> <subdialog name="loopcall' src="#LOOP -authenticate"> <param. namne="counter" expr="document counter"/> <param. name="1getPIN"1 expr=1"document.get_-PIN"/> <param. name-"1validatePIN"1 expr-"1document .validatePTN"1/> <param. name= "call get balance'T expr=" document. call_cget -balance"/> <param name= "payment det ails" expr-"document .payment -details"/> <filled> <assign name="1document.counter" expr=",loopcall .counter"!/> <assign name="document.getPIN" expr= "loopcal1. getPIN"!/> <assign name="document .validatePlN" expr= loopcall .validatePlN" <assign name="document .call get balance"I expr="loopcall.call_get-balance"!> <assign name="document .payment details"I expr-"loopcall .payment-details"!> </filled> </subdialog> <block name=" link"1> <goto next="#fDECISION-checkPINvalidity"/> </block> form> <form id-"DECISION-checkPINvalidity"> <block> <if cond="validatePlN.x ==&apos;PASS&apos;"> <goto next-"#BRANCH-checkPlNvalidity 0 <else/> <goto next="44BRZANCH-checkPINvalidity </block> WO 2004/010678 WO 204/00678PCT/A1J20031000939 -48 form> <form id= "BRAfCH -checkPINvalidity_0"> <block name="link"> <goto next=TI#MEN~Umain"/> </block> form> <menu id-"MENU main"> <prompt count-1"1 bargein= "true"I> <value expr="IPromptMenu-main() </prompt> <choice next-"I#MENUITEM -main-balance"> <grammar src="demo2_8may.gsl#Menu-main-balance"/> choice> <choice next="#MENUITEM-main enquiry"l> <grammar src=Idemo28Smay.gsl#iMenu-main-enuiryv/> choice> <choice next="#MENEJITEM -main-leave-message"> <grammar src="demo2_8may.gsl#*Menu-main-leave-message"/> </choice> <choice next="#MENUITEM-mainpay_ bills"> <grammar src="demo2_8may. gsll*Menu mainpay_ bills"!> </choice> <choice next="I#MENUITEM-main quit"I> <grammar src="demo2_8may.gsl#Menu main quit"!> choice> <catch event="Ihelp"I> <prompt count-"1"1 bargein= "true"> <value expr= "PromptHelp__Menu main </prompt> </catch> <catch event='repeat"> <reprompt/> </catch> </menu> <form id="MENUITEM main balance"> <block name- "link"I> <fgoto next-"#SUBROUTINECALL call get-balaice" </block> </form> <var natne="call-get-balance" expr='new Objecto"!/> <form id="SUBROUTINECALL call get -balance'> <subdialog name=" "subcall 1 src-"subroutinel .vxmli#SUBROUTINE -subpresent-balance"v> <param name=1"pin number" expr="getPIN. PIN"!/> <filled> <assign name="call get balance. result-code"I expr="subcall result -code"/> illed> </subdialog> <block name= "link"> WO 2004/010678 WO 204/00678PCT/A1J20031000939 49 <goto next-"#GPEAKEPSpeaker24"/ </block> form> <form id-"SPEAKER Speaker2411> <block> <prompt> the result of your balance enquiry is <value expr="call get-balance .result code"!> </prompt> </block> <block> <goto next='#MENU-main"/> </block> form> <form id="MENUhTEMmainenquiry"> <block name="link <!goto next=" #SPEAXERSpeaker2 </block> </form> <form id- "SPEAKER gpeaker2l1 <block> <prompt> you are being transfered to an operator </prompt> </block> <block name-"link"> .:goto next-"#TRANSFER Transfer22 </block> </form> <form id="TRANSFERTransfer221"> <transfer name="Transfer22", bridge="1false" connecttimeout="30" destexpr-" 'tel:0392536742'"1> </transfer> </fom <form id=ID4ENUITEM main -leave mes sage"> <block name=7'link"> <goto next="#RBCORDRecord2O"/> </block> </orm> <var name= "Record2 <form id="RECORDRecord20"1> <record name=T"recordRecord20" beep="1true" maxtime&'13 s"l dtmfterm=" true" <prompt count-"1"1 bargein="true"> <value expr="PromptRecord Record2o0() </prompt> WO 2004/010678 WO 204/00678PCT/AJ20031000939 record> <field name="confirm"l modal='"true"> <grammar src=" demo2_8may. gsl#*Confirm" I> <prompt> Your recording is <value expr-"~recordRecord2O"/> To keep it, say yes. To discard it, say no.
</promfpt> <filled> <if cond="1confirm 'Yes'"> <clea~r!> illed> <catch event=11help"> <prompt> Please say yes to keep your recording, or say no to record another message.
</prompt> </catch> <catch event&'repeat"> <prompt> Your recording is <value expr="recordRecord2011/> To keep it, say yes. To discard it, say no.
</prompt> </catch> </fijeld> <block> <assign name="Record2O"1 expr="recordRecord2O"/> </block> <block> <goto next="I#MENU-main"I/> </block> </form> <form id-"MENUITEM -mainjpay__bills"I> <block name=I"link"I> <goto next="#FORM~yayment_details"!> </block> form> <var name="1payment -details" expr-"1new ObjectC)"/> <form id-"IFORMPayment details TI> <grammar scope=-"document" src= "demo2_8may .gsl#Formnpayment_details"!> <field name=1"company" cond-"false"/> <field name~l"amount" cond-"1false"l/> <field narne=,payment date"l cond="~false"I/> <block> <assign name="payment_details. company"I expr="1company"/> <assign name="1payment -details .amount" expr="amount"I/> <assign name= "payment details .payment date"I expr="1payinent-date"!/> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -51 </block> <subdialog name= "payment -details-company" src= "#ASKpayment_details_company"> <param name="payment details" expr=,'paynent details"!/> <filled> <assign name="paynent details' expr="payment-details-company.payment details"!>, illed> </subdialog> <subdialog name="1payment -details-amount" src= "#ASKpayment_details -amount"> <param name-"payment details" expr="Ipaymentdetails"I/> <filled> <assign name="1payment details" expr="payment-details-amount .payment details"!> illed> </subdialog> <block> <if cond="payment-details.payment_date undefined"> <script>
ECDATA[
payment_details.payment-date new Object(); payment-details .payment_date.modifier today'; </script> </block> <subdialog name="payment -details payment-date"l src= "#ASKpayment_detailspayment -date"> <param name="payment details" expr="paymentdetails" <filled> <assign name="payment -details" expr-"payient-detailspayment date .payment_details"!> illed> </subdialog> <field name="Iconfirm"I> <grammar src="demo2_Bmay.gsl#Confirm"/> <prompt> <value expr-"lPromptConfirmpayment details (payment-details.company, payment details. amount, payment-details .payment-date) </prompt> <filled> <if cond="confirm 1='Yes'"> <assign name="payment_details .company"I expr=,"undefined"!/> <assign name-"payment_details .amount" expr- Iundefined"!/> <assign name="payment detai ls.payment date"I expr= "undef ined"!> <clear/> WO 2004/010678 WO 204/00678PCT/A1J20031000939 52 filled> <catch event "help"> <prompt> <value expr="PromptHelpCoffirmpaymelt-detailsoC
I/>
</prompt> </catch> <catch event="pa"> <reprompt/> </catch> </fileld> <block> <goto next="#MENU main"!/> </block> </form> <form id- "ASKpayment -details company"> <grammar src="demo2 8may. gsl#Askpayment-details company"!> <var name=I"payment details"!/> <block> <if cond="payment -details. company undefined'> <return namelist-"~payment details"!/> </block> <field name="company" cond="1false"l/> <field name="amount" cond-"Italse",/> <field name-"payment-date"l cond="~false"I/> <initial name- "start"> <prompt count= 1"1 bargein=1"true"> <value expr=" PromptAskpayment -details companyOC I> </prompt> </initial> <filled mode="1any"> <assign name="paymeit details company"I expr="merge(paymentdetails.company, company)"/> <assign name="payment details .amount" expr-"merge (payment details. amount, amount)"!> <assign name="payment details .payment -date" expr-"merge (payment details .payment date, payment-date) I> <if cond="payment details. company ==undefined"> <clear!> <'if> </filled> <block> <return namelist=I"payment_details"!/> </block> <catch event="1help"> WO 2004/010678 WO 204/00678PCT/A1J20031000939 53 <prompt count-'1"1 bargein=" true"> <value expr="Prompt~elp__Ask__ayment -details_companyO( I/> </prompt> </catch> <catch event=1'repeat"> <reprompt/> </catch> form> <form id=I"ASKpayment details -amount"> <gramnmar src-"demo2_Smay.gsliAskpayment-details-amount"/> <var name="payment detailsII/> ,<block> <if cond="payment details. amount undefined"> <return namelist="payment-details"!> </block> <field name="amount" cond="Ifalse",/> <field name="payment_date"l cond-"false"/> <initial name-",start"I> <prompt count-"1"1 bargein- "true"> <value expr="PromptAskpayment_details-amount </prompt> </initial> <filled mode=",any"f> <assign name="payment -details amount" expr="merge (payment details. amount, amount) "1> <assign name="1payment -details.payment date"l expr="merge (payment details .payment date, payment_date)I/> <if cond="payment -details. amount undefined"> <clear/> </filled> <block> <return namelist- "payment-details"/ </block> <catch event- "help"> <prompt count=1"1 bargein=1"true"> <value expr="11PromptHelp__Askpayment details-amount </prompt> </catch> <catch event-" repeat"> <reprompt/> </catch> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -54rm <form id="ASKpayment_detailspayment_date'> <grammar src="demo2 8may.gsl#Ask~payment-detailspayment date"!> <var name="payment-details"/> <block> <if cond="1payment -details.payment_date 1=undefined"> <assign name= "start" expr=?ItrueT'/> <goto nextitem="confirm'/> </if> </block> <field name="payment -date" cond=1false"l/> <initial name=I"start"> <prompt count "1"1 bargein "true"l> <value expr= "PromnptAskpayment detailspayment_date </prompt> </initial> <filled mode="1any"> <assign name="payment details .payment date" expr-"merge (payment details .payment -date, payment_date) <if cond="payment-details.paynent-date undefined"> <clear/> </if> </filled> <field name="confirm"> <grammar src= "demo2_Bmay.gsl#Confirm"/> <prompt> <value expr= Pop~nimpamn~ecLlspyetdt(payment details .payment_ date) </prompt> <filled> <if cond--"confirm 'yes'"> <return namelist="~payment details'!/> <else!> <assign name-"payment details.payment date"I expr=Ilundefinedh!/> <clear/> <lif> illed> <catch ev-ent=I"help"I> <prompt> <value expr- "PromptHelpConfirmpayment_detailsyayment_date </prompt> </catch> <catch event= "repeat"> <reprompt/> </catch> ield> WO 2004/010678 WO 204/00678PCT/AJ20031000939 55 <catch event-"1help"1> <Prompt count="1"1 bargein-" true"> <value expr=11PromptHelpAskpaymfeflt -etails~paymelt-date </prompt> </catch> <catch event="repeat"> <reprompt/> </catch> orm> <form id= "MENUITEM main quit"1> <block> <exit/> </block> </fom <form id- "BRANCH -checkPlNvalidityl "1> <block name="1link",> <goto next='1*SPEAKER-failedPlN",/> </block> form> <form id=1"SPEAKER-failedPIN"1> <block> <prompt> You have not been authenticated. Goodbye.
</prompt> </block> <block> <exit/> </block> form> <form id="1LOOP authenticate"> <var name="1couflter"1/> <var name="1get PIN"!> <var name=1"val idateP IN" <var name="call get balance"/> evar name=1"payment details11/> <block> <assign name="document.counter" expr-"1counter"1/> <assign name='1document .get_PIN" expr-"gqet_PIN"!/> <assign name="document .validatePIN' expr=1"validatePIN" I> <assign name="document. call get-balance"I expr="call-get-balance"!> <assign name="document .payment details"I expr-"payment details"!> </block> <block> WO 2004/010678 WO 204/00678PCT/AJ20031000939 -56- <gata next&' #LOOPINIT-authenticate"/> </block> </form> <form id-"LOOPINIT-authenticate"> <black> <assign name="caunter" expr="O <goto next=T#LOOPTEST authenticate"/> </block> </form> <form id-"LOOPTEST-authenticate"> <block> <if cond="caunter&lt;3"1> <goto next=" #LOOPBODY-authenticate" I> <else/> <goto next=" #LOOPEND-authenticate"!> </block> </form> <form id= "LOOPEND-authenticate"> <block> <prompt count-"1"1 bargein="true"> <value expr="PromptLoopExit authenticate()"/> </prompt> <return namelist="counter get-PIN validatePTN call get balance payment-details </block> </foarm> <farm id= ILOOPSTEP authenticate"> <block> <assign name= "counter" expr=",counter+l"1/> <goto next-"i4LOOPTEST-authenticate"/> </block> </foarm> <farm id= "LOOPBODY authenticate"> <block name=,1link,1> <gato next="1#FORM get_PIN"!/> </block> a/frm> <var name="1get-PIN"1 expr= "new Object <foarm id="1FORKM getPIN"> <field name="PIN"1 cond-"1false",/> <block> <assign name="get-PIN.PIN" expr-"1PIN"!/> </block> <subdialag name-"get_PIN_-PIN" src="4#ASK _getPIN PIN"1> <param name='getPIN"1 expr=11get_PINTI!> <filled> WO 2004/010678 WO 204/00678PCT/A1J20031000939 -57- <assign name="1getPIN"1 expr=11get-PIN-PIN get_PINT[/> <filled> <I subdialog> <block name-"1link"1> <goto next= "#REMOTB-validateP IN" I> </block> </form> <form id="1ASIK get_-PINPIN"> <var name="1getPIN" <block> <if cond="get_PIN.PIN undefined"> <return namelist-"1get PIN"!/> </block> <field name-"1PIN"1 modal="1true"> <link event=,"help"1> <grammar src="1demo2 8may. gsl4Help"1/> </link> <link event="1repeat"> <grammar src="1demc2 Bmay. gsl4Repeat"1/> </link> <grammar src="demo2_8may. gsl#Ask get PINPIN"/> <prompt count="1"1 bargein=" true"> <value expr="PromptAsk getPINPINo)"/> </prompt> <prompt count=1"2", bargein=1"true"1> <value expr="PromptAskcget_PINPIN_2()"/> </prompt> <filled> <assign narne="1get_PIN.PIN"1 expr="merge (get_PIN.PIN, PIN)"/> illed> ield> <block> <return namelist=1"get_PIN"!/> </block> <catch event-"1help"1> <prompt count-"1"1 bargein-" true"> <value expr="PromptHelp__AskgetINPIN)"/> </prompt> </catch> <catch everit="repeat"> <reprompt/> </catch> orm> WO 2004/010678 WO 204/00678PCT/AJ20031000939 58 <var name-"validatePlN" expr=Tlnew Object <form id="REMOTE -validatePlN"> <var name="sendingpam" expr='FgetPIN.
PINIT/>
<subdialog name= "remotecall" sr=ht:/ieetltltacmau-770/g-i/eiypnpp name list= sendingjpam 11> <filled> <assign name="validatePlN.x" expr=Iremotecall.xTI/> illed> </subdialog> <black name-"link"> <goto fex="#DECISIONypassOrFail </block> </form> <form id= "DECISION~passOrFail <block> <if cond="validatePlN.x &apos;PASS&apos;"> <goto next-"#fBRANCHpassOrFail_0"/> <else/> <goto next="#BRANCHpassOrFaill1'"I> </if> </block> orm> <form id="BRANCH-passOrFail 0"> <block> <return namelist="counter get-PIN validatePIN call_get-balance payment_details </block> </form> <form id="BRNCH-passOrFail 1 <block name-"link"> <goto next-"'#SPEAKER-tryAgain"/> </block> </form> <form id=" SPEAKER tryAgain"> <block> <prompt> Your PIN is not valid. Please try again.
</prompt> </block> <block> <goto next-"#LOOPSTEP-authenticate"/> </block> form> <script><! ECDAqTA[ WO 2004/010678 PCT/AU20031000939 -59function PromptHelpAskget_PINPIN() var result; result "please say the pin. for example, ten eighty six if( valid string(result)){ return result; return result; function PromptHelp_Confirm_payment_detailspayment_date() var result; result "please say yes or no if( valid_string(result)){ return result; return result; function Confirmation(confirmation) var result; if( (confirmation "yes" result "true if( validstring(result)){ return result; if( (confirmation "no" result "false if( valid_string(result)){ return result; result confirmation return result; function PromptConfirmpayment_details(company, amount, payment_date) var result; result "the company is Bpay_names(company) "the amount is Money(amount) "the payment date is Date(payment_date) "is this correct? if( valid_string(result)){ return result; return result; WO 2004/010678 PCT/AU20031000939 function PromptConfirmpaymentdetailspayment_date(payment_date) var result; result "the payment date is Date(payment_date) "is this correct? if( validstring(result)){ return result; return result; function PromptMenumain_leave_message() var result; result "please say one of balance, enquiry, leave message, pay bills or quit (note: please respond with another phrase that means 'leave message') if( validstring(result)){ return result; return result; function Integernum(integer) function PromptAsk_payment_details_amount var result; result "please say the amount if( valid_string(result)){ return result; return result; function Bpay_names(bpay_names) var result; if( (bpay_names "telstra" result "telstra if( validstring(result))( return result; if( (bpay_names "origin energy" result "origin energy if( valid string(result)){ return result; WO 2004/010678 PCT/AU20031000939 -61- (bpaynames "citipower" result "citipower if( validstring(result)){ return result; result bpay_names return result; function PromptHelp_Ask_payment_details_amount() var result; result "please say the amount. for example, three dollars and fifty cents if( valid_string(result)){ return result; return result; function PromptMenu main() var result; result "please say one of balance, enquiry, leave message, pay bills or quit if( valid_string(result)){ return result; return result; function PromptConfirmation(confirmation) var result; result Confirmation(confirmation) if( valid_string(result)){ return result; return result; function PromptHelp_Ask_payment_details_paymentdate() var result; result "please say the payment date. for example, january the fifth nineteen ninety nine if( valid_string(result)){ return result; return result; function AM() var result; WO 2004/010678 WO 204/00678PCT/AJ20031000939 62 result "in the morningI; if( valid -string(result)){, return result; return result; function PM() var result; result "in the "1 EVENINO if( valid -string(result))( return result; return result; function Promptlnteger(integer) var result; result Tnteger(integer) iff( valid string(result)){ return result; return result; ]]></script> </vxml>

Claims (27)

1. A process for developing a voice application, including: N generating graphical user interface components for defining execution paths of a voice application by arranging dialog elements in a tree structure, each path through said tree structure representing one of said execution paths, said dialog elements having user Sconfigurable properties and corresponding to respective predetermined sequences of VoiceXML elements; receiving user input generated by user interaction with said graphical user interface components; processing said user input to define a voice application by selecting dialog elements representing components of said application, configuring properties of the selected dialog elements, and defining execution paths of said application as respective sequences of at least a subset of the selected dialog elements; and generating application code for said application, said application code representing each dialog element of said application as a sequence of VoiceXML elements including extended attributes to allow said tree structure of said application to be determined.
2. A process as claimed in claim 1, wherein said extended attributes are qualified names of a qualified XML namespace.
3. A process as claimed in claim 1 or 2, wherein each dialog element of said application code includes a reference to the next of said dialog elements in an execution path of said application.
4. A process as claimed in any one of claims 1 to 3, including processing said application code to generate a visual representation of said dialog elements and said execution paths. P\OPER\RABn w wice appicliws pc nads scp07 dc-011 11/2007 O 0-64- 0 z
5. A process as claimed in any one of claims 1 to 4, wherein said step of generating Sapplication code includes generating extended VoiceXML code, prompt data, and 0 grammar data for said application.
6. A process as claimed in claim 5, wherein said prompt data is represented as a Sgrammar, and said process includes improving said grammar.
7. A process as claimed in claim 5 or 6, including generating at least one script for generating a prompt for said application on the basis of one or more parameters supplied to said script.
8. A process as claimed in claim 7, wherein said at least one script is generated on the basis of at least one script template and prompt data defined for said prompt by a user.
9. A process as claimed in claim 7 or 8, wherein said at least one script includes EMCAscript.
A process as claimed in any one of claims 5 to 9, including generating VoiceXML code and IVR grammar data for execution of said application on an IVR system on the basis of said extended VoiceXML code, prompt data, and grammar data.
11. A system having components for executing a process as claimed in any one of claims 1 to
12. Program code for executing a process as claimed in any one of claims 1 to
13. A computer readable storage medium having stored thereon program code for executing a process as claimed in any of claims 1 to
14. A system for use in developing a voice application, including: POPER\MRA -nV oice applimimmisp nmds sed07d-0l11 1/2007 0 z a dialog element selector for defining execution paths of said application by selecting dialog elements and adding said dialog elements to a tree structure, each path through said tree structure representing one of said execution paths, said dialog elements having user configurable properties and corresponding to respective predetennined sequences of VoiceXML elements; means for receiving user input generated by user interaction with said dialog Selement selector; means for processing said user input to define a voice application by selecting dialog elements representing components of said application, configuring properties of the selected dialog elements, and defining execution paths of said application as respective sequences of at least a subset of the selected dialog elements; and a code generator for generating application code for said application, said application code representing each dialog element of said application as a sequence of VoiceXML elements including extended attributes to allow said tree structure of said application to be determined.
A system as claimed in claim 14, wherein said selector is adapted to process said application code to generate a graphical representation of said dialog elements and said execution paths of said application.
16. A system as claimed in claim 14 or 15, wherein said code generator generates extended VoiceXML code, prompt data, and grammar data for said application.
17. A system as claimed in claim 16, wherein said prompt data is represented as a grammar, and the system includes one or more modules for improving said grammar.
18. A system as claimed in claim 16 or 17, including a script generator for generating at least one script for generating a prompt for said application on the basis of one or more parameters supplied to said script. P:OPER\RAE'Inw voice Applicraio.,s spa a ni o,07 doc.I/ 1/2007 Q- -66- z
19. A system as claimed in claim 18, wherein said script generator generates said at least one script on the basis of at least one script template and prompt data defined for said prompt by a user.
20. A system as claimed in any one of claims 16 to 19, wherein said code generator generates VoiceXML code and IVR grammar data for execution of said application on an Cc IVR system on the basis of said extended VoiceXML code, prompt data, and grammar data.
21. An extended VoiceXML file generated by a system as claimed in any one of claims 14 to
22. A graphical user interface for use in developing a voice application, said interface including graphical user interface components for defining execution paths of said application by arranging dialog elements in a tree structure, each path through said tree structure representing one of said execution paths, said dialog elements having user configurable properties and corresponding to respective predetermnnined sequences of VoiceXML elements, wherein said dialog elements include three or more of: a start dialog component for defining the start of said application; a variables component for use in defining variables for said application; a menu component for defining a menu; a menu choice component for defining a choice of said menu; a decision component for defining a decision branching point; a decision branch component for defining a test condition and an execution branch of said decision branching point; a form component for defining a form to collect input from a caller; a record component for recording audio a speaker component for playing prompts, a local processing component for defining local processing; a remote processing component for performing processing on a remote system; a loop component for defining an execution loop; P:'OPER\RAB00w wic.applicalms spa -csq0? ipO~dc01/I 1/2007 Q)-67- N Z a loop call component for calling said loop; a loop next component for proceeding to the next cycle of said loop; a loop break component for breaking out of said loop; Sa subroutine component for defining a subroutine; a subroutine call component for calling said subroutine; subroutine return component for returning from said subroutine; C' a jump component for defining a non-sequential execution path to a dialog element a transfer component representing the transfer of a call to another number a hotwords component for defining a word or phrase and a non-sequential execution path to a dialog element to be followed upon receipt of said word or phrase; and an end component for defining an end of said application.
23. A computer readable storage medium having stored thereon application code for a voice application, said application code including a plurality of dialog elements representing components of said application, each of said dialog elements being a sequence of VoiceXML elements including extended attributes to allow a tree structure of execution paths of said voice application to be determined, each path through said tree structure representing one of said execution paths.
24. A process for developing a voice application, substantially as described herein with reference to the accompanying drawings.
A system for use in developing a voice application, substantially as described herein with reference to the accompanying drawings.
26. A graphical user interface for use in developing a voice application, substantially as described herein with reference to the accompanying drawings. P-'OPER\RABUow micc appIsciumsspcc aiws k-pO7 dx-OIII I/207 -68-
27. A computer readable storage medium having stored thereon application code for a voice application, substantially as described herein with reference to the accompanying drawings.
AU2003245122A 2002-07-24 2003-07-24 System and process for developing a voice application Ceased AU2003245122B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU2003245122A AU2003245122B2 (en) 2002-07-24 2003-07-24 System and process for developing a voice application

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
AU2002950336 2002-07-24
AU2002950336A AU2002950336A0 (en) 2002-07-24 2002-07-24 System and process for developing a voice application
PCT/AU2003/000939 WO2004010678A1 (en) 2002-07-24 2003-07-24 System and process for developing a voice application
AU2003245122A AU2003245122B2 (en) 2002-07-24 2003-07-24 System and process for developing a voice application

Publications (2)

Publication Number Publication Date
AU2003245122A1 AU2003245122A1 (en) 2004-02-09
AU2003245122B2 true AU2003245122B2 (en) 2007-11-29

Family

ID=34275378

Family Applications (1)

Application Number Title Priority Date Filing Date
AU2003245122A Ceased AU2003245122B2 (en) 2002-07-24 2003-07-24 System and process for developing a voice application

Country Status (1)

Country Link
AU (1) AU2003245122B2 (en)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000051016A1 (en) * 1999-02-23 2000-08-31 Unisys Corporation Apparatus for design and simulation of dialogue

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000051016A1 (en) * 1999-02-23 2000-08-31 Unisys Corporation Apparatus for design and simulation of dialogue

Also Published As

Publication number Publication date
AU2003245122A1 (en) 2004-02-09

Similar Documents

Publication Publication Date Title
CA2493533C (en) System and process for developing a voice application
US8046227B2 (en) Development system for a dialog system
US8301757B2 (en) System and method for obtaining in-use statistics for voice applications in interactive voice response systems
US8423635B2 (en) System and method for automatic call flow detection
US20050080628A1 (en) System, method, and programming language for developing and running dialogs between a user and a virtual agent
US8155959B2 (en) Dialog system for human agent to correct abnormal output
US20050028085A1 (en) Dynamic generation of voice application information from a web server
US20090119586A1 (en) Automatic Generation of Interactive Systems From a Formalized Description Language
US20030130849A1 (en) Interactive dialogues
US20050027536A1 (en) System and method for enabling automated dialogs
US9584662B2 (en) System and method for the automatic validation of dialog run time systems
US20040042593A1 (en) Web-based telephony services creation, deployment and maintenance method and system
EP1814293A1 (en) An interactive voice system
Santiago et al. Building cognitive applications with IBM Watson services: Volume 6 speech to text and text to speech
WO2002077973A1 (en) Web-based speech recognition with scripting and semantic objects
AU2003245122B2 (en) System and process for developing a voice application
WO2005038775A1 (en) System, method, and programming language for developing and running dialogs between a user and a virtual agent
US7349836B2 (en) Method and process to generate real time input/output in a voice XML run-time simulation environment
Schwanzara-Bennoit et al. State-and object oriented specification of interactive VoiceXML information services
Lerato et al. Open source voicexml interpreter over asterisk for use in ivr applications
McTear et al. Implementing Dialog Management
McTear Dialogue Engineering: The Dialogue Systems Development Lifecycle
Hashim VXML: AN ALTERNATIVE SOLUTION TO ACCESSING WEBSITE'S CONTENTS
d’Haro et al. Design and evaluation of acceleration strategies for speeding up the development of dialog applications
Dolezal et al. Feasibility Study for Integration ASR Services for Czech with IBM VoiceServer

Legal Events

Date Code Title Description
PC1 Assignment before grant (sect. 113)

Owner name: TELSTRA CORPORATION LIMITED

Free format text: FORMER APPLICANT(S): TELSTRA NEW WAVE PTY LTD

FGA Letters patent sealed or granted (standard patent)
MK14 Patent ceased section 143(a) (annual fees not paid) or expired