AI PLAY玩法更新持续收录
← 回到更新流

2026-10-06 · 原文发布日

牙科诊所聊天前台:查知识库、算空档、订日历

免费n8n模板实现一个聊天式诊所前台:管理员通过带鉴权的表单上传诊所资料,切块后用OpenAI嵌入存入Qdrant向量库;患者在n8n聊天里提问时,AI代理结合会话记忆检索资料作答。预约时工作流按营业时间、工作日、时区、时长和Google Calendar忙闲计算可选时段,收集姓名邮箱并二次确认后才建私密日程,且只有拿到事件ID才回复预订成功。模板明确不含改约、取消与短信,并发预约仍可能撞档需人工复核。

原文要点

该免费模板用带鉴权的表单上传UTF-8诊所资料,切块后经OpenAI嵌入写入Qdrant;患者在n8n聊天提问时,OpenAI代理结合会话记忆检索作答。预约走独立的鉴权日历端点:按诊所时区、营业时间、工作日、时长、最小提前量和预约 horizon 结合Google Calendar忙闲算时段,收姓名邮箱后二次确认,建私密日程并请求给患者发邀请,只有拿到事件ID才回报成功。明确不含短信、语音、改约和取消;上传是追加式,旧文档要在Qdrant手动删;查忙闲与建事件非原子,并发可能撞档需人工复核。

这次做成什么

在本站自建的隔离测试环境里跑通「传资料→问答→算空档→确认→建日程」全链路,用虚构诊所和测试日历验证每一步的通过条件,不碰真实患者数据。

准备什么

  • 一个含模板所需节点版本的n8n实例且有HTTPS公网地址
  • 有可用额度的OpenAI API账号(聊天模型+嵌入)
  • 一个Qdrant实例并能创建集合
  • 有读取忙闲和创建事件权限的Google Calendar OAuth2凭据及一个测试日历
  • 一份UTF-8编码的虚构诊所资料文本文件

具体怎么做

  1. 建Qdrant集合并接凭据

    在Qdrant创建名为dental_clinic_knowledge的集合,维度1536、距离Cosine,对应text-embedding-3-small;把同一OpenAI凭据挂到聊天模型和两个嵌入节点,同一Qdrant凭据挂到两个向量库节点。

  2. 配置日历计算节点

    在Configure and Validate Calendar Request里填测试日历ID、诊所时区(如Asia/Shanghai)、营业时段(如09:00-12:00与14:00-18:00)、工作日(周一到周六)、单号时长30分钟、最小提前2小时、可约未来14天;两个Google HTTP Request节点用同一OAuth2凭据。

  3. 配置端点鉴权

    在Configure Chat Endpoint填你的n8n HTTPS基础URL;建一个HTTP Header Auth凭据,Name为X-Clinic-Key,Value为一段强随机密钥,并把它同时选到Calendar API和两个日历工具节点;知识上传表单单独配Basic Auth。

  4. 上传资料并激活

    用表单上传虚构诊所资料文本(见材料),激活/发布工作流让日历端点注册生效,然后在编辑器聊天里依次测:知识问答、约满时段拒绝、一次完整成功预约,确认Google返回事件ID后才显示成功。

可直接复制的材料

虚构诊所资料上传文本

本站虚构示例,上传前请整份替换为真实诊所已审核资料;不要上传任何患者记录

春风牙科诊所服务说明(测试用虚构资料)
地址:杭州市西湖区文三路100号2层
营业时间:周一至周六 09:00-12:00,14:00-18:00;周日休息
服务项目与参考价:常规洗牙280元/次约30分钟;儿童涂氟150元/次;补牙按材料400-900元;初诊检查免费
预约规则:需至少提前2小时预约,最多可约未来14天;迟到15分钟以上需改约
医保:暂不支持医保结算,支持微信与支付宝
电话:0571-88880000(虚构号码)

前台接待指令提示词

本站独立撰写的接待指令示例,用于替换模板中的receptionist instructions;诊所名称和规则按需修改

你是春风牙科诊所的聊天前台。规则:1)只根据知识库检索到的资料回答诊所问题,查不到就说「这个问题请致电前台确认」,不要编造价格或政策;2)患者要预约时,先问清服务项目、期望日期和时段,再调用日历查询工具拿可选时段,给患者最多5个选项;3)患者选定后,收集姓名和邮箱,复述完整预约信息请患者回复「确认」;4)只有工具返回预订成功和事件ID时,才告知预约成功并提醒查收日历邀请;5)不处理改约、取消和退款,统一引导电话处理;6)不索取也不要讨论病历、身份证号等敏感信息。

日历节点配置示例

本站独立设计的配置示例,字段名需以模板内Configure and Validate Calendar Request节点的实际字段为准核对

{
  "calendarId": "test-clinic@group.calendar.google.com",
  "timezone": "Asia/Shanghai",
  "openingHours": [{"start": "09:00", "end": "12:00"}, {"start": "14:00", "end": "18:00"}],
  "workingDays": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  "slotDurationMinutes": 30,
  "minimumNoticeHours": 2,
  "bookingHorizonDays": 14
}

输入与输出示例

本站虚构演示对话,时段和回复均为示意,非模板实际运行结果

输入

患者消息:你们周六下午营业吗?我想下周二下午约个洗牙,我叫林晓,邮箱linxiao@example.com

对应输出

助手回复示例:周六下午14:00-18:00营业。下周二(假设为11月11日)下午可选时段:14:00、14:30、15:30、16:00、17:00。请回复想订的时间。患者选14:30并确认后,助手先复述「林晓,洗牙30分钟,下周二14:30,邀请发送至linxiao@example.com」,患者回复「确认」、工具返回事件ID后,助手回复:预约成功,日历邀请已请求发送,请查收邮件。

做完检查这些

  • 聊天问「洗牙多少钱」时回答来自上传资料中的280元而非编造数字
  • 约一个已被测试日历占用的时段时得到明确的不可用回复而非报错
  • 成功预约后Google日历里出现私密事件且患者测试邮箱收到邀请
  • 表单未带Basic Auth、日历端点未带X-Clinic-Key时均被拒绝

容易卡住的地方

  • 知识上传是追加式:更新资料前必须先在Qdrant里删掉旧文档,否则新旧答案混杂
  • 查忙闲和建事件不是原子操作,测试时模拟两个并发请求可能都成功,需约定人工复核流程
  • 模板不含改约、取消、短信和语音,别向运营承诺这些能力
  • 日历邀请只是请求发送,送达未验证,需在测试邮箱确认实际收到
  • 最小提前量按诊所时区算,服务器时区配错会导致可约时段整体偏移

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Book dental appointments via chat using OpenAI, Qdrant, and Google Calendar
原作者
Syed Maaz Saeed
原始发布日期
2026-10-06T10:02:21.106Z
来源
https://n8n.io/workflows/20527