2026-10-13 · 原文发布日
退款拒付率异常监控并Slack告警
每天定时从Google Sheets读取销售与退款拒付两张表,计算近7天退款拒付率并与90天基线对比,超过设定倍数阈值即判定异常;异常时让Gemini生成一段简明的诊断说明,连同指标写入日志分页并向Slack发告警,无异常或数据不足时只记录不打扰。阈值倍数、表名和频道都在配置步骤可调,适合电商或支付团队盯退款健康度。
原文要点
该工作流每天09:00(n8n实例时区)运行,从Google Sheets读取销售与退款/拒付两张表,计算近7天退款拒付率并与90天基线对比,超过配置倍数即判异常;异常时用Google Gemini生成诊断摘要,指标与摘要写入日志分页并向Slack发告警,无异常或数据不足只记录不发消息。需配置阈值倍数、表ID与页名、Slack频道,以及Google Sheets OAuth、Slack、Gemini三类凭据。
这次做成什么
在本站练习中搭建一条“定时读表→算比率→判异常→Gemini诊断→写日志→按条件发Slack”的监控流,并用合成数据手动触发验证三条分支(异常/正常/数据不足)各走对路径。
准备什么
- 一个可编辑的Google Sheets表格,含Sales、Refunds、Ratio Monitor Log三个分页
- n8n实例(云端或自托管均可),能添加Google Sheets OAuth、Slack、Google Gemini三类凭据
- 一个用于接收告警的Slack测试频道(建议专用测试频道,勿用正式客服频道)
- 下方artifacts中的合成CSV数据,导入Sales和Refunds分页作为练习输入
具体怎么做
建表并导入合成数据
新建Google Sheets,建三个分页:Sales(列:Date,Order ID,Amount)、Refunds(列:Date,Order ID,Type,Amount,Reason)、Ratio Monitor Log(列:Date,7d Ratio,90d Baseline,Multiplier,Status,Summary)。把下方合成CSV按分页导入,使近7天有一波集中退款,用于触发异常分支。
配置节点填入阈值与连接信息
在工作流开头的配置节点中设置:anomalyThresholdMultiplier=2.5、monitoringDateOverride留空(测试时填2026-10-10)、spreadsheetId填你的表格ID、三个分页名、Slack频道名。在n8n凭据页分别添加Google Sheets OAuth、Slack、Gemini API并绑定到对应节点。
核对比率计算与判断逻辑
确认计算逻辑为:近7天退款拒付率=近7天退款金额合计/近7天销售金额合计,90天基线同理;当近7天比率>基线×倍数时置status=ANOMALY,任一窗口数据为空时置status=INSUFFICIENT_DATA,否则NORMAL。可在测试时用monitoringDateOverride固定日期让结果可复现。
接Gemini诊断与Slack告警分支
在异常分支的Gemini节点中粘贴下方诊断提示词,输入变量传入当前比率、基线、倍数与退款原因Top列表;把生成文本连同指标写入Ratio Monitor Log,并在Slack节点中按下方消息模板发送。非异常分支只写日志、不发Slack。
手动触发验证三分支后启用定时
先手动执行:用合成异常数据应走ANOMALY并在测试频道收到消息;把阈值临时调到10应走NORMAL只写日志;清空Refunds近7天行应走INSUFFICIENT_DATA。三分支均符合预期后,再把Schedule Trigger设为每天09:00并激活工作流。
可直接复制的材料
配置节点示例值(本站设计的字段,需与原模板核对实际字段名)
本站独立编写的练习配置示例,字段名需在原模板配置节点中核对后替换,非原工作流文件。
{
"anomalyThresholdMultiplier": 2.5,
"monitoringDateOverride": "2026-10-10",
"spreadsheetId": "替换为你的Google表格ID",
"sheets": {
"sales": "Sales",
"refunds": "Refunds",
"log": "Ratio Monitor Log"
},
"slackChannel": "#refund-monitor-test",
"timezoneNote": "定时时间为n8n实例时区09:00"
}合成练习数据(Sales与Refunds两个分页)
本站虚构合成数据,仅用于练习;近7天(10-04至10-10)销售420、退款125,刻意构造异常用于触发告警。
Sales分页(Date,Order ID,Amount):
2026-07-15,S001,320
2026-08-02,S002,410
2026-08-20,S003,280
2026-09-05,S004,350
2026-09-18,S005,390
2026-09-30,S006,300
2026-10-04,S007,100
2026-10-06,S008,120
2026-10-08,S009,90
2026-10-09,S010,110
Refunds分页(Date,Order ID,Type,Amount,Reason):
2026-08-03,R001,refund,20,尺码不符
2026-09-06,R002,refund,15,物流延迟
2026-09-20,R003,chargeback,25,未授权扣款
2026-10-05,R004,chargeback,40,未收到货
2026-10-07,R005,refund,35,质量问题
2026-10-09,R006,chargeback,50,未授权扣款Gemini诊断提示词(本站设计,粘贴到Gemini节点)
本站独立编写的示例提示词;变量名需按你工作流中实际传递的字段调整,原模板未给出提示词全文。
你是一名电商支付风控助理。根据以下监控指标,用不超过120字的中文给出简明诊断说明:
- 近7天退款拒付率:{{ $json.current7dRatio }}%
- 90天基线比率:{{ $json.baseline90dRatio }}%
- 异常判定倍数阈值:{{ $json.multiplier }}倍
- 近7天退款原因分布:{{ $json.topReasons }}
要求:1)一句话说明是否异常及偏离程度;2)列出最可能的1-2个原因方向(基于原因分布);3)给出一条可立即执行的核查建议。不要使用专业黑话,不要编造指标之外的数字。输入与输出示例
本站虚构演示,由合成数据手算得出,非作者运行结果;比率公式按原文描述推算,精确口径需以原模板计算节点为准。
输入
以上合成数据,监控日期定为2026-10-10:近7天销售=100+120+90+110=420,近7天退款=40+35+50=125,7天比率=125/420≈29.8%;90天销售合计2470、退款合计185,基线=185/2470≈7.5%;倍数阈值2.5。对应输出
判定:29.8% > 7.5%×2.5≈18.7%,status=ANOMALY。Ratio Monitor Log新增一行:2026-10-10 | 29.8% | 7.5% | 2.5 | ANOMALY | 近7天退款拒付率29.8%,约为基线的4倍,主要由两笔拒付(chargeback)共90元拉高:未收到货40元、未授权扣款50元,建议立即核查这两笔订单的发货与支付验证记录,并联系支付网关确认是否存在盗刷。Slack测试频道收到同内容告警。做完检查这些
- 触发器为每天09:00(n8n实例时区),配置节点中倍数、表名、频道均可改且改动后生效
- 用合成异常数据手动运行时,Ratio Monitor Log出现一行status=ANOMALY且Slack测试频道收到含比率与诊断的消息
- 把倍数临时改为10后重跑,只写日志且status=NORMAL,Slack无新消息
- 清空Refunds近7天数据后重跑,状态为INSUFFICIENT_DATA且不发Slack告警
容易卡住的地方
- n8n实例时区若非本地时区,09:00触发时间会偏移,先在实例设置中确认时区
- Google Sheets OAuth凭据需有该表格的读写权限,否则读数或写日志会静默失败
- 日期列格式必须能被节点解析(建议YYYY-MM-DD),否则近7天窗口可能选不到数据
- Gemini诊断依赖传入的原因分布字段,若上游未聚合原因列表,诊断会流于泛泛
- Slack告警请先发测试频道验证格式,避免阈值未校准前打扰正式团队
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Monitor refund and chargeback ratio spikes with Google Sheets, Gemini, and Slack
- 原作者
- WeblineIndia
- 原始发布日期
- 2026-10-13T06:51:46.056Z
- 来源
- https://n8n.io/workflows/20853