« Back to CVP - All Versions

RE: Control application flow after badfetch hot-event

Combination View Flat View Tree View
Threads [ Previous | Next ]
Hi,
In my current environment, due to the dynamic nature of the call-flow, there is a fair chance that audio files may be missing. I need to handle these exceptions gracefully and continue on to the next prompt in the call-flow.
Currently, the CVP studio/vxml app returns to ICM after each 'node'. Meaning, a menu is presented to the caller and once a result is obtained, the ICME script sets this value in an ECC then continues to the next RunExtScript node and spins up another sub-dialoge with VXMLServer for the next interaction... (this may be a separate discussion of whether or not that adds too much overhead or maybe that approach is just fine but anyway)
If one wanted to bundle these 'nodes' into one CVP app, how can I handle a badfetch in say the first audio prompt and continue on to the next element in the same app? What if it fails to fetch an audio prompt in the 3rd element and I need to continue on to the 4th?
When I place a hotevent, it doesn't matter if there are separate pages, it is a global "catch". My only thought is to use the getElementHistory() method against the sessionAPI in an action element after the hotevent and return to the call-flow based on that evaluation... is that my only option?
 
Thanks,
Ryan

Hi,
In my current environment, due to the dynamic nature of the call-flow, there is a fair chance that audio files may be missing. I need to handle these exceptions gracefully and continue on to the next prompt in the call-flow.
Currently, the CVP studio/vxml app returns to ICM after each 'node'. Meaning, a menu is presented to the caller and once a result is obtained, the ICME script sets this value in an ECC then continues to the next RunExtScript node and spins up another sub-dialoge with VXMLServer for the next interaction... (this may be a separate discussion of whether or not that adds too much overhead or maybe that approach is just fine but anyway)
If one wanted to bundle these 'nodes' into one CVP app, how can I handle a badfetch in say the first audio prompt and continue on to the next element in the same app? What if it fails to fetch an audio prompt in the 3rd element and I need to continue on to the 4th?
When I place a hotevent, it doesn't matter if there are separate pages, it is a global "catch". My only thought is to use the getElementHistory() method against the sessionAPI in an action element after the hotevent and return to the call-flow based on that evaluation... is that my only option?
 
Thanks,
Ryan

 
Ryan,
    First of all,  you say that due to dynamic nature of env, there is fair chance that audio is missing.  No matter how dynamic and complex the env is, there should be only a remote chance that audio is missing.  Unless missing audio is part of your app behavior.  Now you can still get badfetch due to other issues including gateway probs
Now coming to the second part.  Not sure what exactly you are trying to do. 
As far as handling the badfetch, you can catch the badfetch and set a variable in session that gets incremented or set such that based on where it is thrown
it know where to go next in the menu. You can build your own custom logic.  Also in high vol call env, you are going to get some bad fetches even if the audio is available. 
Put some more details on what this app does and what you are trying to do, so that I could may be provide more feedback.  
Hemla



Ryan,
First of all, you say that due to dynamic nature of env, there is fair chance that audio is missing. No matter how dynamic and complex the env is, there should be only a remote chance that audio is missing. Unless missing audio is part of your app behavior. Now you can still get badfetch due to other issues including gateway probs
Now coming to the second part. Not sure what exactly you are trying to do.
As far as handling the badfetch, you can catch the badfetch and set a variable in session that gets incremented or set such that based on where it is thrown
it know where to go next in the menu. You can build your own custom logic. Also in high vol call env, you are going to get some bad fetches even if the audio is available.
Put some more details on what this app does and what you are trying to do, so that I could may be provide more feedback.
Hemla


Hemal, COMPLETELY agree with your stance that the audio should never be missing... no matter how dynamic. There could be many discussions around process involved in the way they deploy audio files but lets just say our entire call-flow can be configured by a completely different team than the one who's actually deploying them. My use case, which has happened more than once, is that we have an active call-flow configured on a high-volume TFN... the team decides to update the wav file in production with on that does is either a the wrong format/incorrectly numbered/named etc.. or perhaps there is an unathorized change...
Anyway, I like the idea of a session "counter" within the app. That is simple and much easier than parsing the elementHistory list to determine last node.
The app is just a series of prompts. (Welcome, announcements, instructional, then a simple menu). I am just trying to avoid skipping the proceeding prompts should there be a badfetch in the first announcement.
Thanks for the help

Hemal, Janine, Geoff... Have any of you seen this before? I was previously in a 7x CVP environment and am now seeing something strange with 15x IOS and CVP8.5

When I create an audio element and a badfetch is encountered the app executes until a CVP Subdialoge Return element is encountered.. (granted I haven't tested all scenarios but..) I'm used to seeing the badfetch event right on the element's portion of the activity log.

For example the following app is just 3 consecutive audio nodes.. the first one has a valid file, the second is a bogus file and the third valid again.. I would expect to see the first play (it does) then the badfetch to happen at hte second with the third audio element never to be executed, instead it is showing as a badfetch at the subdialoge with timestamps suggesting the app iterated through each element in a split second... this is using the DTMF gateway adapter too. Perhaps even more interesting is the fact that this happens ONLY when using the audio element... menu works as I expect any ideas?

Audio:
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,newcall,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,ani,4254537382
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,areacode,425
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,exchange,453
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,dnis,8554299472
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,uui,NA
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,iidigits,NA
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,parameter,F1=441
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,parameter,callid=A39D1D8FA41B11E1BE0AA3A4A4BCD1CC
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,parameter,F3=440
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,parameter,F2=091
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,parameter,_dnis=8554299472
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,,start,parameter,_ani=4254537382
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.710,CVP Subdialog Start_01,enter,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.945,CVP Subdialog Start_01,exit,done
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.945,Audio_01,enter,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.949,Audio_01,interaction,audio_group,initial_audio_group
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.960,Audio_01,exit,done
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.960,Audio_02,enter,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.960,Audio_02,interaction,audio_group,initial_audio_group
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.976,Audio_02,exit,done
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.976,Audio_03,enter,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.976,Audio_03,interaction,audio_group,initial_audio_group
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.976,Audio_03,exit,done
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:21.976,CVP Subdialog Return_01,enter,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:38.600,CVP Subdialog Return_01,element,hotevent,BadFetch_Hotevent
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:38.600,CVP Subdialog Return_01,exit,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:38.600,CVP Subdialog Return_BadFetch,enter,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:38.600,CVP Subdialog Return_BadFetch,exit,
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:38.616,,end,how,app_session_complete
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:38.616,,end,result,normal
10.207.10.23.1337783841710.1957594.IVR_Initial,05/23/2012 07:37:38.616,,end,duration,17


Menu Element example:
7.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,newcall,
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,ani,4254537382
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,areacode,425
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,exchange,453
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,dnis,8554299472
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,uui,NA
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,iidigits,NA
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,parameter,F1=441
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,parameter,callid=3CF6D81BA41D11E1A838A4B02FEDE0D0
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,parameter,F3=440
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,parameter,F2=091
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,parameter,_dnis=8554299472
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,,start,parameter,_ani=4254537382
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.548,CVP Subdialog Start_01,enter,
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.673,CVP Subdialog Start_01,exit,done
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.673,Audio_01,enter,
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.673,Audio_01,interaction,audio_group,initial_audio_group
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.688,Audio_01,exit,done
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.688,2_Option_Menu_01,enter,
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:48:48.690,2_Option_Menu_01,interaction,audio_group,initial_audio_group
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:49:05.610,2_Option_Menu_01,element,hotevent,BadFetch_Hotevent
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:49:05.610,2_Option_Menu_01,exit,
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:49:05.610,CVP Subdialog Return_BadFetch,enter,
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:49:05.610,CVP Subdialog Return_BadFetch,exit,
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:49:05.610,,end,how,app_session_complete
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:49:05.610,,end,result,normal
10.207.10.23.1337784528548.1959352.IVR_Initial,05/23/2012 07:49:05.610,,end,duration,17

I have certainly seen the badfetch come well after the audio element that is missing the file. It makes it tricky to track down where you have omitted supplying a recorded file.

I thought it was due to the way the logging works, but Janine pointed out that the Voice Browser will prefetch all VXML pages up to the next required input.

Regards,
Geoff

I have certainly seen the badfetch come well after the audio element that is missing the file. It makes it tricky to track down where you have omitted supplying a recorded file.

I thought it was due to the way the logging works, but Janine pointed out that the Voice Browser will prefetch all VXML pages up to the next required input.

Regards,
Geoff


Well that would explain it. I wonder if there is a VXML Property that might change this behavior... doubtful but what you pointed out makes sense and I feel like I've heard that from a previous thread of her's as well. Thanks Geoff.
-Ryan

No. There's no voice xml property. You will have to consult the IIS logs
looking for 404 errors.


Sent from a tiny keyboard and screen. Please excuse typos.

-----Original message-----
From: Cisco Developer Community Forums <cdicuser@developer.cisco.com>
To: "cdicuser@developer.cisco.com" <cdicuser@developer.cisco.com>
Sent: Wed, May 23, 2012 10:49:26 CDT
Subject: New Message from Ryan Hilfers in Customer Voice Portal (CVP) - CVP
- All Versions: RE: New Message from Ryan Hilfers in Customer Voice Portal
(CVP) - CVP - Al

No. There's no voice xml property. You will have to consult the IIS logs
looking for 404 errors.


Sent from a tiny keyboard and screen. Please excuse typos.

 
Janine, bummer. This really only poses an issue when you have consecutive audio elements in a CVP app callflow and one would like to play the remaining 2 even if the first one encounters a bad-fetch... doesn't seem this is possible since all elements will execute immeadiately. Anyway, thanks to you and Geoff, at least I can explain the behavior which makes me comfortable. Would you see any issues with using a 2optMenu element with a very quick timeout and no retry? Would accomplish what I need but with some added Vxml overhead.
Thanks,
Ryan

Well you could put all the audio items into one studio element? I think that
so long as one of the audio items exists you won't get the exception at all.


Or you could set 'vxml version 2.0' in the gateway cli, then the app is
never notified of missing audio files! No news is good news, I guess.


Sent from a tiny keyboard and screen. Please excuse typos.

-----Original message-----
From: Cisco Developer Community Forums <cdicuser@developer.cisco.com>
To: "cdicuser@developer.cisco.com" <cdicuser@developer.cisco.com>
Sent: Wed, May 23, 2012 12:43:17 CDT
Subject: New Message from Ryan Hilfers in Customer Voice Portal (CVP) - CVP
- All Versions: RE: Re: New Message from Ryan Hilfers in Customer Voice
Portal (CVP) - CVP

Ryan,
You can effectively use 2 option menu with timeout set to 1s. I use at some places where I need such a thing. This is a probem and I am trying to come up with a better workaround. Will update you.
Hemal

From: Cisco Developer Community Forums [mailto:cdicuser@developer.cisco.com]
Sent: Wednesday, May 23, 2012 12:43 PM
To: cdicuser@developer.cisco.com
Subject: New Message from Ryan Hilfers in Customer Voice Portal (CVP) - CVP - All Versions: RE: Re: New Message from Ryan Hilfers in Customer Voice Portal (CVP) - CVP

Ryan Hilfers has created a new message in the forum "CVP - All Versions":

--------------------------------------------------------------
No. There's no voice xml property. You will have to consult the IIS logs
looking for 404 errors.


Sent from a tiny keyboard and screen. Please excuse typos.


Janine, bummer. This really only poses an issue when you have consecutive audio elements in a CVP app callflow and one would like to play the remaining 2 even if the first one encounters a bad-fetch... doesn't seem this is possible since all elements will execute immeadiately. Anyway, thanks to you and Geoff, at least I can explain the behavior which makes me comfortable. Would you see any issues with using a 2optMenu element with a very quick timeout and no retry? Would accomplish what I need but with some added Vxml overhead.
Thanks,
Ryan
--
To respond to this post, please click the following link:

<http://developer.cisco.com/web/cvp/forums/-/message_boards/view_message/5771003>

or simply reply to this email.

haha awesome suggestions Janine.. but I like to hear the news from my app before hearing it from the customer emoticon Anyway, looks like this is a known 'issue/behavior'


Thanks Hemal and Janine for the help