A voice agent that answers the calls a business misses
In a med spa the phone call is the sale, and the front desk is busiest exactly when the calls peak, so ready-to-book callers hit voicemail and go elsewhere. I designed, built and deployed a production voice agent that picks up, quotes real pricing, checks live availability, books against the real schedule and confirms by text. This build runs inside a business I do not name, the people running it treat it as an edge.
What was the manual bottleneck?
A med spa runs on high-intent phone calls. Someone searching for a treatment nearby is ready to book, if a person picks up. But the front desk is busiest during treatment hours, which are the same hours the phone rings most. The call goes to voicemail, and the caller has already found someone who answered.
A human receptionist handles one call at a time, is not there in the evening or at the weekend, and cannot be in the treatment room and on the phone at once. The gap is not effort, it is coverage: the calls arrive when there is no one free to take them.
They needed the phone answered every time, without pulling anyone off the work in front of them.
A receptionist that books on the call
A voice agent that answers naturally, handles pricing, checks availability through real-time integrations and writes a real booking to the database before the caller hangs up. Three things make it a receptionist rather than a demo.
Recognises who is calling
It greets returning clients by name, remembers a preferred provider and notes the flags that matter before the conversation starts. A caller is not a stranger every time they ring.
Handles service enquiries
It works across the full set of service categories with the real pricing ranges the business actually charges, and steers genuine medical questions to a consultation instead of guessing at an answer it should not give.
Checks real availability
It queries the actual provider schedules at real slot granularity, respecting which provider can perform which service, and books against the live calendar rather than a copy that drifts out of date.
How does a call become a booking?
Twilio carries the call, Vapi manages the voice, Deepgram hears it, Claude Sonnet 4 reasons through it and Cartesia speaks, over a Fastify backend on Supabase. Four decisions turn a conversation into an appointment that holds.
Transaction-safe booking
When two callers reach for the same slot at the same moment, database transactions decide it cleanly so the schedule never double-books. The booking is a real write against the real calendar, not a request queued for someone to reconcile later.
Live owner dashboard
Conversations stream to a dashboard as they happen over server-sent events, so the owner can watch a call in progress, read the transcript and see a booking land in real time. The agent is not a black box the owner has to trust blindly.
Instant SMS confirmation
A confirmation text goes out through Twilio within seconds of the booking, often before the call has ended. The caller leaves the conversation with the appointment already in writing, which is what keeps a booking from quietly evaporating.
Graceful degradation
The core booking action is protected above everything else. If the confirmation text fails the booking still succeeds, if a recording upload fails the data is still logged. The one thing that must never break is the appointment, and it does not.
// STACK
What changed for the business?
In plain operational terms, three things moved. I am describing what the agent does in production, not putting a number on it.
A call that used to ring out to voicemail is now answered, after hours and while the front desk is busy with a client in the chair, so a missed call stops quietly becoming a lost customer.
A caller who is ready to book is booked while they are still on the line, against the real schedule, instead of being asked to leave a message and call back.
The front desk keeps its attention on the person in front of them, because the phone is no longer a second job competing with the treatment room.
What I learned building it
A voice agent lives or dies on the boring part. Anyone can make one that chats. The hard problem is what happens when two people book the same slot in the same second, or when the confirmation text fails after the appointment is already made. Get that wrong and you have not saved a missed call, you have created a double-booking the owner has to clean up.
So I built it back to front, from the booking outward. The appointment is a real transaction the database protects, and everything else, the text, the recording, the dashboard, is allowed to fail without touching it. The pleasant conversation is the easy half. The half that earns its place is the one that holds up under load.
A receptionist you can trust is one whose booking never quietly falls through, not one that merely sounds good on the phone.
This is the voice agent behind the receptionist I build for med spas: the front door that answers when the desk cannot, books on the call, and stops a missed call quietly becoming a lost customer.
A 15-minute call is usually enough to know if there is a fit.
No slides, no pitch.