What is DTMF? Tones, frequencies, and voice AI

Rene, Kabir Goel 
What is DTMF? Tones, frequencies, and voice AI

DTMF is the sound of pressing a key on a phone. Each key plays two tones at the same time, one from a low group and one from a high group, and the system on the other end decodes the pair into a digit. The name says exactly that: dual-tone multi-frequency. Bell launched it as Touch-Tone in 1963, and ITU-T Recommendation Q.23 still defines the frequencies.

Sixty-odd years later, DTMF is how callers enter account numbers, skip menus, and type PINs, and how software navigates other software’s phone trees. It’s also a regular source of “the digits worked yesterday” tickets, because on a VoIP call the tones can travel three different ways. This guide covers the tones, the three transports, why digits go missing, and what changes when the thing answering or dialing is an AI voice agent. It’s written for engineers and contact center teams who own a phone flow.

(Looking for Bad Bunny’s “DtMF”? That’s a song on DeBÍ TiRAR MáS FOToS. Wrong page, great record.)

DTMF frequencies

The keypad is a four-by-four grid. Each row has a low frequency, each column has a high one, and a key plays its row and column together.

1209 Hz1336 Hz1477 Hz1633 Hz
697 Hz123A
770 Hz456B
852 Hz789C
941 Hz*0#D

Pressing 5 plays 770 Hz and 1336 Hz. Pressing # plays 941 Hz and 1477 Hz. The fourth column, A to D, was used on military and network equipment and almost never appears on a consumer phone, so in practice you’ll handle twelve keys: 0 to 9, star, and pound.

Two tones instead of one is the clever part. Human speech and music rarely put energy on exactly one low and one high frequency from these sets at the same moment, so a decoder can tell a keypress from a voice. The standard also sets limits on timing and on the volume difference between the two tones, which keeps false detections rare even when someone is talking over the line.

How DTMF travels on a modern call

On a copper landline, DTMF was just audio on the wire. On an IP call there are three options, and the two ends have to agree on one.

MethodHow the digit travelsWhere it breaks
In-band audioThe tones are mixed into the call audio like any other soundCompressed codecs and packet loss distort the tones; a decoder misses digits or doubles them
RTP events (RFC 4733 / 2833)A telephone-event packet in the RTP stream names the digit and its durationOne side sends events and the other only listens for audio
SIP INFOA SIP INFO message on the signaling path carries the digit, outside the audioProxies and carriers that don’t pass INFO through, and timing that drifts from the audio

RFC 4733 replaced RFC 2833 in 2006, but plenty of PBX and carrier settings still say “RFC 2833”. They mean the same option. The RFC explains why it exists in one line: low-rate voice codecs “cannot be guaranteed to reproduce these tone signals accurately enough for automatic recognition.” G.711, the 8 kHz codec most phone calls use, carries tones well. Low-bitrate codecs such as G.729 often don’t.

RTP events are the safe default. They survive any codec, they carry the exact digit instead of a sound to be decoded, and most carriers and platforms support them. LiveKit’s telephony stack, for example, sends DTMF as telephone-event/8000 events.

Why DTMF digits go missing

When keypresses fail on a VoIP call, the cause is usually one of these:

  • Mismatched methods. The carrier sends RFC 4733 events, and the system on the other end only decodes in-band audio, or the reverse. Check the DTMF mode in the SDP offer and answer on both legs of the call.
  • Compressed audio. A leg that transcodes to a low-bitrate codec mangles in-band tones. Switch that leg to RTP events, or keep it on G.711.
  • Double digits. A gateway sends the tone as audio and as an event, and the receiver counts both. “1234” arrives as “11223344”.
  • A media stream that only listens. Some streaming APIs forward keypresses only in certain modes. Twilio Media Streams, for one, sends a dtmf message only on bidirectional streams.
  • Timeouts. The caller pauses between digits, and the system submits a partial entry. Twilio’s <Gather> waits 5 seconds by default and submits on #. Tell callers to press pound when they’re done, and set a digit count when you know it.

The fastest test is a real phone on the real carrier. Call in, press every key, and type a number that has repeats in it. Browser softphones and SIP test clients often negotiate a different method than a mobile phone on the public network.

DTMF and AI voice agents

Voice agents are replacing a lot of “press 1 for billing” menus, but keypads aren’t going anywhere. An agent deals with DTMF in two directions: callers pressing keys at it, and the agent pressing keys at someone else’s system.

Receiving keypresses from callers

Some callers would rather type than talk, and some numbers are easier to type than to say. A 16-digit account number read aloud on a noisy line is a speech recognition test; the same number on the keypad is sixteen unambiguous keypresses. A good agent accepts both, in the same conversation, without a menu.

A few rules make keypad input work with an agent:

  • Wait for the whole entry. A caller types a member ID as a burst. If the agent replies after the first digit, it talks over the rest. Cartesia Managed Agents collect digits until the caller pauses, then pass the entry to the model as one keypad turn, labeled so the model knows the caller typed it rather than said it.
  • Let a keypress interrupt. A caller who starts typing mid-sentence wants the agent to stop talking. On Managed Agents, a keypress cuts off the agent’s reply the same way speech does.
  • Keep secrets away from the model. Don’t collect card numbers or full PINs through the agent at all. Transfer to a payment line that stays inside your PCI scope, and pass back only a token or a result. The banking guide covers this in more detail.
  • Say what to press. “Type your member ID, then press pound” works better than “Please provide your member ID,” because the caller knows both options exist.

On Managed Agents, keypresses reach the agent on calls through Twilio and over the agent WebSocket. If you connect your own client to the WebSocket, forward each keypress as a dtmf_input event:

{ "type": "dtmf_input", "digit": "5" }

Valid digits are 0 to 9, *, and #. On any other telephony path, including a SIP trunk, place a test call and confirm the agent hears keypresses before you build a flow around them.

Sending tones to navigate another phone menu

The other direction is the agent pressing keys. Outbound agents that call insurers, pharmacies, or suppliers spend the first minute of every call in someone else’s IVR. SuperDial, which runs payer calls for healthcare organizations on Cartesia, built IVR navigation into its agents for exactly this reason.

On Managed Agents, turn on the send_dtmf system tool (Send keypad tones in the Playground’s Tools page). The agent can then send one or more tones, such as 12#, when a menu asks for them.

{
	"config": {
		"system_tools": {
			"send_dtmf": {}
		}
	}
}

Phone menus are designed for patient humans, so tell the agent how to behave in them:

  • Listen to the whole prompt before pressing. Many menus ignore input until the prompt finishes, and the option you want is often last.
  • Put known paths in the prompt. “For Acme Health, press 2, then 4, then enter the provider NPI followed by pound.” Dynamic variables can fill in IDs per call.
  • Say nothing while navigating. Speech on the line can confuse a menu that’s listening for tones or for speech. The tool sends tones without the agent narrating them.
  • Plan for the human. When a representative picks up, the agent has to switch from menu mode to conversation. Write that transition into the prompt.

To check that the whole thing works, run the same scenarios you’d use for any phone flow. The IVR testing guide covers scripted keypad paths and how to grade an agent on the outcome.

Where Cartesia fits

Cartesia builds the speech models voice agents run on: Sonic for text to speech and Ink for speech to text. Managed Agents put them in a hosted agent that answers calls on Cartesia numbers, Twilio, or your own SIP trunk, with send_dtmf and transfers built in. Agent calls cost $0.06 per minute, and you can build one in the playground and call it from your phone.

If you only need a fixed keypad menu, a CPaaS like Twilio or your PBX already does that well. An agent earns its keep when callers mix speaking and typing, or when your own calls have to get through someone else’s menu.

FAQs

What is DTMF?

DTMF stands for dual-tone multi-frequency. It's the signaling a phone uses when you press a key: each key plays two tones at once, one low and one high, and the system on the other end decodes the pair into a digit. Bell introduced it as Touch-Tone in 1963, and ITU-T Recommendation Q.23 standardizes the frequencies.

What are the DTMF tone frequencies?

The rows of the keypad use 697, 770, 852, and 941 Hz. The columns use 1209, 1336, 1477, and 1633 Hz. Pressing 5, for example, plays 770 Hz and 1336 Hz together. The 1633 Hz column carries the A, B, C, and D keys, which most phones don't have.

Why doesn't DTMF work on my VoIP call?

Usually the two ends disagree on how to carry it. DTMF can travel as audio in the call, as RTP telephone events (RFC 4733), or as SIP INFO messages. Compressed codecs distort in-band tones, and if one side sends events while the other listens for audio, the digits disappear. Check that both ends negotiate the same method, and prefer RFC 4733 events.

What is the difference between RFC 2833 and RFC 4733?

They describe the same thing. RFC 4733 replaced RFC 2833 in 2006 and defines how to send DTMF digits as named events inside the RTP audio stream. Equipment and carriers still label the setting "RFC 2833", so treat the two names as one option.

Can an AI voice agent detect and send DTMF tones?

Yes, if the platform supports it. On Cartesia Managed Agents, the send_dtmf system tool lets the agent press keys to navigate another company's phone menu, with tones 0 to 9, star, and pound. On Twilio calls and the agent WebSocket, the agent also reads a caller's keypad entry as input and replies to it. Test incoming keypresses on your own carrier path before you rely on them.