Skip to content
Apolaris AI Docs

Conversation Flows (calls & messaging)

pro

Design one deterministic conversation graph — menus, live business data, and tightly scoped AI steps — that answers your phone lines, WhatsApp numbers and web chat, with AI drafting, a zero-side-effect simulator, human-only publishing, and per-channel analytics.

A flow is a conversation you design as a diagram: a caller or messaging customer moves through the boxes you drew — a greeting menu, live opening hours, an FAQ answer, a booking step — instead of every single reply being improvised by AI. Flows answer in real time on the endpoints you connect them to: a phone number, a WhatsApp number, or the web chat on your site. The same graph serves all three channels, so "press 2 for opening hours" on a call and "reply hours" on WhatsApp are one design, not two.

Why bother, when the Contact Center's AI agent already answers on its own? Predictability and cost. A flow resolves what it can deterministically — keypad presses, exact phrases, and close natural-language matches are answered instantly and free — and hands over to the AI agent only where you placed an AI step (or nowhere at all). You decide exactly where AI may act, and what it may do when it gets there.

You'll find it under Customers → Contact Center → Flows in the sidebar.

Flows is a capability your Apolaris contact enables per organization on top of the Contact Center module, and the whole area is manager-only. If you don't see Flows under Contact Center in the sidebar, it isn't turned on for your plan — contact support. On some plans the flow is managed for you: instead of the builder you get a Request a managed flow card — describe what the flow should achieve and Send request, and the Apolaris team authors and publishes it on your behalf.

What you get

  • A visual canvas — same look and feel as the Customer Journeys builder — with a node palette, drag-and-drop wiring, inline editing, automatic layout, and live validation.
  • Three answer tiers: keypad/exact matches and semantic matches are resolved free of AI credit; only the AI agent tier spends it. The palette shows each node's tier.
  • AI drafting: describe the flow in plain language and get a complete draft grounded in your real sites, services, staff and knowledge — then refine it with conversational edits, always behind an explicit preview and diff.
  • A reference palette of building blocks: menus with keypad digits and example phrases, live business-data answers, identity conditions, configurable AI action steps, a cross-channel Send message node, Voicemail, Transfer, and End.
  • Bindings: each phone number, WhatsApp number or web chat runs exactly one flow; one flow can serve many endpoints. Nothing changes on a channel until you bind it.
  • An interactive simulator — text, voice and keypad — that behaves like a real call: it speaks through the very engine, voice, personality and accent your line uses, transcribes what you say into the microphone, runs silence check-ins and gives real read-only AI replies, with zero side effects.
  • Human-only publishing with numbered versions and diffs; publishing translates your authored copy into all 16 platform languages.
  • Flow analytics per channel: runs, completion, tier mix, booked outcomes, and comparison against the previous period.

A flow, the AI agent, or a Customer Journey?

Three tools sound similar and do different jobs:

Conversation flow Always-on AI agent Customer Journey
Direction Inbound — answers customers who call or write in Inbound — answers customers who write in Outbound — messages the platform sends
Timing Live, turn by turn, sub-second Live, turn by turn Scheduled over hours/days (reminders, win-back)
Structure A graph you design; AI only where you allow it Fully conversational; every reply is AI A graph of waits, sends and branches
Use it for IVR-style menus, predictable answers, controlled AI hand-offs Open-ended chat and booking with no script Lifecycle messaging campaigns

They compose rather than compete. A channel without a bound flow keeps exactly its current behavior — the AI agent, inbox, and call handling are untouched. Bind a flow and it sits in front of that same agent: the flow answers what it can, and its AI steps hand over to the very agent you already configured, with all of its booking guardrails intact. Customer Journeys remain a separate outbound system — binding a flow does not replace or duplicate your appointment confirmations and reminders.

On WhatsApp, a structured button tap (for example on a reminder's Confirm button) still resolves before the flow. And a bare conversational "yes" or "ok" is deliberately never treated as a menu choice — it goes to the AI tier instead, so a customer agreeing mid-conversation is never hijacked into the wrong branch.

Who can do this

Everything on this page is manager-gated: the endpoints require the Contact Center module, the Flows capability, and that the signed-in user is a domain manager (is_manager).

Capability Who can do it
Open Flows, build, edit, save drafts, simulate Managers only (is_manager), on plans with self-serve flow authoring
Publish a flow, bind/unbind channels Managers only
View Flow analytics, manage Site closures Managers only
Request a managed flow (on managed plans) Managers only
Enable the capability, or author on a managed plan Apolaris team (platform operators)

There is no separate "flows" privilege. The Use contact center privilege (can_use_ccaas) opens the inbox but does not open Flows — a non-manager cannot see or edit flows at all.

Create a flow

  1. Open Flows, type a name, and click New flow. The canvas opens with a single Start node.
  2. Add steps with the Add step palette and drag them into place. Each palette entry shows its tier and a plain-language description.
  3. Connect nodes by dragging from a node's output port onto another node. Menu options, Yes/No destinations and branch targets can also be picked directly in the editor drawer.
  4. Configure a node by clicking it — the Step settings drawer shows exactly the fields that node type uses.
  5. Use Layout to tidy the graph automatically, Fit graph and the zoom buttons to navigate.
  6. Fix anything the validation panel flags — each issue (an unreachable node, a dead end, a menu option with no phrases, a condition missing its yes/no routes) is a button that jumps to the offending node.
  7. Validate and save stores a new draft version. Nothing customers see has changed yet — that takes publishing.

Draft it with AI

Click Generate with AI to open the AI flow proposal dialog. As it says right at the top: AI can draft or edit, but cannot publish. Review the diff before applying.

  • Build from business drafts a complete flow grounded in your actual sites, services, staff and knowledge entries — real records, not invented menu branches. A business with no services yet gets an AI-first draft rather than menus that advertise nothing.
  • Edit current graph applies a conversational edit to what's on the canvas — for example "add an option for cancellations and shorten the greeting."
  • Every proposal renders as a diff (added / changed / removed nodes and edges) with Apply as draft and Cancel. Applying only loads it onto the canvas — it still isn't saved, simulated, or published until you do those things yourself.

Versions and diffs

Every save creates a numbered version. The version dropdown in the toolbar lets you open any previous version, and Diff compares two versions node by node. A published version is frozen — editing always produces a new draft — and a conversation that started on one published version finishes on it, so republishing never changes a call already in progress.

The node palette

A flow is capped at 80 nodes. These are the building blocks, grouped and labeled as the palette shows them, with the tier each resolves at (T1/T2 answer free; T3 is the AI agent and uses AI credit):

Group Node Tier What it does
conversation Menu / choice T1 / T2 Route by keypad digit, exact phrase, or semantic match. The start of most flows.
Predefined answer T1 / T2 Speak/send a fixed response you wrote; no AI involved.
Collect input Engine Ask for one value, store it on the conversation (Store as), continue.
Send message Engine Send a WhatsApp, SMS, or email to the identified customer mid-conversation (below).
logic Condition Engine Branch on an identity signal: Known contact, Has an upcoming booking, Returning customer.
business data Live opening hours T1 / T2 Read live opening hours from selected sites and route by open/closed.
Live service menu T1 / T2 Offer your live services from selected sites.
Live staff list T1 / T2 Offer available staff from selected locations.
Grounded FAQ T1 / T2 Answer from an approved knowledge base entry.
AI AI action T3 Hand the conversation to the live AI agent with a configurable objective (below).
AI fallback T3 The guarded AI catch-all when earlier paths don't handle the request; same configuration as AI action.
exit Transfer Engine Move the caller to one of your approved transfer destinations.
Voicemail Engine Hang up politely, or take a recorded message (below).
End Engine Finish the path and complete the conversation.

A Menu / choice node holds Intent options — one per answer a customer can choose. Each option has a short Label, an optional keypad digit (DTMF, for callers who press instead of speak), Example phrases added as removable chips, and a Destination. On a call, "press 1" and "I'd like an appointment" land on the same option. Every menu also has an AI behavior setting: Use AI when no option matches (the default safety net) or Always use AI.

Response text you author is written once in your base language — the field notes it is translated into all 16 languages when a human publishes.

Live business data

The Live opening hours, Live service menu, Live staff list and Grounded FAQ nodes read your data at the moment they answer, not at publish time. Change Tuesday's hours, deactivate a service, or edit a knowledge entry and every bound flow says the new truth immediately — no republish needed. Opening-hours answers also respect the exceptional closed days managers record under Site closures.

Conditions and privacy

The Condition node branches on what is known about the person: Known contact, Has an upcoming booking, or Returning customer. You can route on those facts, but you cannot leak them: as the editor itself notes, appointment history stays blocked until the engine's identity confirmation guard passes. Authored copy can never disclose personal booking details the runtime hasn't verified the caller may hear.

The AI action step

The AI action node (and AI fallback) hands the conversation to the live AI agent — but scoped to exactly the job you configure. The first setting is the AI action type:

Action type What the AI does Booking capabilities
Booking & scheduling The full booking agent — checks live availability, books, reschedules and cancels under every booking guardrail. The default, and the behavior of every flow published before action types existed. All, locked on
Customer support Helps with existing appointments, questions and complaints. Manage existing bookings by default — it never creates new ones unless you check that on
Information only Answers questions grounded in your services, prices, hours and knowledge base. None, locked off — it can never create or change a booking
Custom objective You write the objective yourself. Step instructions are required. Starts with none; you grant exactly what you want

Each step can also carry its own persona and guidance:

  • Step goal — one sentence on what this step should achieve; empty inherits the action type's default.
  • Role for this step — e.g. Virtual receptionist; empty inherits your agent profile's role.
  • Tone for this step — Inherit from agent profile, Warm & friendly, Professional, Formal, or Playful.
  • Step instructions for the AI — guidance on focus and behavior (what to ask about, when to offer a transfer). Never a source of facts or prices.

Where the action type allows it, The AI may also… is a checklist of write capabilities: Check availability & book, Cancel appointment(s), Reschedule an appointment, and Store customer data / special requests. This gate is fail-closed: an unchecked capability is stripped from the live agent's toolset for that step — the AI cannot perform it, not merely "shouldn't" — and the step's prompt is kept honest, so an information-only step tells the customer it can't book here rather than pretending it did. Answering questions about services, prices and hours is always allowed.

Two more controls round out the step:

  • Use the knowledge base — turn it off and the step answers only from live business data, skipping the knowledge base for a smaller, faster prompt.
  • Voice on bound lines shows, read-only, which voice each bound phone line speaks with — cloned voice or standard voice. The voice belongs to the line, not the node; you pick it on the voice side (see the voice guide).
  • Context budget for this step — a live meter estimating the step's prompt size against the AI model's context window: prompt tokens, the share of the window used, what's reserved for the reply, and roughly how many spoken turns of history fit in what's left. It reacts as you type instructions or toggle capabilities. As it says on screen, it's a rough estimate — the live agent enforces the real budget on every turn.

Send a message on another channel

The Send message node sends while the conversation continues — the classic "I'll text you the booking link" mid-call. Pick Send on channel (WhatsApp, SMS, or Email), write the Message to send (translated at publish like all authored copy), and wire the two outcomes: If sent and If it fails.

To send the actual booking link rather than a generic one, put {{booking_link}} in the message body. It renders the private page for the customer's next appointment, where they can check the details and cancel it themselves; if they have no upcoming appointment it renders as nothing, so write the sentence so it still reads well.

Three honest rules apply:

  • The message always goes to the identified customer on file — never to a number or address typed into the flow.
  • WhatsApp sends obey the same proactive-messaging policy gates as every other outbound WhatsApp message; an unconfigured or blocked channel takes the If it fails branch.
  • The failure branch exists so your flow can say the send didn't happen instead of promising a link that never arrived.

The simulator walks the If sent branch without ever sending anything.

Voicemail

The Voicemail node has a Voicemail action: Hang up (speak your text, then end) or Leave a message. With Leave a message on an inbound call, the caller hears your prompt and a tone, then is recorded until they stop talking or the Max message length (seconds) you set (10–300, default 120). The message lands in the Contact Center Inbox as a playable audio attachment — and in Voice → Calls — with a best-effort transcription, raises the normal inbound notification, and expires under your voice retention policy. The Thank-you text (after the message) is spoken only when a message was actually stored. One voicemail is kept per call.

On an outbound call (for example a journey-triggered call that hits an answering machine), the same node is your answering-machine policy: hang up, or play the message text.

Where a flow runs (bindings)

Click Channels in the builder toolbar to open Where this flow runs. The panel lists every endpoint your organization has — voice phone numbers, WhatsApp numbers, and web chat — grouped by type, each with Bind, Unbind, or Move here (which shows what currently Used by that endpoint).

The ownership rules are simple and strict:

  • Each phone number, WhatsApp number, or web chat runs at most one flow. Binding an endpoint that already has one replaces it.
  • One flow may serve several endpoints at once — the flow list's Served channels column summarizes them, and warns about Nothing bound, inactive endpoints, and binding conflicts.
  • Binding replaces who greets the customer. On a bound endpoint the conversation starts in the flow, so the standard AI booking assistant no longer answers first: it takes over on the steps you route to AI, and on anything the flow cannot match. The panel says so, and each Bind / Move here / Unbind asks you to confirm in those terms.
  • No flow means no change: an unbound channel keeps its current AI, inbox, transfer, and call behavior, byte for byte.
  • Appointment confirmations and reminders remain separate outbound settings — binding a flow does not replace or duplicate them.

A flow only takes calls or messages once it is both published and bound — you can build and test for as long as you like with zero customer impact.

Test it in the simulator

Simulate opens the Interactive simulation — a phone-style surface that runs your saved version exactly as the engine would, with a Run details panel tracing, for every turn, which node answered and at which tier (and why).

  • Channel switches between Voice, WhatsApp, and Web chat; Caller ID models Present — known contact, Present — unknown caller, or Withheld, so you can walk both sides of your identity conditions.
  • Reply by typing, by voice (the Speak microphone button records your answer and the platform recognizer transcribes it — typing always works), or with the DTMF keypad for digit presses.
  • On voice, pick the Voice line to test as — lines bound to this flow sort first, and lines you have switched off are listed too, labelled. The simulator then speaks through that line's own configuration: its engine (your cloud voice or the included Apolaris Voice), its voice, and the personality, expressiveness, accent and speaking rate set on the Conversation card. A line under the phone names what you are hearing; if the cloud engine cannot serve the utterance, it says the included voice is standing in and why. An organization with no voice line is told there is no configured voice to play, rather than given a browser stand-in that teaches the wrong thing.
  • A previewed line is billed like a spoken one. A cloud voice is admitted against your own monthly speech budget and charged at the price quoted for that engine; the included engine costs nothing, exactly as on a call. Transcribing what you say into the microphone is metered per audio minute.
  • The simulator also goes quiet the way a real call does: leave the agent's question unanswered and after a short silence it checks in — quoting your last question verbatim, in dashed bubbles tagged Caller silence — a limited number of times per silence, exactly like the live voice agent. Check-ins are not conversation turns and never feed the AI's context.
  • When a turn reaches an AI step, you get a real AI reply from your configured agent — but strictly read-only: as the footer states, simulation never publishes and AI preview cannot create appointments or send messages. No call, message, booking, or run record is created. Each AI preview turn does consume one AI request, like the live tier would.
  • If semantic matching is temporarily unavailable, the simulator says so and keeps testing exact phrases and keypad input deterministically.
  • If a turn's AI reply fails or comes back empty, that turn is marked as such and can be retried in place, rather than leaving a silent gap in the transcript.
  • References that have gone out of date under you — a service taken off the public menu, a person who is no longer bookable — are listed in the builder's validation panel as Out of date in this flow, each one a button that scrolls to the step. They are warnings, not errors: the flow still saves, simulates and publishes, and the engine simply leaves them out when it speaks. A step with nothing left to say is still an error.

Simulate every branch — including Withheld caller ID and the "no option matches" path — before you publish. The Run details trace is the fastest way to see why a phrase landed on the wrong option and which example phrases to add.

Publish — always a human decision

Publish is deliberately hard to press by accident:

  1. Validate and save the draft.
  2. Simulate that saved version. Only then does the Publish button unlock — and any further edit locks it again until you save and simulate anew.
  3. Confirm the prompt — "Publish this simulated version? AI cannot do this for you." — which is literally true: no AI proposal, draft, or edit can publish a flow.

Publishing freezes the version, translates all authored copy into the 16 platform languages, and prepares the semantic matching that powers the free natural-language tier. Conversations already in progress keep the version they started on. To take a flow out of service, unbind its endpoints (instant, per endpoint) — the channel immediately returns to its normal AI-agent behavior.

Measure your flows

From the flows list, Tier analytics opens the Flow analytics page (manager-only). Pick a date range or a preset (Last 7 days, Last 30 days, Last 90 days); every figure is compared with the equal-length period immediately before it, so each card shows the current value and Previous.

The six cards under Performance:

Card What it tells you
Runs How many conversations entered a flow
Completion rate Runs that finished, out of all runs
T1 only Runs resolved entirely by keypad/exact matching — the cheapest, most predictable outcome
AI fallback Runs that reached the AI tier at least once — rising here means your menus and phrases aren't catching enough
Booked Completed runs that ended in a booking
Average resolution Mean engine resolution time per deterministic turn

The Details table breaks the same period down per channel — Voice, WhatsApp, Web chat — with a Tier mix bar (T1/T2/T3 share of turns), an Outcome mix bar (Booked, Answered, Transferred, Voicemail, Abandoned, with unfinished runs shown as In progress), the AI fallback share, and Average resolution. Counts always sit next to the rates, and only channels with a bound flow produce runs at all.

Next to Tier analytics, the flows list also links Site closures — the manager surface for exceptional closed days, which every booking channel (flows included) respects.

Tips

  • Draft with AI, then tighten by hand. Build from business gets you a grounded skeleton in seconds; your judgment on menu wording and branch order is what makes it good.
  • Give every menu option a keypad digit. Speech recognition on a noisy street fails; "press 2" doesn't.
  • Scope your AI steps. Use Information only for pure Q&A and Customer support for service recovery — reserving Booking & scheduling for steps where booking is the point keeps behavior predictable and your AI spend low.
  • Watch the AI fallback card. If many runs reach the AI tier from a menu, read a few traces in the simulator and add the customer phrasings you're missing as example phrases — each one moves turns into the free tiers.