Saturday, February 13, 2010

Attendant and queuing on CME/CCM

Hello Blog Readers! (That's right, all two of you :p)

Been a little while since I have done an update, I have been doing a lot more VOIP work which makes me happy, as compared to IPv6 which while interesting is not my true passion.

Moving on, Today I wanted to talk about options for reception for your CCM/CCME installs but I mostly wanted to talk about B-ACD

B-ACD stands for Basic Automatic Call Distribution and is available for CCME. Although to be honest I am not sure why they call it basic, it is way more powerful than any hunt-group algorithms they include in CCM!

In a nutshell it combines menu-driven prompts (i.e. Press 1 for Support, 2 for sales) via DTMF that then link into hunt-groups, you also have a dial-by-extension option, but it gets better than that... it includes queuing for the hunt groups!! That's right! A feature that you would normally have to pay for in CCM by buying either IPCC or ARC!

The queuing works pretty well, you can play music on hold for your listeners, provide them with a short message while there being queued to tell them there call is important etc etc and you can even set overflow options. Settings like "Maximum queue-length" or "Maximum wait-time." can be used with a "final destination" such as voicemail specified. Heck, you can even see hunt-group member phones how many people are in the queue!

But that's not the best part, you also get quite reasonably detailed statistics too, including average wait time, how many calls an agent has actually answered, etc. etc.

Here's an example output of the statistics collected:

PeterCCIE18371#show ephone-hunt 1 statistics last 1 hour
Sat 14:00 - 15:00
Max Agents: 2
Min Agents: 2
Per agent statistics:
Agent: 0892004100
From Queue:
Total Calls Answered : 1
Average Time in Call (secs) : 1
Longest Time in Call (secs) : 1
Agent: 1112
From Queue:
Total Calls Answered : 1
Average Time in Call (secs) : 1
Longest Time in Call (secs) : 1
Queue related statistics:
Total calls presented to the queue: 2
Calls answered by agents: 2
Number of calls in the queue: 0
Average time to answer (secs): 18
Longest time to answer (secs): 31
Number of abandoned calls: 0
Average time before abandon (secs): 0
Calls forwarded to voice mail: 0
Calls answered by voice mail: 0

Getting excited yet? Well probably not because your not such a huge nerd like me.. but I am sure you can see the business value in this.

Wanna know the best part? It's a free downloadable .tcl script from Cisco, in fact its actually embedded into all versions of IOS above 12.4(15)T!

Here is a very basic checklist to get it going, for full detail you should download yourself
the highly detailed "Cisco Unified CME B-ACD and TCL call-handling applications" PDF

So, How do you configure it? First you need to download the language packs available from the cisco website, just search for:

Once done, extract the files contained into flash.

Next you need to start setting up your service parameters, there is a bit too much detail in how these params work that are best covered in the B-ACD manual i have linked above, so for this i will just show you the config I have working (I have bolded out the lines you should change to suit your enviroment):

service app-b-acd-aa
paramspace english index 1
paramspace english language en
param handoff-string app-b-acd-aa
param dial-by-extension-option 3
param voice-mail 0892004100
paramspace english location flash:/cme-b-acd-
param service-name app-b-acd
param aa-pilot 0892004101
param number-of-hunt-grps 1
service app-b-acd
param aa-hunt1 1110
param queue-manager-debugs 1
param number-of-hunt-grps 1

You can see from the config that there is actually two services or two TCL scripts, one is the AA DTMF prompt, and the other is the queuing mechanism itself.

Now, once you have setup that you need to configure your hunt-group, I have created a hunt pilot at 1110 as shown below:

ephone-hunt 1 peer
pilot 1110
list 0892004100, 1112
statistics collect

(By the way, that "statistics collect' command is how you enable statistics collection, you can even TFTP those details onto an external server on a daily or hourly basis! Check the BACD guide for more information.)

Ok, so now the only thing missing is a dial-peer to point to pilot configured for the AA service:

dial-peer voice 194 pots
service app-b-acd-aa
incoming called-number 0892004101
port 0/0/1
forward-digits all

Once you have done that, you should be able to make an incoming call to that number and you will be greeted with a default cisco prompt that may mention menu options in a different order to the way you have them, you obviously need to re-record this and upload it in the correct format.

Now a few gotchas with this that almost caught me out:
  • You must have MOH specified for your phones themselves
  • You won't be able to dial the application from any actual phones themselves as the application will only run on a dial-peer that is linked to a port (in the case of a pots dial-peer) or a voip target (in the case of a voip dial-peer)
You should debug your application with

debug voip call application

script when setting it up for the first time as this spits out some extremely useful information

You can probably see why I was super excited about this feature, it's an extremely reasonable call-centre setup for a small business where they may have 3 operators or so who need to answer calls and they want to be able to queue.

It's hard to understand why Cisco have included such a powerful tool in CME and yet have neglected CCM so badly in terms of queuing, By Default CCM does not come with any queuing mechanism of any sort, and your only options really are ARC and UCCX, both of which while excellent products are over the top if your requirements are simply basic queuing.

Regardless, I am going to be learning more about UCCX as I take an official course on it over the next couple of weeks, so Expect a few updates around UCCX. People who know me personally know that I think ARC is an excellent product so it will be interesting to see how UCCX stacks up and the strengths and weaknesses of each.

Until next time have fun!


Thursday, February 11, 2010

Original Called Number Vs Last Redirect Number

Today I did a bit of work with CCME and Unity Express again, i always semi-enjoy this work as its such a powerful product for small businesses.

However, One thing that has always annoyed me is the world of diffirence between the way CCME does things and the way you do them in full blown communications manager (see paging for an example.)

This also applies for Unity and Unity Express too.

One of the major behavioural diffirences between Unity and Unity express is the way the mailbox is selected when multiple forwards are involved:

For example, in Call Manager and Cisco unity

If User A forwards to User B, who in turn forwards to voicemail, if someone calls user A, they forward to user B and then to voicemail, but are placed into the USER A's voicemail box (original called-number forwarding.)

This is not the default behaviour on unity express, in unity express the last redirected party is the voicemail box used, so in this example that would be user B.

This seems counter intuitive to me, if you call user A, you want to reach HIS mailbox if no one answers.

So, how do you fix it?


Step 1.
Put this line of config into your cisco unity express system:

voicemail mailbox-selection original-called

Depending on your version of CCME/Unity, this in and of itself may be enough, however, in later versions of CCM you need to add this step in:

Step 2.
Go to the dial-peer on the Cisco Call Manager Express router and find the dial-peer that points to the unity express module, go ahead and make sure you enter this line of configuration
"mailbox-select orig-called-number"

Walla! Done

I hope this helps someone out there who had this issue.