Detect Answering Machines

This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.

Use the DetectAnsweringMachineActivity class in Speech Server to determine whether a call placed by an outbound telephony application was answered by a human or an answering machine and to leave a message if the call was answered by an answering machine.

It is important for outbound applications to be able to tell whether their call was answered by a human or an answering machine so that the application can take appropriate action. For example, a survey application requires a human to answers and might choose to simply abort the call if an answering machine is detected. Alternatively, an application that notifies customers when a purchase has been shipped can simply leave a message.

Role of Gateways

Answering machine detection is implemented in selected telephony gateways. If this feature is available in the planned deployment environment, an author can choose to rely on a gateway to detect answering machines. Having answering machine detection built into Speech Server makes applications independent of specific gateways, providing companies more options for deployment.

Call Classification Algorithm

Speech Server implements an algorithm relying on a combination of two factors:

  • The length of the utterance heard when the call is answered. The trigger values used in the Call Classification algorithm are configurable in Speech Server.
  • A Conversational Understanding grammar that responds with a result that includes a confidence value.
Call Classification Algorithm
if utterance duration < MaximumUtteranceDurationToAssumePerson then return LIVE_HUMAN_RESPONSE
if utterance duration > MinimumUtteranceDurationToAssumeAnsweringMachine then return ANSWERING_MACHINE_RESPONSE 
if utterance confidence > 0.2 then
{
   if ClassificationRecognitionResult.Semantics.ContainsKey("ANSWERING_MACHINE_RESPONSE") then return ANSWERING_MACHINE_RESPONSE 
   if ClassificationRecognitionResult.Semantics.ContainsKey("LIVE_HUMAN_RESPONSE") then return LIVE_HUMAN_RESPONSE
   throw InvalidOperationException // if the recognition result didn't contain either of the keys above 
}
if utterance duration < (MaximumUtteranceDurationToAssumePerson + MinimumUtteranceDurationToAssumeAnsweringMachine)/2 then return LIVE_HUMAN_RESPONSE
return ANSWERING_MACHINE_RESPONSE

For more information about implementing answering machine detection, see Walkthrough: Detect an Answering Machine.

See Also

Other Resources

Create Managed Code Voice Response Applications