Dev.to AI πŸ€– Ai πŸ‘ 0 πŸ“– 4 min read

Building an AI Receptionist: Automating Clinic Bookings with Voice Agents and Odoo

The front desk of a busy clinic is a high-pressure environment. Between managing walk-in patients and handling administrative tasks, incoming calls often go to voicemailβ€”or worse, remain unanswered. For a clinic, a misse

The front desk of a busy clinic is a high-pressure environment. Between managing walk-in patients and handling administrative tasks, incoming calls often go to voicemailβ€”or worse, remain unanswered. For a clinic, a missed call isn't just a missed notification; it's a patient who might look elsewhere.

At NMT Solutions, we’ve been implementing AI voice agents that act as a 24/7 digital front desk. These aren't the frustrating "Press 1 for Sales" IVR systems of the past. These are LLM-powered agents that can understand natural speech, answer complex questions about services, and directly book appointments into a CRM like Odoo or Zoho.

In this guide, I’ll walk you through the architecture and implementation of an AI receptionist tailored for a medical or wellness clinic.

The Architecture: How Voice Meets Intelligence

Building a voice agent involves bridging the gap between telephony and Large Language Models (LLMs). Here is the high-level flow:

  1. Telephony Layer: A service like Twilio or Vapi handles the incoming phone call.
  2. Voice Processing: Speech-to-Text (STT) converts the patient's voice to text in real-time.
  3. The "Brain": An LLM (like GPT-4o or Claude 3.5 Sonnet) processes the text, references the clinic's availability, and decides on the next action.
  4. Action Layer: If the patient wants to book, the agent calls an API to check the Odoo calendar.
  5. Voice Output: Text-to-Speech (TTS) converts the LLM's response back into a natural-sounding voice.

Step 1: Designing the Call Flow

A successful AI receptionist needs a clear "Happy Path" and robust handling for edge cases. For a clinic, the flow usually looks like this:

  • Greeting: "Hi, thank you for calling [Clinic Name]. How can I help you today?"
  • Intent Discovery: The patient might want to book an appointment, check pricing, or ask about specific treatments.
  • Qualification: "Have you visited us before?" / "What symptoms or treatment are you calling about?"
  • Availability Check: The agent queries the Odoo calendar.event or appointment.type records.
  • Confirmation: "I've booked you for Tuesday at 4 PM. You'll receive a confirmation WhatsApp shortly."

Step 2: The LLM System Prompt

The LLM needs a "personality" and a set of rules. Here is a simplified version of a system prompt we use:

You are the AI Receptionist for 'Wellness Hub Pune'. 
Your goal is to be professional, empathetic, and efficient.

CONSTRAINTS:
1. Always verify if the patient is new or existing.
2. Only offer slots that are returned by the 'check_availability' tool.
3. If a patient mentions an emergency, immediately use the 'transfer_to_human' tool.
4. Keep responses concise (under 20 words) to maintain a natural conversation flow.

TOOLS AVAILABLE:
- check_availability(date)
- book_appointment(name, phone, time, service)
- transfer_to_human()

Step 3: Integrating with Odoo via XML-RPC

To make the agent functional, it must talk to your database. Odoo provides a powerful XML-RPC interface. Below is a Python snippet that the AI agent's backend would use to search for available slots in the Odoo Appointment module.

import xmlrpc.client

# Odoo Connection Details
url = "https://your-odoo-instance.com"
db = "your_db"
username = "admin"
password = "your_password"

# Authenticate
common = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common')
uid = common.authenticate(db, username, password, {})

models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')

def check_odoo_availability(target_date):
    # Search for existing appointments on that date
    appointments = models.execute_kw(db, uid, password, 'calendar.event', 'search_read', [
        [('start', '>=', f'{target_date} 00:00:00'), ('start', '<=', f'{target_date} 23:59:59')]
    ], {'fields': ['start', 'stop']})

    # Logic to find gaps in the schedule would go here
    return appointments

When the LLM decides to book, it triggers a create call to Odoo to insert a new calendar.event or a crm.lead.

Step 4: Human-in-the-Loop Handover

No AI is perfect, and some situations require a human touch. We implement a "Human Handover" trigger. If the LLM detects high frustration, a request for a manager, or a complex medical question it isn't trained for, it uses a SIP transfer to ring the clinic's physical front desk.

The handover should be seamless:

  • AI: "I'm going to connect you with our lead coordinator who can assist you better with that specific medical question. Please hold for a moment."
  • Backend: Executes a bridge command to the human operator while passing the call transcript to the operator's screen.

Common Pitfalls to Avoid

  1. Latency: If there is a 3-second delay between the patient speaking and the AI responding, the conversation feels "broken." Use specialized voice-native providers (like Vapi or Retell) to keep latency under 800ms.
  2. Hallucinations: Never let the AI "guess" a price. If it's not in the knowledge base, it must say, "I'll have a team member call you back with exact pricing."
  3. Interrupt Handling: Patients often speak over the AI. Ensure your STT implementation supports "barge-in," so the AI stops talking as soon as the patient interrupts.

Implementation Checklist

  • [ ] Define the Persona: Voice (Male/Female/Accent) and Tone.
  • [ ] Clean Data: Ensure your Odoo/Zoho calendar is the "Source of Truth."
  • [ ] Testing: Run at least 50 test calls covering various accents and background noise.
  • [ ] Monitoring: Log every call transcript to identify where the AI gets confused.

Automating the front desk doesn't mean losing the personal touch; it means ensuring that every patient is heard, even at 2 AM on a Sunday.

I'm Nandan Singh β€” I build AI and automation systems (Odoo, Zoho, chatbots, voice agents) at NMT Solutions. Questions? Drop a comment or WhatsApp +91 92260 02903.

πŸ“° Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β€” full credit and traffic to the original publisher.