Build a 24/7 AI Receptionist in 15 Mins (Python + Google Calendar)

Build a 24/7 AI Receptionist in 15 Mins (Python + Google Calendar)

posted Originally published at siphon.blackdwarf.in 4 min read

Voice AI demos are cool — but most fail at one critical thing: doing real work.

Today, I’m sharing how to build a production-ready AI Dental Clinic Receptionist that can check a real Google Calendar and book appointments over the phone.

We’ll use SIPHON, an open-source Python framework, to build this with just a few lines of logic.


What This Agent Can Do

This tutorial walks you through building a voice agent that:

  • Books new appointments using Google Calendar
  • Modifies existing appointments
  • Cancels appointments
  • Verifies caller identity for privacy
  • Runs 24/7 with no human intervention

⏱ Time to build: ~15 minutes


Architecture Flow

Siphon google calendar flow


Prerequisites

Before you start, make sure you have:

System Requirements

  • Python 3.8+

Install SIPHON

pip install siphon-ai

Getting Started Guide

API Keys

Services

  • LiveKit credentials (Cloud or self-hosted)
  • Google Calendar with Service Account
    Calendar Setup Guide

Helpful Documentation


Quick Start

Step 1: Create Project Structure

mkdir dental-clinic-receptionist
cd dental-clinic-receptionist
touch .env prompt.py agent.py inbound.py outbound.py

Step 2: Configure Environment Variables

Edit .env:

OPENROUTER_API_KEY=your_key   # LLM Provider

SARVAM_API_KEY=your_key       # STT Provider
CARTESIA_API_KEY=your_key     # TTS Provider

LIVEKIT_URL=wss://your-livekit-url
LIVEKIT_API_KEY=your_key
LIVEKIT_API_SECRET=your_secret

GOOGLE_CALENDAR_ID=*Emails are not allowed*
GOOGLE_CALENDAR_CREDENTIALS_PATH=/path/to/credentials.json

CALL_RECORDING=false
SAVE_METADATA=true
SAVE_TRANSCRIPTION=true

METADATA_LOCATION=Call_Metadata
TRANSCRIPTION_LOCATION=Transcriptions

AWS_S3_ENDPOINT=http://localhost:9000
AWS_S3_ACCESS_KEY_ID=minioadmin
AWS_S3_SECRET_ACCESS_KEY=minioadmin
AWS_S3_BUCKET=siphon
AWS_S3_REGION=us-east-1
AWS_S3_FORCE_PATH_STYLE=true

Step 3: Define the System Prompt

Create prompt.py.

The system prompt controls behavior, privacy, and conversation flow.

system_instructions = """
You are a professional dental clinic receptionist.

CAPABILITIES
- Book new appointments
- Modify existing appointments
- Cancel appointments

PRIVACY RULES
- ALWAYS verify caller identity (name + phone)
- Only show appointments for the verified caller

CONVERSATION STYLE
- Be warm and professional
- Ask one question at a time
- Confirm details by reading them back
"""

Full Prompt Example


Step 4: Create the Agent

Create agent.py:

from siphon.agent import Agent
from siphon.plugins import openrouter, sarvam, cartesia
from prompt import system_instructions
from dotenv import load_dotenv

load_dotenv()

llm = openrouter.LLM()
tts = cartesia.TTS()
stt = sarvam.STT()

agent = Agent(
    agent_name="Dental-Clinic-Receptionist",
    llm=llm,
    tts=tts,
    stt=stt,
    system_instructions=system_instructions,
    google_calendar=True
)

if __name__ == "__main__":
    # agent.download_files()  # Run once on fresh machines
    agent.dev()               # Local development
    # agent.start()           # Production

Agent Overview


Step 5: Enable Inbound Calls

Create inbound.py:

from siphon.telephony.inbound import Dispatch
from dotenv import load_dotenv

load_dotenv()

dispatch = Dispatch(
    agent_name="Dental-Clinic-Receptionist",
    dispatch_name="inbound-Dental-Clinic-Receptionist",
    sip_number=""  # Provided by your SIP provider
)

result = dispatch.agent()
print(result)

Run:

python inbound.py

Inbound Calling Guide


Step 6: Outbound Calls (Optional)

Use outbound calls for reminders or follow-ups.

Create outbound.py:

from siphon.telephony import Call
from dotenv import load_dotenv

load_dotenv()

call = Call(
    agent_name="Dental-Clinic-Receptionist",
    sip_trunk_setup={
        "name": "Dental-Clinic-Receptionist",
        "sip_address": "",
        "sip_number": "",
        "sip_username": "",
        "sip_password": ""
    },
    number_to_call=""
)

result = call.start()
print(result)

Run:

python outbound.py

Outbound Calling Guide


Step 7: Start the Agent

python agent.py

Your AI receptionist is now live


Production Scaling

SIPHON supports horizontal scaling out of the box.

Just run multiple agent instances, and calls are automatically distributed.

Scaling Guide


What This Looks Like in Practice

Booking an Appointment

  • Caller: “I need a cleaning next Tuesday at 2 PM”
  • Agent verifies name + phone
  • Checks Google Calendar
  • Books and confirms

✏️ Modifying an Appointment

  • Caller requests a change
  • Agent verifies identity
  • Shows only their appointments
  • Reschedules and confirms

❌ Cancelling an Appointment

  • Agent verifies identity
  • Confirms appointment
  • Cancels and acknowledges

Privacy by Design

  • Identity verification required
  • No cross-patient data exposure

Resources


Found this useful?
Give SIPHON a star on GitHub → https://github.com/blackdwarftech/siphon

2 Comments

1 vote
0

More Posts

Dashboard Operasional Armada Rental Mobil dengan Python + FastAPI

Masbadar - Mar 12

How I Built a React Portfolio in 7 Days That Landed ₹1.2L in Freelance Work

Dharanidharan - Feb 9

I Wrote a Script to Fix Audible's Unreadable PDF Filenames

snapsynapse - Apr 20

I’m a Senior Dev and I’ve Forgotten How to Think Without a Prompt

Karol Modelskiverified - Mar 19

Your AI Doesn't Just Write Tests. It Runs Them Too.

Kevin Martinez - May 12
chevron_left

Related Jobs

View all jobs →

Commenters (This Week)

3 comments
1 comment
1 comment

Contribute meaningful comments to climb the leaderboard and earn badges!