I Built a FULL AI Receptionist with Retell AI
A production-level Retell conversation-flow receptionist: real calendar bookings, FAQs, rescheduling, and transfers.
What you'll build
A production-level Retell conversation flow agent that works as a full receptionist for a clinic (mine is built for an acupuncture practice): it books appointments on a real calendar, routes rescheduling and cancellations, answers FAQs from a knowledge base, hands off to a human with context when it needs to, and never leaves a caller hung up on. The design goal is honest - this covers ~80% of receptionist calls so the human can handle the 20% that actually needs them.
I covered the scheduling flow in more depth in a previous video - watch that first if you want the click-by-click.
What you'll need
- A Retell AI account (conversation flow agent, not single prompt)
- A cal.com account, connected to the business's Google Calendar
- Your FAQ/services/pricing content as a markdown (.md) file
- A human phone line to transfer to
Step 1: Start with a welcome node and a language branch
The flow opens with a welcome node:
Thank you for calling Best Acupuncture. This is Sarah. How can I help you today?
Off the welcome node, add one branch for callers who start speaking another language (e.g. Spanish): an agent transfer to a second agent whose voice and language setting is multilingual (or set to that specific language). Pick a voice with the appropriate accent so it doesn't sound off. Everyone else flows to intent detection.
Step 2: Add an intent detection node
This is the hub of the whole flow. It classifies the caller into one of three paths:
- Scheduling an appointment
- Rescheduling or cancelling an existing appointment
- Questions - services, prices, hours, insurance, etc.
Every sub-flow that finishes with "anything else I can help with?" routes back to this node, so the conversation never dead-ends.
Step 3: Build the scheduling flow on cal.com's native functions
Retell has two functions natively built in: check calendar availability (cal.com) and book on calendar (cal.com). They're almost a 99% success rate, so use them instead of rolling your own.
cal.com isn't what most clinics run on, but it syncs two-way with Google Calendar - and clinic software like Jane or Acusimple integrates Google Calendar too. So the chain is: voice agent → cal.com → Google Calendar → the clinic's own software, and bookings made anywhere block the slot everywhere. No double bookings.
The flow order that works:
- Collect name and confirm the number they're calling from is the best callback number (the number itself is captured automatically - don't make the agent ask for it or repeat it back)
- Check calendar availability
- Offer two available time options (caller can counter with their own time - the agent re-checks it)
- Confirm the date and time back
- Collect email for the confirmation - have the caller spell everything before the @, then read it back to confirm
- Book on the calendar
- Give confirmation + location instructions ("there's a parking lot behind the building - try there first, otherwise street parking")
- End call
Step 4: Make rescheduling self-serve
Don't build a native reschedule flow in the agent. To do that properly you'd need a database of every appointment, have the agent search it, cancel the original, and book a new one - more moving parts, higher chance of failure.
Instead, cal.com already puts a reschedule/cancel link in every confirmation email, which opens the caller's own calendar view and updates cal.com (and everything downstream) with no double bookings. So the reschedule path starts with a self-serve intro node: "the easiest way to reschedule is the link in your confirmation email or calendar invite." Three branches:
- Caller can check now → the agent stays online, remains silent, and waits. If they manage it → success node ("Perfect, you're all set - anything else?") → back to intent detection. If they still can't find it → transfer to a human.
- Caller can't check now (driving, busy) → transfer straight to the receptionist.
- Caller can't find the email → give assistance: tell them the sender address the email came from, suggest searching "reschedule" or "appointment," and remind them to check spam.
Step 5: Send cancellations straight to a human
No automation here on purpose. If someone's trying to cancel, you want to retain the client - transfer directly to the receptionist and let a human try to talk them into rescheduling instead. A voice agent shouldn't be the last touchpoint on a lost customer.
Step 6: Set up the FAQ node as a global node with a markdown knowledge base
Add a knowledge base (services, pricing, hours, location) and attach it to the FAQ node - this is the only node with KB access.
Two things matter here:
- Upload the KB as a markdown (.md) file. That's the format voice agents and LLMs read best -
#headings,##subheadings,**bold**- instead of a wall of text. - Make the FAQ node a global node. Global means the caller can jump to it from anywhere - if they're mid-scheduling and ask "wait, are you open today?", the agent answers from the KB instead of rigidly marching through the flow.
From the FAQ node: caller is finished → end; information not found in the KB → transfer to a human. "Anything else?" → back to intent detection.
Step 7: Make every transfer a warm transfer
A warm transfer means the human picks up already knowing what the call is about. In each transfer-call node, add a whisper message - spoken only to the receiving agent, never heard by the caller:
Incoming call. Caller is trying to reschedule an appointment but could
not locate their confirmation email. Please assist with rescheduling.
Write one per transfer node, specific to that path (reschedule help, unanswered clinic question, cancellation). The receptionist never has to open with "so… what are you calling about?"
Step 8: Add a transfer failsafe
If the transfer happens at 2pm on a Sunday and nobody's at the office, the caller shouldn't just get hung up on. On transfer failure, the agent says:
It looks like no one is available at the moment. Please try calling
again later and someone will be happy to assist you.
Caller acknowledges → end call. Caller asks another question → back to intent detection.
That's the whole receptionist: scheduling that actually books, self-serve rescheduling, humans where humans win, and warm handoffs in between. The flowchart looks complicated - it's really just those three intents plus guardrails.
Resources
- Retell AI - https://www.retellai.com
- cal.com - https://cal.com (the calendar layer between Retell and Google Calendar)