Enable DTMF support for your voice-enabled copilot

Instead of relying on voice responses, dual-tone multi-frequency (DTMF) allows you to ask your copilot users to use their phone keypad to select options or provide information.

You can set up a global command triggered at any point in the conversation if the copilot user enters a specified single-digit key. Within individual topics, you can add DTMF input recognition for the responses provided in a Question node.

You can configure what key should be pressed for each option that the user can input and how long the copilot should wait before parsing the user's input.

If the key input by the copilot's user isn't mapped to the node's options, the copilot repeats the question or message and encourages the user to try again.

If the key input by the copilot's user isn't mapped to the DTMF global triggers, the copilot triggers the System topic, Unknown dialpad press trigger (voice). You can customize it for your business logic.

Screenshot of the System topic Unknown dialpad press option.

Enable DTMF support in a topic's node

  1. With the topic you want to use as the global DTMF response open for editing, select the Trigger node.

  2. Hover over or long select on the side of the Trigger node (where the current type of trigger is displayed) to see the Change trigger icon.

  3. Select the icon and then enter "DTMF" to choose DTMF global command received.

    Screenshot of the DTMF global command received icon.

  4. Select Edit and in DTMF received properties, specify the type of recognized DTMF input, along with any conditions for the trigger, and its priority.

    Screenshot of the Change trigger window with the DTMF global command received option selected.

  5. With a Question node selected, under the Identify section, select the type of entity that the copilot should be identifying. Different entity types have distinct characteristics for supporting DTMF tones:

    Entity (under Identify) DTMF support Details
    Multiple choice options ✔️ Manually assign a DTMF key to each option
    Options from a list variable ✔️ Automatically assign DTMF keys for each option
    User's entire response 🔢 Can accept multi-digit DTMF input
    Age 🔢 Can accept multi-digit DTMF input
    Boolean ✔️ Automatically assign DTMF keys for each option
    City ✖️ DTMF not supported
    Color ✖️ DTMF not supported
    Continent ✖️ DTMF not supported
    Country or region ✖️ DTMF not supported
    Date 🔢 Can accept multi-digit DTMF input
    Date and time ✖️ DTMF not supported
    Data and time without timezone ✖️ DTMF not supported
    Duration ✖️ DTMF not supported
    Email ✖️ DTMF not supported
    Event ✖️ DTMF not supported
    Language ✖️ DTMF not supported
    Money 🔢 Can accept multi-digit DTMF input
    Number 🔢 Can accept multi-digit DTMF input
    Ordinal 🔢 Can accept multi-digit DTMF input
    Organization ✖️ DTMF not supported
    Percentage 🔢 Can accept multi-digit DTMF input
    Person name ✖️ DTMF not supported
    Phone number 🔢 Can accept multi-digit DTMF input
    Point of interest ✖️ DTMF not supported
    Speed 🔢 Can accept multi-digit DTMF input
    State ✖️ DTMF not supported
    Street address ✖️ DTMF not supported
    Temperature 🔢 Can accept multi-digit DTMF input
    URL ✖️ DTMF not supported
    Weight 🔢 Can accept multi-digit DTMF input
    Zip code 🔢 Can accept multi-digit DTMF input

Assign DTMF keys

For some entity types, you can specify if the options provided by the copilot to the user are mapped to a DTMF key:

  • For the Multiple choice options entity, manually assign DTMF keys to each option by selecting the Assign DTMF keys to options checkbox. When this checkbox is selected, you see an icon representing a phone's keypad next to the Options for user heading.

    For each option you add, select the - icon and specify the DTMF signal that the option should be mapped to.

    Screenshot of the entire question node.

  • For the Options from a list variable and Boolean entity types, the DTMF keys can be automatically assigned to each option.

    The copilot assigns keys in the order that the options are in, from 0 to 9.

You can have the copilot automatically read out the mapped options:

  1. Select the More icon () of the Question node you want to configure, and then select Properties. The Question properties panel appears.

  2. Select Entity recognition, and then select whether the copilot should read out the options to the copilot user.

Multi-digit DTMF input

For entities that support multi-digit DTMF input, you can specify if there should be a minimum or maximum number of digits in the copilot user's valid response. These multi-digit DTMF input entities include most entity types that extract a number from the copilot user's input. You can specify a range for the number of digits that are considered valid (such as "2-5"), or a fixed length (such as "5").

Screenshot of the number of digits (DTMF only) option shown on a question node.

If the entered response from the copilot user has fewer or more digits than specified, then the copilot repeats the question.

If you don't specify the number of digits, then the copilot accepts any length of digits and continues the topic's flow.

You can also specify if the copilot should wait for a specific "termination" key to be pressed to indicate the copilot user finished entering their response. You can select no key, the asterisk key (*), or the hash key (#). The termination character is optional, and isn't included when counting the length of the input.

Copilot-level DTMF recognition

You can configure what key should be pressed for each option that the user can input and how long the copilot should wait before parsing the user's input.

Important

The DTMF received trigger can only accept single DTMF keys. The trigger won't be called if the copilot user enters the key when responding to:

  • A Question node that accepts multi-digit DTMF
  • A Question node that accepts single-digit DTMF where one of the allowed options is mapped to the same key
  1. With the topic you want to use as the global DTMF response open for editing, select the Trigger node.

  2. Hover or long-select on the side of the Trigger node (where it shows the current type of trigger) to see the Change trigger icon.

  3. Select the icon and then choose DTMF global command received.

    Screenshot of the Change trigger panel with DTMF global command received highlighted.

  4. In the DTMF received properties panel that opens, specify the DTMF input that should be recognized along with any conditions for the trigger and its priority.

DTMF caching

DTMF caching allows a copilot user to input keys without waiting for each question or prompt from the copilot. For example, caching is useful for copilot users who are familiar with the copilot's usual conversation path, and want to go straight to a specified menu.

With DTMF caching, each key press is cached in series, and automatically input for each consecutive prompt.

For a single-digit DTMF node, all keys input after the first one are cached for the next turn.

For multi-digit DTMF nodes, the copilot follows a set of rules that determine how and what to cache based on these settings:

Scenario Digit length Condition User input Outcome
Copilot author didn't set a termination character so the timeout is ignored. When the user hits the max length, the key after max length (the last digit) is cached for the next turn. 3 Term time is 0 or Term key is none 1, 2, 3, 1, ... The first three digits are returned immediately, while the fourth digit is cached for the next turn.
Copilot author set the termination character. The key input after timeout is cached for the next turn. 3 Term key is # 1, 2, 3, 1 The first three digits wait for the termination timeout before being returned. The fourth digit is cached for the next turn.
When the user hits the max length, the termination timeout runs. 3 Term key is # 1, 2, 3, then during the timeout window, 1 The first four digits are returned; however as this question only accepts three digits, the entire input sequence is considered to be invalid, and the copilot reprompts the question.
User doesn't hit the max length (valid length). The key input after the interdigit timer is cached for the next turn. 2-5 Doesn't matter if a term key is defined 1, 2, 3, then after the timeout, 1 The first two digits wait for the interdigit timer before being returned, and the third and fourth digits are cached for the next turn.

DTMF caching is handled in the following ways:

  • If the next turn doesn't allow barge-in, the cached key is dropped.
  • If the next turn allows barge-in, the key is handled according to its flow:
    • If the flow consists of multiple message nodes, but is followed by a multi-DTMF question node, keys are cached for this multi-DTMF question only. The global DTMF topic aren't triggered.
    • If the flow consists of multiple message nodes, but is followed by a single DTMF question node, the key is cached for a single DTMF key. Also, the DTMF global topic is cached. However, if they overlap, the single DTMF question node wins.
    • If the flow consists of multiple message nodes without any question, the key is cached for the DTMF global topic.

Tip

To avoid accidental caching, do the following:

  • Place the node with the barge-in disabled message right after the question node.
  • Use a multi-DTMF question node with a longer term timer (notice this increases the latency to the end user if the user doesn’t input a termination key).