Part of an IVR application using both touchtone and speech recognition.

Designed and developed by Bradley Lehman, 2007 (the development environment itself, plus the application). [Resume]

This section captures and verifies the callers' input of a county name in their state. The rest of the application (not shown here) queries a web service and speaks back the relevant information about the county's offices. This is part of a larger multi-application system to administer government welfare programs.

The dialogue design is developed in SQL Server tables, referencing all phrases by numbers. The output query for the spec is saved in an XML format, and then viewed through an ASP (Active Server Pages) page that applies an XSL stylesheet. Therefore, the resulting dialogue spec is generated and reformatted automatically each time an improvement is made to the design.

The same SQL database also drives most of the application code, to navigate from each question to the next. A stored procedure fetches the phrase numbers and the retry/timeout sequences. They are spoken and/or repeated until the caller responds appropriately with speech or keystrokes. The caller's response then determines the next dialogue state that is fetched. For some of the questions, the second or third prompts rephrase the question to give the caller additional information or hints.

Each iterative improvement to the design (deploying the phrases in better combinations, or replacing some of the phrases) affects not only the spec, but also the running application without needing to recompile the latter. The application can be developed rapidly and maintained easily through that coordinating set of SQL tables.

Because the application is in both English and Spanish, and has a TTY option as well, the same set of tables coordinates these alternate paths. Each dialogue state is fetched using a parameter indicating the correct language and method: English vs Spanish, and speech/touchtone vs TTY-encoded prompts.

10 - Greeting
Welcome to the application
Entry: 700 Welcome to the Family Community Resource Center Locator.
50 - EnterCounty3Letters
Enter the first three letters of the county name onto the keypad
Entry: 705 Please enter the first 3 letters of the county name, spelling with the letters on your phone keypad. If you need the letter Q, use 7. The letter Z is on the 9.
Timeout1: 705 Please enter the first 3 letters of the county name, spelling with the letters on your phone keypad. If you need the letter Q, use 7. The letter Z is on the 9.
Timeout2: 705 Please enter the first 3 letters of the county name, spelling with the letters on your phone keypad. If you need the letter Q, use 7. The letter Z is on the 9.
Timeout3: 705 Please enter the first 3 letters of the county name, spelling with the letters on your phone keypad. If you need the letter Q, use 7. The letter Z is on the 9. ...and then go to state 102 and state 104 to end the call.
Retry1: 705 Please enter the first 3 letters of the county name, spelling with the letters on your phone keypad. If you need the letter Q, use 7. The letter Z is on the 9.
Retry2: 705 Please enter the first 3 letters of the county name, spelling with the letters on your phone keypad. If you need the letter Q, use 7. The letter Z is on the 9.
Retry3: 705 Please enter the first 3 letters of the county name, spelling with the letters on your phone keypad. If you need the letter Q, use 7. The letter Z is on the 9. ...and then if the caller fails again after this last chance at the question, go to state 102 and state 104 to end the call.
Returns data: S String ( Size: 3 - 3 )
REPEAT sends the Entry (initial) set of phrases.
Help: 705 Please enter the first 3 letters of the county name, spelling with the letters on your phone keypad. If you need the letter Q, use 7. The letter Z is on the 9.
Exit Navigation: If only one found, goto 55. If more than one found, goto 60. If none, goto 80.
55 - EchoCounty
Only one county matched, so speak it and then move on.
Entry: 0 [Use data value] 738 ...County. -500 [pause 1/2 second]
Exit Navigation: Goto 700.
60 - MultipleCountiesFound
Keystrokes matched more than one county
Entry Navigation: If playing this again within the same call, speak only the first phrase.
Entry: 727 More than one county matches the keys you entered. -500 [pause 1/2 second] 755 When you hear the correct county from this list, say yes. If it's wrong, say no. -500 [pause 1/2 second]
70 - CorrectCounty
Is this the correct county? Y/N
Entry: 0 [Use data value] 709 ....County. Is that correct?
Timeout1: 0 [Use data value] 709 ....County. Is that correct?
Timeout2: 0 [Use data value] 740 ...County. Is that correct? Say yes or no.
Timeout3: 0 [Use data value] 741 ...County. Is that correct? Press 1 for yes, or 2 for no. ...and then go to state 102 and state 104 to end the call.
Retry1: 0 [Use data value] 740 ...County. Is that correct? Say yes or no.
Retry2: 0 [Use data value] 741 ...County. Is that correct? Press 1 for yes, or 2 for no.
Returns data: B Boolean (Y/N)
REPEAT sends the Entry (initial) set of phrases.
Exit Navigation: If Y, goto 700; else replay with the next value. If caller rejects all, goto 90.
80 - NoCountiesMatch
No counties match the keystrokes entered
Entry: 775 Sorry, the system did not find a county matching those letters. -500 [pause 1/2 second]
Exit Navigation: Goto 50.
90 - NoCountiesAccepted
Caller didn't approve any of the county choices presented for clarification
Entry: 758 OK, sorry I didn't understand your county. Let's try this again. -500 [pause 1/2 second]
Exit Navigation: Goto 50.