Answering Machine Detection

Being the first west coast Digium Certified Asterisk Integration Partner we do quite a bit of customizations like integrating custom CRM solutions with Auto Dialers like VICIdial. Answering Machine Detection tends to be an extremely misunderstood feature by call center managers. I believe this is due to the lack of accurate agent reporting and metrics for outbound campaigns when using AMD, so I wrote a whitepaper in 2009 which covered Asterisk™ AMD, Cisco™ CPA (Call Progress Analysis), FreeSWITCH™ Advanced Voice Mail Detection and Microsoft™ Communications Server 2007 AnsweringMachineDetectActivity. However over time I only handed it out to a few colleagues and clients and was rarely used besides VICIdial or Asterisk implementations. I will attempt to streamline the content here while limiting this post to discussing Asterisk™ AMD. For a future post I will cover details on the Sangoma NetBorder Call Progress Analysis.
What is AMD?
A simple definition could be AMD is an attempt to detect whether the other end of a phone call is a live voice or if it is an answering machine. For the ever growing population unfamiliar with “answering machines” think of it as voicemail. The more complex answer is getting an automated system to determine if audio is from a live human or from a machine. This may sound simple, however no method of AMD is 100% accurate. With an adept understanding of regional dialects and the right AMD you can tune the system to around 85-95% accuracy. However as the regional dialect changes the prior AMD configuration may only provide 80% accuracy.
Who uses AMD?
- Schools
- Dr.’s Offices
- Call Centers
If you have a child and have ever received a message or voicemail regarding their tardiness or absence from school, this was likely done with some form of Answering Machine Detection. The same goes for automated reminder calls from your Dr.’s office about your next scheduled appointment. Call Center actually covers quite a bit of things: A Political or Medical Survey company calling to “take your pulse” on a topic; a Bank or Credit Card contacting you about potential fraud; a telemarketer cold calling or returning a request for specific information.
Common misconceptions about AMD.
- I should be a be able to achieve 100% accuracy.
- AMD will provide a shorter “Wait Time” for agents.
- AMD will allow agents to handle more total calls.
- AMD slows down my call center performance.
Most of these misconceptions should be addressed before the end of this blog post. However if somehow I leave out the pertinent information to show how or why this is inaccurate, please let me know and I will update the post accordingly.
Asterisk™ AMD Call Examples

Notes
- The totalAnalysisTime starts at off-hook detection.
- When AMD decides on live voice the call is returned to asterisk with AMDSTATUS set to HUMAN.
- The totalAnalysisTime is ignored once live voice is decided.

Notes
- AMD decides answering machine because message length exceeds greeting.
- Other reasons causing answering machine decision afterGreetingSilence; maximumNumberOfWords; silenceThreshold or maximumWordLength values are exceeded.
How it works
Asterisk™ AMD examines the length of the greeting audio and a following silence or lack of silence. initialSilence is a threshold that if exceeded classifies the call as an answering machine. minimumWordLength is the shortest duration of audio accepted as a word, this allows tuning out short audio or “chirps”. afterGreetingSilence is the required silence after a live voice “greeting”. betweenWordSilence is the required silence after each word to consider the next sounds a new or separate word. maximumNumberOfWords is the word limit to be considered a live voice, exceeding this word limit considers the call an answering machine. greeting is the maximum length of a live voice greeting, exceeding this considers the call an answering machine. The totalAnalysisTime is the maximum length of time AMD can analyze the call. The silenceThreshold is the maximum length of an individual silence. Asterisk™ AMD uses Goertzel’s algorithm to detect DTMF, audio and silence.
Evaluating Efficiency
Evaluating the difference in productivity of the call center or agents changes when AMD is enabled. The evaluation of total sales per agent is still valid, however evaluating the ongoing performance of a campaign based on other metrics can become extremely difficult those metrics don’t represent live call information. This is evident when evaluating productivity based on an agents total calls as with AMD analysis time added to each call, and a high volume of answering machines the agent will handle fewer total calls. However if you have an extremely low volume of answering machines to live calls, it can increase, this is not the norm for most call centers. Reporting and metric issues are also evident when evaluating productivity based on the average wait time. Many call center managers will assume that performance is suffering and want to disable AMD based on metrics like total calls and average wait time.
With some simple equations and the information available in most call center reporting we can calculate the effects of AMD on a campaign or agents performance. Some proprietary reporting solutions may present these metrics, however licensing costs can easily reduce the viability of these solutions when simply assessing your campaign with AMD enabled. Below we will cover the metrics required to properly evaluate AMD, how to get the required metrics and finally a postulate that can be used to estimate the effects of an AMD system on your campaign.
Total Live Calls
To accurately assess performance when previously based on total calls we now need to base it on Total Live Calls (T). To do this we need to group calls into two categories; The categories are system handled calls and agent handled calls. System handled calls disposition is automatically set without the assistance of a call center agent. These include busy signals, disconnected numbers, telecom errors, etc. that the call center can automatically disposition. Agent handled calls (referred to as connected calls herein) are calls requiring the agent to disposition the call. There are three types of connected calls; Live Calls (l), Answering Machines (a) and False Positives (f). Live Calls (l) will include any human interaction with an agent, including dispositions like Not Interested, Do Not Call, and Sale or Transfer. Answering Machines include any disposition where the agent leaves a message or transfers a call to a prerecorded message. Answering Machines does not include when AMD detects an answering machine, these are grouped with the System handled calls. False Positives include any disconnected numbers, busy signals, telecom error messages, etc. that the call center incorrectly transfers to the agent.
To get Total Live Calls (T) find the difference between Live Calls (l) and the sum of Answering Machines (a) and False Positives (f).

Average Wait Time Between Live Calls
When basing performance on average wait time we now base it on Average Wait Time between Live Calls (A). A basic estimate of Average Wait Between Live Calls (A) can be obtained by dividing Total Wait Time (W) by Total Live Calls (T).

For example lets say AMD is disabled and there were 200 connected calls with an average wait time of 33 seconds for a total wait time of 6600 seconds, with 112 dispositions of Answering Machines , and 16 dispositions of False Positives we find the Average Wait Time between Live Calls is 91.66 seconds.
However this fails to take into account that each answering machine and false positive also takes the agent time to transfer or leave a message, hangup and disposition the call. If the agents wait for an answering machine to beep and leave a verbal message it can add an additional 20+ seconds for each answering machine, where transferring the call to a prerecorded message greatly reduces the the time it takes to handle an answering machine.
To get a more accurate estimate of Average Wait Between Live Calls (A) we also need the Average Disposition Time (d), the Average Message Time (m), Answering Machines (a) and False Positives (f). Add Total Wait Time (W) to the product of False Positives (f) by Average Disposition Time (d) and the product of Answering Machines (a) by the sum of Average Message Time and Average Disposition Time (d). Finally divide the sum by Total Live Calls (T). This equation provides a more accurate idea of how long an agent waits on average to reach each live person.

For example lets say AMD is disabled and there were 200 connected calls with an average wait time of 33 seconds for a total wait time of 6600 seconds , and an average message time of 5 seconds to transfer answering machines and average disposition time of 3 seconds to hangup and disposition. With 112 dispositions of Answering Machines , and 16 dispositions of False Positives we find the Average Wait Time between Live Calls is 104.77 seconds.
Now lets say AMD is enabled and is achieving 80% accuracy. Calls where an answering machine is detected calls that are not grouped into the category of Answering Machine (a) as an agent is not connected to the call. Now if there were 200 connected calls with an average wait time of 50 seconds, for a total wait time of 10,000 seconds (t) and an average disposition time of 3 seconds (d) and an average message time of 5 seconds (m). Now with 22 dispositions of Answering Machines (a), and 16 dispositions of False Positives (f) we find the Average Wait Time between Live Calls (w) is 63.11 seconds. This shows that even though the average wait time appears to be over 1.5 times longer after enabling AMD, that the Average Wait Time between Live Calls (w) is 39.7% shorter when AMD is enabled.
Fall asleep yet? No?!? You now have the knowledge to get more accurate data from your Call Center reports! Didn’t understand? Contact Us and we can help update, troubleshoot or customize your Asterisk™ VoIP PBX or VICIdial Call Center.