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