Courtesy CallBack
Make sure signaling forward unconditional is set under voice service voip on the Cisco CUBE, otherwise CVP doesn't get informed that the call has been reconnected to the caller - and the caller just hears silence.
Links
Quick Guide - Install Steps
- Enable Courtesy Callback in CVP Ops: System→Courtesy Callback
- Add allowed Dialed Number, e.g. 901!, 902!, …, 909!
- Configure Survivability Script on Gateway (See install guide)
- CCB uses the Survivability, Handoff and specific CCB TCL Scripts
! voice service voip signaling forward unconditional sip min-se 7200 ! application service survivability flash:survivability.tcl param ccb id:10.123.123.123;loc:LABGW1;trunks:5 ! (this vxml config - only needed if not using VVBs) vxml version 2.0 !
- Configure ICM EWT - as per below
- Deploy the 4 CVP Call Studio apps - edit them as necessary (create copies of the entry and queue script).
Courtesy Callback supports expected wait time up to 90 minutes. You must set the SIP session expiration timer to a maximum value (7200) to support courtesy call back with call back time more than 30 minutes (default session expiration timer set in the gateway). The ICM router MaxTimeInQueue must be increased to an EWT of 90 minutes or 5400 seconds. The following set of configuration steps are to achieve the same.
Call Studio Script Summary
→ Call starts to Queuing and EWT is calculated →
- Callback_Entry
- checks if Courtesy Callback is enabled and if all is good (via Validate steps) it flows to to pre-emptive call flow, states EWT and if EWT > threshold will offer a callback
- If callers accepts callback and the callback number is valid, the callback is inserted into the database and call returns to ICM Scripts
- ICM Routes (if not error) to the CallbackEngine Call Studio Script
- CallbackEngine
- Plays the “You call-back has been successfully scheduled. Good bye.” , disconnects the call and transfers to the CallbackWait Call Studio Script
- CallbackWait
- Continuously updating database and counting down the EWT. Eventually reconnecting the caller, annoucing their name and offering them the options to accept the callback. Which if they do plays “You are number one in the queue” and returns to ICM.
- ICM then Routes the call to the CallbackQueue Call Studio Scrpit
- CallbackQueue
- Plays the Queue Prompts (note if caller never got offered or accepted a callback - the queue prompts are initialed within the CallbackEntry Script instead of here. But both end up using a subdialog to transfer the call to QueueApp
Callback_Entry
This is the first script used - and there are default parameters to set ANI, retry attempt etc You can also adjust the script to insert an additional zero here so the callback number is prefixed with it etc. This script calls the Callback Queue script - which simplies pays an audio file (default file is a 2 min audio file). Th keepalive value must be longer than the queue length file (defaults to 180s). If the EWT is above the max threshold (not sure why it not called min threshold!) - a callback will be offered. The callback number is pushed the database and if its an allowed number, the script returns to ICM with a number of variables (which are used by the next call studio scripts).
Queue script
As per above - if the EWT is below the threshold - no callback if offered and the call queues in this above script - and uses a sub dialog to run this script to play the relevant audio file.
Callback Engine Script
Once the callback number has been inserted into the database, this script is then called. This script confirms that the Callback has been placed and monitors for a hang-up by the caller or if the caller does not hang-up - it disconnects the customer call - but it does NOT disconnect the VXML session. Once the customer call has been disconnected - the script calls the Callback Wait Script
Callback Wait Script
This script monitors the call and checks the EWT to see when the caller should be called back. Once it calculates it is ready for the callback - it makes the outbound call to the customer. The customer has to answer the call - it replays their recorded name to them and asks if they are ready (press 1). Once they do so - it queues the call by routing the call to the ICM Scripts which then initiates the Callback Queue Script
Callback Queue
Once the callback call has been reconnected it returns to ICM and then this script is initiated. Which plays the relevant queue prompts and updates the database / checks for hang-ups etc.
Some sample CVP VXML Server (Call Studio App) Requests and Responses from Reporting Server
Request URI: /cvp/CallbackServlet?ani=768978691&qname=billing&callid=CF8881F1676C11E980742C5A0FE69BC0&qtime=1556291641969&method=EnterQueue&version=CVP+11.5%281%29+ES%3D12+Build%3D73&ewt=60 Request URI Path: /cvp/CallbackServlet Request URI Query: ani=768978691&qname=billing&callid=CF8881F1676C11E980742C5A0FE69BC0&qtime=1556291641969&method=EnterQueue&version=CVP+11.5%281%29+ES%3D12+Build%3D73&ewt=60 Request URI Query Parameter: ani=768978691 Request URI Query Parameter: qname=billing Request URI Query Parameter: callid=CF8881F1676C11E980742C5A0FE69BC0 Request URI Query Parameter: qtime=1556291641969 Request URI Query Parameter: method=EnterQueue Request URI Query Parameter: version=CVP+11.5%281%29+ES%3D12+Build%3D73 Request URI Query Parameter: ewt=60
<?xml version="1.0" encoding="UTF-8" ?> <result> <status>success</status> <new_data> <element name="ewt" log="true" type="int" create="after_exit">0</element> </new_data> <version>CVP_11_5</version> </result>
Validate
Request URI: /cvp/CallbackServlet?scc=n&qname=billing&callid=CF8881F1676C11E980742C5A0FE69BC0&pcc=y&gw=10.123.123.123&capacity=3&method=Validate&inqueue=y&version=CVP+11.5%281%29+ES%3D12+Build%3D73&ewt=60 Request URI Path: /cvp/CallbackServlet Request URI Query: scc=n&qname=billing&callid=CF8881F1676C11E980742C5A0FE69BC0&pcc=y&gw=10.123.123.123&capacity=3&method=Validate&inqueue=y&version=CVP+11.5%281%29+ES%3D12+Build%3D73&ewt=60 Request URI Query Parameter: scc=n Request URI Query Parameter: qname=billing Request URI Query Parameter: callid=CF8881F1676C11E980742C5A0FE69BC0 Request URI Query Parameter: pcc=y Request URI Query Parameter: gw=10.123.123.123 Request URI Query Parameter: capacity=3 Request URI Query Parameter: method=Validate Request URI Query Parameter: inqueue=y Request URI Query Parameter: version=CVP+11.5%281%29+ES%3D12+Build%3D73 Request URI Query Parameter: ewt=60
<?xml version="1.0" encoding="UTF-8" ?> <result> <status>success</status> <new_data> <element name="result" log="true" type="string" create="after_exit">refresh</element> </new_data> <version>CVP_11_5</version> </result>
SetQueueDefaults
Request URI [truncated]: /cvp/CallbackServlet?busy=3%3B300&version=CVP+11.5%281%29+ES%3D12+Build%3D73&th=00%3A00%3A00-23%3A59%3A59&qname=billing&trunksbusy=3%3B60&maxewt=60&rna=30&su=00%3A00%3A00-23%3A59%3A59&fr=00%3A00%3A00-23%3A59%3A59&r Request URI Path: /cvp/CallbackServlet Request URI Query [truncated]: busy=3%3B300&version=CVP+11.5%281%29+ES%3D12+Build%3D73&th=00%3A00%3A00-23%3A59%3A59&qname=billing&trunksbusy=3%3B60&maxewt=60&rna=30&su=00%3A00%3A00-23%3A59%3A59&fr=00%3A00%3A00-23%3A59%3A59&reconnect_time=3 Request URI Query Parameter: busy=3%3B300 Request URI Query Parameter: version=CVP+11.5%281%29+ES%3D12+Build%3D73 Request URI Query Parameter: th=00%3A00%3A00-23%3A59%3A59 Request URI Query Parameter: qname=billing Request URI Query Parameter: trunksbusy=3%3B60 Request URI Query Parameter: maxewt=60 Request URI Query Parameter: rna=30 Request URI Query Parameter: su=00%3A00%3A00-23%3A59%3A59 Request URI Query Parameter: fr=00%3A00%3A00-23%3A59%3A59 Request URI Query Parameter: reconnect_time=30 Request URI Query Parameter: keepalive=180 Request URI Query Parameter: refresh=1 Request URI Query Parameter: dnis=5901 Request URI Query Parameter: maxcnt=9999999 Request URI Query Parameter: mo=00%3A00%3A00-23%3A59%3A59 Request URI Query Parameter: noresponse=3%3B300 Request URI Query Parameter: error=3%3B60 Request URI Query Parameter: cli=12260 Request URI Query Parameter: burst=10%3A1 Request URI Query Parameter: maxpct=100 Request URI Query Parameter: tz=GB-Eire Request URI Query Parameter: tu=00%3A00%3A00-23%3A59%3A59 Request URI Query Parameter: SLA_time=60 Request URI Query Parameter: sa=00%3A00%3A00-23%3A59%3A59 Request URI Query Parameter: method=SetQueueDefaults Request URI Query Parameter: noanswer=3%3B300 Request URI Query Parameter: we=00%3A00%3A00-23%3A59%3A59
<?xml version="1.0" encoding="UTF-8" ?> <result> <status>success</status> <version>CVP_11_5</version> </result>
Validate
Request URI: /cvp/CallbackServlet?scc=n&qname=billing&callid=CF8881F1676C11E980742C5A0FE69BC0&pcc=y&gw=10.123.123.123&capacity=3&method=Validate&inqueue=y&version=CVP+11.5%281%29+ES%3D12+Build%3D73&ewt=60 Request URI Path: /cvp/CallbackServlet Request URI Query: scc=n&qname=billing&callid=CF8881F1676C11E980742C5A0FE69BC0&pcc=y&gw=10.123.123.123&capacity=3&method=Validate&inqueue=y&version=CVP+11.5%281%29+ES%3D12+Build%3D73&ewt=60 Request URI Query Parameter: scc=n Request URI Query Parameter: qname=billing Request URI Query Parameter: callid=CF8881F1676C11E980742C5A0FE69BC0 Request URI Query Parameter: pcc=y Request URI Query Parameter: gw=10.123.123.123 Request URI Query Parameter: capacity=3 Request URI Query Parameter: method=Validate Request URI Query Parameter: inqueue=y Request URI Query Parameter: version=CVP+11.5%281%29+ES%3D12+Build%3D73 Request URI Query Parameter: ewt=60
<?xml version="1.0" encoding="UTF-8" ?> <result> <status>success</status> <new_data> <element name="result" log="true" type="string" create="after_exit">preemptive</element> </new_data> <version>CVP_11_5</version> </result>
AddCallback
Request URI [truncated]: /cvp/CallbackServlet?rec=http%3A%2F%2F10.123.123.100%3A7000%2FCVP%2Faudio%2Faudio1556291659624640.wav&ani=00858769707&callid=CF8881F1676C11E980742C5A0FE69BC0&gw=10.123.123.123&loc=labgw&method=AddCallback&type=p&version=CV Request URI Path: /cvp/CallbackServlet Request URI Query [truncated]: rec=http%3A%2F%2F10.123.123.100%3A7000%2FCVP%2Faudio%2Faudio1556291659624640.wav&ani=00858769707&callid=CF8881F1676C11E980742C5A0FE69BC0&gw=10.123.123.123&loc=labgw&method=AddCallback&type=p&version=CVP+11.5%281%29+E Request URI Query Parameter: rec=http%3A%2F%2F10.123.123.100%3A7000%2FCVP%2Faudio%2Faudio1556291659624640.wav Request URI Query Parameter: ani=00858769707 Request URI Query Parameter: callid=CF8881F1676C11E980742C5A0FE69BC0 Request URI Query Parameter: gw=10.123.123.123 Request URI Query Parameter: loc=labgw Request URI Query Parameter: method=AddCallback Request URI Query Parameter: type=p Request URI Query Parameter: version=CVP+11.5%281%29+ES%3D12+Build%3D73
<?xml version="1.0" encoding="UTF-8" ?> <result> <status>success</status> <new_data> <element name="result" log="true" type="string" create="after_exit">valid</element> </new_data> <version>CVP_11_5</version> </result>
GetStatus
Request URI: /cvp/CallbackServlet?qname=billing&callid=CF8881F1676C11E980742C5A0FE69BC0&qtime=1556291641969&method=GetStatus&version=CVP+11.5%281%29+ES%3D12+Build%3D73 Request URI Path: /cvp/CallbackServlet Request URI Query: qname=billing&callid=CF8881F1676C11E980742C5A0FE69BC0&qtime=1556291641969&method=GetStatus&version=CVP+11.5%281%29+ES%3D12+Build%3D73 Request URI Query Parameter: qname=billing Request URI Query Parameter: callid=CF8881F1676C11E980742C5A0FE69BC0 Request URI Query Parameter: qtime=1556291641969 Request URI Query Parameter: method=GetStatus Request URI Query Parameter: version=CVP+11.5%281%29+ES%3D12+Build%3D73
<?xml version="1.0" encoding="UTF-8" ?> <result> <status>success</status> <new_data> <element name="startCallback" log="true" type="boolean" create="after_exit">true</element> <element name="ewt" log="true" type="int" create="after_exit">0</element> <element name="qpos" log="true" type="int" create="after_exit">0</element> <element name="DQRateA" log="true" type="int" create="after_exit">60</element> <element name="DQRateB" log="true" type="int" create="after_exit">0</element> <element name="ReconnectTime" log="true" type="int" create="after_exit">30</element> <element name="cli" log="true" type="string" create="after_exit">12260</element> <element name="rna" log="true" type="int" create="after_exit">30</element> <element name="dn" log="true" type="string" create="after_exit">00858769707</element> <element name="rec" log="true" type="string" create="after_exit">http://10.123.123.100:7000/CVP/audio/audio1556291659624640.wav</element> </new_data> <version>CVP_11_5</version> </result>
UpdateStatus
Request URI: /cvp/CallbackServlet?status=INPROGRESS&callid=CF8881F1676C11E980742C5A0FE69BC0&method=UpdateStatus&version=CVP+11.5%281%29+ES%3D12+Build%3D73 Request URI Path: /cvp/CallbackServlet Request URI Query: status=INPROGRESS&callid=CF8881F1676C11E980742C5A0FE69BC0&method=UpdateStatus&version=CVP+11.5%281%29+ES%3D12+Build%3D73 Request URI Query Parameter: status=INPROGRESS Request URI Query Parameter: callid=CF8881F1676C11E980742C5A0FE69BC0 Request URI Query Parameter: method=UpdateStatus Request URI Query Parameter: version=CVP+11.5%281%29+ES%3D12+Build%3D73
<?xml version="1.0" encoding="UTF-8" ?> <result> <status>success</status> <new_data> <element name="result" log="true" type="string" create="after_exit">done</element> </new_data> <version>CVP_11_5</version> </result>
Courtesty Callback Default Setting
Callback Record in callback_current Table
Dynamic EWT
The EWT is originally calculated in the ICM script. However, the reporting server recalculates the EWT based on the calls received, calls in queue, calls offered CCB and some other parameters. Because of this, the EWT could be lower than the one mentioned to the caller when offered a callback. Some caller have a problem with this because they program their activities based on the EWT. In 11.5. CVP incorporated a variable that can be set to turn off the dynamic EWT calculation.
This is contained in C:\Cisco\CVP\conf\reporting.properties
RPT.DynamicEwtCalculationEnabled = true
The EWT prompt in minutes is calculated using the following formula in the CVP Call Studio 'CallbackEntry' app:
((({Data.Session.ewt}/60 * 1000000000000000) - (({Data.Session.ewt}/60 * 1000000000000000) % 1000000000000000))/1000000000000000) + 1
Prompts
Prompt Name | Prompt Text |
---|---|
CCANIPart1.wav | If you would like to call you back at: |
CCANIPart2.wav | Press 1 , to use a different callback number press 2 |
CCAskIfCallerReadyPart1.wav | Hello this is a callback for: |
CCAskIfCallerReadyPart2.wav | Press 1 if you are ready to speak to an advisor, press 2 if you need time to bring that person to the telephone, press 3 to cancel this callback |
CCAskIfCallerReadyPart3.wav | Press 3 to cancel this callback |
CCConfirmANIPart1.wav | You entered: |
CCConfirmANIPart2.wav | Is that correct? Press 1 for yes, press 2 for no. |
CCError.wav | I'm sorry, the callback has been cancelled, if you would like to wait for an advisor, simply stay on the line. |
CCGoodbye.wav | You call-back has been successfully scheduled. Good bye. |
CCGoodbyeCanceled.wav | The callback has been permanently cancelled at your request. Good bye. |
CCNoANI.wav | Please enter your callback telephony number following by the hash key |
CCPhoneNotValid.wav | That telephony format is incorrect. |
CCPreemptivePart1.wav | If you would like us to call back in about: |
CCPreemptivePart2.wav | minutes, press 1. |
CCPress1WhenReady.wav | Press 1 when you are ready to speak to an advisor. |
CCRecordName.wav | At the tone, please record your name and then press the hash key. |
CCStayOnLine.wav | If you would like to wait for an advisor, simply stay on the line. |
CCUseDifferentCallbackNumber.wav | Please use a different callback number. |
CCWaitTimePart1.wav | All advisors are currently busy, your current wait time is approximately: |
CCWaitTimePart2.wav | minutes. |
CCYouAreNumber1InQueue.wav | You are currently number 1 in the queue and an advisor will be with you shortly. |
Troubleshooting
- Reporting Service in Service - using http://cvp-reporting-server:8000/cvp/CallbackServlet
- If it is IN SERVICE you should get a Error Bad request as per below:
<?xml version="1.0" encoding="UTF-8" ?> <result> <status>Error: bad request</status> </result>
EWT
Custom Functions
ValidValue(((SkillGroup.%1%.RouterCallsQNow)*trunc((ValidValue(SkillGroup.%1%.AvgHandledCallsTimeTo5,%2%))/max(SkillGroup.%1%.Ready,(SkillGroup.%1%.TalkingIn+SkillGroup.%1%.TalkingOut+SkillGroup.%1%.TalkingOther)))),%2%)
Multiple Skill groups
Create another Custom function to call the above custom function for each CCB Queue / Resource Pool. If you have multiple skill groups which use the SAME agents - then add the EWT as per below. If there is a percentage of agents in the other skillgroups - enter the percent as a decimal - as per below
userEWT_1SkillGroup(Benefits_IVR,406) + trunc((0.50)*userEWT_1SkillGroup(CustService_IVR,376)) + trunc((0.75)*userEWT_1SkillGroup(Sales,278))
Informix Database Access via Squirrel
Alias Setup
As per the CUIC Datastore setup use the username cvp_dbuser
CVP Data Database
jdbc:informix-sqli://<hostname>:1526/cvpdata:INFORMIXSERVER=cvp;
CVP Callback Database
jdbc:informix-sqli://<hostname>:1526/callback:INFORMIXSERVER=cvp;
CVP Reporting Database Schema
EventTypeId | EventType |
---|---|
0 | New Call |
1 | Connect Failure |
2 | Busy |
3 | No Answer |
4 | Answer |
5 | Abandon |
6 | Disconnect |
7 | Hang Up |
8 | App Transfer |
9 | App Session Complete |
10 | Call Transfer |
11 | Run Script |
12 | Agent Recording |
13 | ICM Recording |
14 | Agent Video |
15 | ICM Video |
16 | Bridge Transfer |
17 | Blind Transfer |
18 | ReqICMLabel |
19 | Audio Recording |
20 | Callback Canceled |
21 | Callback Pending |
22 | Callback In Progress |
23 | Callback Tentative |
24 | Callback Complete |
25 | Callback Recover |
26 | Callback Created |
27 | Callback Dropped from queue |
28 | Callback Added to queue |
29 | Max allowed callbacks for this ANI has been exceeded |
causeid | cause |
---|---|
0 | None |
1 | Normal Completion |
2 | Call Abandon |
3 | Call Transferred |
4 | New Transaction |
5 | Busy |
6 | No Answer |
7 | Maintenance |
8 | Net Congestion |
9 | Net Not Obtainable |
10 | Reorder Tone |
11 | Resources Not Available |
12 | Trunks Busy |
13 | Called Party Disconnected |
14 | Max Ports |
15 | Suspended |
16 | Time Out |
17 | Invalidated |
18 | Error |
19 | Video Answered |
20 | Post Call Answer |
21 | Invalid |
22 | Failure |
23 | Audio Recording Start |
24 | Audio Recording Stop |
25 | No Response |
26 | Invalid Number |
27 | Connected |
28 | Caller Canceled |
29 | Whisper Start |
30 | Whisper Done |
31 | Whisper Setup Failed |
32 | Abandon In Whisper |
33 | Whisper Media Error |
1001 | Hang Up |
1002 | Network |
1003 | System |
1004 | Script Type |
1005 | Unknown UApp |
1006 | Script Name |
1007 | Config Param |
1008 | Misconfig Ecc |
1009 | Media File |
1010 | Semantic |
1011 | VXML Format |
1012 | VXML Element |
1013 | Variable Data |
1014 | No Var Data |
1015 | Format |
1016 | Entry Invalid |
1017 | No Entry |
1018 | Media Resource Video |
1019 | Recording Failed |
1020 | Data Range |
1021 | Timed Out |
1022 | Called Hung Up |
1023 | No Answer |
1024 | Busy |
1025 | Gen Transfer |
1026 | Invalid Extn |
1027 | Hang Up Forced |
1028 | After Trans Estab |
1030 | Unsupported Language |
1031 | Media Resource ASR |
1032 | Media Resource TTS |
1033 | General ASR TTS |
1034 | Unknown Error |
1035 | Missing Configuration |
1036 | Duplicate Record |
1037 | Not in Queue |
1039 | Unknown Callguid |
1040 | CVP System Unavailable |
1041 | CVP App Error |
1042 | CVP App Hang Up |
1043 | CVP App Suspended |
1044 | CVP No Session Error |
1045 | CVP Bad Fetch |
1046 | No Streaming Media Resource TTS |
SQL
Callbacks Counts by Event Type
SELECT eventtype AS EventType, COUNT(*) AS NumOfCalls FROM CallBack, EventTypeRef WHERE CallBack.EventTypeID=EventTypeRef.EventTypeID GROUP BY eventType ORDER BY eventType
As above - but group by date
SELECT callstartdate AS StartDate, eventtype AS EventType, COUNT(*) AS NumOfCalls FROM CallBack, EventTypeRef WHERE CallBack.EventTypeID=EventTypeRef.EventTypeID GROUP BY callstartdate, eventType ORDER BY eventType
CUIC Versions of above
SQL
SELECT callstartdate AS StartDate, eventtype AS EventType, nbrattempts AS NumOfAttempts, cause AS Cause, COUNT(*) AS NumOfCalls FROM CallBack, EventTypeRef, CauseRef WHERE (weekday(callstartdate) IN(1,2,3,4,5,6,0) AND callstartdate BETWEEN '12-01-2020' AND '12-31-2020') AND CallBack.EventTypeID=EventTypeRef.EventTypeID AND CallBack.causeid=CauseRef.causeid GROUP BY callstartdate, eventType, cause, nbrattempts ORDER BY callstartdate, eventType, Cause
ICM Sample Script
Troubelshooting Tips
NOT_IN_QUEUE
I got the “NOT_IN_QUEUE” error (see below how to determine the error) - when I incorrectly set (didn't set) the couresty callback enabled ECC variable.
So “NOT_IN_QUEUE” means that the CCB wasn't enabled and hence no the Callback Entry Call Studio app didn't go via the Preemtive“ route after validating the call against. So went straight to queue and not to the EWT prompt.
Steps from the Cisco CVP CCB Troublshooting guide
- Collect Activity logs from the CallbackEntry application from the Voice Extensible Markup
Language (VXML) Server.
- Search within the Activity logs for any call where validation is none:
Validate_02,data,result,none Which means that validation did not pass. Obtain the GUID for this call. Filter the call by the activity callid and look for a callid like this example: start,parameter,callid=BBBBAAAACCCCDDDDEEEEFFFFAAAABBBB
- Collect CVP reporting logs for the Reporting Server. Find the same callid in the CVP
Reporting logs. ValidateHandler:ValidateHandler.exec: ValidateHandler GUID=BBBBAAAACCCCDDDDEEEEFFFFAAAABBBB results:none validation status bitmask=0x00000103
- Convert the bitmask number to binary. Use a programmer calculator: 0001 00000011
- Check the CVP Reporting guide bitmask for CCB tables. You should see that validation
fails because of “EXCEED_CAPACITY_GW”.
00000000 00000001 OK 00000000 00000010 ICM_NO_SCHEDULED_ALLOWED 00000000 00000100 ICM_NO_PREEMPTIVE_ALLOWED 00000000 00001000 NOT_IN_QUEUE 00000000 00010000 TOD 00000000 00100000 EWT 00000000 01000000 PROBE_FAILED_NO_RESPONSE 00000000 10000000 PROBE_FAILED_NO_CONFIG 00000001 00000000 EXCEED_CAPACITY_GW 00000010 00000000 EXCEED_CAPACITY_QUEUE Note: ICM_NO_SHCEDULED_ALLOWED and the OK bit are always set
Silence and errors on the CallbackEngine Script
Make sure that the CUBE / Gateway is setup with
voice service voip signaling forward unconditional