Flow Node Reference
This is the complete reference for the 19 node types in the call-flow DSL. Each node’s data object is discriminated by its kind. The outcomes column lists the sourceHandle values you can draw edges from.
{ "kind": "entry", "trigger": "inbound" }| Field | Type | Notes |
|---|---|---|
trigger | "inbound" | "internal" | "api" | How the flow was entered. |
Outcomes: default.
Play a pre-recorded audio file (a media_file).
{ "kind": "play", "audioId": "welcome-msg" }| Field | Type | Notes |
|---|---|---|
audioId | string | Media id to play. |
Outcomes: default.
Speak text via TTS.
{ "kind": "say", "text": "Thanks for calling.", "voice": "en-US-neural-male" }| Field | Type | Notes |
|---|---|---|
text | string | Text to synthesize. |
voice | string? | Optional voice override. |
Outcomes: default.
Menu (IVR)
Section titled “Menu (IVR)”Play a prompt and branch on a DTMF keypress. Re-prompts on invalid/timeout up to the configured limits.
{ "kind": "menu", "promptText": "Press 1 for sales, 2 for support", "maxDigits": 1, "timeoutSec": 5, "maxFailures": 2, "bargeIn": true }| Field | Type | Notes |
|---|---|---|
promptAudioId / promptText | string? | First-entry prompt (audio or text). |
repromptAudioId | string? | Played on re-prompt. |
invalidAudioId | string? | Played before re-prompt on an unmapped key. |
minDigits / maxDigits | number | Digit count bounds (maxDigits required). |
terminators | string? | e.g. "#". |
timeoutSec | number | First-digit wait. |
interDigitTimeoutSec | number? | Wait between digits. |
maxFailures / maxTimeouts | number? | Give-up counters. |
bargeIn | boolean? | A keypress interrupts the prompt (default true). |
Outcomes: digit:0 … digit:9, digit:*, digit:#, timeout, invalid.
Collect
Section titled “Collect”Capture digits into a variable (PIN, account number), with optional regex validation.
{ "kind": "collect", "variable": "account_no", "maxDigits": 8, "terminator": "#", "regex": "^[0-9]{6,8}$", "maxTries": 3 }| Field | Type | Notes |
|---|---|---|
variable | string | Flow variable to store the digits in. |
promptAudioId / repromptAudioId / invalidAudioId | string? | Prompts. |
minDigits / maxDigits | number | Bounds. |
terminator | string? | e.g. "#". |
timeoutSec / interDigitTimeoutSec | number? | Timeouts. |
regex | string? | Validation pattern. |
maxTries | number? | Retry budget. |
bargeIn | boolean? | Interrupt the prompt. |
Outcomes: valid / default, invalid, timeout.
Dial a single target and bridge.
{ "kind": "dial", "target": "1001", "targetType": "user", "timeoutSec": 25 }| Field | Type | Notes |
|---|---|---|
target | string | User, extension, or PSTN number. |
targetType | "user" | "extension" | "pstn" | What target is. |
timeoutSec | number | Ring timeout. |
Outcomes: answered, no_answer, busy.
Ring Group
Section titled “Ring Group”Fork to the members of a ring group.
{ "kind": "ringGroup", "ringGroupId": "rg_01jdr70g9apz69vke5at748d47", "strategy": "ring_all", "timeoutSec": 25 }| Field | Type | Notes |
|---|---|---|
ringGroupId | string | The ring group to fork to. |
strategy | "ring_all" | "sequential" | "round_robin"? | Overrides the group’s strategy. |
timeoutSec | number | Overall ring timeout. |
Outcomes: answered, no_answer.
Enqueue
Section titled “Enqueue”Place the caller into an ACD queue.
{ "kind": "enqueue", "queueId": "q_01j160r23gw5zkpfjme3fwzs5k", "priority": 0 }| Field | Type | Notes |
|---|---|---|
queueId | string | The queue to join. |
priority | number? | Higher priority is served first. |
Outcomes: answered (bridged to agent), abandoned (caller hung up), timeout (max-wait exceeded), no_agents (no viable agent, overflow immediately), queue_full (at max_queued, deflected at join), ewt (estimated wait over threshold, deflected at join). See Overflow & Exit Destinations.
Voicemail
Section titled “Voicemail”Record a message to a mailbox.
{ "kind": "voicemail", "mailboxId": "vm_01jg8asp59ps9rtt7azhrhvcre", "greetingAudioId": "vm-greeting" }| Field | Type | Notes |
|---|---|---|
mailboxId | string | The voicemail box. |
greetingAudioId | string? | Custom greeting. |
Outcomes: recorded, no_message.
Conference
Section titled “Conference”Join a conference room (the media engine the conferencing module, also the 3-way primitive).
{ "kind": "conference", "roomId": "team-standup" }| Field | Type | Notes |
|---|---|---|
roomId | string | Conference room id. |
Outcomes: ended.
Forward
Section titled “Forward”Forward to an external number. See Call Forwarding for triggers, screening, and overflow.
{ "kind": "forward", "number": "12025550100", "cidMode": "did", "timeoutSec": 30, "confirm": true }| Field | Type | Notes |
|---|---|---|
number | string | E.164 destination (dialed via outbound routing). |
cidMode | "passthrough" | "did" | Caller-ID presentation. |
timeoutSec | number | Ring time before no-answer. |
confirm | boolean | Press-1 screening on the answered leg; unconfirmed → the overflow edge. |
Outcomes: answered, no_answer.
Transfer
Section titled “Transfer”Transfer the call. For agent-initiated blind/attended transfers, see Call Transfer.
{ "kind": "transfer", "target": "1002", "mode": "blind" }| Field | Type | Notes |
|---|---|---|
target | string | Transfer destination. |
mode | "blind" | "attended" | Transfer mode. |
Outcomes: default.
Set Variable
Section titled “Set Variable”Set a flow variable.
{ "kind": "setVar", "variable": "tier", "value": "gold" }Outcomes: default.
Condition
Section titled “Condition”Branch on an expression evaluated against the flow’s variables. Resolved inside the stateful edge object (no edge round-trip).
{ "kind": "condition", "expr": "tier == 'gold'" }Outcomes: true, false.
HTTP Request
Section titled “HTTP Request”Call an external API and branch on the result. Resolved inside the stateful edge object (the session object performs the fetch directly).
{ "kind": "httpRequest", "url": "https://api.example.com/lookup", "method": "GET", "saveAs": "lookup" }| Field | Type | Notes |
|---|---|---|
url | string | Endpoint. |
method | string | HTTP method. |
saveAs | string? | Save the response into this variable. |
Outcomes: 2xx, error.
Time Condition
Section titled “Time Condition”Branch on a business-hours schedule. Resolved inside the stateful edge object.
{ "kind": "timeCondition", "scheduleId": "sch_01j0jvpe0wzc6g05bktfew0xyx" }| Field | Type | Notes |
|---|---|---|
scheduleId | string | The time_schedule to evaluate. |
Outcomes: in_hours, out_of_hours, holiday (falls back to out_of_hours if undrawn).
Callback
Section titled “Callback”Request a callback (enqueue a dialer lead). Designed; currently falls through to default.
{ "kind": "callback", "listId": "pl_01jnk3j4cb1v4bd8hnydh0vsn0" }Outcomes: default.
Last Called User
Section titled “Last Called User”Route a repeat caller back to their previous agent (sticky agent). Designed; currently falls through to default.
{ "kind": "lastCalledUser", "timeframeMin": 1440, "fallbackNodeId": "supQ" }Outcomes: routed, none.
Hangup
Section titled “Hangup”End the call.
{ "kind": "hangup", "cause": "normal_clearing" }| Field | Type | Notes |
|---|---|---|
cause | string? | Optional SIP/Q.850 cause. |
Outcomes: terminal (no outgoing edges).