Scheduling Algorithms

Requirements

 

Introduction

A Scheduling Algorithm determines in what order Dialogues that enter the UCC 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 the Settings page; sharepoint internal column name: wsp_ucc_sla_goal_in_seconds).

  • [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; sharepoint internal column name: wsp_ucc_sla_goal_in_seconds​).

You can verify the settings by checking the cache:

Skills.settings:

<ServiceLevelAgreementGoal>PT1M40S</ServiceLevelAgreementGoal>

serialization format for 100s

 

Global.settings:

<ServiceLevelAgreementGoalInSecondsDefault>240</ServiceLevelAgreementGoalInSecondsDefault>

 

Modalities.settings2:

 

<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:

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 }

 

The Source can take the following values:

  • Skill.<SkillName>: the GoalInSeconds is configured directly on the Skill

  • Modality.<ModalityName>: the GoalInSeconds is not configured or set to 0 on the Skill, but it is configured on the Modality of the given Skill

  • Settings: the GoalInSeconds is not configured or set to 0 on the Skill and Modality, but it is configured on the Settings page

​​

Score Calculation

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

 

FAQ