2026-10-08 · 原文发布日
n8n模板:下班后AI电话自动分级,紧急情况Slack呼叫值班并邮件日报
接收Vapi或Retell的通话结束webhook后,工作流整理来电人、转写文本和时间,查同一来电人的历史记录,用GPT-4.1把通话分为紧急/加急/常规/垃圾四类并生成一句话摘要。重复来电合并为同一事件,达到设定严重级别或短时间第三次来电就升级:写入Google Sheets通话日志,向值班Slack频道告警,10分钟未处理再呼叫备份频道。每天早上7点汇总夜间来电,用Gmail发出HTML简报。模板免费。
原文要点
n8n模板库第20656号工作流(模板免费)接收Vapi或Retell的通话结束webhook并立即回执,归一化来电人、转写与时间后,从Google Sheets读取分级设置,用GPT-4.1把通话分为emergency/urgent/routine/spam并生成一句话摘要。同一来电人的重复来电在n8n Data Table中合并为一个事件,达到设定严重级别或重复窗口内第三次来电即升级:写入Sheets通话日志、向值班Slack频道告警,10分钟未标记handled再呼备份频道。每天早上7点汇总夜间来电,仅当有来电时经Gmail发出HTML简报。
这次做成什么
在自己的n8n实例上配置这套下班后电话分级流程,并先用合成POST数据代替真实Vapi/Retell完成端到端验证:分级正确、重复来电合并、第三次升级、备份频道二次告警、次日7点日报。
准备什么
- 可登录的n8n实例,版本需支持Data Table节点功能
- OpenAI API凭据(GPT-4.1调用按token另计费)
- Google Sheets、Slack、Gmail三类凭据各一份
- 测试阶段不需要真实Vapi账号,用curl或HTTP工具直接POST即可
具体怎么做
导入模板并建Google Sheets
在n8n模板库打开20656号工作流导入实例。新建一个Google Sheets文档:Settings页按行放置Business Name、Emergency Examples、On Call Slack Channel、Backup Slack Channel、Escalate After Minutes、Repeat Caller Window Minutes、Escalate Severities、Digest Email;Call Log页按工作流节点注释里的列名建表头(来电人、时间、转写、级别、摘要等)。
建n8n Data Table事件台账
在n8n左侧Data Tables中新建一张表,列名为identity、incidentId、calls、severity、lastCallMs、escalated、backupEscalated、handled、summary,用于跨来电合并同一事件。复制该表ID。
替换ID并接凭据
在工作流中找到含YOUR_GOOGLE_SHEET_ID和YOUR_INCIDENT_TABLE_ID的节点,替换为上面的Sheets文档ID和Data Table ID;给OpenAI、Sheets、Slack、Gmail节点分别绑定凭据;若不在Settings页配置,则在对应节点填默认Slack频道与日报收件邮箱。
用合成POST触发并验证分级
激活工作流后复制Call Ended Webhook的生产URL,用下方测试JSON直接POST。检查:webhook立即返回200回执;Call Log页新增一行;Data Table中该号码calls=1且severity符合预期。
验证升级与日报链路
在重复窗口分钟数内用同一号码再POST两次:第二次应只更新同一事件calls=2不重复告警;第三次或命中emergency时应向值班Slack频道发告警。不要标记handled,等Escalate After Minutes(测试时可先改成1分钟)后确认备份频道收到二次告警。最后手动执行7点定时节点,确认Gmail收到HTML简报;无来电的日子应不发邮件。全部通过后,再把生产URL填到Vapi的server URL或Retell的end-of-call webhook。
可直接复制的材料
Google Sheets两页结构(本站整理版)
列名需与原工作流节点注释逐项核对后再填,本表为本站按原文列出的字段整理,具体拼写以模板内为准。
【Settings页,两列:Key | Value】
Business Name | 样品客服中心
Emergency Examples | 有人受伤;火灾或烟雾;水管爆裂漏水;断电且有病人在家
On Call Slack Channel | #oncall-duty
Backup Slack Channel | #oncall-backup
Escalate After Minutes | 10
Repeat Caller Window Minutes | 120
Escalate Severities | emergency,urgent
Digest Email | manager@example.com
【Call Log页表头】
timestamp | callerIdentity | callerPhone | transcript | severity | summary | incidentId | escalated | handled通话结束webhook合成测试数据
字段名需对照模板中归一化节点的实际映射调整;先POST此条,再在窗口期内重发两次同号码数据验证合并与第三次升级。
{
"event": "end-of-call",
"call": {
"id": "test-call-0001",
"startedAt": "2026-10-08T23:41:00Z",
"endedAt": "2026-10-08T23:46:12Z",
"customer": {
"number": "+8613800000001",
"name": "测试来电人甲"
}
},
"transcript": "你好,我们门店后厨水管爆了,水已经漫到配电箱旁边,现在没人敢进去,需要马上有人来处理。",
"metadata": {"source": "manual-test"}
}分级提示词(本站独立撰写,可替换模板内默认提示词)
原模板未公开其GPT-4.1提示词全文,此为本站按原文四类分级逻辑独立撰写的可粘贴版本,花括号占位符按你工作流的变量名替换。
你是客服热线分级员。根据下面的通话转写,把来电分为四类之一:emergency(涉及人身安全、财产损失正在进行、必须立即处理)、urgent(影响业务但不危及安全,需当晚回电)、routine(常规咨询,次日处理即可)、spam(推销、骚扰、空号)。只输出一行JSON,不要输出其他内容:{"severity":"...","summary":"一句话中文摘要,不超过40字"}。
商家名称:{{Business Name}}
紧急情况参考样例:{{Emergency Examples}}
通话转写:{{transcript}}输入与输出示例
本站虚构演示,非原作者运行结果;具体告警文案以模板实际节点为准。
输入
连续POST三条webhook,号码均为+8613800000001,转写分别为“水管爆裂漏水”“还在漏水,请快点”“你们到底来不来”,间隔各5分钟。对应输出
Call Log新增3行;Data Table中该号码同一incidentId下calls从1变到3;前两次无Slack消息,第三次触发升级,#oncall-duty收到告警“紧急来电(第3次):水管爆裂漏水持续未处理——来电人 +8613800000001”;10分钟未标记handled后#oncall-backup收到二次告警;次日7点Gmail收到含此事件的HTML日报。做完检查这些
- webhook收到POST后立即返回200,不等分级完成才响应
- 同一号码窗口期内重复来电在Data Table中合并为同一incidentId,calls递增
- 命中emergency或第三次来电时值班Slack频道收到告警,且10分钟未handled后备份频道收到二次告警
- 手动执行日报节点后Gmail收到HTML简报,全夜无来电时不发邮件
容易卡住的地方
- Data Table是较新的n8n功能,旧版本实例没有该节点,导入模板会报缺失节点
- 模板本身免费,但GPT-4.1、Vapi/Retell通话分钟数均另计费,需在各自控制台核对价格
- Slack频道名需与凭据权限匹配,机器人未加入频道会发信失败
- Escalate After Minutes与Repeat Caller Window Minutes的时区基准为UTC,跨零点测试时注意
- 本站未实测该模板,节点参数、列名拼写请逐项与原模板核对
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Triage after-hours Vapi and Retell calls with GPT-4.1, Slack, and Gmail
- 原作者
- isaWOW
- 原始发布日期
- 2026-10-08T05:57:57.349Z
- 来源
- https://n8n.io/workflows/20656