Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations IamaSherpa on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Scripting Assistance 2

Status
Not open for further replies.

ccastillo

IS-IT--Management
Dec 5, 2001
155
US
I am trying to use this script which will play the estimated wait time to callers. Unfortunately it only plays the first wait time (greater than 2 minutes) and the GIVE IVR statement. As the wait time increases I want it to play the appropriate message but it's not doing that.

All the messages are recorded in App Builder and referenced properly in the Call Pilot CDN table. Why does it not play the other wait times? I've highlighted the area where the trouble starts:

(Please forgive the all the commented out parts. It's still in testing and I'll clean it up when we go live)

Thank You In Advance,


/********* This section checks for OOS and plays a repeat MSG every 90 seconds. *********/

SECTION loop1

IF OUT OF SERVICE TS, TS_OVF
THEN
ROUTE CALL 6002 /* TS Vmailbox */
END IF

IF NOT LOGGED OUT AGENT 700911
THEN
ROUTE CALL 6002 /* TS Vmailbox */
END IF

IF OUT OF SERVICE TS
THEN
IF NOT OUT OF SERVICE TS_OVF
THEN
IF NOT QUEUED
THEN
QUEUE TO SKILLSET TS_OVF WITH PRIORITY 4
WAIT 2
END IF
END IF
END IF

WAIT 10

IF NOT QUEUED
THEN
IF NOT OUT OF SERVICE TS
THEN
QUEUE TO SKILLSET TS WITH PRIORITY 3
WAIT 2
END IF
IF NOT OUT OF SERVICE TS_OVF
THEN
QUEUE TO SKILLSET TS_OVF WITH PRIORITY 4
WAIT 2
END IF
END IF

IF EXPECTED WAIT TIME TS > 120
THEN
GIVE IVR 5238 WITH TREATMENT vt_est_wait_time_2min /* vt_est_wait_time has value 680046 which referes to App. ID 1680046_2Min_TS_Wait_Time_With_VM_Option */
ELSE
/* END IF */

IF EXPECTED WAIT TIME TS > 300
THEN
GIVE IVR 5238 WITH TREATMENT vt_est_wait_time_5min /* vt_est_wait_time has value 680047 which referes to App. ID 1680047_5Min_TS_Wait_Time_With_VM_Option */
ELSE
/* END IF */

IF EXPECTED WAIT TIME TS > 600
THEN
GIVE IVR 5238 WITH TREATMENT vt_est_wait_time_10min /* vt_est_wait_time has value 680048 which referes to App. ID 1680048_10Min_TS_Wait_Time_With_VM_Option */
ELSE
/* END IF */

IF EXPECTED WAIT TIME TS > 900
THEN
GIVE IVR 5238 WITH TREATMENT vt_est_wait_time_greater10min /* vt_est_wait_time_greater10min has value 680049 which referes to App. ID 1680049_Greater_Than_15Min_TS_Wait_Time_With_VM_Option */
END IF
END IF
END IF
END IF

WAIT 30

/*GIVE RAN ran_eng_2ndwait ROUTE 3*/

GIVE IVR acd_mail_ivr WITH TREATMENT vt_TS_vmailopt /* 680025 option to lv vmail msg */

EXECUTE loop1


 
Have you tried not using IF/THEN/ELSE/END-IF and changing to multiple IF/THEN/END-IF statements? I'm not sure you can stack the ELSE statements like that.

Also, assuming you fix that, then since your logical test is > ###, then your EWT is >900, it's also >120, >300, >600, >900, etc. SO, you should reverse the order you do your logical test - do the highest first, down to lowest.

Make sense? I can post detail if you need. Thanks! -Matt

Matt H.
TMC - KCMO, USA
 
Wait - it works both ways. You'd have to do embedded IF/THEN/END-IF statements. Let me re-write and post.. give me a second :p

-Matt

Matt H.
TMC - KCMO, USA
 
OK, try this - I embedded several IF check statements; I've used this before to try and check multiple things at once.

/********* This section checks for OOS and plays a repeat MSG every 90 seconds. *********/

SECTION loop1

IF OUT OF SERVICE TS, TS_OVF
THEN
ROUTE CALL 6002 /* TS Vmailbox */
END IF

IF NOT LOGGED OUT AGENT 700911
THEN
ROUTE CALL 6002 /* TS Vmailbox */
END IF

IF OUT OF SERVICE TS
THEN
IF NOT OUT OF SERVICE TS_OVF
THEN
IF NOT QUEUED
THEN
QUEUE TO SKILLSET TS_OVF WITH PRIORITY 4
WAIT 2
END IF
END IF
END IF

WAIT 10

IF NOT QUEUED
THEN
IF NOT OUT OF SERVICE TS
THEN
QUEUE TO SKILLSET TS WITH PRIORITY 3
WAIT 2
END IF
IF NOT OUT OF SERVICE TS_OVF
THEN
QUEUE TO SKILLSET TS_OVF WITH PRIORITY 4
WAIT 2
END IF
END IF

IF EXPECTED WAIT TIME TS > 120 THEN /*2MIN*/
IF EXPECTED WAIT TIME TS > 300 THEN /*5MIN*/
IF EXPECTED WAIT TIME TS > 600 THEN /*10MIN*/
IF EXPECTED WAIT TIME TS > 900 THEN /*GREATER 10 MIN*/
GIVE IVR 5238 WITH TREATMENT VT_EST_WAIT_TIME_GREATER10MIN
END IF /*GREATER10MIN*/
GIVE IVR 5238 WITH TREATMENT VT_EST_WAIT_TIME_10MIN
END IF /*10MIN*/
GIVE IVR 5238 WITH TREATMENT VT_EST_WAIT_TIME_5MIN
END IF/*5MIN*/
GIVE IVR 5238 WITH TREATMENT VT_EST_WAIT_TIME_2MIN
END IF /*2MIN*/

WAIT 30

GIVE IVR ACD_MAIL_IVR WITH TREATMENT VT_TS_VMAILOPT

EXECUTE LOOP1

Matt H.
TMC - KCMO, USA
 
Man I love this forum! The fast response times are always amazing. I'll try the corrections and post the results.

Thanks Heav!
 
I was about to make the changes when I noticed I had been watching (via real time skillset display) the time changes for Average Answer Delay and not Expected Wait Time which are two completely different things.

Although our average answer delay was peaking our expected wait time still stayed relatively low. I'll keep watching and see if it works before making any changes. I'll update if necessary.
 
You're right that if you were watching the wrong thing, then you wouldn't get the msgs you wanted. However, I think if you do not embed the statements right, you'll get all the messages played for you. Re-reading my script, I'm not even sure I did it right. I may have to think about this for a second and repost; but we won't know until your wait times get high enough to test. I'll work on it tonite and see what I come up with... -Matt

Matt H.
TMC - KCMO, USA
 
OK, I think you need to try this; my other script would end up doing the same thing yours did - it would play all the treatments for your EWT and EWTs below - ie, if it were in the 10min range, it would play the 10, 5, and 2 minute messages also. So please try this and see what you think. You could also put this on a test CDN that just plays the messages, and lowere the thresholds to test it if your real call center isn't generating EWTs that are over 2 mins or whatever. I've bolded the EWT section again for your convenience....

/********* This section checks for OOS and plays a repeat MSG every 90 seconds. *********/

SECTION LOOP1

IF OUT OF SERVICE TS, TS_OVF
THEN
ROUTE CALL 6002 /* TS Vmailbox */
END IF

IF NOT LOGGED OUT AGENT 700911
THEN
ROUTE CALL 6002 /* TS Vmailbox */
END IF

IF OUT OF SERVICE TS
THEN
IF NOT OUT OF SERVICE TS_OVF
THEN
IF NOT QUEUED
THEN
QUEUE TO SKILLSET TS_OVF WITH PRIORITY 4
WAIT 2
END IF
END IF
END IF

WAIT 10

IF NOT QUEUED
THEN
IF NOT OUT OF SERVICE TS
THEN
QUEUE TO SKILLSET TS WITH PRIORITY 3
WAIT 2
END IF
IF NOT OUT OF SERVICE TS_OVF
THEN
QUEUE TO SKILLSET TS_OVF WITH PRIORITY 4
WAIT 2
END IF
END IF

/** THIS SECTION CHECKS FOR EWT >= 120 AND < 300 **/
/** This is for for estimated wait times that are between 2 and 5 minutes **/
IF EXPECTED WAIT TIME TS > 119 THEN
IF EXPECTED WAIT TIME TS < 300 THEN
GIVE IVR 5238 WITH TREATMENT VT_EST_WAIT_TIME_2MIN
END IF
END IF

/** THIS SECTION CHECKS FOR EWT >= 300 AND < 600 **/
/** This is for for estimated wait times that are between 5 and 10 minutes **/
IF EXPECTED WAIT TIME TS > 299 THEN
IF EXPECTED WAIT TIME TS < 600 THEN
GIVE IVR 5238 WITH TREATMENT VT_EST_WAIT_TIME_5MIN
END IF
END IF

/** THIS SECTION CHECKS FOR EWT >= 600 AND < 900 **/
/** This is for for estimated wait times that are between 10 and 15 minutes **/
IF EXPECTED WAIT TIME TS > 599 THEN
IF EXPECTED WAIT TIME TS < 900 THEN
GIVE IVR 5238 WITH TREATMENT VT_EST_WAIT_TIME_10MIN
END IF
END IF

/** THIS SECTION CHECKS FOR EWT >= 900 **/
/** This is for for estimated wait times that are over 15 minutes **/
IF EXPECTED WAIT TIME TS > 899 THEN
GIVE IVR 5238 WITH TREATMENT VT_EST_WAIT_TIME_GREATER10MIN
END IF

WAIT 30

GIVE IVR ACD_MAIL_IVR WITH TREATMENT VT_TS_VMAILOPT

EXECUTE LOOP1

/** END OF SCRIPT **/

Hope this helps and is clearer, hope I didn't confuse you in my first posts. Fingers go faster than brain sometimes!!! -Matt

Matt H.
TMC - KCMO, USA
 
We've also been asked to do an expected wait time and/or position in queue messaging.

The script takes expected wait time and breaks it down into minutes and seconds. We'll probably go for a 'banded' message as above as people will no doubt be sat with stopwatches complaining i the EWT isn't accurate, however, the we plan to test the accuracy of the EWT for the helpdesk's call flow using the minutes/seconds approach within a parallel script to the main one.

The script also has a check to make sure the EWT given to the customer doesn't increase.

The script isn't yet in production, so if anyone sees any bugs or ways to improve it, I'd like to hear from you...

Apologies for length of script (all date and time checks have been removed to stop it being even longer)

/* Script to test accuracy of Expected Wait Time message in Helpdesk 10/1/05 */

IF NOT OUT OF SERVICE ServiceDesk THEN
QUEUE TO SKILLSET ServiceDesk WITH PRIORITY 5
WAIT 2
ELSE
EXECUTE closed_section
END IF

WAIT 8

/* Script plays interruptible messages which allows caller to press 1 to leave a message. This is read into a call variable, whose value is checked to see if the call is routed to the mailbox or not */

OPEN VOICE SESSION
PLAY PROMPT
VOICE SEGMENT vs_hdeskmsg1

COLLECT 1 DIGITS INTO cv_leave_message
INTER DIGIT TIMER 1

END VOICE SESSION

WHERE cv_leave_message EQUALS
VALUE 1: ROUTE CALL 53600
END WHERE

GIVE MUSIC 50

SECTION loop_section

/* EWT message is only played when the EWT exceeds a certain threshold (TBA). If the call loops round through this section a second time, the EWT message is played
only if the threshold is exceeded and the value of the EWT has not INCREASED since the first time the message was played. As a default, cv_ewt = 0, cv_ewt_old = 1*/

IF EXPECTED WAIT TIME ServiceDesk > 30 AND
cv_ewt < cv_ewt_old THEN
EXECUTE special_message_section
END IF

WAIT 20

OPEN VOICE SESSION
PLAY PROMPT
VOICE SEGMENT vs_hdeskmsg2

COLLECT 1 DIGITS INTO cv_leave_message
INTER DIGIT TIMER 1

END VOICE SESSION

WHERE cv_leave_message EQUALS
VALUE 1: ROUTE CALL 53600
END WHERE

WAIT 20

OPEN VOICE SESSION
PLAY PROMPT
VOICE SEGMENT vs_hdeskmsg3
END VOICE SESSION

/* command so that callers who have heard the normal
loop messages do not hear the EWT messages */

EXECUTE loop_section_checks

SECTION special_message_section
WAIT 20

ASSIGN EXPECTED WAIT TIME ServiceDesk TO cv_ewt

/* Copy EWT call variable to an new variable. This is used
above to compare current and previous values of EWT */

ASSIGN cv_ewt TO cv_ewt_old

/* Calculate the number of whole minutes in the EWT.
Copy this value to a new call variable: cv_ewt_minutes */

ASSIGN (cv_ewt/60) TO cv_ewt_minutes

/* Calculate the number of remaining seconds in the EWT.
Copy this value to a new call variable: cv_ewt_seconds */

ASSIGN (cv_ewt-(cv_ewt_minutes*60)) TO cv_ewt_seconds

/* Play the message, stringing together several voice segments */

OPEN VOICE SESSION
PLAY PROMPT
VOICE SEGMENT vs_ewt_is
NUMBER cv_ewt_minutes
VOICE SEGMENT vs_minutes_and
NUMBER cv_ewt_seconds
VOICE SEGMENT vs_seconds
END VOICE SESSION

/* All calls reach this point for basic loop checks */

SECTION loop_section_checks

IF AGE OF CALL > 3600 THEN
DISCONNECT
END IF

/* Script checks that an emergency hasn't been invoked since
the caller entered the 'loop' section */

IF NOT LOGGED OUT AGENT 911911 THEN
EXECUTE emergency_section
END IF

/* Script checks that agents haven't logged out of ServiceDesk skillset since the caller entered the 'loop' section. If they have, the call is requeued */

IF NOT QUEUED THEN
IF NOT OUT OF SERVICE ServiceDesk THEN
QUEUE TO SKILLSET ServiceDesk WITH PRIORITY 5
WAIT 2
ELSE
EXECUTE closed_section
END IF
END IF

/* reset value for cv_ewt so that it can be compared with the old value to see if message should be played i.e. EWT is decreasing */

ASSIGN EXPECTED WAIT TIME ServiceDesk TO cv_ewt

EXECUTE loop_section

SECTION emergency_section

ROUTE CALL 52021

SECTION closed_section

GIVE CONTROLLED BROADCAST ANNOUNCEMENT
PLAY PROMPT
VOICE SEGMENT vs_hdesknight
DISCONNECT


I've also got similar scripting for PIQ if anyone is interested
 
Thank you both for your help. I'll keep testing and re-post the results.

DancingDave (and others who might read this),

This might help with those people questioning accuracy of expected wait times. We used this to help explain to our managers that Expected Wait Time Announcements may not be 100% accurate. This was taken directly from "SCCS 4.2 Scripting Guide for The Meridian 1" page 289:

....this means that there is no guarantee that the caller will not wait longer than the announced wait time....

1) calls with different priorities are queued to any given skillset. Thus new incoming calls with higher priority are inserted in front of calls of lower priority

2) a burst of traffic can come into the system (including a call with a higher priority) after the first wait time has been given which increases the caller's wait time

3) agents can log off substantially changing the expected wait time for the calls that came into the queue before they logged off

Thanks Again,






 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top