Description
DTMF tones are the beeps a phone makes when you press a key. Two tools let the assistant use them:- DTMF | Send tones — the assistant presses keys on the call. Use it to work through another company’s phone menu (“press 1 for claims”), enter an extension, or answer a “press any key to continue” prompt.
- DTMF | Read tones — the assistant listens for keys the other party presses and saves them to a variable. Use it when a caller should key in a reference number, a date of birth, or a card-style code rather than say it out loud.
result you route on, so a script can recover when the far end does not respond.
DTMF | Send tones
Manual Inputs
Digits
The keys to press. You can use0–9, *, # and A–D (lower case is accepted and treated as upper case).
You can also add pauses, which are waits rather than key presses:
Spaces are ignored. Up to 64 keys can be pressed in one step; pauses do not count towards that. Any other character is rejected and no tones are sent at all, so the step fails cleanly rather than half-dialling.
The field accepts
{{...}} variable references, so the sequence can be built earlier in the call:
Inter-tone gap (ms)
How long to wait between one key and the next. The default of250 is slow enough for most real phone menus. Only lower it (towards 70) for menus you know accept fast entry.
Pre-send delay (ms)
How long to wait before pressing the first key, so a menu prompt can finish speaking before the digits arrive. Around500 is typical when navigating a menu. The default is 0.
Tone duration (ms)
How long each key is held. The default of100 suits most systems. Raise it if the far end keeps missing short presses.
Manual Outputs
Conditions
Success (true) — every tone was played on the call.
Failure (false) — the digit string contained a character that is not allowed (nothing was sent), or the phone platform reported an error. Route this to a step that gives up on the menu and does something else.
Variables this tool writes
Variables this tool writes: none. DTMF | Send tones has no variable namespace of its own and writes nothing to any{{...}} variable. Its only signal is the boolean result you route on, so branch on the step’s Success and Otherwise conditions rather than reading a variable afterwards.
If you want a record of what was pressed, put the sequence in a custom variable of your own before the step and send that variable — for example set {{custom.ivr_digits}} (string, e.g. 2,,1) in a Code Step, then reference it in Digits.
DTMF | Read tones
Manual Inputs
Destination variable
The{{namespace.field}} variable the digits are written into — typically a custom variable such as {{custom.reference_number}}. Type / in the field to insert a variable reference. The variable must already be declared in your account, otherwise the write is dropped.
If the caller presses nothing at all, the variable is set to an empty string. It is never left holding an old value from earlier in the call.
Max digits
The tool stops and returns as soon as this many digits have arrived. Use1 for a menu choice, 6 for a short code, 8 for a date of birth. The default is 1.
First-digit timeout (seconds)
How long to wait for the very first key press. If nothing arrives in this time the tool returnsfalse. The default is 10.
Terminator digit
An optional single key (0–9, *, #, A–D) that ends the capture early — # is the usual choice. The terminator itself is not included in the captured value. Pick a key that cannot appear in the value you are collecting.
Inter-digit timeout (seconds)
Once at least one digit has arrived, the tool ends the capture when this long passes with no further press. Whatever was captured is kept and the tool returnstrue. The default is 5.
Manual Outputs
Conditions
Success (true) — at least one digit was captured before the timeouts ran out.
Failure (false) — nothing at all was pressed within the first-digit timeout. Route this to a step that asks again, or that collects the detail by voice instead.
Variables this tool writes
DTMF | Read tones has no variable namespace of its own. It writes the captured digits into the Destination variable you nominate, and nothing else.
The value is the digit string exactly as pressed, with the terminator digit removed. Leading zeros are kept, so
0412 stays 0412. Because it is written even on failure (as an empty string), you can check it safely in a later step without worrying about a stale value — but still route the Otherwise condition, because an empty string is not a useful answer.
For the full list of namespaces and fields you can write into, see Variables.
Example Usage
Work through another company’s phone menu:Common Issues
- Send returns
falseimmediately — the Digits value contains a character that is not a key or a pause. Check for letters beyondA–D, brackets, or a variable that resolved to text. - The far end misses the digits — raise Tone duration (ms) and Inter-tone gap (ms), and add a Pre-send delay (ms) so the menu prompt has finished.
- Digits land in the wrong menu level — add pause characters (
,,w,W) inside the sequence to wait between menu levels. - Read returns
truewith fewer digits than expected — the gap between presses was longer than the Inter-digit timeout, or the caller pressed the terminator early. - The destination variable stays empty — confirm the variable exists in your account and that you selected it with
/rather than typing it by hand.
Best Practices
- Tell the caller what to do — a short voice step before DTMF | Read tones (“key it in, then press hash”) lifts the success rate a lot.
- Always set a terminator when collecting a value of unknown length.
- Be generous with the first-digit timeout — people take a moment to move the phone from their ear.
- Route the failure path to a voice fallback so a caller on a handset that cannot send tones is not stuck.
- Keep menu sequences in a variable when they differ by client or product, so one step serves every case.
Next Steps
- Tool Steps — Learn how to configure tool steps
- Data Collection - v0.2 — Collect and verify a value by voice instead
- Variables — See all available variables

