Answering Machine Detection

amd_not_available

Person or phone number is not available. Examples:

  • The person you are trying to reach is not available
  • The number you have dialed is not in service. Please check the number and try your call again. Thank you.

amd_no_voicemail

Person has no voicemail, or voicemail is not able to receive new message Examples:

  • Sorry. But the person you called has a voicemail box that has not been set up yet.
  • I'm sorry, the person you were trying to reach has a voicemail box that has not been set up yet. Please try your call again later. Goodbye.

amd_answering_machine

Answering machine was detected Examples:

  • Thank you for calling Some Name. Your call may be recorded or monitored for quality purposes.
  • This call may be recorded for quality assurance purposes
  • This call may be monitored or recorded for. Quality and training purposes. For more on how we handle your personal...

amd_ivr

IVR (Interactive Voice Response) was detected Examples:

  • For Technical Support press 1.
  • Thank you for calling Company Name. For customer support. Please Press 2
  • Please choose from the following menu option

amd_unusual_am

Not regular answering machine, or we are not sure, that it's an answering machine Examples:

  • I do want to hear what you have to say, but hold on.

amd_voicemail

Voicemail was detected in the phrase Examples:

  • At the tone, please record your message.
  • Hi, this is Name. Please leave a message.
  • Thanks for calling Some Name. Please leave a message.

amd_thank_you_for_calling

Phrases like:

  • Thank you for calling [Some Nane]
  • Thank you for calling [Some Nane]. How can I help you?

Typically most of answering machine starts with such phrases, but humans answers with such phrases too.

Beta features and NER entities

node ivr { do { var idx = 0; for (var button in #messageGetData("amd_ivr_press")) { var press = button.value; var direction = #messageGetData("amd_ivr_direction")[idx]?.value; #log({press: press, direction: direction}); set idx = idx + 1; } // your code here wait *; } }

For the phrase: For support press 1. For sales press 2 will log:

  • [sandbox] info {"press":"1","direction":"support"}
  • [sandbox] info {"press":"2","direction":"sales"}

amd_ivr_press

Button, that can be pressed in the IVR menu Examples:

  • For marketing opportunities. Press [amd_ivr_press].
  • Press [amd_ivr_press] now to talk to the operator. Values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #

amd_ivr_direction

An open set of directions for the IVR, like support, billing and others..

Connecting to the application

Just add "amd:v2" in dashaapp file section nlu.skills. It will look like:

{ "formatVersion": "2", "dialogue": { "file": "main.dsl" }, "nlu": { "language": "en-US", "skills": [ "amd:v2" ], "customIntents": { "file": "nlu.json" } }, "nlg": { "type": "phrases", "file": "phrasemap.json", "signatureFile": "phrasemap.json" }, "name": "my app name" }

Example of using in the DSL

context { input endpoint: string; output ivr_status: string? = null; } start node root { do //actions executed in this node { #connectSafe($endpoint); // connecting to the phone number which is specified in index.js that it can also be in-terminal text chat wait *; } transitions // specifies to which nodes the conversation goes from here { not_available: goto not_available on #messageHasIntent("amd_not_available"); logic: goto logic on true priority -1; } } node not_available { do { set $ivr_status = "not_available"; exit; } }
Found a mistake? Let us know.

Enroll in beta

Request invite to our private Beta program for developers to join the waitlist. No spam, we promise.