what is the default call distribution strategy?

96 views
Skip to first unread message

Sebastian Proba

unread,
Nov 15, 2012, 5:41:17 AM11/15/12
to ope...@googlegroups.com
another question: what is the default strategy for distributing calls among agents?

I could not find any specific information about this. For example in freeswitch callcenter.conf.xml there is the strategy specified but how it is in openacd and is there any possibility to change that?

thanks

Sebastian

Jan Vincent Liwanag

unread,
Nov 18, 2012, 8:47:40 AM11/18/12
to ope...@googlegroups.com
Hi Sebastian,

Will try to answer this one -- but perhaps others could explain this better:

For an incoming call, only one agent is rung at a time. That agent must be qualified -- that is, the agent must possess all skills required as per configuration to take on the call.

If an agent possesses the '_all' magic skill and has a free channel (able to take on the call), then the call is passed on to the agent.

If no agent has the '_all' skill, or if all agents with such a skill are busy, then the call is forwarded to other agents. It follows a rather complicated rule of rotations, but in short -- agents that are newly available are more likely to get picked. Details are as follows:

---

Whenever an agent goes online and is available, a certain 'key' (called the rotation of an agent) is assigned. This key starts out as 0.

Whenever a list of available agents -- called the route list, is needed (i.e. to check which agents are available, etc), the 'agent_manager' component returns this list sorted by the agent's key. Agents with the lower value for the key goes to the front of the list, while ones with higher values goes to the tail. From this list, each agent is checked whether or not that agent has ample skills. The first agent that is qualified, gets the call.

Internally, whenever the 'agent_manager' component is asked for the list of agents, after returning the list, the agent with the lowest key will have its key incremented. Therefore, the next time the route list is requested again, that agent will most likely no longer be on the head of the list.

---

(I think) the reason behind this rather complex rule is that openacd is designed to be distributed. Looking at freeswitch's call center strategy with hard and strict strategies -- such strategies present a need for there to be a global coordinator that decides strictly which agent is to be picked.

That said, it might be possible to extend openacd to follow other strategies in the future. You might not expect them to be as clear cut as freeswitch's, but approximations. (For instance, the strategy i described that is an approximation of 'longest-idle-agent' strategy of freeswitch.)

Jan Vincent Liwanag
jvli...@ezuce.com

Trevor

unread,
Nov 27, 2012, 12:03:18 PM11/27/12
to ope...@googlegroups.com
Jan,

  Correct me if I am wrong, but I also believe that OpenACD also routes calls to the agent with the "least" total skills required to handle the media as it considers agents with MORE total skills than required for a given media to be more valuable.  Therefore reserves them more often, and hands out agents with adequate but less total skills.  The notes I read in OpenACD did not quite discuss how this interacted with 'longest-idle' type strategy.

  Is this accurate for openACD in sipX/openUC?  If so it makes it pretty simple to replicate a Rank based distribution within the skills functionality.

 Thanks,
Trevor Benson

Jan Vincent Liwanag

unread,
Nov 27, 2012, 6:54:41 PM11/27/12
to ope...@googlegroups.com, ope...@googlegroups.com
Hi Trevor,

No, the number of skills an agent has does not affect the agent's chances of getting the call. (Assuming of course, the agents have all the skills required.)

One way i can think of on how to roughly simulate rank based is the following:

Create 2 skills: 'Level1' and 'Level2'. Most agents just have 'Level1'. Higher ranked agents gets the skill 'Level2'. Configure a queue to initially require just a Level1. Create a recipe for the queue wherein after N seconds, remove skill 'Level1' then add skill 'Level2'.

Having said that, I've been thinking of which distribution strategies can later be added to OpenACD. Rank based isn't one them yet. And creating a rank based strategy based on the number of skills imho presents problems -- not all skills should be treated equal, so the number of skills an agent has might be a bad approximation of rank. What do you think?

Sent from my iPhone

Jerry Browne

unread,
Nov 27, 2012, 8:21:14 PM11/27/12
to ope...@googlegroups.com

I will add my 2 cents here by pointing out the following.  In a call center, you would often want to leave the agent with more skills and use the agent with fewer skills.  Example; if an agent is skilled for english and Spanish (2 skills) and another agent is skilled for just english, it is likely that you would want an english call to go to the english agent ... thus leaving the more more skilled agent for the next call.  In that way you can avoid leaving Spanish calls in queue longer. 

Now, that said, you must also protect against leaving an agent with lots of skills idle for long periods (e.g. low volume times where the call center is usually running low occupancies). 

In a perfect world, you would likely want to use the idle time of an agent as part of a ratio or algorithm that also includes their skill count/rank.

Jerry Browne
231-823-2979

Trevor Benson

unread,
Nov 27, 2012, 11:22:40 PM11/27/12
to ope...@googlegroups.com
I wasn't actually intending to simulate rank, just an example
explanation. I don't mind if it does not function this way, I was
just referencing the routing documentation I had previously read from
the wiki:

OpenACD routing https://github.com/OpenACD/OpenACD/wiki/How-routing-works.

Below Agent Manager it states that the agents are sorted by how
recently they were put at the top of the search list, if they have the
All skill, how many skills they have, and how long they have been
idle.

If this is no longer accurate than having the wiki updated might be
best for clarity.

Thanks,
Trevor

Andrew Thompson

unread,
Nov 28, 2012, 1:56:32 AM11/28/12
to ope...@googlegroups.com
It does look like someone rewrote the agent selection code, it *used* to
sort by various dimensions, including # of skills the agent had. I no
longer see that in the code, however.

Andrew

Jan Vincent Liwanag

unread,
Nov 28, 2012, 2:25:18 AM11/28/12
to ope...@googlegroups.com
Hm. Interesting. Perhaps something got lost en route to v2/multi-channel? What other dimensions did it use to have to select agents?

Jan Vincent Liwanag
jvli...@ezuce.com

Trevor Benson

unread,
Nov 28, 2012, 9:53:32 AM11/28/12
to ope...@googlegroups.com
Mostly the ones I listed, the Agent Manager section in the wiki link
is pretty short but provides a bit more details than I included in the
previous message.

However it did mention that "all things being equal" (out of: when put
at top of search list, All Skill, and Total Skills) that the final
metric, idle time, would be able to round robin calls between agents.
Which logically provides a large amount of flexibility in call routing
options. If its not how calls will be routed for v2 it would be good
to identify how routing will be handled as without the various
dimensions automatically being considered I know many call centers
will require more fine grained control over routing methods before
moving to openACD.

Trevor

unread,
Nov 29, 2012, 3:38:39 PM11/29/12
to ope...@googlegroups.com
Jan,

  Alan and I just spent some time testing OpenACD on openUC 4.6 (packages: openacd.x86_64 0.9.5-742.g4c27 & sipxopenacd.x86_64 4.6.0-890.ge4ca9).  It appears that routing methods are still based on the Wiki article. 

 -Equal Skill Agents
Testing methods:
Two agents both available, both with the same quantity of skills (1 total skill), 1 media (voice call) at a time, with each agent performing wrapup and being available before the next inbound media. 10 total media.

Results:
Round Robin between both agents based on (what appears to be) longest idle time.  The agent who most recently had the inbound call does not ring first, but will rollover to them when not answered by the longest idle agent.  Have not tested with more than two agents to watch if the rollover from not being answered walks the idle agents in order past the first.  5 media to Agent1 and 5 media to Agent2.


 -Mixed Skill Agents
Testing methods:
Agent1 has the 1 required skill to handle the media and Agent2 has 2 skills, 1 required to handle the media and 1 other skill not being used in any way. 1 media (voice call) at a time, with each agent performing wrapup and being available before the next inbound media.

Results:
Agent 1 receives each media session while he is in "available" state, while Agent2 is also in available state. 4 Calls in a row were handled by Agent1 without handing a call to Agent2.  When Agent1 goes released, Agent2 gets handed the next inbound call.  When Agent1 goes Available again Agent1 takes the next 4 media (voice call) in a row if in Available state.  4 media to Agent1 while Agent2 is available for each, 1 media to Agent2 when Agent1 is Released, Agent1 goes available and 4 additional media route to Agent1 while Agent2 is available.

We also tested with one person having the ALL skill, which would not provide the same results for Mixed Skill Agents test, in the case that the All skill is applied to Agent1 (in a two agent test scenario) Agent1 will receive the inbound media, and if they timeout by not answering, the media is resent to Agent1 again, instead of rolling over to Agent2 who has the required skills to handle the media.  I assume that in a 3+ agent test that multiple agents with the All skill would have media roll between them, and when non were available then it would rollover among agents with the required skill sets, I can confirm later this is the case.

Unless some other routing metrics have changed and I am just simulating the effects of the previous routing described in the openACD wiki I am pretty confident that at least All Skill, Total Skills, and Longest Idle time are functioning metrics in the Call Routing.  I assume the Search list is still another metric, but am not sure how the list is updated so cannot qualify that routing is still using it as another metric.

Trevor Benson
tbe...@a-1networks.com

Jan Vincent Liwanag

unread,
Nov 29, 2012, 7:29:05 PM11/29/12
to ope...@googlegroups.com, ope...@googlegroups.com
Thanks for the info Trevor. I'll do some more testing myself to confirm and add more details to the wiki as needed.

Sent from my iPhone
Reply all
Reply to author
Forward
0 new messages