Dental AI Receptionist
A production-ready, 12-workflow AI voice receptionist system for dental practices. Handles inbound calls, appointment booking, reminders, cancellations, waitlist management, patient recall, and staff escalation — fully automated.
Problem
Dental practices lose revenue from missed calls, no-shows, and manual scheduling overhead. Front desk staff spend 60-70% of their time on phone calls that could be automated. After-hours calls go to voicemail and patients book elsewhere.
This system provides 24/7 AI-powered call handling, automated reminders, and intelligent patient management.
What It Does
- Inbound Call Routing — AI answers calls, identifies intent (booking, cancellation, FAQ, emergency), routes accordingly
- Appointment Booking — Books appointments with calendar integration and SMS confirmation
- Smart Reminders — Sends 48h, 24h, and 2h reminders to reduce no-shows
- No-Show Followup — Automatically follows up with patients who miss appointments
- Cancellation & Waitlist — Handles cancellations and fills gaps from waitlist
- After-Hours Capture — Captures calls outside business hours for next-day followup
- Patient Recall — Proactive outreach for overdue care (cleanings, checkups)
Included Workflows
| # | File | Purpose |
|---|---|---|
| 01 | 01-inbound-call-handler.json | Call intake, intent classification, business hours routing |
| 02 | 02-appointment-booking.json | Book appointments, calendar sync, PMS integration |
| 03 | 03-appointment-reminders.json | Multi-stage reminders (48h, 24h, 2h before) |
| 04 | 04-noshow-followup.json | Detect no-shows, send followup messages |
| 05 | 05-cancellation-waitlist.json | Process cancellations, auto-fill from waitlist |
| 06 | 06-after-hours-capture.json | Capture after-hours calls for next-day callback |
| 07 | 07-patient-recall.json | Recall campaigns for overdue patients |
| 08 | 08-faq-handler.json | AI-powered answers to common questions |
| 09 | 09-staff-escalation.json | AI summary + alert for calls needing human attention |
| 10 | 10-crm-sync.json | Sync patient data with CRM (HubSpot, PMS) |
| 11 | 11-daily-report.json | Daily metrics email (calls, bookings, no-shows, etc.) |
| 12 | 12-sms-reply-handler.json | Process inbound SMS replies from patients |
Architecture
Inbound Call (Vapi AI Voice)
|
v
Workflow 01: Intent Classification
|
+-- Booking ---------> Workflow 02: Appointment Booking
| |
| v
| Google Calendar + PMS
|
+-- Cancellation ----> Workflow 05: Cancel + Waitlist Fill
|
+-- FAQ -------------> Workflow 08: AI FAQ Response
|
+-- Emergency -------> Workflow 09: Staff Escalation
|
+-- After Hours -----> Workflow 06: Capture for Callback
|
+-- All Events ------> Workflow 10: CRM Sync
|
+-> Google Sheets (Call Log, Appointments, Patients)
+-> HubSpot CRM (optional)
Scheduled:
+-- Workflow 03: Appointment Reminders (hourly check)
+-- Workflow 04: No-Show Followup (every 2 hours)
+-- Workflow 07: Patient Recall (weekly)
+-- Workflow 11: Daily Report (once daily)
+-- Workflow 12: SMS Reply Handler (webhook-triggered)
Required n8n Credentials
| Credential Type | Used For | Placeholder in JSON |
|---|---|---|
| Google Sheets OAuth2 | Call logs, appointments, patient records | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
| SMTP (Gmail or custom) | Reminders, reports, notifications | YOUR_SMTP_CREDENTIAL_ID |
| Google Calendar OAuth2 | Appointment scheduling | Set via GOOGLE_CALENDAR_CRED_ID env |
| OpenAI | FAQ answer generation, call summaries | Set via OPENAI_CRED_ID env |
| Twilio | Voice calls, SMS messaging | Set via TWILIO_CRED_ID env |
Environment Variables
# Google Sheets
DENTAL_CALL_LOG_SHEET_ID=your-sheet-id
DENTAL_APPOINTMENTS_SHEET_ID=your-sheet-id
DENTAL_PATIENTS_SHEET_ID=your-sheet-id
# Google Calendar
DENTAL_CALENDAR_ID=your-calendar-id
# Clinic Details
DENTAL_CLINIC_NAME=Your Dental Practice
DENTAL_CLINIC_PHONE=+1234567890
DENTAL_CLINIC_EMAIL=reception@yourpractice.com
DENTAL_CLINIC_ADDRESS=123 Main St, Your City
DENTAL_EMERGENCY_PHONE=+1234567890
DENTAL_DENTIST_PHONE=+1234567890
DENTAL_STAFF_EMAIL=staff@yourpractice.com
DENTAL_OWNER_EMAIL=owner@yourpractice.com
# Vapi AI Voice
VAPI_API_KEY=your-vapi-key
VAPI_API_URL=https://api.vapi.ai
VAPI_REMINDER_ASSISTANT_ID=your-reminder-assistant-id
VAPI_NOSHOW_ASSISTANT_ID=your-noshow-assistant-id
VAPI_WAITLIST_ASSISTANT_ID=your-waitlist-assistant-id
VAPI_RECALL_ASSISTANT_ID=your-recall-assistant-id
# Twilio
TWILIO_PHONE_NUMBER=+1234567890
TWILIO_CRED_ID=your-n8n-twilio-credential-id
# n8n Infrastructure
N8N_WEBHOOK_BASE=https://your-n8n-instance.com/webhook
GOOGLE_CALENDAR_CRED_ID=your-n8n-google-calendar-credential-id
OPENAI_CRED_ID=your-n8n-openai-credential-id
# Optional (CRM / Practice Management)
HUBSPOT_API_KEY=your-hubspot-key
PMS_API_URL=https://your-pms.com/api
PMS_API_KEY=your-pms-key
Google Sheets Schema
Call Log
| Column | Type | Description |
|---|---|---|
| call_id | text | Unique call identifier |
| caller_phone | text | Caller's phone number |
| caller_name | text | Patient name (if identified) |
| intent | text | booking / cancellation / faq / escalation / after-hours |
| timestamp | datetime | Call timestamp |
| duration | number | Call duration in seconds |
| summary | text | AI-generated call summary |
| outcome | text | booked / cancelled / answered / escalated / captured |
Appointments
| Column | Type | Description |
|---|---|---|
| appointment_id | text | Unique ID |
| patient_name | text | Patient full name |
| patient_phone | text | Phone number |
| service_type | text | cleaning / checkup / filling / crown / etc. |
| date | date | Appointment date |
| time | text | Appointment time |
| status | text | confirmed / reminded / completed / no-show / cancelled |
| showed_up | boolean | Whether patient attended |
| reminder_48h | boolean | 48h reminder sent |
| reminder_24h | boolean | 24h reminder sent |
| reminder_2h | boolean | 2h reminder sent |
Patients
| Column | Type | Description |
|---|---|---|
| patient_phone | text | Primary key |
| patient_name | text | Full name |
| text | Email address | |
| last_service | text | Most recent service type |
| last_visit | date | Most recent visit date |
| recall_status | text | due / notified / scheduled / completed |
| total_visits | number | Lifetime visit count |
Quick Start
1. Prerequisites
- n8n v2.4+ (self-hosted)
- Vapi.ai account (AI voice calls)
- Twilio account (phone number + SMS)
- Google Sheets OAuth2 credentials
- Google Calendar API access
2. Create Sheets
Set up 3 Google Sheets with the schemas above: Call Log, Appointments, Patients. Optionally add Waitlist, Escalations, After-Hours Queue, and Daily Reports sheets.
3. Configure Vapi Assistant
Create a Vapi assistant with your dental practice's greeting, business hours, services, and FAQ responses.
4. Import Workflows
Import all 12 JSON files into n8n. Replace all YOUR_* placeholders and set environment variables.
5. Activate
Activate workflows in order: 01 first (inbound handler), then the rest. Test with a phone call to your Vapi number.
Use Cases
- Solo dental practices — Replace or augment front desk with 24/7 AI receptionist
- Multi-location dental groups — Centralized call handling across clinics
- Dental service organizations (DSOs) — Scalable patient communication
- Orthodontic practices — Long appointment cycles benefit from recall automation
- Dental IT providers — Offer AI receptionist as a managed service to clients
Revenue Potential
- For practices: Reduce missed calls by 80%+, no-shows by 30-50%
- As a service: Charge $500-1,500/month per dental practice
- Per-call pricing: $1-3 per handled call
Requirements
- n8n v2.4+ (self-hosted recommended)
- Vapi.ai account ($0.05-0.10 per minute)
- Twilio account ($0.0075 per SMS)
- Google Sheets + Calendar API credentials
- Optional: HubSpot CRM, Dentrix/Eaglesoft/OpenDental PMS