IVR Studio

"Press 1 for your booking." Ask the caller for a reference, look it up in your own system while they wait, and read the answer back in a real voice.

TL;DR

  • What it is — a visual builder for call flows. A flow is a diagram of steps: play something, collect digits, check a condition, call your API, then route. Drafts are private until you publish, and you can test one against a pretend caller without dialling in.
  • Who it's for — admins who have outgrown a fixed menu tree — anyone whose callers ask questions the answer to which lives in another system.
  • Top outcome — callers who used to wait for an agent to look something up now hear the answer in seconds, and the ones who still need a person arrive at the right team already identified.

At a glance

Plan tierIncluded with every Lodgestory Voice plan.
Who can manageAccount Owners and Admins build and publish flows. Callers experience them.
Caller inputKeypad only — digits 0–9, * and #. Speaking an answer is not supported yet.
Step typesPlay, Menu, Collect digits, Language, Set value, Condition, Business hours, Caller lookup, Fetch data, Send WhatsApp, and routing to a department, agent, extension, external number, voicemail, AI agent, another flow, a classic menu, or hang up.
VoicesText-to-speech in the voice you choose, per language, or your own uploaded audio.
VersionsEvery publish is a numbered version. The live version keeps answering calls while you edit the draft.
TestingA built-in simulator runs the flow against a pretend caller, with your API calls either live or mocked.
Limits500 steps per flow. A flow may hand a call to another flow, up to a small chain depth.

How to find it

Sidebar: Settings → Calling → [your account] → IVR Studio.

Direct URLs:

  • Flow list: /crm/settings/calling/{accountId}/ivr-flows
  • Flow builder: /crm/settings/calling/{accountId}/ivr-flows/{flowId}

📸 [SCREENSHOT: ivrstudio-list.png — flow list with LIVE and DRAFT badges and the "Used by" line]

IVR Studio or Voice Menus?

Both are supported and they sit on separate tabs. Neither replaces the other, and a flow can hand a call to a classic menu.

Voice Menus (classic)IVR Studio
ShapeA tree of menus and keysA diagram of steps
Caller inputOne keypress per menuOne keypress, or a multi-digit entry like a booking number
Can it look something up?NoYes — your own API, mid-call
Can it say something it was not told in advance?NoYes
Editing safetySaves apply immediatelyDrafts are private until published
TestingPlace a real callSimulator, no call needed

Use Voice Menus when the whole job is "send this caller to the right team."

Use IVR Studio when the caller needs to be asked something, recognised, or told something that changes call to call.

Building a flow

1. Start from a template, or empty

The list page offers templates for the common shapes — a reception menu, a booking lookup, an after-hours flow. Each opens as an ordinary draft you can rewire. Nothing you do reaches a caller until you publish.

2. Drag steps onto the canvas

Each step has exits — the ways a caller can leave it. A Menu has one per key, plus separate exits for nothing pressed and wrong key. Connect every exit you care about: an unconnected exit on a live flow is silence on an open line, so publishing refuses until they lead somewhere.

📸 [SCREENSHOT: ivrstudio-canvas.png — canvas with a menu, a collect step and a fetch step wired together]

3. Write what the caller hears

Any prompt can be typed text spoken by a chosen voice, or a file from your media library. Text can include values picked up earlier in the call, and you can control how each one is read aloud:

Say it asLMV-8821 becomesUse it for
Reference"L M V, 8 8 2 1"booking and order numbers
Digits"8 8 2 1"codes, PINs, room numbers
Number"eighty-eight twenty-one"counts and quantities
Money"two lakh fifty thousand rupees"amounts, in Indian or Western grouping
Date / Time"the twentieth of September"check-in dates, appointment times
Phoneread in the local groupingnumbers read back to the caller

Prompts can have a version per language. A Language step early in the flow lets the caller choose, and every later prompt follows that choice automatically — so one flow serves every language instead of a parallel copy per language.

4. Ask for something

Collect digits takes a multi-digit entry — a booking reference, a room number, an order id — with a minimum and maximum length and an optional read-back: "I heard 8 8 2 1. Press 1 if that is right, 2 to enter it again." On a keypad that read-back is what stops a mistyped digit sending someone down the wrong path.

Mark a value sensitive and it is masked everywhere afterwards — in the call's journey, in webhooks, and in logs.

5. Look something up

Fetch data calls one of the APIs already saved under Settings → APIs. Under What to send it the step lists every part of that API a call can fill: any {{blank}} the API declares, the :segment parts of its address, its query parameters and its body fields (for POST, PUT and PATCH). Put a call value in any of them — {{ caller.number }} for the number the call came from, {{ vars.bookingId }} for digits a Collect step gathered — and it replaces the value the API was saved with, on this flow only. Leave a field empty to keep what the API has; a value that turns out empty on a call is sent empty, never the saved sample. You can also add query or body fields the API does not list yet, and a body field that is exactly one {{ value }} keeps that value's type. Then map fields of the response onto names you can use later. Every step after it can branch on what came back, or read it aloud. The simulator shows exactly what each lookup sent.

Caller lookup recognises the caller from your CRM contacts before they press anything — so the flow can greet them by name, take a VIP straight to a person, or refuse a blocked number.

If the lookup fails or times out, the flow takes its failure exit. Callers never hear the difference between "we could not reach the system" and dead air unless you write a prompt for it, so write one.

6. Decide and route

Condition compares values and takes the first matching branch. Business hours follows one of your schedules and has an exit for Open, Closed, each named period and — optionally — Holiday. Without a Holiday exit, holiday callers take Closed. The step reads the schedule's own time zone, not the flow's, and respects Close now. Then route the call — to a department queue, a specific agent, an extension, an outside number, voicemail, an AI voice agent, another flow, or a classic menu.

Send WhatsApp messages the caller an approved template while they are still on the line — a payment link, directions, a confirmation. The call carries on without waiting for it, and the message respects the same opt-out and daily limits as every other automated message you send.

Testing before anyone calls

Open Simulate in the builder, enter a pretend caller number and press keys. You see each prompt with real values filled in, which branch was taken and why, and how long each step took.

A flow with a Business hours step can be tested for any moment: tick Test business hours as if it were another time and enter a date and time — the evening of a holiday, a Sunday morning. They are read on each schedule's own clock.

By default your APIs are mocked, so simulating costs nothing and cannot change live data. Switch a step to live when you want to see a real response. A WhatsApp send is never live in a simulation.

📸 [SCREENSHOT: ivrstudio-simulator.png — simulator panel with the path lit up on the canvas]

Publishing, and going back

Publishing creates a numbered version and makes it the one callers reach. Editing afterwards changes only your draft — a call already in progress finishes on the version it started on, and new calls keep reaching the published one until you publish again.

Version history lists every publish with its date and notes, and you can restore an earlier one, which publishes it again as a new version. Nothing is overwritten.

Pointing a number at a flow

A published flow does nothing until something sends calls to it. Set it as the routing destination of:

  • a phone number (Settings → Calling → Numbers)
  • a business-hours destination — open, closed, holidays, a single holiday, or a named period
  • a WhatsApp calling number
  • a department's failover, for calls nobody answered

The flow list shows a Used by line under each flow, and says so plainly when a live flow has nothing pointing at it.

Seeing what happened

Every call through a flow records its journey. On the call in Calls you get the steps in order, which exit each took, what the caller pressed, what was captured (sensitive values masked), and how long any API call took.

The same journey rides on the call.completed and call.missed webhooks as ivr_flow.

For automations, these fields are available as conditions on those events:

FieldWhat it holds
call.ivrFlowName / call.ivrFlowIdwhich flow the caller went through
call.ivrOutcomehow it ended, e.g. route_department:<id>, hangup, no_input_exhausted
call.ivrLastStepthe step they were on at the end
call.ivrReachedPersonfalse when the flow ended without sending them to a department, agent, extension or number

All are empty when the call never entered a flow. call.ivrReachedPerson describes where the flow sent the call, not whether anyone picked up — pair it with the call.missed trigger for "routed to a person, still missed."

That makes "a caller who asked about billing and never got to anyone" an ordinary automation: condition on call.ivrReachedPerson being false together with the flow name, then create a ticket or send a follow-up.

Limits and things to know

  • Keypad only. Callers press digits; speaking an answer is not supported yet. Steps are shaped so that speech can be added later without rebuilding a flow.
  • Text-to-speech needs to be configured on the account for spoken prompts. Without it, flows still run and still route correctly — prompts fall back to a plain built-in voice.
  • Loops are allowed — "repeat that" and "back to the main menu" are normal. Each step has a visit limit so a call can never spin forever.
  • Publishing is blocked, not warned, when a required exit is unconnected or a step points at something that no longer exists. Saving a draft is never blocked.
  • A flow cannot be deleted or archived while something routes to it. Point that number or schedule elsewhere first.

Related


Did this page help you?