|
ContactCenters V. 0.9.9. |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectumontreal.iro.lecuyer.contactcenters.dialer.AgentsMoveDialerPolicy
public class AgentsMoveDialerPolicy
Represents a dialer policy that dynamically moves agents from inbound to outbound groups to balance performance. This policy is inspired from a real dialer called SER's SmartAgent Manager. This dialer manages a subset of the I agent groups of the contact center by separating them into two categories: inbound agent groups and outbound agent groups. The inbound groups are assumed to serve inbound contacts only while the outbound groups process outbound contacts only. An inbound agent is an agent belonging to an inbound group while any outbound agent belongs to an outbound group. Consequently, an inbound agent is made outbound by removing it from its original inbound group, and adding it into an outbound group. A similar process is used to turn an outbound agent into an inbound one. This dialer policy performs such transfers in order to balance performance.
Note that this dialer policy does not impose outbound contacts to be routed to outbound agents, and inbound contacts to be sent to inbound agents. The routing policy must be configured separately to be consistent with the inbound and outbound agent groups managed by the dialer.
This policy required two different aspects to be specified: how contacts are dialed, and how agents are moved across groups. We will now describe these two aspects in more details.
The first method works as follows. When the dialer is triggered, i.e., when it is requested to dial numbers, this policy computes the number of outbound agents managed by the dialer given by
The dialing method using routing information works as follows. For each managed agent group, the dialer determines a number of calls to dial using the number of free agents. It then sums up the number of calls mk for each type, and constructs a dialer list L2 containing at most mk calls of type k. The calls are extracted from the dialer list L. The contents of the dialer list might be affected by limits imposed on the number of calls of each type.
The values of mk are computed as follows. First, mk = 0 for each value of
k. Then, for each managed outbound agent group i, the dialer obtains
ni = round(κ[i](t)) + c. Let Ki be the number of
different types of calls agents in group i can serve, and
bk, i = 1 if
and only if agents in group i can serve calls of type k. If Ki > 0, for
each value of k, the value
round(bk, ini/Ki) is added to
mk. Usually, Ki = 1 with this model, i.e., agents in each group i can
serve a single outbound call type.
After each agent group is processed, if the dialer takes the number of action events into account, the number of action events concerning calls of type k is subtracted to each value of mk, for each call type k.
Note that an agent group can only be in a single virtual group, for a single dialer.
Any external change to an agent group managed by this dialer policy is handled the same way as if the dialer never transferred agents from groups to groups. This requires the dialer to keep track of the number of agents transferred into or out of each managed group. The changes are performed as follows. If the number of agents is increased, agents are added to the concerned group. However, if the number of agents is reduced, the dialer first removes outbound agents, then inbound agents if the affected virtual group does not contain any more outbound agents. The order in which the agent groups are selected to remove agents from is random to avoid an agent group having priority over other groups. The only constraint on the order is the priority of outbound agents over inbound agents. When the dialer is stopped, every outbound agent becomes inbound, but busy outbound agents terminate their on-going services before they become inbound.
Two flags are available for this dialer policy: inbound-to-outbound flag, and outbound-to-inbound flag. These flags trigger procedures that can be considered as background processes, although they are implemented with simulation events. When the inbound-to-outbound flag is turned ON, the policy starts the following procedure for each virtual agent group j, each time the dialer is required to take a decision.
On the other hand, when the outbound-to-inbound flag is turned ON, the policy starts the following procedure for each virtual agent group j, each time the dialer is required to take a decision.
Nested Class Summary | |
---|---|
static class |
AgentsMoveDialerPolicy.AgentGroupInfo
Represents a virtual agent group j for the AgentsMoveDialerPolicy . |
Constructor Summary | |
---|---|
AgentsMoveDialerPolicy(DialerList list,
AgentsMoveDialerPolicy.AgentGroupInfo[] groupInfo,
double kappa,
int c)
Constructs a new dialer policy using the dialer list list, and agent group information groupInfo. |
Method Summary | |
---|---|
void |
dialerStarted(Dialer dialer)
This method is called when the dialer using this policy is started. |
void |
dialerStopped(Dialer dialer)
Calls init(Dialer) . |
AgentsMoveDialerPolicy.AgentGroupInfo[] |
getAgentGroupInfo()
Returns an array containing the references to the virtual agent groups managed by this dialer policy. |
DialerList |
getDialerList(Dialer dialer)
Returns the dialer list associated with this policy. |
int |
getNumDials(Dialer dialer)
This method returns the number of free agents in all outbound groups connected to this dialer. |
void |
init(Dialer dialer)
Makes every agent inbound when the dialer stops. |
boolean |
isInboundToOutboundStarted()
Determines if the inbound-to-outbound flag is turned ON. |
boolean |
isOutboundToInboundStarted()
Determines if the outbound-to-inbound flag is turned ON. |
void |
setDialerList(DialerList list)
Sets the dialer list of this policy to list. |
void |
setRouter(Router router)
|
void |
startInboundToOutbound()
Turns the inbound-to-outbound flag on. |
void |
startOutboundToInbound()
Turns the outbound-to-inbound flag on. |
void |
stopInboundToOutbound()
Turns the inbound-to-outbound flag off. |
void |
stopOutboundToInbound()
Turns the outbound-to-inbound flag off. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public AgentsMoveDialerPolicy(DialerList list, AgentsMoveDialerPolicy.AgentGroupInfo[] groupInfo, double kappa, int c)
AgentsMoveDialerPolicy.AgentGroupInfo
object results in a virtual group of agents for the dialer.
list
- the dialer list.groupInfo
- the agent group information.Method Detail |
---|
public AgentsMoveDialerPolicy.AgentGroupInfo[] getAgentGroupInfo()
public void dialerStarted(Dialer dialer)
DialerPolicy
dialerStarted
in interface DialerPolicy
dialer
- the started dialer.public void dialerStopped(Dialer dialer)
init(Dialer)
.
dialerStopped
in interface DialerPolicy
dialer
- the stopped dialer.public DialerList getDialerList(Dialer dialer)
getDialerList
in interface DialerPolicy
dialer
- the dialer for which the dialer list
is required.
public void setDialerList(DialerList list)
list
- the new dialer list.public int getNumDials(Dialer dialer)
getNumDials
in interface DialerPolicy
dialer
- the triggered dialer.
public void setRouter(Router router)
public void init(Dialer dialer)
init
in interface DialerPolicy
dialer
- the dialer which initialized
this policy.public boolean isInboundToOutboundStarted()
public void startInboundToOutbound()
public void stopInboundToOutbound()
public boolean isOutboundToInboundStarted()
public void startOutboundToInbound()
public void stopOutboundToInbound()
|
ContactCenters V. 0.9.9. |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |