Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations TouchToneTommy on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

50-50 call routing

Status
Not open for further replies.

Jimbobp

Programmer
Oct 26, 2004
26
GB
We have been asked to send 50% of some calls to a skillset and the other 50% to an external number.

This has baffled me, can onl think to do an incremental call counter that resets every 2 calls, and when the counter is 1 the calls go one way, and when it is 2 the calls go another.

Any other Ideas???
 
How about a network call allocator.
Your network provider should be able to split the calls according to how you want them distributed.
 
Do you have Symposium 5.0? If you do, you can use the new "wild variable.
 
I am going to do this using a global integer variable, how do i assign 0, 1, 2 etc to global variables, i get an error saying it needs to be on the left
 
I'm not sure the global will work. It appears you're needing a call variable function. Global is based on a table, not call flow.
 
There is a great script command in rel 5.0 called READVAR and SAVEVAR, This allows you to set up a counter in a script when the counter hits a certin number then you can route the call somewhere else.
 
That's the wild variable (READVAR and SAVEVAR). That will allow you to change the value of the variable for the next call. The Call variable will allow you to change the value for the same call (value doesn't change for anyone else), and Global is a fixed value. If you don't have 5.0, then you'll have to come up with a formula that kinda sorta fakes it, like a formula based on the call rate.
 
You can try to do something else if you aren't on 5.0. Its not that hard really.

Use a Where command to check a variable set to either 1 or 2. Then follow it with a Assign to variable after the check that changes it to the other number.

Where Counter_cv equals

Value 1: Assign 2 to Counter_cv
Assign skillset_1 to skillset_cv
Value 2: Assign 1 to Counter_cv
Assign skillset_2 to skillset_cv

End Where

IF you need to do this in the Master script for reporting reasons just add an execute script command under the assign skillset statement.

Simple but effective.
 
Bugged me all the way home. I realized I left out the Global Variable part of the scripting.

Assign Counter_gv to Counter_cv

Where Counter_cv equals

Value 1: Assign 2 to Counter_gv
Assign skillset_1 to skillset_cv
Value 2: Assign 1 to Counter_gv
Assign skillset_2 to skillset_cv

End Where
 
But, cgilmer -- for a regular call variable, you can only change the value for that call. The next call starts with the default value. It is the wild variable (READVAR and SAVEVAR) that lets you change the default value for subsequent calls.
 
Ya know come to think of you are right. We ended up coming to that conlusion and using another way to generate a random number.

We took the Total Active Calls and built a Where statement to compare them based on odd and even numbers. The below section should work for calls in queue and total agents on calls for values 0 to 99.

If your center is real active you can divide the number by 3, 5, 7, 10 or whatever before comparing it to make it easier to keep a smaller "where listing". It chops any decimal points that would result (10.7 would be 10)

Really easy for smaller call centers and harder for large ones. The key is finding a random fluxuating number to work with.

//* Assign (TOTAL ACTIVE CALLS/10) to Counter-cv *//

Assign TOTAL ACTIVE CALLS to Counter_cv


Where Counter_cv equals

Value 1,3,5,7,9,11,13,15,17,19: Assign skillset_1 to skillset_cv
Value 0,2,4,6,8,10,12,14,16,18: Assign skillset_2 to skillset_cv
Value 21,23,25,27,29,31,33,35,37,39: Assign skillset_1 to skillset_cv
Value 20,22,24,26,28,30,32,34,36,38: Assign skillset_2 to skillset_cv
Value 41,43,45,47,49,51,53,55,57,59: Assign skillset_1 to skillset_cv
Value 40,42,44,46,48,50,52,54,56,58: Assign skillset_2 to skillset_cv
Value 61,63,65,67,69,71,73,75,77,79: Assign skillset_1 to skillset_cv
Value 60,62,64,66,68,70,72,74,76,78: Assign skillset_2 to skillset_cv
Value 81,83,85,87,89,91,93,95,97,99: Assign skillset_1 to skillset_cv
Value 80,82,84,86,88,90,92,94,96,98: Assign skillset_2 to skillset_cv
Default: Assign skillset_1 to skillset_cv

End Where
 
Something else you might want to consider. If you are doing 50/50 routing or want to... in the end you are assuming that both groups of agents are capable of handling the same amount of calls and have similar talk times. That being the case the two groups are already balanced.

It might just be easier to check on calls waiting in queue for both skillsets and queing the call to the skillset with the least calls. If the two groups are capable of handling a 50/50 the calls should be evenly distributed.

If they aren't and you force a 50/50 you end up with one group of callers getting a lesser service level. Doing it this way balances the calls based on who is available and giving the caller an overall less wait to be answered.

The only sticky point would be handling when they are even. Depending on how you want to handle this you could build a time list that alternates by hour to send the "equal" calls to one group or the other. Say between 8am and 9am you send them to the first skillset and 9am and 10am to the other. That way its more of a true balance.

Without using the time based "balancing" the code would be rather small and look like this:

If QUEUED CALL COUNT Skillset1_cv >= QUEUED CALL COUNT Skillset2_cv THEN

QUEUE TO SKILLSET skillset2_cv with priority sspriority_cv

ELSE

QUEUE TO SKILLSET skillset1_cv with priority sspriority_cv

Its load balacing but if the call handling capacity is equal then it should be darn close to 50%. Without some other dependency in this case skillset1_cv would get a few more calls when the queues where compared as equal. This was the part I was saying could be set to compare against a time set variable to alternate the "equals" Hour by Hour.
 
Do not know if you ever can up with a solution but you could have your carrier split the calls? Works for us.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top