cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
1211
Views
10
Helpful
5
Replies

How call should go back with out any connectors

sreekanth47
Level 4
Level 4

 In my application I'm using a custom element for menu's, There are more than 50 menu's in my application, So I want to add hold functionality across all menu's. For this , the custom element will throw an event hold when any caller says "hold" at any menu,  so I can catch this event and play some prompts in a separate callstudio sub flow. After this my flow should go back to menu where it called from. How would I go back to calling menu after catching "HOLD" event with out any page links, I feel , instead of calling a subfolw from every menu, calling this at once is better . Is this possible ?. For say I've a menu like say your phone number, at this caller say  hold ,then a subfolw will prompt like this"okay , I will wait , please say ready or press pound to go back", if the caller says ready then call should go back to Phone number menu.Like this I've n number of menus , when ever caller says Hold, the subflow should invoke. Does vxml insert element helps me to achieve this?.

1 Accepted Solution

Accepted Solutions

janinegraves
Spotlight
Spotlight

 

VXML Insert is not really inserting VXML into the code, it's letting vxml server invoke a subdialog - and that's probably not what you want here. 

 

What you want is a HotLink (or in VoiceXML it's called a 'link'). If you want to use Studio elements for this, then either in each menu element (or in the Start of Call element) and an event handler, but change it to handle a  HotLink. Then you can specify to trigger if the caller presses or says something (like Hold). It'll have an exit state, and you connect to a Subflow Call element. Connect the SubflowCall exit state back to the menu.

 

You say that you're trying to accomplish this without adding any more exit states in the Studio app, is that correct?

 

Then it'll require some custom Java coding.  if you're creating your own Voice Element to collect caller input, then you can add a vxml 'link' and have it listen for 'Hold". But then you'll need to have it execute a VXML Field to wait for the caller to say 'resume' (or something). And then you'd have to re-execute the Field that's collecting the Menu input. Not too hard to code in straight VXML, but I'm not sure the the Cisco java classes that create VXML allow for multiple <field> tags on one Vxml page.

 

On the other hand, you might be able to 'extend' Cisco's voice element to add a HotLink into the VXML on the element's first execution, and then to check for what's returned from the VB upon the 2nd execution, and if it's Hold, then send another page to the VB to listen for Resume, and then on the 3rd execution (after caller says Resume) then clear all the variables and start the addXmlBody as if it's the first execution of the element.

 

VXML 2.1 and MRCP v2 support the VB telling Nuance to Pause playback, and then to Resume (to continue speaking where it left off)- but it looks like that's only for TTS output, not for speech collection input. But if this sounds like what you want, you should Google VXML 2.1 tag named 'mark'

 

Hope this helps!

View solution in original post

5 Replies 5

janinegraves
Spotlight
Spotlight

 

VXML Insert is not really inserting VXML into the code, it's letting vxml server invoke a subdialog - and that's probably not what you want here. 

 

What you want is a HotLink (or in VoiceXML it's called a 'link'). If you want to use Studio elements for this, then either in each menu element (or in the Start of Call element) and an event handler, but change it to handle a  HotLink. Then you can specify to trigger if the caller presses or says something (like Hold). It'll have an exit state, and you connect to a Subflow Call element. Connect the SubflowCall exit state back to the menu.

 

You say that you're trying to accomplish this without adding any more exit states in the Studio app, is that correct?

 

Then it'll require some custom Java coding.  if you're creating your own Voice Element to collect caller input, then you can add a vxml 'link' and have it listen for 'Hold". But then you'll need to have it execute a VXML Field to wait for the caller to say 'resume' (or something). And then you'd have to re-execute the Field that's collecting the Menu input. Not too hard to code in straight VXML, but I'm not sure the the Cisco java classes that create VXML allow for multiple <field> tags on one Vxml page.

 

On the other hand, you might be able to 'extend' Cisco's voice element to add a HotLink into the VXML on the element's first execution, and then to check for what's returned from the VB upon the 2nd execution, and if it's Hold, then send another page to the VB to listen for Resume, and then on the 3rd execution (after caller says Resume) then clear all the variables and start the addXmlBody as if it's the first execution of the element.

 

VXML 2.1 and MRCP v2 support the VB telling Nuance to Pause playback, and then to Resume (to continue speaking where it left off)- but it looks like that's only for TTS output, not for speech collection input. But if this sounds like what you want, you should Google VXML 2.1 tag named 'mark'

 

Hope this helps!

If you have Studio 10.5 or above, If you use the 'Events' tab of an element or on the Start of Call element to catch an event or a HotLink, then the Session variable named lastException is created automatically whenever an event occurs.

 

There are a number of lastException variables created that might be useful in other scenarios: 

lastException.source - where the event occurred,

lastException.type containing VxmlEvent, JavaException, or HotLink). 

lastException.code (name of the exception), and

lastException.message - an error message associated with the exception.

 

The variable lastException.source doesn't display in the Substitution tag builder, but it WILL exist if you use an 'Events tab' to catch the HotLink.

Note: if you use the HotLink element 'instead' of the Events tab, then the lastException variable is NOT created, so you'd have to create your own variable, with whatever name you like and assign it with the Menu to return to.

 

It'll be easiest to add the HotLink to each Menu's events tab, fall the subflow, return from the subflow back to the menu. Then you won't need a large decision element to decide where to return to.

 

However, if you prefer, you can definitely add the HotLink at the Start of Call element. It's an odd place to put the event handler, but it won't actually send the caller back to the 'start of call' - it'll just send the caller to wherever that exit state points.

 

 


You should test this by adding to the Activity Log the variable named:  {Data.Session.lastException.source} when you catch the HotLink.

 

Thank you Janine, correct me if I wrong , so I need to create a local hot link to catch hold event using event tab for every menu, and that exit state should go to subflow, and subflow's exit should be the menu. Please see below image, this is how I want to implement . Here in this case I think , "lastException.source" session variable is not needed as I'm not using any decision element event though it got last event occurred .subflow.jpg

Yes, that's right. Please note a few things:
1. the shorter the utterance from the caller, the harder it is for the recognizer to be sure it got it correct. Also, words starting with 'H' are breathy, and the recognizer might misinterpret or miss it. So you might tell your caller to say 'pause' or to say 'please hold' instead of just 'hold'

2. If anything that the caller can say in the menu (like 'cold') sounds too much like 'hold' then change what you're listening for to avoid ambiguity.

3. CVP is always listening for the caller to say 'help' - which could possibly be mis-recognized to sound like 'hold' - so if you want to disable the system automatically listening for 'help' then you can set the VoiceXML Property
Name: universals to have Value:none (either in the root doc or in each Menu element's settings).

 

Janine

Thank you Janine.