cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
1712
Views
0
Helpful
7
Replies

Priority Skilling or CSQ Overflow

abraham1982
Level 1
Level 1

Hello All,

I am not sure If I am using the right term here. I am stuck with a new requirement raised by the customer. PLease help me with this.

There are to groups of agents L1 and L2.

whenever a support call comes in, it should go to the agents in the L1 first and if all L1 agents are busy, then the call should go to L2. Now if both L1 and L2 agents are busy then call should be queued and routed to the first available agent in either of these.

Can you please help me with this.

regards

Abraham

2 Accepted Solutions

Accepted Solutions

jasyoung
Level 7
Level 7

What you're asking for is pretty straightforward. Your script will look something like this:

  • Select Resource (Group 1)
      • Connected branch
        • Done! End
      • Queued branch
        • (Optional) delay and hold loop treatment prior to Group 2 fallback
        • Select Resource (Group 2)
          • Connected branch
            • Done!  End
          • Queued branch
            • Your hold loop treatment, menu/hold/music/unhold etc.

    When your caller comes in, you place them in the Group 1 queue. If an agent is immediately available, great. If not, while still in queue for Group 1, you also place them in the Group 2 queue. If an agent is immediately available in Group 2, great. If not, you run whatever type of "sorry all agents are busy" treatment you like.

    The key thing to learn and understand here is that you can have a caller waiting in two queues at once, and it's valid to put a caller in a second queue while in the hold loop for the first.

    Many call centers want to introduce a delay between the two queues. For instance, they want the caller to wait for someone in Group 1 for up to X minutes, and then only as a fallback let Group 2 agents answer the call. If you have a similar requirement, you'd add some hold loop treatment and delay in the (Optional) place I show above.

    View solution in original post

    You can do that, but it's the long way to get the same job done. Also, you lose some reporting data, and you need to do some more error handling.

    If you do a Ready agents check on CSQ_1 (and CSQ_2), you still need to account for that call being queued rather than answered. Setting aside race conditions, you might have one agent Ready, but they might have walked away from their desk for some reason and they might not answer the call. Then you're in queue for CSQ_1 when you didn't expect to be, which you then have to handle with extra code in your script. Also, it's difficult to figure out how often you're bypassing CSQ_1 (for reporting purposes) since you were never in queue, so you don't know how effective CSQ_1 is at handling support calls. For that matter, the math starts to get complicated for something as simple as "how many calls did my support number get?" and you have to resort to other report types and combining reports to answer those simple questions.

    If you just go ahead and put the caller into queue, you don't have to go through the extra ready-detection steps, the system only sends you to the Queued branch if nobody in CSQ_1 took the call right away (which is now your reliable trigger to fail over to CSQ_2). Also, if the caller isn't serviced by CSQ_1 (either because they were picked up from another queue or you manually dequeued them) the CSQ gets charged a Dequeue event which you can see in Historical Reporting.

    If you use the simple, reliable method I outlined in my earlier reply, the code is very simple and it accomplishes what you need. You would only need two queues instead of three. And, you get useful reporting numbers that tell you more about the effectiveness of CSQ_1 and how much overflow was handled by CSQ_2.

    If you're dead set against callers being in multiple queues (which is fully supported and normal and typical) then I would write it as: queue to CSQ_1, if queued dequeue and queue to CSQ_2, if queued dequeue and queue to CSQ_3. Still leaves reporting a mess, but at least avoids the unreliable ready agent check and the follow-on error handling code.

    View solution in original post

    7 Replies 7

    jasyoung
    Level 7
    Level 7

    What you're asking for is pretty straightforward. Your script will look something like this:

    • Select Resource (Group 1)
        • Connected branch
          • Done! End
        • Queued branch
          • (Optional) delay and hold loop treatment prior to Group 2 fallback
          • Select Resource (Group 2)
            • Connected branch
              • Done!  End
            • Queued branch
              • Your hold loop treatment, menu/hold/music/unhold etc.

      When your caller comes in, you place them in the Group 1 queue. If an agent is immediately available, great. If not, while still in queue for Group 1, you also place them in the Group 2 queue. If an agent is immediately available in Group 2, great. If not, you run whatever type of "sorry all agents are busy" treatment you like.

      The key thing to learn and understand here is that you can have a caller waiting in two queues at once, and it's valid to put a caller in a second queue while in the hold loop for the first.

      Many call centers want to introduce a delay between the two queues. For instance, they want the caller to wait for someone in Group 1 for up to X minutes, and then only as a fallback let Group 2 agents answer the call. If you have a similar requirement, you'd add some hold loop treatment and delay in the (Optional) place I show above.

      While I believe the solution offered is close, it has a potential problem.

      With the call simoultaneously queued against 2 different CSQ's, you run the risk of ending up with agents stuck in reserved stated.

      You should dequeue the call from the first queue before queueing it against the second queue.

      Otherwise, I agree.

      Cliff

      Multiple queuing is perfectly valid and supported. If your system was getting agents stuck-in-reserved, you were encountering a separate bug or a problem with your script.

      I am going to try this one with the help of Get Reporting Statistics - Ready Resources.

      Please let me know if this works.

      Logic Used

      • Agents with L1 Skills in CSQ_1
      • Agents with L2 Skills in CSQ_2
      • Both L1 and L2 Agents in a common CSQ_3

      • •1.       Checks for Ready state agents in CSQ_1
      • •2.       If Ready==0 then
      • •3.       Checks for Ready state agents in CSQ_2
      • •4.       If Ready==0 then
      • •5.       Select Resource from CSQ_3
      • •6.       If Agents are busy then Call Queued for CSQ_3.

      If Step 1 is False then Select Resource from CSQ_1

      If Step 3 is False then Select Resource from CSQ_2

      Regards,

      Abraham

      You can do that, but it's the long way to get the same job done. Also, you lose some reporting data, and you need to do some more error handling.

      If you do a Ready agents check on CSQ_1 (and CSQ_2), you still need to account for that call being queued rather than answered. Setting aside race conditions, you might have one agent Ready, but they might have walked away from their desk for some reason and they might not answer the call. Then you're in queue for CSQ_1 when you didn't expect to be, which you then have to handle with extra code in your script. Also, it's difficult to figure out how often you're bypassing CSQ_1 (for reporting purposes) since you were never in queue, so you don't know how effective CSQ_1 is at handling support calls. For that matter, the math starts to get complicated for something as simple as "how many calls did my support number get?" and you have to resort to other report types and combining reports to answer those simple questions.

      If you just go ahead and put the caller into queue, you don't have to go through the extra ready-detection steps, the system only sends you to the Queued branch if nobody in CSQ_1 took the call right away (which is now your reliable trigger to fail over to CSQ_2). Also, if the caller isn't serviced by CSQ_1 (either because they were picked up from another queue or you manually dequeued them) the CSQ gets charged a Dequeue event which you can see in Historical Reporting.

      If you use the simple, reliable method I outlined in my earlier reply, the code is very simple and it accomplishes what you need. You would only need two queues instead of three. And, you get useful reporting numbers that tell you more about the effectiveness of CSQ_1 and how much overflow was handled by CSQ_2.

      If you're dead set against callers being in multiple queues (which is fully supported and normal and typical) then I would write it as: queue to CSQ_1, if queued dequeue and queue to CSQ_2, if queued dequeue and queue to CSQ_3. Still leaves reporting a mess, but at least avoids the unreliable ready agent check and the follow-on error handling code.

      Brilliant Plan jasyoung.. I am going to do that tonight.

      • Checks for Available agents in CSQ_1
      • If Yes, Route the call to the selected resource
      • Else if the Call is Queued, Checks for Available agents in CSQ_2
      • If Yes, Route the call to the selected resource
      • Else if the Call is Queued, waits for the first available agent in either queues. (Delay treatment also will done)

      But in my case this script is not straight forward. Let me explain.

      1 TollFree number - 1 Trigger - Same script.

      Caller presses 1 for Sales | 2 for Marketing | 3 for HR

      Each of these Departments have L1 and L2 agents (L2 being more skilled) seperated into 2 CSQs of their own.

      Now, Can you please let me know how do I implement the above plan when there are 3 Departments where a call can route to.

      Regads,

      Abraham

      HI

      I implemented this script and call flow is working fine as expected. There is one single problem now that is with reporting.

      When a call is not picked by CSQ1 or CSQ2 and finally when it gets abandoned, abandoned call count is duplicated in both CSQ1 and CSQ 2 making the count double.

      Is there a way to avoid this.

      Abraham