[v3] Some v3 functionality suggestions and scenarios



Here are some comments and scenarios that will hopefully help suggest
some features for VXML 3.0


1)      Be able to handle an external event (such as an incoming call or
other concurrent process) that can suspend a current dialog thread
(including in the middle of a play ore recognize state), take the call,
and resume the play where it left off, before the interruption.

2)      Similar function except allow a user to to spawn an asynchronous
task (such as starting a recording from a key-press) during a play or
recognize state, without affecting the current dialog thread - ie. the
current recognize command and grammars remain active, even if a
touch-tone command spawns some other process. 

3)      Initialize a database lookup, email list send, etc. or other
concurrent process at anytime from a user's command (such as a
touch-tone key-press), without interrupting main dialog flow.

4)      Be able to deal with external async events such as a concurrent
ask completion. Be able to make a decision whether external task has
enough priority to interrupt the current dialog.


Concurrency/Interrupt Scenarios:


I'm listening to my voicemail. I listen to a message from Joe, saying
that he wants me to call him. I tell the system to call Joe and connect
him to me, if he can be reached. The system places concurrent calls to
all of Joe's numbers - cell, office, home. Meanwhile, I continue to
listen to my voicemails. If Joe answers, the system will tell Joe to
hold while it gets me on the line. 


In the middle of a long voice message, Joe answers his call, and I get
an announcement that interrupts the current voicemail message I am
listening to. The interrupt message tells me that Joe is on the line. I
tell the voicemail application to suspend, and to connect Joe to me. Joe
& I talk, and when the conversation is completed, I tell the system to
return to the suspended voicemail message. The system returns to the
voicemail application and begins playing the last message I was
listening to, where it left off before the interruption.


Alternatively, Joe can't be reached. In that case, I do not want to be
interrupted in the middle of my voicemail process. but I do want to be
notified that Joe didn't answer, when I finish the voicemail session. 


Same scenario, except when Joe calls, I want to play a voicemail message
to Joe that I received a couple of days ago. I talk to Joe briefly, then
I tell the system to put Joe on hold, and return to the voicemail
system. I tell the voicemail system to remember where I was in my
voicemail review, but I want to find a message that I received two days
ago. Once I find the message I want, I want to skip the first 30 seconds
of the message, and play Joe the rest. I skip to the part I want Joe to
hear, and pause the message. Then I tell the voicemail system that I
want to conference Joe in, so he can hear the message. Once Joe is back
on the line, I unpause/play the message. I use touch-tone keys to speed
up/ slow down, and replay parts of the message. Once the conversation
with Joe is completed, I want to return to the voicemail system, and
start listening to the new voicemail messages, where I left off. 


Non-Call Control Concurrency


In the middle of a banking application, I ask to find out how many
checks I wrote to my Dentist over the last 10 years, and what is the sum
total of all of those checks. This process may have to access slow
storage, so it may take some time. While I am waiting for the answer, I
ask for the list of checks that have cleared this month, in my checking
account. While the cleared check list is being read to me, the original
database query is completed. I get an interrupt announcement that my
query is completed, in the middle of reading the list of cleared checks.
I tell the cleared check application to suspend. And I listen to the
results of my query on dental spending. After the query is completed, I
return to the listening to the list of cleared checks, where I left off.


Generally VXML needs a way to spawn concurrent tasks, or probably more
practically, send asynchronous events or messages to other external
processes. However, the key requirement for a next-gen VXML isn't
sending messages, it is handling the asynchronous events and
announcements that can come from external concurrent processes. 


Processes need a way to send asynchronous events to a VXML dialog thread
process. These events should be dealt with in an async event handler
within the VXML interpreter. The VXML event handler should be able to
determine whether a specific event has high enough priority to interrupt
the current dialog thread. If it does, the event handler should be able
to suspend the current dialog (in a play, or recognize state), and
launch a new dialog thread. The VXML event handler should have the
option to save the state of the initial dialog thread, so that it can be
returned to just where it left off, after the interrupt thread has
completed. Or, the handler can not save the state if returning where one
left off is not required. Other options could be to return to a specific
point in the suspended thread, predetermined by the original VXML
script, or the last dialog prompt before the interruption. 


Interrupt Masks 


VXML scripts need a way to define the level of interrupt mask that each
dialog step holds. Incoming async events below the mask threshold will
be queued until the mask is lowered enough that they can be serviced.
Incoming events with priorities above the mask threshold will
immediately suspend the current dialog thread and (optionally) save the
dialog state, and launch a new dialog thread. The new dialog thread can
also be interrupted with a sufficiently high priority event, so there
will need to be a dialog state stack to keep track of all suspended
dialog threads.


These are some of the functions that we find we need most often when
writing voice scripts. Hopefully these capabilities will be added to
VXML 3.0 so it can be used in these more feature-rich applications. 






Ellis K. "Skip" Cave


P: (972) 454-8800  M: (214) 460-4861


Intervoice: Connecting People and Information.


This e-mail transmission may contain information that is proprietary, privileged and/or confidential and is intended exclusively for the person(s) to whom it is addressed. Any use, copying, retention or disclosure by any person other than the intended recipient or the intended recipient's designees is strictly prohibited. If you are the intended recipient, you must treat the information in confidence and in accordance with all laws related to the privacy and confidentiality of such information.  If you are not the intended recipient or their designee, please notify the sender immediately by return e-mail and delete all copies of this email, including all attachments.

Received on Wednesday, 2 August 2006 17:03:14 UTC