How a call works
From ring to booked visit in five steps
- Call comes in
A patient rings the clinic's number, or talks from a web page like this one.
Vapi voice - Receptionist answers
It greets, listens and asks what the visit is for, in plain conversation.
speech to speech - Checks the calendar
It looks up opening hours, visit length and what is already booked.
check_availability - Books the visit
The slot is saved once. Two callers can't take the same time.
book_appointment - Staff see it
The schedule updates at once. Anything the AI can't settle becomes a callback.
request_callback
A patient dials the clinic's phone number, or presses Talk on a web page. Both reach the same receptionist.
The voice service turns speech into text and back. When it needs facts, it calls the clinic's own server.
A booking in the schedule, a summary of the call and a list of people to call back.
What it books
The visits a clinic actually takes
Each service has its own length and its own colour, so the schedule reads at a glance. Change the list per clinic in one file.
What the clinic sees
A calm view of today
Staff sign in to a private dashboard: today's visits, every call with its transcript, and callbacks to tick off. The screens below use demo data.


Under the hood
Built like a real product
- Voice layer
- Vapi handles the call, speech and turn-taking. The assistant calls four tools on my server.
- Backend
- Fastify and TypeScript, inputs checked with zod, webhook protected with a shared secret.
- No double-booking
- Postgres with a per-day advisory lock, so two simultaneous callers can't take the same slot.
- Scheduling rules
- Opening hours, visit lengths and minimum lead time live in plain functions covered by unit tests.
- Dashboard
- Next.js 15 and React 19. Signed-cookie login, and the API key never reaches the browser.
- Public demo
- This page only reads a masked feed: first names, no phone numbers, no transcripts.
What a missed call costs
Put your own numbers in
$2,340
a month in visits that never get booked: about 26 callers who ring, don't get through, and go elsewhere.
An estimate from the numbers you set, not a promise of results. Change them to match your clinic.
Want one for your clinic?
Let's talk about your calls
I'll look at how your clinic books today and tell you plainly whether this fits. Thirty minutes, no pitch deck.