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

2026-10-03 · 原文发布日

自动催收未付发票:表格读账、Claude判断、Gmail发提醒

一个n8n催收工作流:按工作日定时读取Google Sheets里的未付发票,结合Gmail近期往来邮件拼出沟通时间线;情况不明时交给Claude决定发送、暂缓、升级还是跳过,并可改写提醒文案,同时有防丢发票号和链接的护栏。结果按设置直接发出或存为草稿,回写表格状态,并给你发一封带一键操作按钮的每日汇总邮件。

原文要点

这是n8n.io上Hassan发布的免费催收工作流20360:工作日定时/手动/webhook触发,读Google Sheets未付发票,拉Gmail近期往来拼时间线,情况不明时交给Anthropic Claude在SEND/SNOOZE/ESCALATE/SKIP中选一个并可改写提醒文案,随后有防止丢失发票号、链接、占位符的护栏;按autoSend设置直接发或存Gmail草稿,回写表格(最后跟进步骤、日期、暂缓日、状态、备注),并给负责人发带一键操作按钮的HTML每日汇总。配置集中在Config节点:表格URL与标签名、ownerEmail、日期格式与时区、autoSend、actionLinkUrl和actionSecret。

这次做成什么

在本站独立复刻这条催收链路的最小可用版:用一张合成发票表驱动一次手动运行,让流程对一个客户完成"读表→拉邮件→Claude决策→生成草稿→回写",先以草稿模式验证,再决定是否开启自动发送。

准备什么

  • 一个可联网的n8n实例(云版或自托管均可)及创建/激活工作流权限
  • Google Sheets与Gmail的OAuth凭据,表格需含发票所需列
  • Anthropic API凭据(Claude模型调用可能产生费用)
  • 一个用于测试的Gmail账号和合成发票数据,不要用真实客户

具体怎么做

  1. 建合成发票表

    新建Google Sheet,标签名Invoices,列依次为:invoice_id、client_name、client_email、amount、currency、due_date、status、last_step_sent、last_followup_date、snooze_until、notes。填入下方测试数据行,日期格式统一为YYYY-MM-DD。

  2. 配置Config节点

    导入或按原页面重建工作流后,打开Config节点:粘贴表格URL和标签名Invoices,填ownerEmail为你的测试邮箱,sheetDateFormat设为YYYY-MM-DD,timezone设为Asia/Shanghai,autoSend先设false(只生成草稿),actionLinkUrl与actionSecret留空(本练习不启用一键按钮)。

  3. 连接三类凭据

    在Google Sheets节点绑定表格OAuth;在Gmail读取/草稿/汇总三个节点绑定同一Gmail OAuth;在Claude决策节点绑定Anthropic凭据。每个节点单独点"Test step"确认能读到数据。

  4. 手动运行并检查分支

    点Execute Workflow手动触发。预期路径:Schedule/Manual触发→读表筛选今天需跟进行→Gmail搜索该客户近期邮件→拼时间线与提醒模板→Claude返回SEND并改写文案→护栏校验发票号与链接仍在→因autoSend=false在Gmail生成草稿→回写last_step_sent与last_followup_date→汇总邮件发到ownerEmail。

  5. 核对产物后再放量

    在Gmail草稿箱打开草稿,确认含invoice_id和金额;回Sheet确认该行状态已更新;打开汇总邮件确认计数为1。全部通过后才考虑把autoSend改为true并激活定时触发。

可直接复制的材料

合成发票测试行(CSV,直接粘贴到Sheet)

本站虚构数据;client_email请替换为你自己的测试邮箱,两行用于分别验证"触发"与"未到期跳过"。

invoice_id,client_name,client_email,amount,currency,due_date,status,last_step_sent,last_followup_date,snooze_until,notes
INV-2026-001,杭州岚图贸易有限公司,aiplay-test@example.com,12800,CNY,2026-09-28,unpaid,,,,首笔订单尾款
INV-2026-002,苏州栖云设计工作室,aiplay-test@example.com,3600,CNY,2026-10-10,unpaid,,,,未到期不应触发

Claude催收决策提示词(独立撰写)

本站独立编写的练习提示词;{{...}}为n8n表达式占位,需在你的节点里映射到对应字段,护栏规则与原文思路一致但措辞为原创。

你是应收账款跟进助手。根据下面的发票信息和与客户的近期邮件时间线,判断今天应采取的动作。

只允许输出一个JSON对象,不要输出其他文字:
{"action":"SEND|SNOOZE|ESCALATE|SKIP","snooze_days":数字或null,"reason":"一句话中文理由","reminder_body":"当action为SEND时给出的完整中文提醒邮件正文,否则为空字符串"}

规则:
1. 客户最近7天内明确承诺付款日期→SNOOZE到该日期;
2. 客户对发票金额有争议或要求解释→ESCALATE;
3. 客户已表示已付款或发票号对不上→SKIP;
4. 其余逾期情况→SEND,语气礼貌专业;
5. reminder_body必须原样包含发票号、金额和付款链接,禁止出现未替换的占位符(如{{...}})。

发票:invoice_id={{invoice_id}},金额={{amount}}{{currency}},到期日={{due_date}},第{{last_step_sent}}次跟进。
近期邮件时间线:{{email_timeline}}
付款链接:https://pay.example.com/{{invoice_id}}

输入与输出示例

本站虚构演示,非原作者运行结果;未实际调用Claude或Gmail。

输入

Sheet中INV-2026-001:客户杭州岚图贸易有限公司,12800元,2026-09-28到期已逾期,Gmail里最近一封往来是9月20日客户说"月底安排"且之后再无回复。

对应输出

Claude节点返回{"action":"SEND","snooze_days":null,"reason":"客户承诺的付款窗口已过且无新回复","reminder_body":"您好,贵司发票INV-2026-001(金额12800 CNY,到期日2026-09-28)尚未收到款项,可通过 https://pay.example.com/INV-2026-001 支付……"};Gmail草稿箱出现1封草稿;Sheet该行last_followup_date写为今天,last_step_sent=1;ownerEmail收到1封汇总邮件显示"已发送/存草稿:1,暂缓:0,升级:0,跳过:0"。

做完检查这些

  • Gmail草稿箱中生成的草稿完整包含发票号INV-2026-001、金额与付款链接
  • Sheet对应行的last_followup_date与last_step_sent已被回写,未到期行INV-2026-002无任何改动
  • ownerEmail收到每日汇总邮件,且计数与实际处理行数一致
  • 把autoSend保持为false时,流程不会产生任何真实对外发送

容易卡住的地方

  • 表格日期格式必须与Config中的sheetDateFormat一致,否则筛选会漏行或全行命中
  • Claude与Gmail均可能产生调用费用,先用单行测试数据验证再放开
  • actionSecret留空时不要启用汇总邮件里的一键按钮,否则链接无法校验来源
  • 本站示例为独立重建方案,Config节点的具体字段名请以原模板页面为准

原文与作者资料 ↗

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

原文标题
Chase unpaid invoices with Google Sheets, Gmail, and Claude
原作者
Hassan
原始发布日期
2026-10-02T19:31:50.159Z
来源
https://n8n.io/workflows/20360