- Basic Treatment
- Initial Announcements
- Loop Function
- Repeat announcements
- Check for changes to the call’s status
After checking for scheduled and unscheduled closures, our scripting logic dictates that we must be open if the call made it to this point in the script (in other words, we haven’t disconnected or otherwise treated our call for a closed condition). Our previous action was to queue the call to the appropriate skillset, provided that the skillset was in service. If an agent is available, the Contact Center Manager Server uses Skill Based Routing to direct the call to an agent. If no agents are available, the call continues through your script commandsm, and now is the time to play an announcement indicating the name of the business and the status of the agents.
(It’s important to note that the announcement can be played before the call is queued, especially if the message must be heard by all callers — such as a legal disclaimer.)
The GIVE RAN or GIVE IVR command is used to play the message. Use GIVE RAN if you have RAN routes, use GIVE IVR if you have CallPilot or a voice messaging system.
An option at this point is to use skillset intrinsics to assess the skillset’s status. If the skillset is particularly busy, you can provide some additional option or treatment to the call. Instead of automatically playing a message about “the agents are busy and will be with you shortly,” you can determine if the wait is likely to be longer than usual and provide the option to leave a message:
IF THE QUEUED COUNT customer_service_sk >
3 * LOGGED AGENT COUNT customer_service_sk THEN
GIVE IVR 8000 WITH TREATMENT 1000
GIVE IVR INTERRUPTIBLE 8000 WITH TREATMENT 2000
In this case, we analyze the number of callers in the skillset queue and compare that value to the number of agents logged into the queue. If the number of waiting callers is more than three times the number of agents staffing the queue, the caller is directed to IVR (CallPilot) queue and presented with a menu service that informs the caller of situation and gives him the option to leave a message (1000 is an entry in the Service Directory Number table of CallPilot that points to the menu service).
If the described criteria isn’t met, the call is pointed to the ELSE clause, and the caller hears the standard announcement naming the company and the intent to answer the call as soon as possible. The INTERRUPTIBLE syntax is required when using the GIVE IVR command while the call is queued so the CCMS can deliver the call to an agent if one becomes available during the playback of the announcement. As a reminder, the code we’re discussing would immediately follow the END IF portion of the IF statement that checked for the status of the skillset and queued the call when the skillset was in service.
Now that the caller heard the initial message (provided he didn’t opt out by leaving a message and hanging up), use the GIVE MUSIC command to play music until the next announcement is played.
Oh no! The dreaded loop! No one wants to be here because now the wait time is starting to grow. While we can’t make the agents work faster through script commands, there are a few simple techniques we can use that will make the extended wait more interesting. How about this:
(a) ASSIGN 1 TO Loop_counter
(b) SECTION Loop_Around
(c) WAIT 45
(d) IF NOT QUEUED THEN
GIVE RAN 35
(e) IF NOT LOGGED OUT AGENT 12345 THEN
GIVE RAN 32
(f) WHERE Loop_counter EQUALS
VALUE 1: GIVE IVR INTERRUPTIBLE 8000 WITH TREATMENT 3001
VALUE 2: GIVE IVR INTERRUPTIBLE 8000 WITH TREATMENT 3002
VALUE 3: GIVE IVR INTERRUPTIBLE 8000 WITH TREATMENT 3003
VALUE 4: GIVE IVR INTERRUPTIBLE 8000 WITH TREATMENT 3004
VALUE 5: GIVE IVR INTERRUPTIBLE 8000 WITH TREATMENT 3005
ASSIGN 0 TO Loop_counter
(g) ASSIGN Loop_counter + 1 TO Loop_counter
(h) EXECUTE Loop_Around
Let’s examine what takes place in this loop.
(a) The code declares an initial value for the call variable Loop_counter. It’s like saying, “X = 1”; Loop_counter is like X in a simple math formula. We use this call variable to keep track of how many times the caller passes through the loop. Since the call is about to pass through the loop for the first time, we set the value to 1.
(b) This is a sign post; a reference point. The system returns to this line as a result of the last line of instruction in the loop (h).
(c) This WAIT command is filled with music from the previous GIVE MUSIC command.
(d) Here we make sure that the call is still queued. If the agents log out during the call’s wait in the loop or if an assignment puts all of the agents staffing the skillset into standby, then we detect the fact that now the caller won’t get answered and give him the sad news before we disconnect. Of course this should rarely occur, but it is an important fail-safe.
(e) The “emergency” agent might get logged in while the caller waits in the loop. We must identify this change of events and respond accordingly. It’s exactly the same code we discussed in the Unscheduled Closures section.
(f) This code can make a big difference in the caller’s perception of the wait process. What we’re doing here is looking at the value of the Loop_counter and playing a different announcement each cycle through the loop. This is possible because we change the value of the loop counter each time the call passes through the loop (see (g) below for the explanation of how the Loop_counter is changing). Company history, interesting facts, even jokes could serve as the content of these announcements. The ASSIGN 0 TO Loop_counter starts the series of recordings all over again after the fifth pass through the loop. You can create more recordings and corresponding VALUE statements if you expect longer wait times.
(g) The system increases the value of the variable each time the call executes the loop via the instructions in this line. This code takes the current value of our call variable and increases it by 1. If Loop_counter is a value of 1 at the beginning of the statement, it becomes a value of 2 by the end.
(h) This line tells the system to continue the loop by going to the section with the same name (b).
Scripting doesn’t seem quite so mysterious now, does it? The outline (four primary components) provides flow and order. The IF-THEN-END-IF lets us examine the current conditions for the call and respond accordingly.
This post is excerpted and reused with permission from Avaya Aura Contact Center Scripting Demystified by Brett Hanson.
Avaya Aura Contact Center