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

2026-10-01 · 原文发布日

自动区分主动与被动流失并按月出SaaS流失报告

这个n8n免费模板盯住Notion里的取消订阅记录,每分钟触发后去Google Sheets查该客户的催款失败历史:若催款开始日落在取消前60天窗口内就判为“被动流失”(付款失败导致),否则判为“主动流失”,写入流失日志表。每月定时汇总上月两类流失的数量与损失收入,交给Gemini生成管理层摘要JSON,再用Gmail发出HTML报告。60天窗口、提示词、汇总频率都可改。

原文要点

原模板为免费n8n工作流:Notion取消订阅数据库每分钟触发,取客户ID、取消日期、套餐收入,在Google Sheets催款表中查同一客户的Dunning Start Date,若其早于取消日且相差不超过60天判为Involuntary(被动流失),否则Voluntary,写入流失日志表。每月定时汇总上月两类流失数量与损失收入,交给Gemini生成report_title与summary字段的JSON摘要,再由Gmail发HTML报告。60天窗口在Validate Dunning Window代码节点中的diffDays <= 60可改。

这次做成什么

搭一条能区分主动/被动流失并每月自动出管理层报告的流失分析流程,并用本站设计的合成数据先验证判定逻辑再接真表。

准备什么

  • 已安装可用的n8n实例(云端或自托管均可)
  • 有读写权限的Notion集成及一个取消订阅数据库
  • Google Sheets OAuth凭据和两张表:催款历史表与流失日志表
  • Google Gemini(PaLM)API密钥与Gmail OAuth2凭据
  • 测试用合成客户数据,切勿直接用真实客户记录调试

具体怎么做

  1. 建两张Google Sheets测试表

    催款历史表(dunning)建列Customer ID、Dunning Start Date(ISO格式YYYY-MM-DD);流失日志表(churn log)建列Customer ID、Cancellation Date、Plan、Monthly Revenue、Churn Type、Notes。把下方合成CSV各导入一张表。

  2. 导入模板并接Notion触发器

    在n8n导入该免费模板,Notion Trigger节点绑定你的取消订阅数据库(确认集成已分享到该库且有读权限),触发间隔保持每分钟,轮询新增的取消记录。

  3. 配置催款查询与窗口判定

    Google Sheets查询节点指向催款历史表,按Customer ID匹配;Validate Dunning Window代码节点用取消日期减去Dunning Start Date得天数diffDays,条件为dunningStart < cancellationDate且diffDays <= 60时输出Involuntary,否则Voluntary。想改窗口就改这一处的60。

  4. 写入流失日志并做月汇总

    Log Churn Event节点把分类结果连同套餐、日期、月收入追加到流失日志表;Trigger: Monthly Rollup按月触发,读取日志表筛选上月记录,分别统计两类流失条数与损失收入合计。

  5. 接Gemini生成摘要并发邮件

    Generate AI Narrative节点填入Gemini凭据,要求只输出含report_title和summary两个字段的严格JSON;Email Executive Report节点填收件人,把JSON渲染进HTML模板后发出。先用测试收件箱验证。

可直接复制的材料

催款历史表合成测试数据(dunning CSV)

本站虚构合成数据,CUST-1001在取消前60天内开始催款,应判被动流失;CUST-1002超出60天窗口,应判主动流失;CUST-1004无催款记录,应判主动流失。

Customer ID,Dunning Start Date
CUST-1001,2026-08-05
CUST-1002,2026-05-20
CUST-1003,2026-09-28

Notion取消记录合成测试数据

本站虚构数据,取消日期均为2026年9月,便于用月度汇总验证;金额为本站设定的参考值。

Customer ID,Cancellation Date,Plan,Monthly Revenue
CUST-1001,2026-09-10,Pro,99.00
CUST-1002,2026-09-12,Basic,29.00
CUST-1003,2026-09-15,Pro,99.00
CUST-1004,2026-09-18,Enterprise,499.00

Gemini管理层摘要提示词

本站独立编写,两个花括号变量需映射到月汇总节点的输出字段;保持report_title与summary字段名不变,否则模板的schema校验会报错。

你是SaaS经营分析师。根据以下上月流失汇总数据,只输出严格JSON,不要输出任何其他文字、解释或代码块标记。
字段要求:
- report_title:一句话中文标题,点出上月主动流失与被动流失的对比重点
- summary:120字以内中文摘要,包含两类流失的数量、各自损失月收入(单位:元),并给出一条最优先的改进建议(被动流失优先谈催款与支付重试,主动流失优先谈产品与留存)

上月汇总数据:
被动流失:{{involuntary_count}} 单,损失月收入 {{involuntary_revenue}} 元
主动流失:{{voluntary_count}} 单,损失月收入 {{voluntary_revenue}} 元

输出示例格式(仅结构参考,内容须基于上面的数据):{"report_title":"...","summary":"..."}

输入与输出示例

本站虚构演示,未实际调用Gemini,输出字段与汇总数字与输入一一对应。

输入

2026年9月流失日志含4条合成记录:CUST-1001被动流失99元,CUST-1002主动流失29元,CUST-1003主动流失99元,CUST-1004主动流失499元

对应输出

{"report_title":"9月流失4单损失726元,主动流失占3单需优先排查留存","summary":"上月共流失4名客户,损失月收入726元。其中被动流失1单、损失99元,建议开启失败付款自动重试与到期前提醒;主动流失3单、损失627元且含1个企业版客户,建议优先安排客户成功回访定位流失原因。"}

做完检查这些

  • 用合成数据触发后,CUST-1001(催款开始2026-08-05、取消2026-09-10,相差36天)被写入日志为Involuntary
  • CUST-1002(相差115天,超出60天窗口)与CUST-1004(无催款记录)被判为Voluntary
  • 流失日志表每行包含客户ID、取消日期、套餐、月收入、Churn Type五类字段且无缺列
  • 月度汇总正确筛出上月记录,两类计数与损失收入合计与日志表手工核算一致
  • Gemini节点输出可通过JSON解析且仅含report_title与summary两个字段
  • 测试收件箱收到HTML报告,金额与计数和汇总数据一致

容易卡住的地方

  • Notion集成必须被显式分享到取消订阅数据库,否则触发器完全不触发且无报错提示
  • Notion与Sheets两边的Customer ID格式必须完全一致(含大小写与前缀),否则催款查询永远查空、全部被误判为主动流失
  • 取消日期与催款开始日期必须是ISO格式YYYY-MM-DD,否则代码节点算出NaN导致分类失效
  • 改动Gemini提示词时若动了schema的字段名,会触发JSON Schema校验错误,整条月度流程中断
  • Gmail OAuth2凭据过期或收件人为空时邮件静默发送失败,需重新授权并检查Send To字段
  • 60天是模板默认值而非行业定律,改窗口后需用边界值(正好60天与61天)各测一条

原文与作者资料 ↗

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

原文标题
Classify churn and send monthly SaaS reports with Notion, Sheets and Gemini
原作者
WeblineIndia
原始发布日期
2026-10-01T09:43:13.038Z
来源
https://n8n.io/workflows/20280