Step reference
A flow is a list of steps. There is one kind of step; what it does depends on which cards you fill in. Open a step in the flow editor and you get, top to bottom:
| Card | Answers | Needed? |
|---|---|---|
| General Info | What is this step called? | Always |
| Lookup | Does it fetch data — from your URL or a spreadsheet — before it speaks? | Optional |
| Media | What does the caller hear? | Optional (a step can be silent) |
| Capture input (DTMF) | Does it wait for keypresses? | Optional |
| Routing | Where does the call go next? | Always — it has defaults |
When the call reaches a step, the step does its Lookup first, then plays its Media, then captures input, then routes. Anything a Lookup brings back can change what is played and where the call goes.
General Info
| Setting | What it does |
|---|---|
| Step Name | The name shown in the editor, the flow chart and Call Logs. Rename freely — routes keep pointing at the step. |
| Description | Your own note. |
Each step also has a fixed internal id (step_1, step_2, …) that is never
renamed. That id is what a {placeholder} uses to refer to
an earlier step's answer; the editor inserts it for you when you type { and pick
the step by name.
Lookup
A step can get data before it speaks, one of two ways — pick URL or Smartsheet at the top of the card.
URL
Calls your server and reads its JSON reply. This is the main integration point for developers and has its own page: Step URLs. In short:
| Setting | What it does |
|---|---|
| URL | Your endpoint. May contain {placeholders} — type { for a list. |
| Request Profile | A named, reusable setting for the request: HTTP Method (GET or POST) and Authentication (None, Bearer Token, API Key, Basic Auth). None uses the flow's profile named default if it has one, otherwise a plain GET. + Create New adds one. |
| Body | None, Form or JSON. Only with a POST profile. |
| Route by value (optional) | A field of your reply (xResult, or a dotted path like data.status) whose value picks the next step through Named routes. |
| Save a value to Call History | Response value + Save as: saves a reply field on the call as Flow Data and makes it available to later steps. |
The reply can replace what the step says, fill its placeholders, change how it collects input and decide where the call goes. If the call to your URL fails, the step takes its On error route — which by default hangs up.
Smartsheet
Reads one row of a Smartsheet sheet and routes on a cell in it — for example, find the caller's ZIP code and send them to the right office.
| Setting | What it does |
|---|---|
| Connection | A Smartsheet API token you paste once (+ Connect an account). Used only to read the sheet. |
| Sheet | The sheet to read. |
| Key column | The column searched for the row. |
| Look up | The value to find in Key column — usually an earlier step's answer ({step_2}, the step that asked for the ZIP) or a call value ({callerid}). |
| Route column | The column whose cell, in the matching row, becomes the route name. Match it under Named routes in Routing. |
- A row is found and its cell matches a named route → the call goes there.
- No row matches, or Look up is empty → the step's Default routing. That is a normal answer, not an error.
- The lookup fails (token rejected, column missing, no reply in 8 seconds) → the step's On error.
A step cannot have both a URL and a Smartsheet lookup, and a lookup needs at least one named route.
:::caution A step cannot use its own answer in its Lookup
The Lookup runs before the step collects anything. {digits} or the step's own
id in its URL, Body or Look up can never be filled, and the editor refuses to
save it ("This step's own input isn't ready yet"). Collect the value in an
earlier step and reference that step.
:::
Media
What the caller hears. Add Sound offers four sources: record, upload, pick a sound from your library, or type text-to-speech.
| Source | Played as | {placeholders} filled? |
|---|---|---|
| Recorded, uploaded or library sound | The file, as recorded | No |
| Text-to-speech with a pinned voice, no placeholders | Saved as a recording when you close the sound dialog | No (there are none) |
Text-to-speech containing {placeholders} | Spoken live on every call | Yes |
| Text-to-speech on the Flow default voice | Spoken live on every call | Yes |
Text-to-speech that contains {placeholders} is always kept as live text (the
editor recognises placeholder names that start with a letter or _) — the card
shows "Contains {values} filled in from your API call" — because a recording
would freeze the sample values into every call.
Which audio plays. A step's audio comes from the first of these that exists:
- Text or an MP3 URL returned by the step's URL (
text/mp3). - The step's saved sound.
- The step's own text-to-speech text.
If both an MP3 and text are present (and no saved sound), the MP3 plays first, then the text is spoken. A reply that carries only routing leaves the step's own audio in place. A step with no audio at all is silent and moves straight on.
Voices. A step speaks in its own voice if you pinned one, otherwise in the flow's Default Voice. Set the default once instead of per step. Text is read as plain text — markup is not interpreted. Write numbers, dates and codes the way they should sound (see Placeholders).
Capture input (DTMF)
Turn the card's switch on to wait for keypresses after the step's audio. The caller can press keys during the spoken text or sound — it stops and their keypress counts. An MP3 returned by a step URL is the exception: it plays in full first.
What to collect
| Choice | Settings | The caller… | The answer is |
|---|---|---|---|
| Digits | At least / At most digits | types a code, account number, PIN | the digits as typed, e.g. 004719 |
| Number | Min value / Max value | types a whole number in that range | the number, e.g. 22 |
| Amount | Min / Max in whole dollars | types dollars and cents with no point — 2050 is $20.50 | the amount, e.g. 20.50 |
| Card number | At least / At most digits | types a card number; one that fails the card-number check counts as invalid | the digits |
| Rating | Start from / Up to | presses one value in the range, e.g. 1–5 | the value, e.g. 4 |
- The caller ends a multi-digit entry with
#, or by reaching the maximum length, or by pausing. - Sensitive — don't save or log: the answer is never shown in Call Logs
(only "•••• (16 digits)"), cannot be saved to Call History, and can be used
only inside a step URL's request Body — never in a URL, spoken text or
a lookup. A Body that carries it is sent only over
httpsto the step's own host. Use it with Card number for payments to your own gateway.
Timing
| Setting | Meaning |
|---|---|
| Wait for reply | Seconds to wait for each keypress. The editor starts at 6. |
| Retries | How many times to re-ask after the first ask. The editor starts at 2; 0 asks once. |
Confirmation
Read the answer back repeats the answer and asks the caller to confirm:
Confirmation message defaults to "You entered {digits}. Press 1 to confirm,
press 2 to re-enter." {digits} is read to suit what you collect — digit by digit
for Digits, one number for Number, money for Amount ("$22.50"). Pressing 2 lets
the caller re-enter, which uses up a retry; pressing nothing counts as no
input.
Customer Satisfaction (CSAT) — save the answer
Enable CSAT and give a CSAT name (up to 64 letters, digits, spaces, -
or _; unique within the flow) to save the answer on the call as Flow Data.
It then appears in Call History, its filters and exports, and in Call History
alerts — see Results. For a Rating, CSAT Value Labels let
you name each value ("1" → "Poor"); the label is shown instead of the digit.
Not available on a Sensitive step. Despite the name, any answer can be saved this
way — a confirmation choice, an account number, a menu choice.
Recovery
What happens when the caller does not answer properly.
| Row | When | Settings |
|---|---|---|
| On no input | Nothing pressed in time | Re-ask message (default "Sorry, we didn't get a response"), Action |
| On invalid input | Too few/many digits, out of range, failed card check | Re-ask message (default "Sorry, {digits} is not a valid option." for a range, "Sorry, that's not valid." otherwise), Action |
Before each retry the re-ask message is played, then the step's question again. When the retries are used up, Action decides: Go to Step, Final/Sys (a destination), or Default — the step's On error route.
Routing
Where the call goes after the step.
Match callers by
Pick one rule type; each rule sends a match to Go to Step or Final/Sys.
| Type | A rule matches on | Notes |
|---|---|---|
| Input (DTMF) | The keys pressed: Digit 1, or a range 1-2 | Needs Capture input on. |
| Named routes | An Event name | The value from the URL's Route by value field, or a Smartsheet Route column. |
| Contact tags | A Tag on the caller's contact, or All Contacts | Looks the caller's number up in your contacts. Its Caller ID switch shows the contact's name as the caller ID on your agents' phones. Useful on inbound calls. |
Default routing
Route to — used when no rule matches, and for steps with no rules. Go to Step continues the flow; Final/Sys leaves it for a destination: pick a Type (Extension, Queue, Hunt group, IVR Menu, Mailbox, Flow, Hang up call, …) and a Destination.
On error
Route to — used when the step fails: its URL call fails (no reply within
8 seconds, a connection error, a non-2xx status, an address that is not
allowed), its Smartsheet lookup fails, the Route by value field is missing or
matches no named route, or the step's audio cannot be produced. It is also where
Default sends a caller who ran out of retries.
The editor's default for On error is to hang up, and it warns on a step with a URL: "If this URL fails, the call hangs up. Change On error to send it somewhere else."
Order of decisions
When several things could decide the next hop, the first one that applies wins:
nextUrlin the step URL's reply — the same step runs again against that URL.nextStepin the reply.- A route name — from Route by value, a Smartsheet Route column or a Contact tags match — that matches one of the step's rules.
digitRoutesin the reply, matched against the keys pressed.- The step's own Input (DTMF) rules.
- Default routing → Go to Step.
- Otherwise the call leaves the flow to the Default routing destination
(or
dtype/dnumberfrom the reply).
Limits on loops
One call runs at most 20 steps in total and visits any one step at most 3 times. Past either limit the flow stops, Call Logs records why, and the call goes to the last Default routing destination that was set (not to On error). Plan "press 9 to repeat" menus with that in mind.