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

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文档
  • 一份自己业务的紧急关键词清单

具体怎么做

  1. 建webhook并接入语音平台

    添加Webhook触发节点,方法POST,路径如voice-call-ended,激活后复制生产URL,到语音代理平台的通话结束回调配置里填入该URL,使其在每次挂断后推送含callId、endReason、transcript、summary、callerPhone的JSON。

  2. 归一化并识别不可处理通话

    添加Code节点,粘贴下方“归一化与可处理判断脚本”:统一字段名,把endReason命中失败清单(如no-answer、machine-detected)或transcript与summary均为空的通话标记processable=false。

  3. OpenAI抽取结构化字段

    对processable=true的分支接OpenAI节点,用下方“通话抽取提示词”,输出callerName、callerPhone、intent、sentiment、urgency、summary、requestedAction、followUpDate的JSON。

  4. 紧急度判定与三路分支

    再接一个Code或IF节点:当抽取的urgency为high,或文本命中紧急关键词表(下方配置)任一词条,判为urgent。三路输出:unprocessable→Call Log页;routine→Routine calls页;urgent→Urgent calls页并继续。

  5. 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