Name
AMD() — Answering machine detection
Synopsis
AMD([initialSilence
[,greeting
[,afterGreetingSilence
[,totalAnalysisTime
[,minimumWordLength
[,betweenWordsSilence
[,maximumNumberOfWords
[,silenceThreshold
]]]]]]]])
This application attempts to detect an answering
machine, based on the timing patterns. This application is usually
used by outbound calls originated from either call files or from the
Asterisk manager Interface. This application sets AMDSTATUS
variable is set to one of the
following, to show what type of call was detected:
MACHINE
The called party is believed to be an answering machine.
HUMAN
The called party is believed to be a human being, and not an answering machine.
NOTSURE
The application was unable to tell whether the called party was a human or an answering machine.
HANGUP
A hangup occurred during the detection.
The AMD()
application also
sets a channel variable named AMDCAUSE
with the cause that lead to the
conclusion stated in the AMDSTATUS
variable. The AMDCAUSE
variable
will be set to one of the following values:
TOOLONG- |
INITIALSILENCE- |
HUMAN- |
MAXWORDS- |
LONGGREETING- |
The parameters to this application all help tune it so that it can more effectively tell the difference between a human and an answering machine. If the parameters are not passed to this application, Asterisk will read the default values as configured in amd.conf. The parameters are:
initialSilence
The maximum silence duration before the greeting. If exceeded, then the
AMDSTATUS
variable will be set toMACHINE
.greeting
The maximum length of the greeting. If exceeded, then the
AMDSTATUS
variable will set toMACHINE
.afterGreetingSilence
The maximum silence after detecting a greeting. If exceeded, then the
AMDSTATUS
variable will be set toMACHINE
.totalAnalysisTime
The maximum time allowed for the algorithm to decide whether the called party is a human or an answering machine.
minimumWordLength
If the duration of the voice activity is shorter than
minimumWordLength
, it will not be considered to be human speech.betweenWordsSilence
The minimum duration of silence after a word to consider the audio that follows as a new word.
maximumNumberOfWords
The maximum number of words detected in the greeting. If exceeded, then the
AMDSTATUS
variable will set toMACHINE
.silenceThreshold
How sensitive the algorithm should be when detecting silence
; Use answering machine detection. If the called party
; is human, connect them to Bob. Otherwise, play a
; message and hang up
exten => 123,1,Answer()
exten => 123,n,AMD()
exten => 123,n,GotoIf($["${AMDSTATUS}" = "HUMAN"]?human:machine)
exten => 123,n(machine),WaitForSilence(2000)
exten => 123,n,Playback(asterisk-friend)
exten => 123,n,Hangup()
exten => 123,n(human),Verbose(3, We've got a human on the line!)
exten => 123,n,Playback(transfer)
exten => 123,n,Dial(SIP/bob)
exten => 123,n,Playback(im-sorry)
exten => 123,n,Hangup()
Get Asterisk: The Future of Telephony, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.