Skip to content

SIP PBX Dial Actions

Andrey Egorov edited this page May 18, 2026 · 5 revisions

Overview

The Dial resource creates, controls, and waits on outbound dial sessions.

Operations

Operation Purpose Output branches
Make Call Create a new outbound dial. Result, plus Unavailable for Mode = Extension
Break Stop an active dial. Result
Wait Event Wait for ringing, progress, answer, reject, fail, or timeout. Dynamic selection plus fixed terminal branches

Common Concepts

Field Meaning
dialId Identifier of the dial session.
legId Master leg returned when the created dial has one immediately available.
stillDialingLegCount Remaining in-progress attempts after a Wait Event result.

Operation: Make Call

Main Parameters

Parameter Required Shown when Description
Mode Yes Always Trunk, Extension, Direct, or WebSocket.
Trunk Ref Yes Mode = Trunk Public trunk ref used for outbound routing.
Destinations Yes Mode = Trunk or Direct Comma-separated phone numbers or SIP users. Do not include server or auth data here.
SIP Connection Yes Mode = Direct SIP credential used for direct outbound signaling.
Extensions Yes Mode = Extension Comma-separated extension numbers. Calls every matching endpoint across all visible extensions refs in the current workflow scope.
Transport Profile Yes Mode = WebSocket OpenAI Realtime, Gemini Live, or Generic.

Common SIP Dial Options

These options are available for Mode = Trunk, Direct, and Extension.

Option Description
Call Strategy All In Parallel or Sequential.
Sequential Attempt Timeout (Seconds) Timeout per sequential attempt.
Sequential Gap (Seconds) Delay between sequential attempts.
Caller Number Outbound caller number override.
Caller Name Outbound caller display name override.
Custom SIP Headers Extra SIP headers applied to outbound SIP attempts.

Direct-Only SIP Media Filters

Option Description
Codecs Allowed SIP audio codecs for this direct dial. This is an allow-list only, not a priority override. The runtime keeps its built-in codec priority.
DTMF Methods Allowed DTMF methods for this direct dial: RFC2833, SIP INFO, Inband. This is a filter only, not a priority override.

Extension-Specific Option

Option Description
Only Free Endpoints If enabled, only endpoints that are registered and not currently in a live call are targeted.

Trigger-Scoped SIP Media Filters

Mode Behavior
Trunk Outbound media filters come from the resolved trunk trigger for the selected Trunk Ref.
Extension Outbound media filters come from the resolved extensions trigger route for each targeted endpoint.
Direct Outbound media filters come from the dial action itself through the direct-only Codecs and DTMF Methods options.

WebSocket Parameters

Shared WebSocket Dial Parameters

Parameter Required Shown when Description
WebSocket Start Mode No Transport Profile = OpenAI Realtime or Gemini Live Immediate starts the provider session as soon as the leg is ready. Deferred waits for Attach Voice Agent.

OpenAI Realtime

Parameter Required Description
OpenAI API Yes OpenAI credential for realtime session setup.
OpenAI Realtime Model No Realtime-capable model used for the session.
OpenAI Realtime Voice No Voice identifier used by the session.
OpenAI Input Transcription Model No Input transcription model for speech-to-text.
OpenAI Instructions No Session instructions prompt.
OpenAI Prompt ID No Prompt registry ID.
OpenAI Prompt Version No Prompt version string.
OpenAI Prompt Variables JSON No JSON object with prompt variables.

Gemini Live

Parameter Required Description
Gemini API Yes Gemini credential for live session setup.
Gemini Live Model No Live-capable Gemini model.
Gemini Live Voice No Voice identifier used by the session.
Gemini Live API Version No API version string.
Gemini Live Instructions No Session instructions prompt.

Generic WebSocket

Parameter Required Description
WebSocket URL Yes Target WebSocket URL.
Generic WebSocket Headers JSON No JSON object with outgoing headers.
Generic WebSocket Initial Messages JSON No JSON array of messages sent immediately after connect.
Generic Outgoing Audio Event Type No Event type used for PBX-to-WebSocket audio.
Generic Outgoing Audio Field No Field name used for PBX-to-WebSocket audio payload.
Generic Outgoing Audio Sample Rate No Sample rate for PBX-to-WebSocket audio.
Generic Incoming Audio Event Types No Comma-separated event types treated as WebSocket-to-PBX audio.
Generic Incoming Audio Field No Field name used for WebSocket-to-PBX audio payload.
Generic Incoming Audio Sample Rate No Sample rate for WebSocket-to-PBX audio.

For WebSocket behavior and AI orchestration, see AI and WebSocket Legs.

Output

Branch Shown when Fields
Result Always dialId, optional legId, optional sipPbx.dialId, optional sipPbx.legId
Unavailable Mode = Extension only reason, message, extensionNumbers

Operation: Break

Parameters

Parameter Required Description
Options -> Dial ID No Explicit dial target. If omitted, resolves from item.json.dialId, then item.json.sipPbx.dialId.
Options -> Reason No User-defined break reason string.

Output

Branch Fields
Result dialId

Operation: Wait Event

Parameters

Parameter Required Description
Overall Timeout (Seconds) No Maximum total wait time before the action takes the Timeout branch.
Master Leg ID No Optional leg retained for the duration of the wait so it does not expire by TTL. Also used as the source of interrupt events for the Interrupted branch.
Interrupt On No Optional wait interrupt signals from the master leg. Currently supports DTMF. This interrupts the wait itself, not the dial.
Additional Outputs No Enables extra branches: Ringing, Progress, Rejected.
Dial IDs No Explicit wait target list. If empty, the node falls back to the current item dial ID.

Output Branches

Branch When it appears
Ringing Only if enabled in Additional Outputs
Progress Only if enabled in Additional Outputs
Rejected Only if enabled in Additional Outputs
Answered Always
Interrupted Always
Timeout Always
Failed Always

Output Payload

Field Meaning
dialId Dial that produced the event.
legId Attempt leg associated with the event, when present.
eventType Dial event type such as ringing, progress, answered, interrupted, rejected, failed, or timeout.
reason Failure or rejection reason when relevant.
interruptReason Present on Interrupted, for example call_dtmf or call_ended.
digit Present on DTMF-based Interrupted.
stillDialingLegCount Number of attempts still in progress after this event.

Interrupted semantics

dial.wait also uses the shared built-in interruptReason catalog, but only the master-leg subset:

  • call_dtmf
  • call_ended
Situation Result
Master leg ends while the wait is active The action takes Interrupted with interruptReason = "call_ended".
Interrupt On includes DTMF and the master leg receives DTMF The action takes Interrupted with interruptReason = "call_dtmf" and includes the detected digit. Queued matching DTMF is observed non-destructively, so a later call.wait on the same leg can still see it.
A matching call_ended or DTMF event was already queued on the master leg before dial.wait started The action can take Interrupted immediately from that queued event. Matching queued call_ended and DTMF events are not consumed by this immediate check.
Interrupt On does not include DTMF and the master leg receives DTMF The wait ignores that DTMF and consumes it from the master leg event queue. A later call.wait will not see it.
The dial itself reaches answered, failed, or timeout first The action takes the corresponding dial branch instead.
The master leg is destroyed while dial.wait is active The action always takes Interrupted with interruptReason = "call_ended", even if Interrupt On is empty or does not include DTMF.

Master-leg ownership note

Master Leg ID affects only the wait itself:

  • it keeps the watched leg retained while dial.wait is active
  • it can interrupt the wait on call_ended
  • it can optionally interrupt the wait on DTMF

It does not stop the dial. If the master leg ends, the dial can continue running unless some other runtime component, such as queue ownership, stops it separately.

Clone this wiki locally