Build guide

I Built a FULL AI Receptionist with Retell AI

A production-level Retell conversation-flow receptionist: real calendar bookings, FAQs, rescheduling, and transfers.

Retell AIGoogle Calendar
Feb 27, 2026
Optimized for

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

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:

  1. Scheduling an appointment
  2. Rescheduling or cancelling an existing appointment
  3. 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:

  1. 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)
  2. Check calendar availability
  3. Offer two available time options (caller can counter with their own time - the agent re-checks it)
  4. Confirm the date and time back
  5. Collect email for the confirmation - have the caller spell everything before the @, then read it back to confirm
  6. Book on the calendar
  7. Give confirmation + location instructions ("there's a parking lot behind the building - try there first, otherwise street parking")
  8. 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:

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:

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

← Back to the library Good luck and happy building