Asterisk Plays Well With Others
January 28th, 2009 | Published in Asterisk, open source | 4 Comments
For those who haven’t heard, Asterisk is an Open Source telephony platform nearly a decade old. It is a software application that can run on Linux, Windows, and Mac OS X. Asterisk provides all of the traditional features of a proprietary PBX system from a company like Nortel or Cisco for a much lower price. You might say the price is on the cold side of ZERO. Of course, it’s easy to say an application costs nothing before you start investing your time to deploy it. But here too Asterisk shines – many different GUI interfaces have been developed by the community to simplify Asterisk installations although the quality of these UI’s can vary significantly. Yet it’s neither cost nor administration that guarantees a future victory for Asterisk in the arms race against the incumbents. Asterisk will win because Asterisk allows for creativity.
Take your standard Avaya Nortel Meridian PBX. A powerful system from an established vendor. The Meridian system provides Enterprise users PBX features that kick efficiency into high gear. These days, who can live without Find Me Follow Me, remote voicemail administration, hunt groups, and IVRs? But what about integration with your Enterprise Knowledge Base platform? Wouldn’t it be great to keep a directory of clients in a wiki format and then click on any phone number within this portal to initiate an outbound call from your IP Phone? A ginormous rolodex for everyone to share that’s never out-of-date and indexed automatically by the wiki search engine! Sorry Meridian, no dice.
Asterisk can. The most overlooked feature of Asterisk is the Asterisk Gateway Interface or AGI. AGIs function like CGIs on the web. They can be written in any scripting language (PERL, Python, Ruby, Bash, PHP, Java, etc.). Leveraging the power of an AGI and standard functions of Asterisk like “Dial” (guess what that feature does), you can write a script to query your MySQL or Oracle database of clients, retrieve a phone number and send the string of digits to Asterisk for processing. All Asterisk needs to know is which phone in your organization to call, and Asterisk immediately initiates a call to that phone. Once the phone is “answered”, Asterisk calls the client using the phone number retrieved by the AGI.
The way Asterisk has been engineered allows for an unprecedented level of creativity and under the supervision of an experienced engineer, Asterisk can literally do anything. Well, it won’t make your toast (but as soon as someone sticks a silicon wafer and NIC port into a toaster, I bet the “make toast” app will quickly follow), but it can be instructed using very simple scripts to do very nearly anything that takes place on the Internet.
Have you ever called a large company, like a bank or the telephone company, and when you “press 1 for Support” you are immediately greeted with a robot handler asking you for an account number? It always goes something like this, “Thank you for calling The Cable Company, please enter or say your account number so that we can better assist you.” You say, “123456789” and the IVR starts making some interesting alien bleeping noises. After a short pause, the robot handler speaks, “Thank you, you will now be transferred to a Customer Service representative. Your wait time is approximately a lot longer than you should have to wait.”
The waiting begins. Right as you’re about to hangup, an thick drawl floats over the wires, “Thank you for calling The Cable Company, may I have your account number please?”
What was the point of entering the number into the IVR in the first place? I gave my account number to the robotic handler! Didn’t the robot deliver the goods? Have you two ever spoken?!
Sigh. This is the proprietary PBX world. Most “turn-key” solutions sold through the last decade are feature-light and too complex to integrate with the majority of software applications currently used for business. The larger PBX solutions often do not come with an API for integrating your existing infrastructure with the features of your phone system. A company who purchases a solution from Panasonic for example does not have the option of writing a few scripts which take information from the caller via a key press and insert that information into the company’s database of Customer Information. The APIs that do exist for proprietary phone systems don’t give the consumer access to every command available within the PBX. As a result, integration is limited to click-to-call-type trickery which is to say proprietary phone systems are essentially only good for a parlor trick or two indulged by an audience ignorant of the unrealized potential inherent in Open Source VoIP.
Now let’s give Asterisk a chance. A company I know uses Asterisk for their primary phone system and has scripted an AGI to act as the Support IVR. Customers call into Support and they are prompted for their ticket number in order to help the agent quickly retrieve the open support case. It goes something like this:
“Thank you for calling our much more technically-savvy company. Please enter your ticket number to continue. If you do not have a ticket, please press 1.”
The customer enters their ticket number using a touch-tone phone.
“Thank you.” Alien bleeping. Ok so all phone systems do the alien bleeping thing. “We see that you last called on [Date] about this issue. Your call will be answered in the order in which it was received.”
A short wait…
“Hi John, this is Rob, I see you’re calling in about your VoIP account turn-up. Did you get the authentication credentials from the VoIP company as we discussed?”
Wait a tick. How did they know it was John, and wow the CSR has a great memory! Right? Wrong.
This moment of customer satisfaction is brought to you by AGI. Here’s how it works:
The customer calls in and enters his ticket id. The AGI takes the input and opens a MySQL database connection. Using a pre-fabricated MySQL statement with a variable configured for the ticket id, the customer’s name, phone number, address, system information, the number of IP Phones provisioned for the server, and a history of all other tickets for this customer are returned to the AGI. The AGI then re-writes the Caller ID number and replaces this value with the ticket number. Then the company uses a simple URL to open the ticket in the web-based ticketing system. The URL uses the Caller ID (which is now the ticket ID) as a variable to execute a simple search function. Because the AGI passes the ticket ID, the ticketing system can quickly load all of the aforementioned information on the CSR’s monitor automatically. As the CSR accepts the call, a web browser opens displaying who is calling and why. This technology provides two major benefits: the company saves time on every ticket, this adds up to hours in the course of a year (and time is money); and the CSR looks like a hero in the eyes of the customer, this builds brand-loyalty and increases customer happiness.
The AGI I just described took one afternoon to completely implement. One afternoon. What couldn’t you do with one afternoon and your Meridian telephony system? You might get as far as a support call for help establishing your hunt group? You certainly aren’t going to find an API to make calls to your customer database for you. And even systems that allow custom integration typically don’t support scripting languages like PERL.
Yes, I admit… if you’ve ever called your bank or another Fortune company, you’re probably saying “well the computer voice does ask for my account information and the CSR does have it once I’m finally transfered”. Yes, there are plenty of phone systems which can provide this level of integration, but because they cost so much money and are so complex, often requireing millions of dollars, these systems are usually reserved for big corporations and massive call centers. Asterisk on the other hand can provide the same awesome functionality to any business serious about their phone system regardless of size- big or small.
Creativity gives Asterisk a distinct advantage that proprietary products cannot provide. Will not provide might be more accurate. If you could start writing code to realize a telephony idea rolling around your imagination, would you need the team of highly paid engineers at Avaya, Cisco, Nortel? You most certainly would not. And these proprietary vendors know it.
Let’s take a walk into our imagination and look at some other business needs that AGI can solve.
Predictive Dialers – so many outbound sales organizations require the ole predictive dialer. Your company gets hundreds of thousands of hot prospects that need to be called right away. The predictive dialer needs to be able to get a number from a database, mark the number as “in progress”, dial the number, determine if a person answers, if the number is disconnected, if an answering machine picks up, etc., then mark the number in the database with a new message indicating the number should not be tried again, and finally deliver the customer into a queue where a live operator closes the deal.
Predictive dialers are very expensive off the shelf. A company I know of called GCInfoTech has written a predictive dialer for Asterisk via AGI at tens of thousands of dollars less than off-the-shelf products.
Account Information – this could be anything from baking, to investing, to order status. When you call your bank to check your balance or transfer funds, the telephony application the bank uses checks a database just like our AGI example above. The telephony application the bank uses is proprietary and costs a lot of money. AGI is free to the determined programmer, or mar less than a proprietary solution even for a company looking to purchase a turn-key solution from an Asterisk professional.
Text-to-speech – while text-to-speech is a technology unto itself, it needs some text to convert into speech. Your AGI might use a wiki platform to store information on topics important to your customers. I know of a company in the Health Services industry that informs patients about diseases, medications, and news related to common illnesses. This company leverages a wiki platform and text-to-speech in order to write up information as it is received and posts it online (blog-esque). Customers call in and choose a topic from the IVR. Via AGI, the wiki article posted online is converted into spoken word automatically. Before Asterisk, the company had to record voice prompts for every new piece of information offered to customers. This required an enormous database of sound files and kept administrators busy for hours checking and re-checking file naming conventions, monitoring the health of the SAN, and performing database maintenance.
Asterisk matches up very well against many of the big names in PBX technology: Avaya, Nortel, Cisco. Feature for feature, Asterisk supports almost everything offered by these vendors. When companies are weighing the pros and cons of which PBX to purchase, the tale of the feature tape doesn’t provide a clear-cut winner. Then you factor in “creativity” boosting Asterisk far above the competition. I’ll be the first to admit that Open Source software in the enterprise comes with a special set of challenges – neither more nor less challenging than proprietary software in reality; but proprietary software cannot ever compete with the potential inherent in Open Source. AGI flings open the doors of possibility. How about writing in and telling us a few of your own ideas?
By Tyler Merritt




February 25th, 2009at 4:27 pm(#)
Euuhh, is the Meridian not a PBX from Nortel instead of Avaya???
Cheerz from Germany
February 25th, 2009at 4:35 pm(#)
You are correct, thanks for reading. I hope you find os-voip.com useful. I have made the correction in Tyler’s article.
Cheers,
Aaron Rosenthal
June 14th, 2009at 5:25 pm(#)
my God, i thought you were going to chip in with some decisive insght at the end there, not leave it with
July 30th, 2009at 3:47 am(#)
I have a MySQL db with client details in a table, including phone numbers. I want to open the clients details page based on a match with the inbound phone number. I do not want the client to enter anything. Will this still work? Where can I find advice on this? My php is basic, but with a little help or pointed in the right direction, maybe enough.