OneML
Return XML. Control the live call.
OneML is Signals’ call-control markup language, derived from TwiML and compatible with supported TwiML applications.
Public reference. Self-service onboarding. Live in Nigeria.
OneML document
<Response>
<Say>Your repayment is due tomorrow.</Say>
<Gather numDigits="1" action="/repayment-response" />
</Response>How it works
Your server decides what happens next.
Document lifecycle
Signals requests the configured webhook URL.
Your server returns a <Response> document.
Verbs execute top to bottom.
A verb action can post the result back to your server.
Your server can return the next OneML document.
OneML is not a program that runs on your server. It is a short document your server returns describing what the call should do next.
Parsing is strict. Unknown verbs and attributes are rejected rather than ignored, so a document that relies on an unsupported element will not silently skip it.
Verbs
The documented verb set.
<Say>
Reads text to the caller using the configured voice.
<Play>
Plays an audio file to the caller.
<Gather>
Collects keypad input, speech, or both, and posts the result to an action URL.
<Record>
Records the caller and makes the recording available afterwards.
<Dial>
Connects the caller to another supported destination.
<Redirect>
Transfers call control to another URL that returns the next document.
<Pause>
Waits silently for a set number of seconds before the next verb.
<Hangup>
Ends the call.
<Reject>
Declines an incoming call without answering it.
<Stream>
Streams call media to your service, in one-way or bidirectional mode.
Signals extension
<Disconnect>
Disconnect is a Signals extension with no Twilio equivalent. It exists only in OneML, so a document that uses it is Signals-specific.
Build a simple flow
Say a message, gather one digit, continue.
01 · Signals requests your voice URL
<Response>
<Say>Your repayment is due tomorrow.</Say>
<Gather numDigits="1" action="/repayment-response" />
</Response>02 · Gather posts to the action URL
POST /repayment-response
Content-Type: application/x-www-form-urlencoded
CallSid=CALL_SID
Digits=103 · Your server returns the next document
<Response>
<Say>Thank you. We have noted your response.</Say>
<Hangup />
</Response>Endpoints shown are placeholders on your own server. Each action request carries the Digits field alongside the standard call fields, and your response continues the call.
Media and input
Collect input, or stream the media itself.
Gather
Gather can collect DTMF keypad input, speech, or both. The collected result is posted to the action URL you supply, and your server returns the next document.
Stream
Stream supports the documented bidirectional blocking session using <Connect><Stream>, and one-way non-blocking sessions using <Start><Stream> and <Stop><Stream>.
Compatibility boundaries
Derived from TwiML, not identical to it.
Supported in OneML
- Say, Play, Gather, Record, Dial, Redirect, Pause, Hangup, Reject and Stream.
- The Signals extension Disconnect.
- Gather with DTMF, speech or both.
- Bidirectional and one-way stream patterns as documented.
Requires review before you rely on it
- Verbs, attributes and child elements listed as unsupported in the public matrix.
- SIP targets inside Dial, which are limited to registered extensions in the caller’s own tenant domain.
- Provider-specific Say behaviour and voices.
- Any document that assumes unknown elements will be ignored, since parsing is strict.
The matrix is the authority on what is supported. Check your document against it rather than assuming a TwiML feature carries over.
Next step