2026-09-08 · 原文发布日
WhatsApp客服消息多智能体分流与回复
通过Evolution API的webhook接收WhatsApp消息,先过滤机器人自身消息防止循环,再由Gemini编排器结合Redis对话记忆判断意图:能直接答的直接答,否则转给销售、客服或财务三个专员智能体,必要时调用Google Calendar预约会议;合格线索按手机号写入Google Sheets,回复文本再经Evolution API发回客户。配置涉及Evolution、Gemini、Redis、表格和日历多套凭证。
原文要点
作者Murilo Costa的n8n工作流通过Evolution API的messages.upsert webhook接收WhatsApp消息,先规范化出chatId、手机号、发件人、正文和fromMe标记,丢弃机器人自身或无正文的事件防循环;再由Google Gemini编排器配Redis记忆判断意图,直接回答或调用销售、客服、财务三个专员工具,可选调用Google Calendar建会议;结果解析为含replyText、category、线索字段和shouldLog的结构化对象,shouldLog为真时按手机号追加或更新Google Sheets;最后经Evolution API的sendText端点把回复发回客户。需配置Evolution的apikey头认证、Gemini、Redis、Sheets与Calendar的OAuth2共多套凭据。
这次做成什么
在本站复刻一条可测试的WhatsApp多智能体分流流程:入站消息→防循环过滤→Gemini编排器分流→专员回复/建会→合格线索落表→回复发回。由于未提供原工作流文件,本站给出独立的编排器提示词、测试webhook载荷和配置清单,读者在自己的n8n中按节点类型重建。
准备什么
- 自托管或云端n8n实例,且Production webhook URL可被Evolution API公网访问
- 已运行的Evolution API实例及其API Key,已连接一个测试用WhatsApp号码
- Google Gemini API Key、可连的Redis实例、Google Sheets与Google Calendar的OAuth2凭据
- 一张含phone、name、category、lastMessage、updatedAt列的Google表格
具体怎么做
接webhook并规范化载荷
在n8n新建Webhook节点,方法POST。后面接Code节点,从Evolution的messages.upsert载荷中取出data.key.remoteJid作为chatId、去掉@后缀得手机号、pushName作为发件人名、message.conversation或extendedTextMessage.text作为正文,并读取data.key.fromMe生成布尔标记,统一输出一行JSON供后续节点使用。
防循环过滤
接IF节点,条件为fromMe等于true或正文为空时走丢弃分支(连到NoOp结束)。这是防机器人回复自己触发死循环的关键,原文明确这两类事件要忽略,切勿省略。
配置编排器与记忆
放AI Agent节点作为编排器,凭据选Google Gemini(PaLM),Memory选Redis(填host、port、密码,session key用手机号保证同一客户对话连续)。系统提示词使用下方材料一的完整提示词,要求模型只输出规定结构的JSON。三个专员(销售/客服/财务)各建一个AI Agent工具节点,同样接Gemini与Redis,分别写各自领域提示词。
挂日历工具并解析输出
把Google Calendar节点作为编排器的工具,操作为创建事件,日历ID与时区从Config读取,让编排器在客户请求约时间时调用。编排器后接Code节点,把模型输出JSON.parse成对象,校验必须有replyText、category、shouldLog三字段,缺字段时给出兜底replyText提示稍后再试。
线索落表并回发消息
IF节点判断shouldLog为true时进入Google Sheets节点,操作为Append or Update,匹配列选phone,写入手机号、姓名、类别、最近消息和时间戳。最后HTTP Request节点POST到Evolution API实例的/message/sendText/{实例名}路径,Header带apikey(用HTTP Header Auth凭据),body为{number:手机号, text:replyText}。
可直接复制的材料
编排器系统提示词(本站独立编写)
本站独立编写,替换了原作者未公开的提示词;类别定义可按业务增删,但JSON字段名须与解析节点一致
你是WhatsApp客服消息的总编排器。客户消息和最近对话历史会提供给你。你的任务:
1. 判断消息意图,归入以下四类之一:sales(咨询产品、报价、购买)、support(使用问题、故障、投诉)、finance(发票、付款、退款、对账)、general(闲聊或无法归类)。
2. 若属于sales/support/finance,调用对应的专员工具生成专业回复;若属于general且你能直接回答(如营业时间、公司简介),直接作答,不调用工具。
3. 若客户明确想预约会议或电话,先确认意向时间,再调用日历工具创建事件。
4. 判断是否属于合格线索:客户留下明确购买意向或预约请求时,shouldLog为true并提取姓名(未知则填空字符串)。
只输出如下结构的JSON,不要输出任何其他文字或markdown代码块:
{"replyText":"发给客户的完整中文回复","category":"sales|support|finance|general","leadName":"姓名或空字符串","shouldLog":true或false}测试用webhook载荷(合成JSON)
全部字段为虚构合成值;fromMe改为true时应被过滤节点丢弃,可用来验证防循环
{
"event": "messages.upsert",
"instance": "demo-instance",
"data": {
"key": {
"remoteJid": "8613900000001@s.whatsapp.net",
"fromMe": false,
"id": "TESTMSG0001"
},
"pushName": "测试客户小李",
"message": {
"conversation": "你们的标准版怎么收费?可以开发票吗?"
},
"messageTimestamp": 1767225600
}
}Config节点建议值(占位配置)
spreadsheetId取表格URL中/d/与/edit之间的串;日历时区按客户所在地区调整
{
"spreadsheetId": "替换为你的Google表格ID",
"sheetTabName": "Leads",
"calendarId": "替换为你的日历ID,如primary",
"timezone": "Asia/Shanghai",
"evolutionInstance": "替换为Evolution实例名",
"evolutionBaseUrl": "https://你的evolution域名"
}输入与输出示例
本站虚构演示,未真实调用Gemini与Evolution,模型实际措辞会不同;JSON字段结构才是关键校验点。
输入
用上方测试载荷POST到webhook:手机8613900000001、pushName测试客户小李,正文“你们的标准版怎么收费?可以开发票吗?”,fromMe为false。对应输出
编排器应产出近似:{"replyText":"您好!标准版按坐席计费,具体报价我让销售同事为您整理,发票支持开具增值税普通发票和专用发票。","category":"sales","leadName":"测试客户小李","shouldLog":true};随后Sheets在Leads表按phone=8613900000001新增或更新一行,Evolution的sendText把replyText发回该号码。做完检查这些
- 用fromMe=true的载荷触发,工作流在IF节点走丢弃分支,绝不调用sendText
- 发送报价类消息,解析节点得到含replyText、category、shouldLog的合法JSON,category为sales
- shouldLog=true时Google表格中按同一手机号是更新而非重复新增行
- Evolution实例日志能看到sendText请求且客户测试号收到回复文本
容易卡住的地方
- Evolution侧必须把webhook事件设为messages.upsert并指向n8n的Production URL而非Test URL,否则发布后收不到消息
- apikey要放在HTTP Header凭据里,Header名就是apikey,拼错会被Evolution拒绝
- Redis的session key若用固定值,不同客户的对话记忆会串台,必须用手机号区分
- 模型偶尔会在JSON外包markdown代码块,解析节点需先剥掉```再JSON.parse
- 原文未给出各专员的具体提示词与表格列定义,需按本站示例自行补齐并在原模板中核对
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Route WhatsApp customer support with Gemini, Google Sheets, and Calendar
- 原作者
- Murilo Costa
- 原始发布日期
- 2026-09-08T05:26:39.502Z
- 来源
- https://n8n.io/workflows/19362