Answering Machine Detection (AMD)
Status: Beta. Please reach out to your Exotel account manager to have AMD enabled on your account.
Overview
Answering Machine Detection (AMD) tells you whether an outbound call was answered by a human or by a machine (such as voicemail or an IVR). This lets you take different actions depending on who picked up — for example, playing a message only when a human answers, or skipping voicemail drops.
AMD results are delivered through Exotel's call callbacks (APIs). They are not shown in reports or the dashboard.
How AMD works
When AMD is enabled, Exotel analyzes the audio at the start of the call — the greeting and the silences around it — to classify who answered. The classification is returned through two new parameters inside the Legs object of your callback payload:
Parameter | Description |
|---|---|
AnsweredBy | The AMD result. Use this for your final classification. |
AmdCause | The reason behind the result, including the values used for detection. Use this for debugging or understanding why a result was given. |
Possible AnsweredBy values
- HUMAN — the call was answered by a person
- MACHINE — the call was answered by a machine (voicemail, IVR, etc.)
- NOTSURE — detection could not reach a definitive result
- NA — AMD was not applicable for this leg
Key behaviors
1. AMD applies only to Leg 2 (the To leg). Detection runs only on the number being dialled (Leg 2 / the To leg). Leg 1 (the From leg) will always return AnsweredBy: NA. When reading the payload, use the AnsweredBy value on Leg 2 for the human-vs-machine result.
2. AMD detection is asynchronous. Detection does not block or delay call connection or routing — the call proceeds normally while analysis happens in the background. Because detection listens to the greeting and surrounding silence, the result takes roughly 3–5 seconds to finalize and is delivered once complete. Consume the result from the callback payload when it arrives, rather than expecting it the instant the call is answered.
Where you receive the result
A. StatusCallback terminal event
To receive the AMD status via StatusCallback, you must subscribe to terminal events. Once subscribed, the AMD result is included in the terminal StatusCallback payload, inside the Legs object.
Sample terminal StatusCallback payload:
In this example:
- Legs[0].AnsweredBy: NA → AMD was not applicable for the From leg (Leg 1).
- Legs[1].AnsweredBy: HUMAN → the To number (Leg 2) was answered by a human.
B. Passthru payload
When AMD is enabled, the Passthru payload also includes AnsweredBy and AmdCause inside the Legs object.
Sample Passthru payload:
In this example:
- AnsweredBy: HUMAN → the call was detected as answered by a human.
- AmdCause: HUMAN-800-800 → a short greeting was detected, followed by silence — typical human behavior, where the person says "Hello?" and waits for a response.
AMD Cause reference
Use AnsweredBy for your final classification, and AmdCause to understand why that classification was made. Values shown in {curly braces} are the actual measured/threshold figures used during detection.
AnsweredBy | AmdCause | What it means |
|---|---|---|
MACHINE | INITIALSILENCE-{detected}-{threshold} | Long silence before any voice started. Machines often have a delay or beep before the greeting plays. |
MACHINE | MAXWORDS-{wordsDetected}-{maxAllowed} | Too many words were spoken in the greeting. Machines usually have longer greetings. |
MACHINE | LONGGREETING-{voiceDuration}-{greetingLimit} | The total voice duration of the greeting was too long. |
MACHINE | MAXWORDLENGTH-{consecutiveVoiceDuration} | A single continuous stretch of voice without a pause was too long. |
HUMAN | HUMAN-{silenceDuration}-{afterGreetingThreshold} | A short greeting was spoken, followed by silence. |
NOTSURE | TOOLONG-{totalTime} | The analysis window ended before a definitive result could be detected. |
NOTSURE | NOAUDIODATA-{totalTime} | No audio frames were received during the analysis window. |
| | |
Accuracy
Exotel detects voicemail using heuristic algorithms based on maximum words spoken, silence, and greeting length. Detection typically takes 3–5 seconds, with an accuracy of 60–75%, which is on par with industry standards.
There is no consistent signaling difference between a call picked up by a human and one picked up by a machine, so detection relies on audio cues such as tone of voice and speed of words spoken.
FAQ
Q: A call went to voicemail. Will its status change to "no-answer," or stay in the success bucket?
It stays in the success bucket. The call was successfully connected and answered (by a machine), and these are billable seconds, so the call is not moved to a non-successful state. Use the AnsweredBy parameter separately to determine whether the answer was a human or a machine.
Q: Will the AMD result appear in my reports or dashboard?
No. AMD results are available only through the API callbacks (StatusCallback terminal event and Passthru payload), not in reports or the dashboard.
Q: Which leg does AMD apply to?
Only Leg 2 (the To leg). Leg 1 (the From leg) always returns AnsweredBy: NA.
Q: Is AMD real-time? Will it delay my call?
No delay. AMD is asynchronous — the call connects and proceeds normally while detection runs in the background. The result is delivered through the callback once detection completes (roughly 3–5 seconds).