2026-09-08 · 原文发布日
AI语音通话结束后自动分拣:紧急来电推WhatsApp
这是一个付费模板。语音代理结束通话后POST一个webhook,流程把通话ID、结束原因、转写文本和来电号码归一化;没有可用文本的失败通话直接记为不可处理。有文本的交给OpenAI抽取来电人、意图、情绪、紧急度和后续日期,再结合自建的紧急关键词表判断是否紧急,紧急的通过WhatsApp推给老板,全部通话写入Google Sheets分类台账。
原文要点
原模板为n8n付费模板,作者Jessy Mariau。流程:语音代理在通话结束时POST一个webhook,携带通话元数据及可选的转写文本和摘要;流程把通话ID、结束原因、文本、来电号码归一化;无可用文本或命中已知失败结束原因的通话直接记为unprocessable写入Call Log页;有文本的交给OpenAI抽取来电人、号码、意图、情绪、紧急度、摘要、请求动作、跟进日期;再结合抽取的紧急度/情绪与自建紧急关键词表判断是否紧急;紧急的写入Urgent calls页并可选向老板的WhatsApp Business号码推送详情,常规写入Routine calls页。作者的运行成本与易坏点在其个人博客,未随模板公开。
这次做成什么
在n8n搭一条“通话结束自动分拣”流程:webhook收通话结束事件→归一化→失败通话直接登记→OpenAI抽取结构化字段→关键词+模型字段双重判断紧急度→紧急推WhatsApp、全部入Sheets台账。原模板需购买,以下为按原文思路独立设计的重搭方案,未实测,节点细节需在n8n实际版本核对。
准备什么
- n8n账号及一个能把结束通话POST到webhook的语音代理平台
- OpenAI API凭据与可用模型
- WhatsApp Business Cloud凭据、业务号码ID及老板接收号码
- 含Call Log、Urgent calls、Routine calls三个工作表的Google Sheets文档
- 一份自己业务的紧急关键词清单
具体怎么做
建webhook并接入语音平台
添加Webhook触发节点,方法POST,路径如voice-call-ended,激活后复制生产URL,到语音代理平台的通话结束回调配置里填入该URL,使其在每次挂断后推送含callId、endReason、transcript、summary、callerPhone的JSON。
归一化并识别不可处理通话
添加Code节点,粘贴下方“归一化与可处理判断脚本”:统一字段名,把endReason命中失败清单(如no-answer、machine-detected)或transcript与summary均为空的通话标记processable=false。
OpenAI抽取结构化字段
对processable=true的分支接OpenAI节点,用下方“通话抽取提示词”,输出callerName、callerPhone、intent、sentiment、urgency、summary、requestedAction、followUpDate的JSON。
紧急度判定与三路分支
再接一个Code或IF节点:当抽取的urgency为high,或文本命中紧急关键词表(下方配置)任一词条,判为urgent。三路输出:unprocessable→Call Log页;routine→Routine calls页;urgent→Urgent calls页并继续。
WhatsApp推送与开关
urgent分支后接IF节点读取handoff设置里的autoSend开关,开启时调用WhatsApp Business Cloud节点,用业务号码ID向老板号码发送模板或文本消息,内容含来电人、意图、紧急原因、跟进日期;发送前用测试数据确认格式。
可直接复制的材料
归一化与可处理判断脚本
字段名为本站假定的通用命名,需对照你语音平台实际POST的JSON字段逐一调整。
// n8n Code 节点,本站独立编写,非原模板代码
const body = $json.body || $json;
const failureReasons = ['no-answer', 'busy', 'machine-detected', 'failed'];
const transcript = (body.transcript || '').trim();
const summary = (body.summary || '').trim();
const endReason = (body.endReason || '').toLowerCase();
const hasText = transcript.length > 0 || summary.length > 0;
const processable = hasText && !failureReasons.includes(endReason);
return [{ json: {
callId: body.callId || 'unknown',
endReason: body.endReason || 'unknown',
callerPhone: body.callerPhone || body.from || '',
text: transcript || summary,
processable,
status: processable ? 'pending-extraction' : 'unprocessable'
} }];通话抽取提示词
本站独立编写,{{ $json.text }}需替换为实际表达式;模型调用可能产生费用。
你是通话内容分析器。下面是语音客服一通电话的转写或摘要。只输出一个JSON对象,不要输出其他文字。格式:{"callerName": 来电人姓名,未提及为null, "callerPhone": 来电号码字符串, "intent": 用一句中文概括来电目的, "sentiment": positive/neutral/negative 之一, "urgency": high/medium/low 之一, "summary": 50字以内中文摘要, "requestedAction": 来电人希望我们做的事,没有为null, "followUpDate": ISO日期字符串或null}。判断urgency时考虑:是否涉及停机等业务中断、安全或资金问题、明确投诉威胁、要求当天处理。
通话文本:
{{ $json.text }}分拣配置与紧急关键词表
关键词表与号码全为本站虚构占位,autoSend默认关,确认推送内容无误后再打开。
{
"urgentKeywords": ["停机", "无法使用", "数据丢失", "被锁", "投诉", "退款", "安全隐患", "今天就", "立刻", "emergency"],
"handoff": {
"autoSendWhatsApp": false,
"ownerWhatsApp": "+8613800000000",
"whatsAppPhoneNumberId": "替换为你的业务号码ID"
},
"sheets": { "logTab": "Call Log", "urgentTab": "Urgent calls", "routineTab": "Routine calls" }
}输入与输出示例
本站虚构演示,非原作者结果,未真实调用OpenAI或WhatsApp。
输入
{"callId":"c-2026-0312-07","endReason":"completed","callerPhone":"+8613900001111","transcript":"你们的设备今天突然停机了,产线全停,我需要今天之内有人来处理,否则只能投诉。"}对应输出
抽取结果{"callerName":null,"intent":"报修设备停机并要求当天处理","sentiment":"negative","urgency":"high","requestedAction":"今天内安排人员上门处理","followUpDate":null};命中关键词“停机”“今天就”“投诉”且urgency=high→判为urgent,写入Urgent calls页,autoSend开启时向老板WhatsApp发送含来电号码+8613900001111与摘要的告警。做完检查这些
- endReason为no-answer且无文本的测试POST只写Call Log,状态为unprocessable,不进入抽取
- 命中关键词的测试通话写入Urgent calls页,且字段与抽取JSON一一对应
- 常规通话只写Routine calls页,不触发任何WhatsApp发送
- autoSend关闭时紧急通话仅入表不发消息,开启后老板测试号码收到一条内容完整的告警
- 三个工作表的行数合计等于测试POST总数,无遗漏无重复
容易卡住的地方
- 原模板为付费商品,本方案为按公开说明独立重搭,webhook字段名需按你语音平台实际负载核对
- 失败结束原因清单因平台而异,直接照搬本站示例清单可能误判可处理通话
- WhatsApp Business Cloud向用户主动发消息受模板与会话规则限制,发送前需在Meta后台确认模板已审批
- 关键词命中是字串匹配,“投诉”类词出现在无关语境会误报,需定期复盘台账调整词表
- transcript与summary同时存在时本示例优先用transcript,长通话可能超模型上下文需截断
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Route AI voice call webhooks to WhatsApp and Google Sheets with OpenAI
- 原作者
- Jessy Mariau
- 原始发布日期
- 2026-09-08T03:14:30.704Z
- 来源
- https://n8n.io/workflows/19351