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
- 1. 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 | INLINECODE0 | 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
CODEBLOCK0
Required n8n Credentials
| Credential Type | Used For | Placeholder in JSON |
|---|
| Google Sheets OAuth2 | Call logs, appointments, patient records | INLINECODE12 |
| 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
CODEBLOCK1
Google Sheets Schema
Call Log
| Column | Type | Description |
|---|
| callid | text | Unique call identifier |
| callerphone |
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 |
|---|
| appointmentid | text | Unique ID |
| patientname |
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 |
|---|
| patientphone | text | Primary key |
| patientname |
text | Full name |
| email | 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
- 1. 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
牙科AI前台接待系统
一个生产就绪、包含12个工作流的AI语音前台接待系统,专为牙科诊所设计。可处理来电接听、预约挂号、提醒通知、取消操作、候补名单管理、患者召回及员工升级处理——全程自动化。
痛点
牙科诊所因漏接电话、患者失约及人工排班开销而损失收入。前台员工60-70%的时间花在可自动化的电话接听上。非工作时间来电转入语音信箱,患者转而选择其他诊所。
本系统提供全天候AI电话处理、自动提醒及智能患者管理。
功能概述
- 1. 来电路由 — AI接听电话,识别意图(预约、取消、常见问题、紧急情况),相应路由
- 预约挂号 — 集成日历功能预约并发送短信确认
- 智能提醒 — 发送48小时、24小时及2小时提醒,减少失约
- 失约跟进 — 自动跟进失约患者
- 取消与候补 — 处理取消操作并从候补名单填补空缺
- 非工作时间捕获 — 捕获非工作时间来电,次日跟进
- 患者召回 — 主动联系逾期未就诊患者(洁牙、检查)
包含的工作流
| 编号 | 文件 | 用途 |
|---|
| 01 | 01-inbound-call-handler.json | 来电接收、意图分类、营业时间路由 |
| 02 |
02-appointment-booking.json | 预约挂号、日历同步、诊所管理系统集成 |
| 03 | 03-appointment-reminders.json | 多阶段提醒(48小时、24小时、2小时前) |
| 04 | 04-noshow-followup.json | 检测失约,发送跟进消息 |
| 05 | 05-cancellation-waitlist.json | 处理取消,从候补名单自动填补 |
| 06 | 06-after-hours-capture.json | 捕获非工作时间来电,次日回拨 |
| 07 | 07-patient-recall.json | 逾期患者召回活动 |
| 08 | 08-faq-handler.json | AI驱动的常见问题解答 |
| 09 | 09-staff-escalation.json | AI摘要+提醒,标记需人工处理的来电 |
| 10 | 10-crm-sync.json | 与CRM系统同步患者数据(HubSpot、诊所管理系统) |
| 11 | 11-daily-report.json | 每日指标邮件(来电、预约、失约等) |
| 12 | 12-sms-reply-handler.json | 处理患者回复的短信 |
架构
来电(Vapi AI语音)
|
v
工作流01:意图分类
|
+-- 预约 ---------> 工作流02:预约挂号
| |
| v
| 谷歌日历 + 诊所管理系统
|
+-- 取消 ---------> 工作流05:取消 + 候补填补
|
+-- 常见问题 -----> 工作流08:AI常见问题回复
|
+-- 紧急情况 -----> 工作流09:员工升级处理
|
+-- 非工作时间 ---> 工作流06:捕获待回拨
|
+-- 所有事件 -----> 工作流10:CRM同步
|
+-> 谷歌表格(通话记录、预约、患者)
+-> HubSpot CRM(可选)
定时任务:
+-- 工作流03:预约提醒(每小时检查)
+-- 工作流04:失约跟进(每2小时)
+-- 工作流07:患者召回(每周)
+-- 工作流11:每日报告(每天一次)
+-- 工作流12:短信回复处理(Webhook触发)
所需n8n凭证
| 凭证类型 | 用途 | JSON中的占位符 |
|---|
| 谷歌表格OAuth2 | 通话记录、预约、患者记录 | YOURGOOGLESHEETSCREDENTIALID |
| SMTP(Gmail或自定义) |
提醒、报告、通知 | YOUR
SMTPCREDENTIAL_ID |
| 谷歌日历OAuth2 | 预约排程 | 通过GOOGLE
CALENDARCRED_ID环境变量设置 |
| OpenAI | 常见问题回答生成、通话摘要 | 通过OPENAI
CREDID环境变量设置 |
| Twilio | 语音通话、短信 | 通过TWILIO
CREDID环境变量设置 |
环境变量
bash
谷歌表格
DENTAL
CALLLOG
SHEETID=您的表格ID
DENTAL
APPOINTMENTSSHEET_ID=您的表格ID
DENTAL
PATIENTSSHEET_ID=您的表格ID
谷歌日历
DENTAL
CALENDARID=您的日历ID
诊所详情
DENTAL
CLINICNAME=您的牙科诊所
DENTAL
CLINICPHONE=+1234567890
DENTAL
CLINICEMAIL=reception@yourpractice.com
DENTAL
CLINICADDRESS=123 Main St, Your City
DENTAL
EMERGENCYPHONE=+1234567890
DENTAL
DENTISTPHONE=+1234567890
DENTAL
STAFFEMAIL=staff@yourpractice.com
DENTAL
OWNEREMAIL=owner@yourpractice.com
Vapi AI语音
VAPI
APIKEY=您的Vapi密钥
VAPI
APIURL=https://api.vapi.ai
VAPI
REMINDERASSISTANT_ID=您的提醒助手ID
VAPI
NOSHOWASSISTANT_ID=您的失约助手ID
VAPI
WAITLISTASSISTANT_ID=您的候补助手ID
VAPI
RECALLASSISTANT_ID=您的召回助手ID
Twilio
TWILIO
PHONENUMBER=+1234567890
TWILIO
CREDID=您的n8n Twilio凭证ID
n8n基础设施
N8N
WEBHOOKBASE=https://您的n8n实例.com/webhook
GOOGLE
CALENDARCRED_ID=您的n8n谷歌日历凭证ID
OPENAI
CREDID=您的n8n OpenAI凭证ID
可选(CRM / 诊所管理)
HUBSPOT
APIKEY=您的HubSpot密钥
PMS
APIURL=https://您的诊所管理系统.com/api
PMS
APIKEY=您的诊所管理系统密钥
谷歌表格架构
通话记录
| 列 | 类型 | 描述 |
|---|
| callid | 文本 | 唯一通话标识 |
| callerphone |
文本 | 来电者电话号码 |
| caller_name | 文本 | 患者姓名(如已识别) |
| intent | 文本 | 预约/取消/常见问题/升级/非工作时间 |
| timestamp | 日期时间 | 通话时间戳 |
| duration | 数字 | 通话时长(秒) |
| summary | 文本 | AI生成的通话摘要 |
| outcome | 文本 | 已预约/已取消/已回答/已升级/已捕获 |
预约
| 列 | 类型 | 描述 |
|---|
| appointmentid | 文本 | 唯一ID |
| patientname |
文本 | 患者全名 |
| patient_phone | 文本 | 电话号码 |
| service_type | 文本 | 洁牙/检查/补牙/牙冠/等 |
| date | 日期 | 预约日期 |
| time | 文本 | 预约时间 |
| status | 文本 | 已确认/已提醒/已完成/失约/已取消 |
| showed_up | 布尔值 | 患者是否到场 |
| reminder_48h | 布尔值 | 48小时提醒已发送 |
| reminder_24h | 布尔值 | 24小时提醒已发送 |
| reminder_2h | 布尔值 | 2小时提醒已发送 |
患者
| 列 | 类型 | 描述 |
|---|
| patientphone | 文本 | 主键 |
| patientname |
文本 | 全名 |
| email | 文本 | 邮箱地址 |
| last_service | 文本 | 最近服务类型 |
| last_visit | 日期 | 最近就诊日期 |
| recall_status | 文本 | 到期/已通知/已预约/已完成 |
| total_visits | 数字 | 累计就诊次数 |
快速入门
1. 前提条件
- - n8n v2.4+(自托管)
- Vapi.ai账户(AI语音通话)
- Twilio账户(电话号码+短信)
- 谷歌表格OAuth2凭证
- 谷歌日历API访问权限
2. 创建表格
按照上述架构设置3个谷歌表格:通话记录、预约、患者。可选添加候补名单、升级记录、非工作时间队列和