Background:
CVP integrated with ICM as VRU for queueing, customer may deploy and design their queueing script by the way of looping the script.
In such scenario, customer will typically have a queueing script that is using a few Run External Script nodes to invoke Network VRU Script to play a few wav files. This script will be continuously looping until agent is available or the number of nodes executed in the loops has exceeded the <MaxNodesExecuted> registry setting in Router. To illustrate, we have 10 nodes in the queueing script, and we have three Run External Script node to play 3 wav files, and normally these 3 wav files length is total 60 seconds (1 min), So when the script is looped once, the caller will be queued for about 60 seconds, and the registry key <MaxNodesExecuted> is set to 1000, which means the script can loop maximum 100 times, meaning the caller can stay in the queue for maximum 100 minutes (1 hr and 40 minutes).
However, when issue happens, it is found that some of the queueing calls are disconnected with error in Router log as:
09:14:28:353 ra-rtr Script Default\\Queueing_Script executed for more that 1000 nodes.
And the disconnected call actually stayed in the queue for only 15 seconds instead of 100 minutes.
Logs
When the issue happens, apart from above error is shown in router log, in CVP logs, we also observe the duration of playing each media file in vxml gateway for queueing is only a few ms (from RUN_SCRIPT_REQ to play the wav file to CALL_RESULT, ERROR_CODE=NONE in vxml gateway's HTTP request):
Mar 25 2011 07:11:25.667 +1000: %CVP_8_0_ICM-7-CALL: {Thrd=pool-1-thread-124-ICM-184814} CALLGUID = A398BE889B9311C0947EE05FB9CF1E07, DLGID = 17462 [IVR_LEG] - Publishing ,, [MsgBus:RUN_SCRIPT_REQ], ssId=SYS_IVR2, requestId=7, scriptId=PM,-2, scriptConfig=, ced=3, rckey=756, rcday=240921, rcseq=1, switch_leg_ani=00312345678, switch_leg_dnis=402101, CallContext:, CallVariable2: Root/test.wav, CallVariable5: user.microapp.error_code: 0, user.microapp.input_type: D, user.microapp.app_media_lib: user, user.microapp.media_server: http://CVP2/Media, user.media.id:
A398BE889B9311C0947EE05FB9CF1E07
, user.microapp.metadata: D|100|01|00|00|001140|M,-2, user.microapp.locale: en-us,, LEGID = , DNIS = 12345678, ANI = sip:00312345678@10.1.1.1:5060
Mar 25 2011 07:11:25.683 +1000: %CVP_8_0_IVR-7-CALL: {Thrd=http-8000-3} VBServlet:service: HTTP Request from 10.1.1.12: { CALL_ID=A398BE889B9311C0947EE05FB9CF1E07, MSG_TYPE=CALL_RESULT, CALL_SEQ_NUM=7, ERROR_CODE=NONE(0) }
Because the play media only last for 16ms, so eventually one loop will only take about 100ms, and in 10 seconds, 1000 nodes will be exhausted.
Root Cause:
CVP mandate that Run External Script node is set to interruptible so that ICM can interrupt the script to transfer the call to agent when available. By default, barged-in is enabled in Network VRU script for allowing user input and interaction during playing media, The Cisco VoiceXML implementation includes a type-ahead buffer in vxml gateway that holds DTMF digits collected from the caller. When the VoiceXML form interpretation algorithm collects user DTMF input, it uses the digits from this buffer before waiting for further input. From CVP 8.x there is a parameter controls whether the type-ahead buffer is flushed after the prompt plays out. A false value (default) means that the type-ahead buffer is notflushed after the prompt plays out. If the prompt allows barge-in, the digit that barges in is not flushed.
As a result, when the queueing script is executing and looping, and if the caller enters one digit from key pad, the digit will be buffered and all the play media steps will be interrupted, and as result, the loop will be executed much quicker and reach the node limit in very short time.
Resolution:
1. Disable barge-in in Network VRU script configuration parameter, or
2. Disable type-ahead buffer in Network VRU script configuration parameter.
CVP 8.x configuration and administrator guide, section for Network VRU script configuration.
Jeffrey