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

2026-09-07 · 原文发布日

收件箱发票自动登记与到期催款

每小时监听Gmail里主题含invoice或bill且带附件的邮件,提取PDF文本后让OpenAI返回供应商、发票号、金额、到期日的结构化JSON;先查Google Sheets防止重复登记,重复的发Slack提醒,新发票以待付款状态入账。每天早上再扫一遍台账,按到期天数分级,通过Gmail发催款邮件、Slack发提醒,逾期的在表里改状态。

原文要点

WeblineIndia在n8n.io发布的免费模板,由两条支线组成:每小时触发的Gmail监听,筛选收件箱中主题含invoice或bill且带附件的邮件,下载PDF提取文本交OpenAI返回供应商、发票号、金额、到期日的结构化JSON;先查Google Sheets台账,发票号已存在则发Slack重复告警,新发票以Pending状态和创建时间戳入账。另一条支线每天9:00读取台账,计算距到期天数并分配提醒类型和优先级,通过Gmail向配置的收件人发催款邮件、Slack发提醒,逾期发票在表里改为OVERDUE。表列要求vendor_name、Invoice_number、amount、due_date、status、created_at,更新依赖row_number。

这次做成什么

在n8n搭好“收件箱发票→PDF提取→OpenAI结构化→Sheets查重入账→每日分级催款”的闭环,并用一封合成发票邮件和一张4行台账完成登记与催款全流程演练。

准备什么

  • n8n实例(云端或自托管),可连接Gmail
  • Gmail凭据,同时开通触发器读取和发送邮件两种权限
  • OpenAI API Key,且OpenAI节点所选模型在账号可用
  • Google Sheets OAuth2凭据及一张按规范建好列的台账表
  • Slack OAuth2凭据和一个用于告警的频道
  • 一个用于接收催款提醒的测试邮箱(勿用真实客户邮箱)

具体怎么做

  1. 建立发票台账表

    在Google Sheets新建电子表格,第一个工作表第一行严格按顺序建列:vendor_name、Invoice_number、amount、due_date、status、created_at。在n8n的Sheets节点中选中该表格和工作表;注意更新状态的操作依赖row_number定位行,测试时先手动预填3行数据(1张未到期、1张3天内到期、1张已逾期),status统一填Pending。

  2. 配置Gmail触发器与PDF提取

    在Gmail Trigger节点添加Gmail凭据,触发条件保留模板的每小时轮询,过滤设置为收件箱、主题含invoice或bill、且带附件。用测试邮箱向该Gmail发送一封主题为"Invoice INV-2026-0901 from 恒信印务"、附一份PDF发票(可用材料中的合成字段自制PDF)的邮件。下载附件节点后接PDF文本提取,执行一次确认能输出PDF全文文本。

  3. 配置OpenAI结构化抽取

    在OpenAI节点添加API凭据,提示词要求只返回JSON,字段为vendor_name、Invoice_number、amount、due_date(示例见材料)。用第2步的邮件执行,确认输出是合法JSON且四个字段齐全;若返回带解释文字,需在提示词中强调"只输出JSON对象,不要任何其他文字"或用JSON解析节点兜底。

  4. 查重与入账分支

    Sheets查询节点按提取出的Invoice_number在台账中查找:找到则走重复分支,向Slack频道发"重复发票告警"并结束;未找到则追加新行,status写Pending,created_at写当前时间戳。演练:先发INV-2026-0901确认入账,再转发同一封邮件,确认第二次触发的是Slack重复告警而不是新增行。

  5. 每日催款支线演练

    保留每天9:00定时节点(测试时手动执行)。该支线读取台账全部行,计算due_date与当天差值分配提醒类型:对需要行动的行,Gmail节点向配置的提醒收件人发送催款邮件、Slack发提醒,逾期行在Sheets把status更新为OVERDUE。用第1步预填的3行验证:3天内到期行触发提醒,已逾期行状态变OVERDUE,远期到期行不动作。最后把催款收件人从测试占位地址改成你的真实财务邮箱,再把定时改回9:00并激活。

可直接复制的材料

OpenAI发票字段抽取提示词(独立示例)

本站独立编写的示例提示词;{{pdf_text}}需替换为PDF提取节点的输出变量名,字段名保持与台账列一致。

你是发票信息抽取助手。从下面的发票PDF文本中提取4个字段,只输出一个JSON对象,不要任何解释文字、不要代码块标记。
字段要求:
- vendor_name:开票方公司名称(字符串)
- Invoice_number:发票编号(字符串,保持原文大小写和连字符)
- amount:含税总金额(数字,不带货币符号和千分位)
- due_date:付款到期日(字符串,统一输出YYYY-MM-DD格式;若原文只写"Net 30"等账期,以开票日加账期推算)
若某字段无法确定,填null。
发票文本:{{pdf_text}}

台账测试数据(合成CSV,可直接导入Sheets)

本站虚构合成数据,公司和金额均不存在;第1行相对2026-09-07已逾期用于测OVERDUE分支,第2行3天内到期用于测提醒,第3行远期用于测不动作。

vendor_name,Invoice_number,amount,due_date,status,created_at
恒信印务,INV-2026-0812,12800.00,2026-09-05,Pending,2026-08-06 10:22:00
蓝桥云计算,INV-2026-0833,4600.50,2026-09-09,Pending,2026-08-10 14:05:00
明远办公用品,INV-2026-0841,899.00,2026-10-15,Pending,2026-08-15 09:31:00

输入与输出示例

本站虚构演示,JSON与台账行为按提示词和流程推演的示意,非原作者实测结果,未实际调用API。

输入

测试邮箱收到主题"Invoice INV-2026-0901 from 恒信印务"的邮件,附件PDF正文含:发票编号INV-2026-0901,开票方恒信印务,含税合计15200.00元,付款到期日2026-09-30。台账中无此发票号。

对应输出

OpenAI节点输出:{"vendor_name":"恒信印务","Invoice_number":"INV-2026-0901","amount":15200,"due_date":"2026-09-30"};查重未命中,Sheets追加一行:恒信印务 | INV-2026-0901 | 15200 | 2026-09-30 | Pending | 2026-09-07 08:00:00;不触发Slack重复告警。

做完检查这些

  • 发送带PDF的测试发票邮件后一小时内,Sheets新增一行且六个列值全部正确非空
  • 再次转发同一封邮件,走重复分支:Slack收到重复告警,Sheets行数不增加
  • 手动执行每日支线,已逾期行的status被更新为OVERDUE且催款邮件发到测试邮箱
  • 主题不含invoice或bill、或无附件的邮件不会触发任何处理

容易卡住的地方

  • Gmail凭据需要同时授权读取和发送,只开读权限会让催款邮件发送失败
  • due_date输出格式若不统一为YYYY-MM-DD,到期天数计算会出错,需在提示词或后续节点强制格式
  • 更新状态依赖row_number,删除或移动台账行后可能更新错位
  • 模板按Invoice_number查重,同一供应商换编号重开票不会被识别为重复
  • 催款收件人默认是占位地址,忘记替换会把提醒发到无效邮箱或遗漏
  • 每天9:00为模板默认值,可按需要在定时节点调整,但两条支线都要先手动验证再激活

原文与作者资料 ↗

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

原文标题
Process Gmail invoices with OpenAI, Google Sheets, and Slack reminders
原作者
WeblineIndia
原始发布日期
2026-09-07T10:34:33.774Z
来源
https://n8n.io/workflows/19319