-
Notifications
You must be signed in to change notification settings - Fork 0
SIP PBX Call Actions
Andrey Egorov edited this page May 18, 2026
·
4 revisions
The Call resource contains operations that act on live PBX legs.
| Operation | Purpose | Output branches |
|---|---|---|
Ringing |
Start ringing for a leg. | Result |
Answer |
Answer a leg. | Result |
Hangup |
Hang up a leg. | Result |
Bridge |
Connect two live legs. | Success |
Unbridge |
Break an existing bridge and emit both sides. |
Orig, Peer
|
Wait Event |
Wait for DTMF, interruption, timeout, or end. | Dynamic rule branches plus static tail |
Unless an operation explicitly asks for different fields, call actions resolve legId in this order:
- explicit
Options -> Leg ID item.json.legIditem.json.sipPbx.legId
| Parameter | Required | Description |
|---|---|---|
Options -> Leg ID |
No | Explicit target leg. Required only when the input item does not already carry a leg ID. |
| Branch | Fields |
|---|---|
Result |
legId |
| Parameter | Required | Description |
|---|---|---|
Options -> Leg ID |
No | Explicit target leg. Required only when the input item does not already carry a leg ID. |
| Branch | Fields |
|---|---|
Result |
legId |
| Parameter | Required | Description |
|---|---|---|
Options -> Leg ID |
No | Explicit target leg. Required only when the input item does not already carry a leg ID. |
| Branch | Fields |
|---|---|
Result |
legId |
| Parameter | Required | Description |
|---|---|---|
Leg A ID |
Yes | First live leg to bridge. |
Leg B ID |
Yes | Second live leg to bridge. |
Options -> Emit DTMF Events |
No | If enabled, the bridge still emits DTMF events into the workflow event stream. |
Options -> Relay DTMF |
No | DTMF relay method: Disabled, Auto, RFC2833, SIP INFO, Inband. |
| Branch | Fields |
|---|---|
Success |
legIdA, legIdB
|
| Parameter | Required | Description |
|---|---|---|
Options -> Leg ID |
No | Explicit target leg. Required only when the input item does not already carry a leg ID. |
| Branch | Fields |
|---|---|
Orig |
legId of the leg you asked to unbridge. |
Peer |
legId of the bridged peer, when present. |
| Parameter | Required | Description |
|---|---|---|
Overall Timeout (Seconds) |
No | Maximum total wait time before the action takes the Timeout branch. |
DTMF Rules |
No | Fixed collection of Pattern + Label. Each label becomes its own output branch. |
DTMF Fallback |
No | If enabled, unmatched digits are emitted to a generic fallback branch. |
Multi-Digit DTMF Fallback |
No | If enabled, fallback capture continues across multiple digits until timeout or terminator. |
Terminator Digit |
No | Single digit that finalizes multi-digit fallback capture. |
Leg IDs |
No | Explicit wait target list. If empty, the node falls back to the current item leg. |
Options -> Interrupt On |
No | Multi-select allow-list for leg interrupt reasons. If empty, call.wait ignores interrupt events, removes them from the leg event queue, and does not show the Interrupted branch. |
Options -> Clear Queued DTMF |
No | If enabled, drops queued DTMF events before the wait starts. Use this when the action should react only to newly entered digits. |
Options -> Interdigit Timeout (Seconds) |
No | Timeout between digits during fallback capture. |
| Branch | When it appears | Meaning |
|---|---|---|
<Rule Label> |
One per rule | Emitted when the received DTMF matches that rule's pattern. |
DTMF Fallback |
DTMF Fallback = on |
Emitted for unmatched digits. |
Interrupted |
Options -> Interrupt On is not empty |
Emitted when a leg-level interrupt event reaches the waited leg and its reason is selected in Interrupt On. |
Timeout |
Always | Emitted when overall timeout expires. |
Ended |
Always | Emitted when the leg ends. |
| Branch | Typical fields |
|---|---|
<Rule Label> |
legId, eventType = "dtmf", digits or matched digit payload, label
|
DTMF Fallback |
legId, eventType = "dtmf", digits
|
Interrupted |
legId, eventType = "interrupt", reason
|
Timeout |
legId, eventType = "timeout"
|
Ended |
legId, eventType = "ended", optional reason
|
Current runtime reasons for call.wait -> Interrupted are:
These values come from the shared built-in interruptReason catalog. call.wait uses only the bridge and queue subset of that global list.
If Interrupt On is empty, these events are consumed and ignored by call.wait. They do not terminate the wait and they do not remain queued for a later call.wait.
reason |
When it happens |
|---|---|
call_bridge_joined |
The leg was joined into a bridge by call.bridge. |
call_bridge_removed_peer_ended |
The leg survived an active bridge, but the other side of that bridge ended later. |
call_bridge_removed_unbridge |
The leg was detached from a bridge by explicit call.unbridge. |
call_bridge_removed_rollback |
Bridge activation had to be rolled back after a transport failure. |
call_bridge_removed_rebridge |
The leg was detached from its previous bridge because a new call.bridge re-used that leg. |
call_queue_placed |
The leg was placed into a queue by queue.putLeg or by queue rejoin. |
call_queue_removed |
The leg left a live queue because it was removed, taken by dispatch, or finalized offline. Enabling callback does not emit this signal by itself, and when the leg itself ends that path stays Ended. |