Open SidemenuDocs
Docs
Close Sidemenu
Choose:
cURLPythonRubyNodePHP.NET
cURLPythonRubyNodePHP.NET

Answering Machine Detectionanswering-machine-detection

Outbound calls placed with Call ControlTelnyx Developers can be enabled with Answering Machine Detection (AMD, Voicemail Detection).

When a call is answered, Telnyx runs real-time detection to determine if it was picked up by a human or a machine and sends webhooks with the analysis result.

AMD Settingsamd-settings

The answering_machine_detection value when creating an outbound call or transferring an inbound call can be set to one of the following:

SettingDescriptionWebhooks Sent
detectOnly detect if answering machine or human.call.machine.detection.ended
detect_beepListens for a final "beep" sound after detecting a machinecall.machine.detection.ended and call.machine.greeting.ended only if a beep is detected
detect_wordsRECOMMENDED After a machine is detected, a 30 second long beep detection will begin. Note the answering machine may still be playing it's greeting while the 30 seconds is counting down.call.machine.detection.ended and call.machine.greeting.ended when the beep is detected or at the end of 30 seconds.
greeting_endListens for extended periods of silence or a beep in the greeting to determine if a greeting has ended.call.machine.detection.ended and call.machine.greeting.ended

Sample Dial Request

POST https://api.telnyx.com/v2/calls HTTP/1.1
Content-Type: application/json; charset=utf-8
Authorization: Bearer YOUR_API_KEY

{
  "connection_id" : "1494404757140276705",
  "to"            : "+19198675309",
  "from"          : "+19842550944",
  "webhook_url"   : "https://webhook_url.com/outbound_call_events",
  "answering_machine_detection" : "detect_words"
}

General order of operations

  1. 1Create outbound call.
  2. 2Receive call.initiated webhook.
  3. 3Receive call.answered webhook when the call is answered either by human or machine.
  4. 4Receive call.machine.detection.ended webhook with human/machine status.
  5. 5Receive call.machine.greeting.ended webhook when beep detected or 30 second timeout.

Please Note: At any point, the callee could hangup generating a call.hangup webhook.

call.machine.detection.ended Webhookcall-machine-detection-ended-webhook

The call.machine.detection.ended is sent when Telnyx can make a determination on human or machine.

The data.payload.result will contain the information about the answering machine:

ResultDescription
humanHuman answered call
machineMachine answered call
not_sureRecommended to treat as if human answered.

Sample Webhook

{
  "data": {
    "event_type": "call.machine.detection.ended",
    "id": "0ccc7b54-4df3-4bca-a65a-3da1ecc777f0",
    "occurred_at": "2018-02-02T22:25:27.521992Z",
    "payload": {
      "call_control_id": "v2:T02llQxIyaRkhfRKxgAP8nY511EhFLizdvdUKJiSw8d6A9BborherQ",
      "call_leg_id": "428c31b6-7af4-4bcb-b7f5-5013ef9657c1",
      "call_session_id": "428c31b6-abf3-3bc1-b7f4-5013ef9657c1",
      "client_state": "aGF2ZSBhIG5pY2UgZGF5ID1d",
      "connection_id": "7267xxxxxxxxxxxxxx",
      "from": "+35319605860",
      "result": "machine",
      "to": "+13129457420"
    },
    "record_type": "event"
  }
}

call.machine.greeting.ended Webhookcall-machine-greeting-ended-webhook

If the answering_machine_detection was set to detect_beep, detect_words, greeting_end you could receive a final webhook when the prompt (or beep detection) has finished.

The data.payload.result will contain the information about the answering machine:

ResultDescriptionAMD Setting
endedGreeting is over.ONLY sent when setting is greeting_end
beep_detectedBeep has been detecteddetect_beep and detect_words
not_sure30 second beep detection timeout fired after detecting a machinedetect_beep and detect_words

Sample Webhook

{
  "data": {
    "event_type": "call.machine.greeting.ended",
    "id": "0ccc7b54-4df3-4bca-a65a-3da1ecc777f0",
    "occurred_at": "2018-02-02T22:25:27.521992Z",
    "payload": {
      "call_control_id": "v2:T02llQxIyaRkhfRKxgAP8nY511EhFLizdvdUKJiSw8d6A9BborherQ",
      "call_leg_id": "428c31b6-7af4-4bcb-b7f5-5013ef9657c1",
      "call_session_id": "428c31b6-abf3-3bc1-b7f4-5013ef9657c1",
      "client_state": "aGF2ZSBhIG5pY2UgZGF5ID1d",
      "connection_id": "7267xxxxxxxxxxxxxx",
      "from": "+35319605860",
      "result": "ended",
      "to": "+13129457420"
    },
    "record_type": "event"
  }
}

Was this page helpful?