Predictive Dialer

In this document we have discussed that how we have implemented the predictive dialer capability in ICTContact. while
implementing predictive dialling behaviour we faced two question.
How many channels a campaign need ? and When we need to dial new channels ? as we need active calls in queue
before a busy agent get free !
To answer above questions and to conclude a final algorithm we have divided this post into following sections
Concerned Entities The entities that algorithm can utilize.
Dialing Factors Factors which can decide campaign speed
Target Handles Variable which are responsible to control campaign pace
Required Statistics The statistic or variables which are required to conclude target handles.
Design Final design / algorithm for predictive dialing

Concerned Entities

We have to monitor following entities to predict active number of calls
Campaign / Queue
Agent campaigns can have one queue per campaign, all statistic will be collected and account for queues.
Active Agents
No of active agents, Available to campaign / queue at given time
Active Contacts / Calls
The 3rd parameter is total number of outgoing, in queue and in service calls.

Dialing Factors

Using following factors we can decided either dialer need to increase / decrease the required number of concurrent
channels.
Limit factors
Active agents
Active channels
Calls in Queue
Average Handled (talk + hold + wrapup) time
Boost factors
Low ASR
Free Agents
Average Call Setup time Average Abandoned time
Custom factors
Desired queue time
Acceptable Abandoned ratio

Target handles

We can control a campaign speed or concurrent number of calls by following
Existing handlers
Normally ICTContact use following two parameters for campaigns to control dialing speed of related campaign
Channel Auto: Total number of channels assigned to campaign
Channel Offset: Difference of channels, when user want to increase or decrease channels from dashboard GUI,
further this parameter is also used to reduce number of concurrent when balance is not sufficient to maintain a high
number of concurrent channels.
New handlers
We can add / replace above handling parameters in campaigns statistics with following agent related predictive parameters
Agent Auto: Total number of active agents in a campaign at any given time
Agent Offset: Additional required channels, Which ICTContact has to dial to address low ASR issue. to kill the call
setup time etc …

Required Statistics

As mentioned above need two parameter to control number of concurrent channels, here are the details of sub parameter
which are required before determine actual value of above mentioned parameters Agent Auto
We use no of active agent as agent auto, without any modifications. Agent Offset
It will be a bit complex and require all following sub parameters to calculate its value
Average setup time: Average time required to dial and get call answered (i.e ring time)
Average handle time: Average talk time with agents including hold time and wrap-up time
Average Success Rate (ASR): Success rate i.e no of rejected, busy calls vs no of answered calls
And
Calls in setup: Current number of ringing calls or calls in setup
Total active calls: Total active calls
Available Agents: Total number of agents currently logged in and handling or available for calls Free Agents: Logged agents which are free to take new calls
Anticipated Agents: Agent in handle mode, which are about to free, see
current handle time + average setup time >= Average handle time
And also needed to keep agent offset under an upper limit
Channel Auto: number of channels allocated to campaign
Channel Offset: number of additional or fewer calls, as per user or system desecration

Design

Beside the agent_auto and agent_offset fields, We have to create / introduce following entities to support predictive
dialing in ICTContact statistic predictive
One table and one event created in database collect system statistic on per campaign basis. Event is configured to fire after
each 30 second, and it is programmed to update statistic_predictive table with average values of following parameter on
per campaign basis.
success_rate
handle_time
ring_time
hold_time
Here is the flow
( Start )
|
[ Collect statistic for last 30 seconds ] | |
| |
[ Update statistic_predictive table ] |
| |
| |
[ After every 30 seconds ] >———–
|
( End ) Agent in Predictive Campaign
Another EVENT which is responsible to process all active campaigns, one by one and it fetch latest statistics from around
the system including above mentioned statistic_predictive table and then store agent_auto and agent_offset variables after
calculating their values.
Here is the flow
( Start )
|
____________|_____________
[ get all active Campaigns ] [__________________________] |
________|_________ |
[ get one Campaign ] [__________________] | |
_________|_________ | |
[ get call statistic] | |
[___________________] | |
_________|_________ | |
[ get channel state ] | |
[___________________] | |
_________|_________ | |
[ get agent state ] | |
[___________________] | |
_____________|_____________ | |
[ agent_auto = agent_active ] | |
[___________________________] | |
________________|__________________ | |
[ agent_offset = calculate_offset() ] | |
[___________________________________] | |
______________|______________ | |
[ Limit agent_offset as per ] | |
[ channel_auto and offset ] | |
[_____________________________] | |
_____________|_____________ | |
[ Update agent_auto and ] | |
[ agent_offset ] | |
[___________________________] | |
| | |
( Loop ) >—————- |
| |
[ After every 5 seconds ] >————
|
( End )