Call Control
Write the markup.The call follows it.
Script what happens on a call with simple markup your server returns. Play a prompt, gather digits, dip into your own API and route to a queue, one instruction at a time. Voice only, versioned v0.x.
// your answer URL returns{ "instructions": [{ "play": { "text": "Welcome to Acme support." } },{ "gather": { "num_digits": 1, "timeout": 6,"action_url": "https://your.app/menu" } },{ "dial": { "queue": "support" } }] }
The same document as a flow: TelVox fetches your answer URL, then runs each instruction in order. Play speaks the prompt, gather collects a digit, dial sends the caller to the support queue.
now executing · answer_url
When a call connects, TelVox fetches your answer URL. The JSON document it returns is the flow: each instruction runs as a node in the same 12-node IVR engine that TelVox Dial ships.
The primitive catalog
Twelve nodes, composable from code.
The call-control document is a list of instructions. Each one maps to a real node in the engine, so what you can draw in the visual builder you can also express programmatically.
Play and gather
Speak prompts and collect DTMF input. The play and gather primitives map straight to the engine's play and collect nodes, so a menu takes a handful of instructions.
Live data-dip
Call your own API mid-call and branch on the answer. The api_call node fetches account context and the condition node routes on it, so a flow personalizes without leaving the call.
ACD queues
Enqueue callers and distribute to agents with FIFO or longest-idle selection, music on hold, max-wait and max-size limits, and overflow audio. It's the real Redis-backed queue engine.
Conference and bridge
Bridge legs together or drop callers into a conference. Built on the same ARI snoop-and-bridge that powers Dial's supervisor barge, transfer and conference.
Transfer and callback
Hand a call to another number, agent or flow, or schedule a callback so a caller keeps their place without holding the line. Both are shipped IVR nodes.
Voicemail and business hours
Route to voicemail after hours and gate flows on a business-hours schedule. The voicemail and business-hours nodes are first-class in the engine.
Live data-dip
Look up, then route, mid-call.
The api_call node fetches context from your own systems while the caller waits, and the condition node branches on it. Personalize a flow without bouncing the caller out of the call.
// api_call node: branch on an external API mid-call
{
"api_call": {
"method": "GET",
"url": "https://your.app/crm/lookup",
"query": { "phone": "{{call.from}}" },
"timeout": 4,
"save_as": "account"
}
}// branch on what came back
{
"condition": {
"when": "{{account.tier}} == 'gold'",
"then": { "dial": { "queue": "priority" } },
"else": { "dial": { "queue": "support" } }
}
}Honest about what's shipped
Real engine today. Programmable markup in preview.
These flows run today on Dial's visual IVR builder, the Redis-backed ACD queue and the ARI bridge and conference engine. The JSON call-control API is versioned v0.x, and the declarative VoxML markup dialect is roadmap only. Every artifact here is illustrative and may differ at GA.
Queues and conferences have their own reference resources: see the Queue & Members reference and the Conference & Queue reference.
<!-- VoxML markup: ROADMAP, illustrative only -->
<Response>
<Play>Welcome to Acme support.</Play>
<Gather numDigits="1" timeout="6"
action="https://your.app/menu" />
<Dial>
<Queue>support</Queue>
</Dial>
</Response>Questions
Call control FAQ
Straight answers on the markup, the engine underneath it, and what's preview versus shipped.
The JSON call-control document is the primary, preview model: your answer URL returns an instructions array (play, gather, dial, record, hangup) and TelVox executes it. VoxML is a declarative XML markup dialect, the genre convention familiar from other CPaaS platforms, and it's roadmap only. Both are illustrative until GA.
Get started
Build the flow your product needs.
Sign up and we'll map your IVR, queue and conference flows onto the call-control primitives.