Dial out (conference-first)
Places a call from the phone on this leg to an outside number, conference-first: this leg waits in its own room hearing ringback while the number is calle…
What it does
Places a call from the phone on this leg to an outside number, conference-first
(call-control review F9). This leg waits in its own room conf-<call sid> as the
agent member, hearing ringback, while the walker calls the number into that room as
the customer member. Because the call lives in a room, everything that works on a
softphone's outbound call works on it: hold, blind and warm transfer, consult, 3-way,
"Switch call here", "Move to desk phone", and the desk phone's own Hold and Transfer
buttons.
The order of events:
- The account's calling rules (the dial policy: toll fraud, do-not-originate, the
org's allowlist, suspension) run first. A refusal takes the
refusededge withvars._dialBlockedSpokenset, and nothing is placed. - This leg joins its room (
conference, end-on-exit) and is tagged as theagentside of adesk-outcall. - Only after this leg has entered the room (the room's enter hook) is the number
originated into it, on the org's own Ferivox key, presenting
from. The two legs never join at the same moment. - Ringback plays to this leg until the number answers and joins the room.
- If the number never answers — busy, no answer, not in service, declined, failed —
the
failededge runs withvars._dialOutFailedSpokensaying which, in place of the carrier's own announcement (which never reaches a room). If this leg hangs up while the number is still ringing, the number is cancelled.
Emergency and special numbers (911, 933, 988, 711, in any spelling) never take this
path: the node degrades to a plain dial verb for them, the way every device emergency
call is dialed.
The node is hidden in the editor: the walker builds it for a desk phone's own call to an outside number. Flow Dial nodes stay as they are until they become conference-first too (F9 phase B).
When to use it
- You don't place it yourself: every desk phone's call to an outside number runs it
(
desk_dial_out_flowin the walker).
Configuration
Places a call from the phone on this leg to an outside number, conference-first: this leg waits in its own room hearing ringback while the number is called into it, so the call can be held, transferred, consulted and moved like any softphone call. The account's calling rules run first. Emergency and special numbers (911, 933, 988, 711) are always dialed directly instead.
| Field | Label | Type | Required | Default | Notes |
|---|---|---|---|---|---|
| to | Number | text | Required | +15551234567 | The outside number, in E.164 format. |
| from | Caller ID | phoneNumber | Optional | "" | One of the account's numbers. Defaults to the number that was called. |
| timeoutSecs | Ring timeout | select | Optional | 30 | Options: 30, 45, 60. |
| extensionId | Calling extension | text | Optional | "" | Set by the device path: the extension the call is billed and attributed to. |
| ringback | Ringback | audio | Optional | — | Library audio the phone hears while the number rings. Blank = the platform ringback. |
Outgoing events: refused, failed, completed
Examples
The desk phone's outbound flow
{
"start": "dialOut",
"nodes": [
{
"id": "dialOut",
"type": "dialOut",
"config": { "to": "+18135551234", "from": "+16574397823", "timeoutSecs": 60, "extensionId": "<calling extension id>" },
"on": { "refused": "refused", "failed": "failed", "completed": "end" }
},
{ "id": "refused", "type": "say", "config": { "text": "{{vars._dialBlockedSpoken}}" }, "on": { "next": "end" } },
{ "id": "failed", "type": "say", "config": { "text": "{{vars._dialOutFailedSpoken}}" }, "on": { "next": "end" } },
{ "id": "end", "type": "hangup" }
]
}
Gotchas
- The far leg is the call's billable
customerleg (outbound, with the calling extension); this leg is theagentside and is never billed. - The conversation is anchored on the far leg, exactly like a softphone's outbound call. A refused call has no far leg, so its conversation stays on this leg.
- The far leg's outcome reaches the session wherever its status lands: a status delivered to another walker replica is forwarded to the replica holding this session over the replica bus (docs/architecture/walker-multi-replica.md).
