On Premises

Scheduling Algorithms

Introduction

A Scheduling Algorithm determines in what order Dialogues that enter the UCC A Unified Contact Center, or UCC, is a queue of interactions (voice, email, IM, etc.) that are handled by Agents. Each UCC has its own settings, IVR menus and Agents. Agents can belong to one or several UCCs and can have multiple skills (competencies). A UCC can be visualized as a contact center “micro service”. Customers can utilize one UCC (e.g. a global helpdesk), a few UCC’s (e.g. for each department or regional office) or hundreds of UCC’s (e.g. for each bed at a hospital). They are interconnected and can all be managed from one central location. will be offered to your Agents. Choosing the correct Scheduling Algorithm helps you optimize your customer experience, because those Dialogues that you consider more urgent will be handled first.

The Scheduling Algorithm is configured on a UCC level, but the order is determined on a UCC service level. For this reason it is important to configure all your UCCs to have a compatible Scheduling Algorithm.

Currently the following Scheduling Algorithms are offered:

  • First In First Out Scheduling

  • Service Level Agreement Scheduling

First In First Out Scheduling

With First In First Out (FIFO) scheduling your Agents will be offered Dialogues based on the order that the Dialogues become known to the UCC service.

In short, when deciding if Dialogue A should precede Dialogue B, the following algorithm is used:

  • If A has higher priority than B, A should precede B

  • If B has higher priority than A, B should precede A

  • Otherwise,

    • If A has been in the queue longer than B, A should precede B

    • Otherwise, B should precede A

Consider the following scenario:

  • Customer Alice calls UCC 1 and ends up at Skill Support

  • Customer Bob calls UCC 2 and ends up at Skill Sales

  • Agent Charles is both an Agent in UCC 1 and UCC 2 and has both Support and Sales Skill

Charles will be offered the call from Alice first because it was the first Dialogue to become known to the UCC service.

The Scheduling Algorithm only gives guarantees about the order in which Dialogues are offered, but no guarantees about the order in which Dialogues are handled. Consider the following scenario:

  • Customer Alice calls UCC 1 and ends up at Skill Support

  • Customer Bob calls UCC 2 and ends up at Skill Sales

  • Agent Charles is both an Agent in UCC 2 and has the Sales Skill

The UCC will attempt to offer the call from Alice, but since no Agent is available it will offer the call from Bob to Charles. If Charles accepts, the call from Bob will be handled before the call from Alice.

Configuration

Note: FIFO scheduling is enabled by default and requires no additional configuration.

To enable FIFO scheduling:

  • Set SchedulingAlgorithm = FirstInFirstOut on the Settings pages of all your UCCs.

Service Level Agreement Scheduling

With Service Level Agreement Scheduling your Agents will be offered Dialogues based on how close you are to violating your Service Level Agreement.

Consider the following scenario:

  • Customer Alice calls UCC 1 and ends up at Skill Support

    • Support has a Service Level Agreement of 120 seconds.

      • No Support Agent is available

  • 60 seconds pass, at this point:

    • Customer Bob calls UCC 2 and ends up at Skill Sales

      • Sales has Service Level Agreement of 15 seconds.

        • No Sales Agent is available

    • Alice is waiting 60 seconds, and is 50% towards having her Service Level Agreement violated

    • Bob is waiting 0 seconds, and is 0% towards having his Service Level Agreement violated

  • 5 seconds pass, at this point:

    • Alice is waiting 65 seconds, and is 54% towards having her Service Level Agreement violated

    • Bob is waiting 5 seconds, and is 33% towards having his Service Level Agreement violated

  • 10 seconds pass, at this point:

    • Alice is waiting 70 seconds, and is 58% towards having her Service Level Agreement violated

    • Bob is waiting 10 seconds, and is 66% towards having his Service Level Agreement violated

    • Agent Charles becomes available for both Support and Sales

      • Charles is offered Bob's call first, since it is the most urgent from a Service Level Agreement point of view

Graphical representation of the scenario above. In the blue area the initial session (Alice) will be scheduled. In the green area the second session (Bob) will be scheduled.

Configuration

To enable Service Level Agreement Scheduling:

  • Set SchedulingAlgorithm = ServiceLevelAgreement on the Settings pages of all your UCCs.

  • Set ServiceLevelAgreementGoalInSecondsDefault on the Settings pages of all your UCCs.

  • (optional) Set Service Level Agreement Goal in Seconds to the desired value for all your Modalities (this takes precedence over the value in ServiceLevelAgreementGoalInSecondsDefault (Settings page).

    Note: This list can be accessed via Settings > Site Content > Modalities.

     Tip: The Channels Email, WhatsApp, SMS, WebChat, and Generic can be configured under Text.

  • (optional) Set Service Level Agreement Goal in Seconds to the desired value for all your Skills (this takes precedence over the values configured on the Settings and Modalities page​).

You can verify the settings by checking the cache:

Skills.settings:

Copy
XML
<ServiceLevelAgreementGoal>PT1M40S</ServiceLevelAgreementGoal>

serialization format for 100s

Global.settings:

Copy
XML
<ServiceLevelAgreementGoalInSecondsDefault>240</ServiceLevelAgreementGoalInSecondsDefault>

Modalities.settings2:

Copy
XML
<Option name="wsp_ucc_sla_goal_in_seconds" value="200" description="" mandatory="False" />

Log

Also, when verbose is enabled, the following is logged for every compared session pair:

Copy
Log
VERBOSE - ServiceLevelAgreementSchedulingAlgorithm::ReportOutcome - { A = { Id = fd6924a5-f19d-4e6a-8fb6-2e9508b35dae, Score = 0.58, TimeInQueue = 00:01:10, Settings = { GoalInSeconds = 120, Source = Skill.Support } }, B = { Id = 6b60e4c1-209c-41bd-9d03-44c0f44961e0, Score = 0.67, TimeInQueue = 00:00:10, Settings = { GoalInSeconds = 15, Source = Skill.Sales } }, Winner = A }
VERBOSE - ServiceLevelAgreementSchedulingAlgorithm::ReportOutcome - { A = { Id = 33c4c806-4570-4726-a1d1-b505b9b40e88, Score = 0.54, TimeInQueue = 00:01:05, Settings = { GoalInSeconds = 120, Source = Skill.Support } }, B = { Id = f8deb8f5-ab60-4d1b-8a72-95230212f327, Score = 0.33, TimeInQueue = 00:00:05, Settings = { GoalInSeconds = 15, Source = Modality.Audio } }, Winner = B }
VERBOSE - ServiceLevelAgreementSchedulingAlgorithm::ReportOutcome - { A = { Id = 14fea919-7e9c-4af6-b098-886203295daf, Score = 0.54, TimeInQueue = 00:01:05, Settings = { GoalInSeconds = 120, Source = Skill.Support } }, B = { Id = 0dd61883-7ec8-431b-a86d-ee5a0acfd2b4, Score = 0.33, TimeInQueue = 00:00:05, Settings = { GoalInSeconds = 15, Source = Settings } }, Winner = B }

​​

Score Calculation

The score is calculated according to the following formula: TotalSecondsInQueue / GoalInSeconds

The GoalInSeconds will be taken from the following values:

  1. Skill: The SLA Goal configured directly on the Skill

  2. Modality: The SLA Goal is not configured or set to 0 on the Skill, but SLA Goal is configured on the Modality of the given Skill

  3. Settings: the SLA Goal is not configured or set to 0 on the Skill and Modality, but ServiceLevelAgreementGoalInSecondsDefault is configured on the Settings page

FAQ