I was teaching a Customer Interaction Center handler developer class recently when one of my students gave me a scenario that had been causing them some head-scratching. The call center in question is not a typical one. In this case, when people call in they are prompted for an identifier (customer/case number). The requirement was that the system should look up the number in a database, retrieve the identity of the agent that “owns” the particular customer and route the call appropriately.
So far so good. If the agent concerned is not available, then the call should be directed to another member of their team. Still not too bad, until…
There are some agents who should not be offered calls from certain callers due to what the student referred to as a “conflict of interest.” Now it gets interesting.
The solution we came up with may not be the only, or even the best way to achieve this, however this was what we did:
1. We started up by creating a database with two tables. The first table mapped customer IDs to the corresponding “owning” agent and the second table mapped customer IDs to “conflicting” agents.
2. Next, we created a single workgroup with a queue of type “Custom.”
3. We created a skill for each agent. (This part is the most time consuming.) The agent themselves is then given their own skill with a proficiency score of 100. The other members of their team are also given the skill, but with a lower proficiency, say 50. (Note, we wouldn’t normally recommend using the numbers, but this is an example of when it can help).
4. Interaction Attendant was then set up to prompt the caller for their ID and store the result in a call attribute before routing the call to the Workgroup.
5. A handler was written and called from CustomIVRWorkGroupQueue that queries the database tables. In the case of the first table (the “owning” agent) the corresponding skill was added to the interaction. In the case of the second table (“conflicting” agents) the relevant agent’s skill was also added, but with a maximum proficiency set at 90. The call was then routed to the workgroup for processing, but ignoring agent availability time.
Let us consider an interaction coming in. Five agents are available – A, B, C, D & E. The customer enters an ID number that identifies them as belonging to agent A and having a conflict with agents D & E. The handler adds A’s skill to the interaction along with D & E’s skills, but the latter with a maximum proficiency score of 90. The automatic call distribution (ACD) engine will rule out agents D and E since they don’t have the necessary skills. Agents A, B & C all have all three skills but since A has a higher proficiency in their own skill they will end up with the highest score and get the interaction.
Now, same scenario, but A is not available. In this case, B or C will get the call. If A, B & C are all unavailable, then the call will wait in queue for one of them.
This could be expanded to include a form of bull’s eye routing where agents could all have differing levels of skills thereby setting up a preference system of who should get the call if the designated agent is not available. This was beyond what the student had asked for, but when I proposed it, his eyes lit up with the possibilities!
Let me know what you think. How would you solve this particular problem?