AMD() — Answering machine detection
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 to MACHINE
.
greeting
The maximum length of the greeting. If exceeded, then the
AMDSTATUS
variable will set to
MACHINE
.
afterGreetingSilence
The maximum silence after detecting a greeting. If exceeded,
then the AMDSTATUS
variable
will be set to MACHINE
.
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 to MACHINE
.
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()