The full journey a clinic takes onto Routiq — what we do, what you do, and the moment Robyn picks up her first real patient.
Same flow for every clinic — Cliniko, PracSuite, or Nookal. We don't bend the onboarding shape to the PMS; we bend it to clinical safety. Three structured steps, no PMS-tiered timelines.
Account, PMS, channels, and tone-of-voice wired up. By the end of day one, Robyn is operational in your tenant — same flow whether you're on Cliniko, PracSuite, or Nookal.
Triage, safety escalations, recovery paths exercised end-to-end. Four-gate sign-off (clinical safety, triage accuracy, multi-location, recovery) before any real patient hears her.
No setup fees, nothing locked in. Real patient traffic, heavy monitoring. First 48 hrs hand-audited end-to-end; daily standups across the trial. Then permanent go-live.
If we can't get you live cleanly, we'd rather slow down than ship a half-tested agent. Clinical safety doesn't bend to a sales calendar.
Phases 1–3 are mostly Routiq-side plumbing. Phases 4–5 are where you shape the agent to match how your clinic actually works. Phase 6 is go-live.
Onboarding ends when the first real patient is handled successfully by Robyn — SMS, WhatsApp, or voice. Everything after that is ongoing success, not onboarding.
First thing that happens: a tenant row is written into our database. The account exists, but Robyn isn't allowed to handle patients yet.
app.routiq.aicliniko_accounts or PracSuite tenant row createdonboarding_status = 'pending'While the account is pending, if a patient somehow messages, Robyn replies with a polite "we're still getting set up" — never attempts a booking. Half-configured agents can't go live by accident.
These three answers appear in every message and every voice greeting. Worth taking the five minutes to get them right.
Used in greetings: "Thanks for calling ModPod Podiatry…" Must match how patients refer to you, not your legal entity.
The AI's name. Defaults to "Robyn". You can rename — it stays consistent across SMS, WhatsApp, and voice.
Warm, professional, brief. Locked into the agent's system prompt at onboarding. Adjustable later if needed.
Robyn never invents bookings. Every appointment, practitioner, and availability slot comes from your PMS in real time. How we connect depends on which PMS you run.
Paste your Cliniko API key into the dashboard. We validate it, fetch practitioners + businesses + appointment types, and you move on.
OAuth connection plus a manual check that each practitioner has an active roster (without one, availability returns empty).
Manual API key exchange handled by Routiq's onboarding team. Self-serve flow on the roadmap.
The sync runs once on connection, then incrementally afterwards. Account state transitions as it progresses.
We don't buy you a number when you sign up — we've already bought a pool of voice + SMS-enabled Australian mobiles. When you onboard, you get the next available one. Instantly.
| What used to take… | Now takes | Why |
|---|---|---|
| Buy a Twilio number (5–10 min) | 0 sec | Pre-bought, sitting in the pool |
| Create the Chatwoot inbox (5 min) | 0 sec | Pre-created at pool-load time |
| Wire Twilio ↔ Chatwoot webhooks (2 min) | 0 sec | Pre-wired, idle until claimed |
| SQL insert + link to tenant (4 min) | 5 sec | Atomic claim from the pool |
The fleet is parked. You walk up, get keys, drive away. (For PracSuite + Nookal, pool assignment happens during the assisted onboarding session.)
The same Robyn handles every channel — same persona, same triage logic, same booking flow. Patient context follows them across surfaces.
Always-on by default. Most clinics start here. Inbound texts triage and book; outbound covers confirmations, reminders, reengagement.
Optional. Requires Meta Business approval and templated session-openers. Routiq handles the BSP setup end-to-end.
Always-on by default for inbound. Twilio ConversationRelay streams audio to Robyn in real time. Same agent answers calls 24/7 with sub-second latency.
SMS and Voice come on by default for inbound. WhatsApp is opt-in when there's demand — we don't force a package, and channels enable independently.
Worth getting right. The opening line names your practice, sets the warmth, and asks an open question.
The opening line Robyn says when she answers. Names your practice, sets the tone, invites the caller to lead.
How Robyn responds to a cold inbound text. Same tone, written form. Caller-ID match personalises the patient's name.
Built once with the clinic, encoded into Robyn's system prompt. Edited later if your service mix shifts.
| Patient says | Robyn books | Why |
|---|---|---|
| "Heel pain in the mornings" | New Biomechanical | Likely plantar fasciitis — needs biomech assessment |
| "Ingrown toenail, red and sore" | New Podiatry Comprehensive | Standard new patient consult |
| "Toenails are yellow / fungal" | Initial Laser 2 Feet | Laser treatment band |
| "I'm diabetic, GP told me to come" | Diabetic Assessment | Special category — protected pathway |
| "Open wound on my foot" | Escalate to human → | Clinical safety — never auto-book |
Hours, rosters, location aliases, and clinical SOPs. All scoped per location, all handled by Robyn without anyone re-explaining the setup.
Before we route a single real patient to Robyn, the clinic runs scripted scenarios against the actual production system. We've built a library — you pick the relevant ones for your channels.
Force Robyn through every state in the FSM: new-patient name capture, two-slot choice, cancel-all, red-flag, returned missed call, sales transfer.
Internal docs: 2026-05-11-voice-agent-uat-talk-tracks.md · 2026-05-23-voice-state-manual-test-scripts.md
When a UAT run doesn't behave the way you expect — or six weeks later when a real interaction needs review — one command dumps the full forensic record.
/voice-call-audit/chat-conversation-auditNo go-live without all four. We hold the line on this even when there's pressure to launch — half-tested clinical agents are the one failure mode we won't allow.
Every red-flag scenario in TT-06 escalates correctly. No routine booking for diabetes-plus-wound, suspected fracture, or severe pain.
Symptom → appointment type matches your matrix across test scenarios. No "General 30 min" catch-all when a specific type should fire.
When a caller names a clinic, Robyn books at that clinic. Mid-flow clinic redirects work. Per-location pricing speaks correctly.
Mumbled speech, ambiguous choices, two-slot picks, cancel + rebook in one breath — all handled without dead air or hallucination.
Routiq's onboarding team flips the production toggle. Real patient traffic now hits Robyn instead of voicemail or your front desk's overflow.
Not because we expect Robyn to fail — because real callers always surface edge cases that UAT couldn't predict. The Routiq team watches every call and every SMS.
Every voice call run through voice-call-audit. Any unexpected state transition gets flagged before the next shift.
Every Robyn booking cross-checked against your PMS. Any mismatch is investigated before the day ends.
15-minute end-of-day call with the clinic. Any surprises, patient feedback, tone tweaks — caught early.
A real patient calls in. Robyn answers, triages, books — or escalates correctly — and the booking lands in your PMS.
That's onboarding, done.
Everything from this point on is ongoing success: weekly reviews, eval suite runs, reengagement campaigns, and the optimisation cadence that turns Robyn from competent to compounding.
Onboarding hands off to success. The cadence shifts from "are we live?" to "are we measurably moving the metrics that matter?"
SELECT twilio_phone_number FROM
phone_number_pool WHERE status='available'
AND voice_enabled=true LIMIT 1;
syncing?voice_enabled=true on the pool number/voice-call-audit <CallSid>
/chat-conversation-audit <phone>
| Term | What it means |
|---|---|
| onboarding_status | Account lifecycle: pending → syncing → completed |
| phone_number_pool | Pre-provisioned Twilio + Chatwoot numbers, ready to assign in 5 seconds |
| Robyn | Default name for the AI agent. Persona is tenant-configurable. |
| Triage matrix | Symptom → appointment type mapping, encoded per tenant |
| ConversationRelay | Twilio's real-time audio streaming layer for voice calls |
| Talk track | Scripted UAT scenario the clinic runs against the live config |
| State machine | Deterministic FSM governing voice agent flow (~35 states) |