# Steps & nodes

> The node reference: dialogue, knowledge, webhook, notify, transfer, wait, end — plus variable extraction, conditional routes, global nodes, and per-step tools.

Every step in a workflow is a node of one of these types. Edges between nodes carry labels ("caller wants delivery") that the AI uses to choose the route; webhook nodes can also route mechanically on response values.

## Node types

| Node | What it does |
| --- | --- |
| Dialogue | The AI speaks for this step — from a per-step prompt, or **exact static wording** when the words are safety- or brand-critical. Can extract typed variables (below). |
| Knowledge | Pins reference material to the step — the menu, the price list, the policy. Only in play on this step, so long documents don't bleed elsewhere. |
| Webhook | Calls any API: method, URL, headers, body with `{{variable}}` interpolation; response values mapped back into variables via JSON paths; **conditional routes** on the result (paid → this way, failed → that way). POST `/crm/ingest` with a [Connections key](/docs/api/crm-ingest) writes a row + deal into the CRM. |
| Send a notification | Email, SMS, WhatsApp, or a help-desk ticket — see [Notifications](/docs/workflows/notifications). |
| Transfer | Hands the call to a human number, with context. On chat, hands to the help desk. |
| Transfer to workflow | Jumps to another workflow — compose big flows from small ones ("refill requests" as its own flow). |
| Wait | Pauses the flow. |
| End | Closes cleanly with a final line. |

## Variables

A dialogue step can declare typed variables — `{name}` (text), `{party_size}` (number), `{is_emergency}` (yes/no) — and the AI extracts them from the conversation. Extracted variables flow into every later step: webhook bodies, notification wording, the deal card. Built-ins are always available: the caller's number, the time, the last user message.

## Global nodes

A **global node** listens across the whole flow, not one position in the graph. The canonical one: *"caller asks for a person"* → transfer. Wherever the conversation is, the escape works. Give every customer-facing flow at least that one.

## Per-step tools

Tick a [tool](/docs/ai/tools) on a step and only that step can use it — booking on the booking step, the POS push on the order step, Stripe lookup on the billing step. Tight scope is what keeps tools from firing at the wrong moment.

> **STATIC TEXT IS A FEATURE, NOT A FALLBACK:** For the shut-off instructions, the allergy disclaimer, the legal line — set the dialogue node to exact wording. The AI reads it verbatim, every time.
