[Asterisk-Users] Answering Machine Detection
Steve Underwood
steveu at coppice.org
Wed Oct 29 08:41:21 MST 2003
Hi Chris,
That is exactly the Dialogic implementation I was referring to that was
utterly useless. It works OK when people are demoing, as they always
follow a certain pattern. In real like it I've always found it a recipe
for screaming angry users. Depnding on your use it can get over 90% of
calls wrong. It is just so dependant on exactly how people behave.
Regards,
Steve
Chris Ziomkowski wrote:
> Actually,
>
> Back in '99, Dialogic used a very simple algorithm, and it was
> surprisingly accurate. You simply watch and see how long the initial
> greeting is. If it is short (say, only a few seconds), then it is
> generally a live person. However, if the initial greeting lasts for
> much longer (say 20 seconds) then you have contacted an answering
> machine.
>
> That is one of the big reasons CPA on Dialogic used to give so many
> headaches on drop and insert applications. It would sometimes wait 10
> seconds before returning answer supervision to the application and the
> talk path would be cut through (Had to wait to determine whether it
> was a human or an answering machine). In this time, if a human
> answered, he would sometimes hangup because he wouldn't hear any
> response from the remote side.
>
> Properly tuned, just watching how many seconds of energy you get in
> the initial greeting before silence sets in will give you 90% accuracy
> in determining answering machine or live person. There are always
> exceptions however. As a first guess though, you can assume anything
> less than 5-10 seconds is human, anything greater is a machine.
>
> Lots of ways to get it wrong though. Not recognizing a SIT tone and
> returning "answering machine" for circuit failure, not recognizing
> when ringing has ended and misinterpreting the "hello....hello" as
> still being ringing cadence (Dialogic did this about 3% of the time).
> But in theory it should be trivial to implement in Asterisk. Might
> want to write a new "energy detector" algorithm in dsp.c though based
> on a wideband/low Q resonator approach (move the pole way in towards
> the origin) as opposed to narrow band goertzels (pole on the unit
> circle). More robust for this type of work.
>
> Chris
>
> At 08:24 PM 10/29/2003 +0800, you wrote:
>
>> Alastair Maw wrote:
>>
>>> On 27/10/03 21:57, DUSTIN WILDES wrote:
>>>
>>>> Does anyone have any recommendations on implementing Answering
>>>> Machine detection for call generation programs?
>>>
>>>
>>>
>>> There's obviously no nice way of doing this.
>>> If you're doing telemarketing, and you're playing pre-recorded
>>> audio, which of course is a nasty thing to do, the algorithm is
>>> something like:
>>>
>>> 1. Dial out.
>>> 2. Wait for answer.
>>> 3. Start playing audio.
>>> 4. If you hear something that sounds like a beep, either hang up
>>> and try again later, or stop the audio, pause for two seconds
>>> and start playing it again.
>>> 5. Hang up when finished playing audio.
>>>
>>> Step 4 is accomplished by doing a FFT on the incoming audio into
>>> frequency buckets and taking a rolling average of the mean and
>>> standard deviation, such that you can detect when a fixed monotone
>>> beep occurs at the other end.
>>
>>
>> How very inefficient. Looking for peaks in the autocorrelation
>> function requires much less compute.
>>
>>> If you don't want to play audio files and wait for beeps, and want
>>> to connect real humans to each other, then there's no decent way to
>>> do this, as the only difference between humans and arbitrary
>>> answering machines is that the answering machines give you a beep
>>> prompt to record your message.
>>
>>
>> Right. Dialogic and others make a big fuss of the super detection
>> algorithms, and quote 90+% accuracy. In the real world they are
>> utterly useless. Call answering just doesn't fall into a sufficient
>> redular patterm.
>>
>> Regards,
>> Steve
>
More information about the asterisk-users
mailing list