Using Asterisk to Beat The 24X7 Support Blues
A little over a year ago I moved my employer from an old Nortel Meridian system (have you ever seen the size of one of these things?) to an Asterisk based solution.
It was pretty painless and overall it dropped the monthly expenditures from over $6k/month to about $500/month (yeah, saying they were overpaying is an extreme understatement). Automatic e-mails whenever a voicemail came through, real Caller-ID, easy extensions via an 800 number in addition to DIDs, they got all the good things that come with Linux, a really cool TDMoE box, Asterisk, and a nicely powered Dell server (or two.)
Once this was all in place, we were working on other ideas. One proof-of-concept I built revolved around one of my biggest job pains – the 24×7 on-call phone.
Our process at the time involved the Meridian phone queue forwarding to a really old Nokia cell phone. Whenever our on-call schedules rotated, we’d pass along the phone. If one of us needed to travel, we either took the phone along or had to meet up with a colleague to swap the phone. This is of course in addition to the irritating requirement of carrying an ancient cell phone when we each had a much more modern phone (Blackberry, Win Mobile, etc.) When a customer would call after-hours, they would need to leave a message that we would check and call back if they had a valid contract. This required us to look up the contract and verify it was valid. I also lost count of the number of times we’d get the “Is this Bob’s gas station?” or some caller that would effectively war dial the system until we lost patience and answered with a “What do you not understand about leave your name, contract number, and phone number?” Needless to say, all of us hated this thing – and constantly dreamt of the day we could pull an “Office Space” style fax machine routine on it. Hence the motivation for something better – Asterisk fit the bill nicely.
A little about other infrastructure in place – we used Microsoft CRM along with a custom front-end web portal for all customer interaction. The portal had an automatic registration functionality that would give each customer their support contract number – this number consisted of 10 digits that could be entered easily into a phone key pad. In addition, CRM provided web services for basic queries and had the ability to be extended by custom code. So the idea was this:
- Build a quick web form that had a drop down list of all the support engineers (defined in CRM.) The form would update CRM with the answer to the question of “Who’s on call?” This form contained our own personal cell phone numbers (ie, the number we would never directly give out for general support purposes.) A web service would then provide the phone number of who to dial when a valid after hours call came through.
- Build a web service to answer “yes” or “no” to the question of “Is this user entitled to after-hours support” when given the user’s contract number.
Once these services were built, we could create the following dial-plan component (implemented through some AGI scripting – I used perl but any language could be used):
- Check the time – is it after-hours?
- Ask the user for a contract number
- Run the contract number through the web service to verify after-hours support is provided by their agreement
- If not (not part of agreement, no number available, invalid number), simply take a message and inform the caller that their message was received and an engineer would contact them on the next business day.
- If the caller was entitled to tech support, they would be asked to leave a message, but with an indication that a callback would be received within the agreement timeframe (typically 45 minutes.)
- The system would then check the voicemail directory and verify that an actual message larger than some threshold, say 3 to 4 seconds, was recorded. This is to prevent the engineer from being bothered by a caller that simply hung up.
If there was a valid new message, Asterisk would lookup the on call engineer (via the web service) and dial the provided number. Once answered, by the engineer or voicemail, it would playback a recording that a new after hours support message had been left and press a key to listen to the new message. If they missed the call, we could simply dial back into the asterisk support voicemail and playback the message.
Due to some policy changes (namely reduction in 24×7 support contracts) the system never got beyond the prototype idea, but it worked really well when we tried it. I had several other ideas for extending things further such as:
- Creating a new case for the user automatically, and reading back the case number to them after leaving their message.
- Storing the voicemail in the CRM system for further review.
- Providing some measure of case status updates for users who called multiple times.
At the end of the day, it was a fantastic proof of concept and really opened my eyes to some of the many possibilities of using Asterisk. All in all, this took about a day of development and testing and worked fairly well on the initial design.
You can read more of Mike Metzger’s thought at his site Tech Play.