2026-10-01 · 原文发布日
Vapi语音座席打电话查档期并预约上门评估
一个免费n8n模板,给Vapi语音助手提供两个工具接口:收到查档期请求时从Google Calendar拉当天忙碌时段,交给Gemini换算成口语化的一小时空档(默认周一到周六9点到17点)回复给语音助手;收到预约请求时解析联系人信息创建日历事件、把咨询记录写进Google Sheets、用SMTP发确认邮件,并把成功信息返回给语音助手读给来电人。工作日时长等规则可在系统提示里改。
原文要点
这是Ali Amin发布的免费n8n模板(工作流20300),源自其为英国家政护理机构搭建的语音预约系统。它向Vapi语音助手暴露两个webhook工具:check_assessment_availability接收日期参数,从Google Calendar取当天忙碌时段,交给Gemini生成周一到周六9点至17点的口语化一小时空档,周日直接拒绝;book_care_assessment解析多种Vapi工具调用格式,创建一小时日历事件、追加Google Sheets记录、SMTP发确认邮件,并把话术回给语音助手朗读。默认时区Europe/London,规则写在AI系统提示里。
这次做成什么
在本地n8n部署该模板并接通Vapi,让来电人通过电话就能查档期、约上门评估;配套设计一套不经真实电话线的webhook直连练习,用curl模拟Vapi的两次工具调用验证整条链路。
准备什么
- n8n实例(云端或自托管)并可访问n8n.io模板库
- Vapi账号及一个已建助手,能配置server tools
- Google Calendar、Google Sheets、Gemini API、SMTP四类凭据
- 一张建好表头的咨询记录表(如日期、姓名、电话、邮箱、备注)
具体怎么做
导入模板并挂凭据
在n8n的Templates页搜索工作流20300导入画布。在两个Google Calendar节点选同一本预约日历,时区若不是欧洲伦敦就改;Gemini聊天模型节点绑定Google AI凭据;Sheets追加节点选择你的咨询表;SMTP节点设置发件地址。
在Vapi建两个server tools
进入Vapi控制台助手的Tools配置,新建check_assessment_availability(参数date,字符串)和book_care_assessment(参数按画布列出的联系人、日期时间字段照抄),URL填n8n激活后两个webhook节点的production地址,注意不是test地址。
用curl模拟查档期调用
工作流激活后,向查档期webhook POST一条合成Vapi工具调用报文(见材料中的测试payload),观察是否返回带原toolCallId的口语化空档文本,例如"周三上午十点和下午两点有空"。
用curl模拟预约调用
向预约webhook POST包含姓名、电话、邮箱、评估日期时间的合成报文,依次核对:日历出现一小时事件、Sheets新增一行、邮箱收到确认信、webhook返回成功话术。
调规则
在AI节点的系统提示里改工作日、时段和单时长(默认周一至周六9-17点、一小时);确认邮件HTML里替换机构名和页脚。改字段时Vapi工具参数、解析节点、Sheets表头要三处同步。
可直接复制的材料
Vapi两个server tools的定义示例
本站按模板描述独立编写的示意配置;URL、参数名必须与原模板画布及你激活后的webhook地址核对后再用,勿当作可原样导入的官方文件。
{
"tools": [
{
"type": "function",
"function": {
"name": "check_assessment_availability",
"description": "查询某天的上门评估空档",
"parameters": {
"type": "object",
"properties": {
"date": {"type": "string", "description": "YYYY-MM-DD格式的目标日期"}
},
"required": ["date"]
}
},
"server": {"url": "https://你的n8n域名/webhook/availability-prod路径"}
},
{
"type": "function",
"function": {
"name": "book_care_assessment",
"description": "为来电人预约一小时上门评估",
"parameters": {
"type": "object",
"properties": {
"name": {"type": "string"},
"phone": {"type": "string"},
"email": {"type": "string"},
"datetime": {"type": "string", "description": "ISO格式预约开始时间"}
},
"required": ["name", "phone", "email", "datetime"]
}
},
"server": {"url": "https://你的n8n域名/webhook/booking-prod路径"}
}
]
}模拟Vapi工具调用的测试payload
本站虚构的合成测试数据,id与日期均为练习值;Vapi真实报文格式可能不同,原模板已做防御式解析,以实际收到的结构为准。
{
"message": {
"type": "tool-calls",
"toolCallList": [
{
"id": "call_test_001",
"name": "check_assessment_availability",
"arguments": {"date": "2026-10-07"}
}
]
}
}空档换算系统提示(中文改写练习版)
本站独立撰写的中文练习提示,用于理解模板的换算逻辑;接入原模板时请改回英文并以画布上原系统提示为准。
你是预约档期换算助手。输入是某一天在日历上的忙碌时段列表(含起止时间)。规则:只在周一到周六9:00至17:00之间排班,周日一律回复"周日不安排评估,请换一天"。从营业时间里扣除忙碌时段后,把剩余时间切成若干一小时可约窗口,不足一小时的部分忽略。输出给语音助手朗读的口语化中文,例如:"这天上午十点到十一点、下午两点到三点都有空,您想约哪个?"不要输出任何JSON或时间戳,不要提到日历、API等技术词。忙碌时段如下:\n{{ $json.busySlots }}输入与输出示例
本站虚构演示,非模板实际运行结果;真实输出措辞取决于Gemini和你的系统提示。
输入
向查档期webhook POST:{"message":{"toolCallList":[{"id":"call_test_001","name":"check_assessment_availability","arguments":{"date":"2026-10-07"}}]}},当天日历已有9:00-10:30和13:00-14:00两段忙碌对应输出
{"results":[{"toolCallId":"call_test_001","result":"10月7日周三上午十点半到十一点半、十一点半到十二点半,以及下午两点到五点之间的整点时段都可以安排一小时评估,您想约哪个时间?"}]}做完检查这些
- 激活工作流后curl查档期返回的JSON里toolCallId与请求中的id一致,且空档文本避开了日历已有的忙碌时段
- 发送周日日期时,回复明确拒绝并建议改期,不返回任何可约窗口
- curl预约调用后,目标日历出现恰好一小时的评估事件,Sheets追加一行且字段对位正确
- 测试邮箱收到确认邮件,webhook响应包含供语音助手朗读的成功话术
容易卡住的地方
- webhook必须用激活后的production URL,test URL只在画布手动执行时监听,Vapi外呼会打到不存在的地址
- 默认时区是Europe/London,国内使用不改时区会导致空档整体偏移八小时
- 原模板默认拒绝周日是写在提示里的业务规则,不是故障;改规则要同步改提示而不是改代码
- 增加或改名预约字段时只改Vapi一侧会导致解析节点取不到值,三处必须一起改
- Gemini生成措辞有随机性,不要把空档文本当作精确时段校验依据,以日历事件为准
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Book home care assessments by phone with Vapi, Google Gemini and Google Calendar
- 原作者
- Ali Amin
- 原始发布日期
- 2026-10-01T14:26:35.933Z
- 来源
- https://n8n.io/workflows/20300