2026-10-13 · 原文发布日
识别客户邮件中的范围蔓延并起草变更回复
这条n8n流程每分钟监听Gmail客户来信,按发件域名匹配该客户在Google Docs里的工作说明书(SOW),把邮件与SOW一起交给OpenAI判断请求是否在范围内,并返回条款引用、工时估算和回复草稿。每条请求记入Google Sheets的Scope Log并按小时费率折算金额;判定为范围外或不明确时在Slack提醒团队,并在原邮件线程里保存一份变更单回复草稿,范围内请求只记录不打扰。
原文要点
原模板每分钟轮询Gmail收件箱,按发件域名映射到客户在Google Docs里的SOW文档,把邮件正文与SOW全文交给OpenAI输出结构化判定(结论、条款引用、工时估算、回复草稿),not_a_request直接丢弃;判定结果连同按小时费率折算的金额写入Google Sheets的Scope Log标签页并附Gmail线程链接;out_of_scope或unclear时在Slack发提醒并在原线程创建Gmail回复草稿,范围内请求仅记录。配置项包括client_sow_map、sheet_id、hourly_rate、currency、Slack频道和署名。
这次做成什么
照着本指南在n8n里复刻一套“范围蔓延哨兵”:自动读客户邮件、对照SOW判定是否超范围、记账、必要时提醒团队并起草变更单回复。本指南给出的是本站设计的等价搭建方案与自建练习数据,提示词与配置均为本站编写,非原模板原文。
准备什么
- 一个n8n实例(云版或自托管均可),能添加Gmail、Google Docs、Google Sheets、Slack、OpenAI五组凭据
- 一个测试用Gmail邮箱,其中有一封虚构客户来信,且你在Google Docs里建好一份测试SOW文档
- 一个含“Scope Log”标签页的Google Sheet,表头列为checked_at、client_domain、from_email、subject、request_summary、verdict、matching_clause、estimated_hours、estimated_value、thread_link
- 一个OpenAI API Key(模型调用按官方计费,免费额度视账户而定)和一个可发消息的Slack测试频道
具体怎么做
配置触发器与域名映射
新建工作流,添加Gmail Trigger,轮询间隔设为1分钟,搜索查询先用label:INBOX is:unread这类宽松条件便于测试。后面接一个Code或Set节点,放入client_sow_map,例如{"acme-demo.cn":"https://docs.google.com/document/d/你的测试SOW文档ID/edit"}。用邮件From字段提取@后域名,在映射表里查找;查不到就走忽略分支直接结束。
读取SOW并调用OpenAI判定
命中域名后用Google Docs节点按映射URL读取SOW全文,把SOW内容与邮件主题、正文拼进OpenAI节点的提示词(见下方材料),要求模型严格输出JSON:verdict取值in_scope/out_of_scope/unclear/not_a_request,外加clause、estimated_hours、draft_reply。模型选你账户可用的聊天模型即可,温度调低以保证JSON稳定。输出后用Code节点解析JSON并校验字段,解析失败按unclear处理。
写入Scope Log记账
在配置节点设定hourly_rate(例如500)与currency(CNY)。用Set节点组装日志行:checked_at取当前时间,request_summary取邮件主题加正文前100字,estimated_value=estimated_hours×hourly_rate,thread_link拼接https://mail.google.com/mail/u/0/#inbox/加Gmail消息threadId。用Google Sheets节点Append到“Scope Log”标签页,列顺序与表头一一对应。
分支:提醒与草稿
加IF节点:verdict为out_of_scope或unclear时走分支A——Slack节点向测试频道发提醒(含客户域名、摘要、估算金额、线程链接),再用Gmail节点以Reply方式在原threadId下创建Draft,正文用模型返回的draft_reply加你的署名sign_off_name;verdict为in_scope时分支B什么都不做只结束;not_a_request在日志前已被丢弃。
用测试邮件端到端验证
从外部邮箱向被监听Gmail发一封测试邮件(见下方示例输入),手动执行一次工作流,检查Sheet是否新增一行、Slack是否收到提醒、Gmail草稿箱是否出现回复草稿,再发一封纯闲聊邮件确认被丢弃。
可直接复制的材料
OpenAI范围判定提示词(本站独立编写,可直接粘贴到OpenAI节点)
占位符{{ }}是n8n表达式,需按你实际的上游字段名替换;提示词为本站编写,不是原模板原文。
你是项目交付经理助理。下面是某客户的工作说明书(SOW)全文和该客户发来的一封邮件。请判断邮件中的请求是否属于SOW范围内的工作。
判定规则:
1. 邮件不含任何工作请求(问候、通知、闲聊),输出verdict=not_a_request。
2. 请求明确在SOW条款覆盖范围内,输出verdict=in_scope,并引用对应条款编号。
3. 请求超出SOW范围,输出verdict=out_of_scope,引用最接近的条款并说明超出的部分。
4. 无法确定时输出verdict=unclear。
仅输出JSON,不要输出其他文字,字段如下:
{"verdict":"in_scope|out_of_scope|unclear|not_a_request","clause":"相关条款编号与一句话引用","estimated_hours":数字(完成该请求预估工时,无法估计填0),"request_summary":"一句话概括请求","draft_reply":"若超范围或不明确,写一段礼貌的中文回复草稿:说明该请求超出当前SOW第X条、预估需额外N小时、建议签署变更单后再排期;若in_scope或not_a_request则填空字符串"}
【SOW全文】
{{ $json.sowContent }}
【邮件主题】
{{ $json.subject }}
【邮件正文】
{{ $json.body }}client_sow_map与全局配置示例
全部为占位值,文档ID、Sheet ID、频道名需替换为你自己的测试资源;费率与署名为本站示例设定。
{
"client_sow_map": {
"acme-demo.cn": "https://docs.google.com/document/d/1AbC测试SOW文档ID/edit",
"globex-test.com": "https://docs.google.com/document/d/1XyZ另一份测试SOWID/edit"
},
"hourly_rate": 500,
"currency": "CNY",
"slack_channel": "#scope-alerts-test",
"sign_off_name": "项目组-小周",
"sheet_id": "你的测试Sheet的ID",
"gmail_search_query": "label:INBOX is:unread"
}测试SOW文档内容(粘贴进Google Docs用于练习)
本站虚构的练习SOW,与下方测试邮件配套使用;真实使用时替换为客户实际SOW。
工作说明书 SOW-2026-01
客户:Acme演示公司(域名 acme-demo.cn)
第1条 范围:乙方为甲方官网提供季度内容更新,每季度不超过10个页面。
第2条 范围:每月一次SEO关键词排名报告。
第3条 排除项:不包含网站重构、新功能开发、电商模块及任何第三方付费插件费用。
第4条 变更:超出上述范围的请求须签署书面变更单,按约定小时费率另行计费。输入与输出示例
本站虚构演示,未实际运行;工时120与金额60000是本站为示例设定的参考值,不代表模型真实输出或报价建议。
输入
从li.wei@acme-demo.cn向被监听邮箱发送测试邮件,主题“官网改版咨询”,正文:“你好,我们想趁下个季度把官网整体重构成响应式,并加一个在线商城模块,麻烦估个时间。”对应输出
OpenAI节点返回:{"verdict":"out_of_scope","clause":"第3条 排除项:不包含网站重构、新功能开发、电商模块","estimated_hours":120,"request_summary":"客户要求官网响应式重构并新增商城模块","draft_reply":"您好,感谢您的需求。网站重构与商城模块不在当前SOW范围内(第3条排除项),预估需约120小时额外工作量。我们建议先签署变更单确认费用后排期,您看是否方便约个电话详谈?"}。Scope Log新增一行:checked_at=2026-10-20 09:15、client_domain=acme-demo.cn、from_email=li.wei@acme-demo.cn、subject=官网改版咨询、verdict=out_of_scope、estimated_hours=120、estimated_value=60000(500×120 CNY)、thread_link指向该线程;Slack收到提醒;Gmail草稿箱出现同线程回复草稿。做完检查这些
- 发一封域名未映射的邮件,工作流应静默结束且Sheet不新增任何行
- 发送示例中的重构+商城邮件后,Scope Log应新增一行且verdict为out_of_scope,estimated_value等于estimated_hours乘以你设定的hourly_rate
- Slack测试频道应收到包含客户域名与金额的提醒,Gmail草稿箱应在同一邮件线程下出现以draft_reply为内容的草稿
- 发一封纯问候邮件(如“节日快乐”),应被判定为not_a_request,不产生日志、提醒或草稿
容易卡住的地方
- Gmail Trigger按分钟轮询,手动测试时建议直接点Execute Workflow,不必等整点轮询
- OpenAI返回的JSON必须严格解析,模型偶尔会在JSON外包裹解释文字,解析节点要加兜底,否则整条流程报错中断
- Scope Log表头列名与节点字段映射顺序不一致会导致数据写错列,建表时逐列核对
- SOW文档若权限未共享给Gmail/凭据对应的Google账号,Google Docs节点会取不到内容,需提前授权
- 小时费率与金额只是估算参考,不要直接当作对客户的正式报价
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Detect scope creep in client emails with Gmail, OpenAI and Google Sheets
- 原作者
- Samruddhi Mokal
- 原始发布日期
- 2026-10-13T05:20:22.612Z
- 来源
- https://n8n.io/workflows/20840