Skip to main content

Building an IVR Call Flow

Build a Router IVR flow node by node: prompts and audio, business hours, holding callers with Wait for Agent, transfers and voicemail — plus the setup traps that silently drop callers.

An IVR in EnrollHere is a flow you draw. You place nodes on a canvas and connect them, and the shape of that graph is what a caller experiences. That gives you room, and it also means a caller can only go where you have drawn a line.

⚠️ Note: Draw the unhappy paths first. Almost every IVR problem that reaches support is a caller who hit a state nobody wired — nobody answered, the transfer rang out, the caller pressed nothing. Those branches are the ones people skip because the happy path demos fine.


Where the Editor Lives

An IVR lives on a queue whose Queue Type is Router IVR. Only an agency login can create one. Open the queue's settings and choose the IVR tab; the flow editor is embedded there and fills the page. The graph is saved when you save the queue, so a change is not live until you save.

⚠️ Note: Router IVR queues skip the queue-level after-hours settings. On other queue types you can set after-hours behaviour on the Schedule tab and it applies before the call is answered. A Router IVR call does not go through that path, so your after-hours handling has to be drawn into the flow using the Business Hours node.

Templates, or a blank canvas

A new Router IVR queue offers starting templates alongside a Start blank option. Templates are a good way to see how a working flow is wired, but read them before adopting them — some starter templates carry example prompt copy and report labels from the organisation they were originally built for. Rewrite every prompt before the queue takes a live call. Applying a template overwrites the flow on the canvas, so do not apply one to recover a single deleted node.


The Nodes

Every flow begins at a Start node. There is no End node. A flow ends when the caller reaches a terminal node, and there are four: Transfer Queue, Transfer Number, Voicemail and Hangup. If a path runs out of nodes without reaching one, the call ends anyway, just without you having decided how. A valid flow can be as small as Start, one Message, and a Hangup.

These are the nodes you will use building a standard flow. Your palette may show others, including a separate hold-music node; hold music is also built into Wait for Agent, which is where most flows need it.

  • Start — entry point, one per flow.

  • Message — speaks text, or plays audio you uploaded or recorded.

  • Menu Gather — collects a response, by Keypad (DTMF) or Speech (AI Gather). Every digit you configure needs its branch wired or the flow fails validation.

  • Condition — branches on a value without asking the caller anything.

  • Business Hours — branches on whether the queue is open or closed.

  • Timer (Start) — marks where answer-time measurement begins.

  • Wait for Agent — holds the caller on hold music while the system looks for an agent.

  • Transfer Queue — terminal, hands off to another queue.

  • Transfer Number — terminal, dials an outside number.

  • Voicemail — terminal, plays a prompt, beeps and records.

  • Create Task — creates a follow-up task with a due offset.

  • Hangup — terminal, ends the call.

⚠️ Note: Speech (AI Gather) carries an extra billable AI charge. The editor shows a cost warning when you select it. Keypad does not.


Prompts and Audio

A prompt can be spoken text or an audio file. Audio is uploaded per agency: five files per upload, 25 MB each, in mp3, wav, mp4, m4a, ogg or webm. You can also record directly in the editor.

⚠️ Note: If a prompt sounds right in the editor but is silent on real calls, it is an old in-editor recording. Recordings made in the editor before mid-July 2026 were stored in a format the telephony provider can fetch but cannot play, and your browser plays it fine, which is why the preview sounds correct. Newer recordings are converted automatically. There is no bulk fix — re-record it, or upload an mp3.


Business Hours

The Business Hours node branches on whether the queue is currently open, with Open and Closed outputs. You can edit the schedule from inside the node; that editor is not a second copy, it reads and writes the queue's own schedule. The node can also point at a schedule other than this queue's own.

⚠️ Note: Setting weekday hours is not enough — you must also tick Schedule enabled. With the schedule disabled the runtime treats the queue as always open, so every after-hours caller takes the Open branch and waits for an agent who is not there, while your weekday windows sit on screen looking correct. The control is a small checkbox next to the times and there is no warning banner. Make it an explicit line on your go-live check.


Holding the Caller: Wait for Agent

Wait for Agent puts the caller on hold music, looks for an available agent every few seconds, and plays escalation prompts as the wait lengthens.

Tiers

A tier is a milestone in the wait, with a time to fire at, a message to play, and a name that appears in reporting. A typical shape is reassurance at 15 seconds, an apology at 45, and an alternative at 90. Name tiers for what the caller is experiencing, since those names become your report labels.

⚠️ Note: Wait tiers are currently unsafe to edit quickly. There is an open defect where typing in one tier's fields can update a different tier, because the tiers re-sort by fire time on every keystroke. Work around it: enter tiers in ascending order of fire time, set the fire time before the message and name, edit one tier at a time, and save between tiers. Then reload the IVR tab and read every tier back.

Max wait, and where the call goes next

Advanced settings hold a maximum wait. When a caller reaches it the wait ends and the flow continues from the wait-exceeded outcome. If nothing is wired to that outcome, the call hangs up. That is the most common way an IVR drops a caller who did nothing wrong.

⚠️ Note: At time of writing the Wait for Agent node renders no wait-exceeded output port, so this fallback cannot be created or re-routed in the editor. A fix is built and pending release. Until it lands, ask support to wire it. A fallback that was already saved still runs correctly on live calls even though the connection is invisible on the canvas — so if you cannot see an outgoing connection, do not assume there is none and do not rebuild the flow around it.

Handing off to a ring group

A Wait for Agent node can hand off to a ring group queue. The caller stays in the IVR on your hold music and your escalation prompts while the ring group rings its members independently — they do not hear the ring group's own treatment. If the caller hangs up, the wait is exceeded, or an escalation moves them elsewhere, the ring group stops ringing.

A ring group also has its own behaviour once all tiers are exhausted. Decide which of the two owns the final outcome, or you end up with two overlapping ideas of what happens at the end.


Getting the Caller Out

Transfer Number and pull-back

Transfer Number dials an outside number and is terminal on its own. Turning on pull back on no answer changes that: you set how long to ring, and the node gains a no-answer output. If nobody answers in that window the caller comes back into your flow, normally to a voicemail.

  • The destination answers — the transfer succeeds and the IVR session ends. Only a real answer at the destination counts.

  • No answer in time — the caller is pulled back and continues from the no-answer output.

  • The destination rejects or hangs up while pull-back is pending — treated as no answer.

  • The caller hangs up while it is ringing — the call ends. The no-answer path is not taken, because there is nobody to bring back.

⚠️ Note: Do not test pull-back against a number that answers automatically. An auto-answer test line always answers, so it reports success every time and never exercises the path you are checking. Use a real phone you can decline.

Voicemail and callback tasks

The Voicemail node plays your prompt, beeps and records, capped at three minutes by default. The system records the point where the beep ended, so the caller's own words can be located within the recording rather than being buried behind your greeting. A voicemail can also create a task, so it lands in someone's work rather than in a grid nobody opens.

Access to queue voicemails is controlled by tagging — you choose which agent tags can see a given queue's voicemails. Configure this deliberately, because the alternative is that voicemail visibility follows general monitoring access and reaches people you did not intend.


Measuring: the Timer Node

The Timer (Start) node marks where your answer-time clock starts. Place it where the meaningful wait begins, usually after your greeting and any required disclosure, not at the very start of the call — otherwise you are measuring your own recorded message as hold time. A report cannot be built without one.

⚠️ Note: The seconds and the percentage live in different places. The answer-time threshold in seconds comes from the Timer node in the flow, so changing it means editing the IVR. The goal percentage you score against sits in the report. People routinely go looking for one in the place that holds the other.


Before You Go Live

  1. Every path ends at a node you chose: Transfer Queue, Transfer Number, Voicemail or Hangup.

  2. The Wait for Agent max-wait outcome goes somewhere deliberate. This currently needs support to wire it.

  3. Business Hours has Schedule enabled ticked, not just weekday times filled in.

  4. The Closed branch is wired, and you have called out of hours to hear it.

  5. Every configured keypad option has its branch connected.

  6. Every prompt has been heard on a real call, not only in the editor preview.

  7. Template prompt copy has been rewritten in your own words, with no other organisation's name left in it.

  8. Wait tiers were re-read after saving and reloading.

  9. Transfer pull-back was tested against a phone you declined.

  10. A Timer (Start) node sits where you want measurement to begin.

  11. Voicemail access tags are set so the right people see the messages.

  12. You have called the number yourself, once during hours and once outside them.

Callers pressing a key while on hold is not yet released. An escalation prompt can say press one and nothing will be listening, so check current release notes before recording a prompt that offers it.


Related Guides

Did this answer your question?