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

2026-09-27 · 原文发布日

用SendRaven和OpenAI在同邮件串里回复客服邮件

免费n8n模板:SendRaven收到客服邮件后通过带HMAC-SHA256签名的webhook推送,流程验签、去重并过滤自动回复,再拉取完整邮件线程交给OpenAI判断该回复、标记已处理还是转人工;选择回复时按原消息ID在同一线程回发,并用幂等键防止重复发送。设置里可填公司名、简介和落款,让回复符合自家口吻。

原文要点

n8n官方模板库中SendRaven发布的免费客服邮件自动回复工作流:通过webhook接收入站邮件事件,用请求头中的HMAC-SHA256签名和时间戳验签,无效返回401、有效立即返回200;对webhook重试去重并过滤自动回复,只放行真人来信;调用SendRaven API拉取完整邮件线程并附带发件人与认证上下文;由OpenAI聊天模型决定回复、标记无需回复还是转人工;回复时按原消息ID在同一线程回发并带幂等键防重复发送;模板设置里可填公司名、简介和落款。

这次做成什么

在自有n8n实例上复现这套“收信→验签→过滤→AI判断→同线程回复”的客服流程,并用一条虚构的webhook测试数据走通触发器到分支输出的全链路。

准备什么

  • 一个可访问的n8n实例(云版或自托管,能暴露公网webhook地址)
  • SendRaven账号,已完成发送域名验证并配置好入站MX记录
  • 具备读线程和发邮件权限的SendRaven API密钥
  • SendRaven webhook签名密钥(whsec_开头),在n8n中存为Crypto凭据
  • 可用的OpenAI API密钥及账户内可调用的聊天模型
  • 一个用于测试的邮箱地址,不发真实客户数据

具体怎么做

  1. 配置webhook触发器与验签

    打开模板后找到webhook触发节点,复制其生产环境URL,到SendRaven后台的Webhooks设置中登记为入站事件接收地址。把whsec_开头的签名密钥在n8n里建成Crypto凭据,接在触发器后的验签节点读取请求头中的签名与时间戳做HMAC-SHA256比对:不匹配返回401,匹配则立即返回200给SendRaven,避免对方因超时重试。

  2. 接入去重与自动回复过滤

    验签通过后,流程先按事件ID对webhook重试去重(同一事件只处理一次),再检查邮件头部特征(如自动回复标记)把机器自动回复挡掉,只有真人来信才进入下一步。配置时确认去重用的字段是SendRaven事件载荷中的事件标识,而不是邮件主题。

  3. 拉取完整线程并交OpenAI判断

    用HTTP请求节点调SendRaven API,凭据选先前建好的HTTP Bearer Auth(填API密钥),按载荷中的线程ID取回完整对话,格式化成带发件人和认证信息的文本。随后送入OpenAI节点,让模型输出三选一决策:reply(生成纯文本回复)、no_reply_needed、escalate。

  4. 按分支输出

    在判断节点后加分支:reply分支调SendRaven发信API,用原消息的message ID回发以保持同一线程,并附幂等键防止重试造成重复发送;no_reply_needed分支调SendRaven API把线程标记为已处理;escalate分支进入模板中的转人工占位节点,可自行接Slack通知或工单系统。

  5. 填公司口吻并测试

    在模板设置区把公司名、公司简介和落款签名改成自己的内容,这决定AI回复的语气与政策边界。激活工作流后,从测试邮箱向SendRaven入站地址发一封虚构咨询邮件,在n8n执行记录里逐节点确认验签通过、过滤放行、AI决策和最终动作符合预期。

可直接复制的材料

虚构webhook测试事件载荷

本站虚构的模拟事件,字段名按模板描述推断,实际键名以SendRaven推送为准,请在原模板核对;不含真实个人信息。

{
  "event_id": "evt_test_0001",
  "type": "email.inbound",
  "thread_id": "thr_demo_1024",
  "message_id": "msg_demo_5188",
  "from": {"name": "测试用户", "address": "testuser@example.com"},
  "to": "support@yourdomain.example",
  "subject": "发票金额与订单不符",
  "snippet": "你好,我10月订单INV-2041被收了1280元,但下单页面显示的是1080元,请帮忙核对。",
  "headers": {"Auto-Submitted": "no"},
  "received_at": "2026-10-01T09:15:00Z"
}

OpenAI决策系统提示词(本站设计示例)

本站独立编写的示例提示词,方括号需替换;原模板的具体模型名与参数未在公开说明中给出,请在模板内核对后再用。

你是[公司名]的客服助手。公司简介:[一句话业务简介]。根据下方完整邮件线程,决定三个动作之一并只输出JSON:{"action":"reply","reply":"纯文本回复内容"}、{"action":"no_reply_needed"} 或 {"action":"escalate","reason":"转人工原因"}。规则:能在公司简介范围内解答的才回复;涉及退款争议、法律、账户安全的必须转人工;语气礼貌简洁,结尾用落款“[公司落款]”。邮件线程如下:

凭据与字段映射清单

按模板公开描述整理的映射关系,未核实的节点内部参数请以导入后的实际模板为准。

SendRaven API密钥 → n8n凭据类型 HTTP Bearer Auth → 用于取线程、回发邮件、标记已处理三处HTTP请求
webhook签名密钥(whsec_...) → n8n凭据类型 Crypto → 用于验签节点的HMAC-SHA256计算
OpenAI API密钥 → n8n凭据类型 OpenAI → 用于决策节点
字段映射:载荷event_id→去重键;thread_id→取线程请求参数;message_id→回复时的同线程标识;from.address/subject/snippet→拼入AI上下文;分支action=reply→发信API,action=no_reply_needed→标记已处理API,action=escalate→转人工占位节点

输入与输出示例

本站虚构演示,输出为按流程逻辑的示意,非模板实际运行结果;模板未运行验证。

输入

以上方虚构载荷为例:测试用户来信称订单INV-2041页面价1080元却实收1280元,要求核对。

对应输出

AI决策输出{"action":"escalate","reason":"涉及收费差额与退款争议,超出自动回复范围"},流程走escalate分支;若换成“请问营业时间”这类简介内问题,则输出{"action":"reply","reply":"您好,我们的客服时间为工作日9:00-18:00……——示例公司客服团队"},并以msg_demo_5188为线程标识同串回发。

做完检查这些

  • SendRaven后台登记的webhook地址与n8n生产URL一致,篡改签名的测试请求返回401、合法请求立即返回200
  • 同一event_id重复推送时只产生一次后续处理,自动回复邮件被过滤节点拦下
  • 取线程请求返回的完整对话被正确拼入OpenAI节点的上下文
  • reply分支发出的邮件在收件箱中与原信处于同一线程,且重试不会产生第二封
  • no_reply_needed分支执行后SendRaven后台对应线程显示已处理

容易卡住的地方

  • 验签不通过最常见原因是Crypto凭据里密钥填错或请求体在传输中被改动,须用原始请求体计算HMAC
  • 必须先返回200再做耗时处理,否则SendRaven会判定超时并重推,靠去重节点兜底
  • 去重键若误用邮件主题或message_id而非事件ID,合法重试与真实新邮件都会被混淆
  • 不填公司名、简介和落款,AI回复会缺少口吻与边界,容易答出公司政策外的承诺
  • 转人工节点在模板中只是占位,不接通知渠道的话升级的邮件会无人知晓
  • OpenAI与SendRaven调用各自计费,模板本身免费但服务另收费;本站未实测,节点细节以导入后模板为准

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Reply to support emails in-thread with SendRaven and OpenAI
原作者
SendRaven
原始发布日期
2026-09-27T10:34:26.797Z
来源
https://n8n.io/workflows/19980