Voice AI · autonomous booking
The front desk that answers at 2am
A third of a clinic's calls arrive when nobody can pick up. Every one of them is a patient deciding whether to try the next practice on the list.
§01The problem
Clinics lose patients in the gaps: after hours, during lunch, and in the ten minutes when both receptionists are with someone at the counter. The caller doesn't leave a message — they call the next practice. The loss is invisible because it never enters a system.
Hiring more front-desk staff isn't the answer either. The load is spiky and unpredictable, and the work that gets dropped first is exactly the work that generates revenue: booking a new patient who has never been to the practice before.
§02The thinking
An AI receptionist is easy to demo and dangerous to ship. The failure mode isn't a bad answer — it's a confident one: booking into a slot that doesn't exist, quoting a price the practice doesn't charge, or handling a clinical emergency as if it were a scheduling question.
So the design started from the boundaries, not the capability. What can the agent decide alone (a routine cleaning slot it can see in the calendar)? What must it hand to a human immediately (anything that sounds clinical or urgent)? What must it never do (give clinical advice, negotiate price)? Everything else was configuration.
Configuration turned out to be the product. Every practice has different hours, services, providers, insurance acceptance and tone. A generic agent is useless to all of them, so the real surface I owned was the setup: agent persona and custom messages, practice details, booking rules, inbound call handling, and the call flow itself — plus the task types the agent is allowed to create when it can't finish something.
Every interaction is then classified along a taxonomy the practice actually thinks in: interaction type, outcome, reason for visit, reason for not booking, and revenue potential. That last pair is the interesting one — knowing *why* a caller didn't book is what turns a transcript archive into a growth instrument.
+ A configuration surface deep enough to make the agent sound like the practice
− one clever generic assistant
# the same script that reassures a family dentist's patients sounds wrong for an orthodontist. Genericness is the fastest route to being switched off.
+ Hard escalation on anything clinical or emergency-shaped
− letting the model use judgment
# the cost curve is asymmetric. A missed booking costs a slot; a mishandled emergency costs a person — and the practice's licence to use AI at all.
+ Capturing 'reason for not booking' as structured data
− just logging the outcome
# 'we couldn't offer a time that worked' and 'we don't take that insurance' demand completely different fixes. Without the reason, the practice only learns that it is losing.
§03What shipped
The agent answers, understands why the patient is calling, checks real availability, books when it can, and creates a typed task for a human when it can't — with the full interaction summary, transcript, sentiment and tags attached so the human picks up mid-context rather than from scratch.
Insights then close the loop: how the front desk performed, how tasks were handled, and where revenue is leaking by reason.
§04Outcomes
The 2am call gets answered
after-hours and overflow calls stop being silent losses the practice never sees
Escalation, not improvisation
clinical and emergency calls route to humans by rule, never by model judgment
Why, not just what
reason-for-not-booking turns lost calls into a fixable list
§05Reflection
This product taught me that in voice AI the roadmap is mostly a list of things the agent must refuse to do. Capability arrives free with each model release; trust is earned by the boundaries you draw around it and by how gracefully the agent hands over when it reaches one.
$ cat takeaways.txt
- ✓ In voice AI, the spec is the refusal list — capability comes free, trust doesn't.
- ✓ Configuration depth is what makes an agent feel like it belongs to the practice.
- ✓ Capture why a conversion failed, or you've built an archive instead of an instrument.