2026-09-25 · 原文发布日
客服邮件自动分流:Gmail+Airtable+OpenRouter
每分钟轮询Gmail收件箱,先把HTML正文转纯文本并跳过订阅邮件、自动回复和群发件;用Gmail Message ID在Airtable查重后建档,再交给OpenRouter聊天模型(失败时回退OpenAI)输出分类、置信度、摘要和回复草稿的JSON。草稿只存进Gmail原线程不发送;置信度低于阈值或AI要求人工时发提醒邮件,卡住或报错的记录另有定时检查兜底标记Error并告警。模板免费。
原文要点
原模板每分钟由Gmail触发器轮询收件箱,另有每15分钟的定时分支检查卡住的Airtable记录。流程先把HTML正文转纯文本,跳过订阅邮件、自动回复、群发件和配置的发件人模式;用Gmail Message ID在Airtable查重,无记录则以Processing状态建档,再调OpenRouter聊天模型(失败回退OpenAI)返回含分类、置信度、摘要、草稿的JSON。验证后更新记录并在原线程建Gmail草稿但不发送;置信度低于阈值、分类需复核或AI要求人工时给提醒邮箱发邮件并标记已告警;失败则把记录标Error并邮件通知。模板免费,需Gmail OAuth2、Airtable个人访问令牌、OpenRouter与OpenAI凭证。
这次做成什么
照本站方案搭一条客服邮件自动分流练习流:新邮件进Airtable建档、AI出分类与回复草稿、低置信度自动告警、卡死记录有兜底,全程只建草稿不自动发送,避免误回客户。
准备什么
- 一个有OAuth2授权权限的Gmail测试邮箱(不要用生产客服邮箱)
- Airtable账号及个人访问令牌,可新建Base和表
- OpenRouter API Key,以及作为回退的OpenAI API Key
- n8n实例(自托管或云)能导入该免费模板并可配凭证
具体怎么做
建Airtable表
新建一个Base和表,逐个添加字段:Message ID(单行文本)、Thread ID、From、Subject、Message(长文本)、Status(单选:Processing/Done/Error)、Category、Confidence(数字)、Needs Review(勾选)、AI Summary(长文本)、Draft Response(长文本)、Error Message、Alert Sent(勾选)、Received At(日期)、Execution ID。字段名与模板节点里的映射保持一致,否则查重和更新会落空。
配置凭证与Settings
在n8n里分别新建Gmail OAuth2、Airtable个人访问令牌、OpenRouter、OpenAI四类凭证并绑到对应节点。打开模板里的Settings值节点,填入alertEmail(提醒邮箱)、airtableBaseId、airtableTableId,并按需调整categories、confidenceThreshold(例如0.75)、skipSenderPatterns、skipBulkEmail、stuckAfterMinutes(例如30)。
改Gmail触发器过滤条件
打开Gmail Trigger的搜索过滤,保留并核对排除提醒邮箱的 -to:你的提醒邮箱 部分,防止告警邮件被再次抓取形成自循环。可先加 -label:已处理 之类的条件做隔离测试。
手动跑一封测试邮件
从另一邮箱给测试Gmail发一封纯文本咨询邮件,手动执行工作流。依次确认:HTML转文本节点输出正文、Airtable按Message ID搜索返回空、新建记录Status=Processing、OpenRouter节点返回JSON、Airtable更新出分类和草稿、Gmail原线程出现未发送草稿。
验证告警与兜底分支
再发一封措辞含糊的邮件让置信度低于阈值,确认提醒邮箱收到复核邮件且Alert Sent被勾选。把某条记录Status手工改回Processing并把Received At改到stuckAfterMinutes之前,等定时分支运行,确认它被标Error并触发告警邮件。
可直接复制的材料
客服邮件分类提示词(本站独立编写,供OpenRouter/OpenAI聊天节点使用)
本站编写的示例提示词,分类列表和字数限制可按业务改;模板实际提示词以原工作流为准。
你是一名客服邮件分流助手。阅读下面的邮件正文,只输出一个JSON对象,不要输出任何其他文字或代码块标记。
字段要求:
- category:从 ["订单查询","退款售后","技术支持","商务合作","其他"] 中选一个
- confidence:0到1之间的小数,表示你对分类的把握
- summary:用不超过60字的中文概括用户诉求
- draft_reply:一段礼貌的中文回复草稿,不超过150字;信息不足时先向用户确认关键信息,不要编造订单状态
- needs_human:布尔值,涉及法律、投诉升级、情绪激动或你无法判断时设为true
邮件主题:{{$json.subject}}
邮件正文:{{$json.body}}
输出示例格式:{"category":"订单查询","confidence":0.9,"summary":"...","draft_reply":"...","needs_human":false}测试用邮件数据(合成)
本站虚构的合成测试数据,message id为编造格式,仅用于走通流程。
{"subject":"订单A1024迟迟未发货","from":"test-customer@example.com","body":"你好,我上周三下的订单A1024到现在还没发货,页面一直显示待处理,麻烦帮我查一下什么时候能发,谢谢。","gmail_message_id":"18d3f2a1b9c4e001","thread_id":"18d3f2a1b9c4e000"}输入与输出示例
本站虚构演示,未实际运行,数字仅为示意,非原作者结果。
输入
一封测试邮件:主题"订单A1024迟迟未发货",正文"你好,我上周三下的订单A1024到现在还没发货,页面一直显示待处理,麻烦帮我查一下什么时候能发,谢谢。"对应输出
AI节点返回示意:{"category":"订单查询","confidence":0.92,"summary":"客户询问订单A1024为何一周未发货,希望确认发货时间。","draft_reply":"您好,很抱歉让您久等。我们已收到您关于订单A1024的查询,正在为您核实仓库发货进度,确认后会第一时间回复您具体发货时间。","needs_human":false};Airtable记录Status更新为Done,Gmail原线程出现该草稿,未触发告警。做完检查这些
- 同一封邮件重复触发时,Airtable按Message ID查到已有记录并跳过,不产生重复行
- 低置信度或needs_human为true的邮件会触发提醒邮件且Alert Sent字段被勾选
- 所有AI回复只生成Gmail草稿,测试期间没有任何一封邮件被真正发出
- 手工伪造的卡住记录被定时分支标记为Error并发出告警邮件
容易卡住的地方
- Gmail触发器过滤里若漏掉排除提醒邮箱的 -to: 条件,告警邮件会被重新抓取形成循环
- Airtable字段名与节点映射不一致时查重永远返回空,会重复建档
- OpenRouter模型若不支持稳定JSON输出,验证节点会频繁失败并走Error分支
- 模板免费但OpenRouter、OpenAI调用各自计费,轮询频率高时费用需自行估算
- OAuth2授权范围不足会导致建草稿或发告警邮件节点报权限错误
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Triage support emails and draft AI replies with Gmail, Airtable and OpenRouter
- 原作者
- Reynaldo Binay-an
- 原始发布日期
- 2026-09-25T13:45:01.413Z
- 来源
- https://n8n.io/workflows/19935