Skip to content

Wait Node

A wait node pauses the conversation for a fixed number of seconds, then continues down its single outgoing edge. It takes no turn: the caller is not asked anything and no model is consulted.

Use it when the flow needs a beat that is not a question — after a tool call the caller is waiting on, before repeating a reference number, or to let a transfer announcement land before the transfer happens.

Say something

Silence on a phone line is indistinguishable from a dropped call. A caller who hears three seconds of nothing does not conclude that the system is working — they either talk over the agent when it comes back or hang up before it does.

Set While waiting to say a line, and the pause becomes legible:

While waitingWhat the caller experiences
NothingDead air. Fine below about a second; a dropped call above it.
Say something“One moment, let me pull that up.” Then quiet.
Play a recordingYour own audio — hold music, a branded line.

The line is spoken once at the start of the pause, not on a loop, and it supports {{template_variables}}:

One moment {{first_name}}, I'm checking that now.

Configuration

FieldNotes
Wait for (seconds)0.1 to 30. Anything longer is a caller reaching for the red button — if you genuinely need longer, say something and wait again.
While waitingnone, text or audio.
SayRequired when the mode is text.
RecordingRequired when the mode is audio.

A wait node has exactly one outgoing edge. Two would be a branch with no rules to choose between them — a coin toss dressed up as a flow. Use a Branch when the next step depends on something.

Limits

The engine holds two bounds you cannot exceed from the editor:

  • Any single pause is clamped to 30 seconds, even if an older workflow says otherwise.
  • A call may spend two minutes total in wait nodes. Past that, the call ends and the reason is logged. A cycle through a wait node cannot spin the CPU the way a branch cycle can — it sleeps — which makes it worse, not better: the caller sits on a silent line for as long as the loop runs, slowly enough to look deliberate.

From code

import { wait } from "@decibyl/sdk/typed";
const hold = await wf.addTyped(wait({
name: "Checking",
duration_seconds: 3,
filler_type: "text",
filler_text: "One moment, let me pull that up.",
}));
wf.edge(hold, confirmed, { label: "onward", condition: "after the pause" });

Next