2026-09-05 · 原文发布日
每日自动对账:银行流水匹配应收发票
这个n8n模板做小生意的自动对账:每天从Google Sheets读取银行流水和未结发票,先按发票号精确匹配并判定付清、少付或多付;没写发票号的才交给GPT-4o-mini在候选发票里挑,且只接受高置信度结果。匹配成功回写状态,低置信或失败的标为待复核并发Telegram提醒,每个决定都带依据写入日志表;每周一再用Gmail发出逾期账龄报告。
原文要点
Vitaliy Voitik发布的免费n8n模板。每天7:00读Google Sheets的Bank与Invoices两个标签页:先从付款描述用正则提取发票号(默认INV-####样式),按号码精确匹配并按差额判定paid/partial/overpaid(容差±0.01);无号码的才调GPT-4o-mini在未结发票清单中选择,置信度低于80或API失败的一律标Review并发Telegram,不改发票。所有决定写入Log标签页(含方法、置信度、理由);每周一8:00生成逾期账龄HTML表经Gmail发出。Set节点兼容Amount/Credit、Description/Reference/Memo等常见表头。
这次做成什么
搭一条“每日自动对账+周一账龄报告”流水线。模板免费可导入,下面先按其文档建好三张表并填入本站合成的测试数据,导入模板后替换ID与凭据,用一条有发票号、一条无发票号、一条低置信的流水验证三条分支。
准备什么
- n8n环境(可导入免费模板JSON)和一个OpenAI API Key
- Google账号凭据,需同时授予Sheets与Gmail权限范围
- 一个Google Sheet,含Bank、Invoices、Log三个标签页,表头严格按下文工件
- Telegram机器人token和你的chat ID(通过@BotFather免费创建)
- Gmail收件地址,用于接收周一账龄报告
具体怎么做
建表并填入测试数据
新建Google Sheet,建Bank、Invoices、Log三个标签页,表头完全按下方工件复制。把下文合成CSV数据分别粘贴进Bank和Invoices。记下浏览器地址栏中 spreadsheets/d/ 后面那串ID,备用。
导入模板并替换标识
在n8n模板页下载该免费工作流并导入。全局搜索YOUR_SPREADSHEET_ID,在所有Google Sheets节点替换为你的表格ID,并确认每个节点选中了正确的标签页(Bank/Invoices/Log)。
配置四个凭据
在Credentials里建Google Sheets OAuth2(勾选Sheets与Gmail scope)、OpenAI、Telegram bot token、Gmail OAuth2。Telegram节点填入你的chat ID;Gmail节点填报告收件人。
核对规则参数
打开Set Payment Fields节点,确认发票号正则默认匹配INV-####样式,若你的编号不同(如FP-2026-001)就改成对应正则;查看If AI Confident in Match节点的阈值80与Route Payment Status的容差0.01,本站练习保持默认。
手动执行并验证三分支
点Execute Workflow手动触发一次:INV-1042那行应精确匹配并把发票标为paid;无号码但描述含“蓝海设计”的行走AI分支,若置信度≥80则回写;描述含糊的“转账 备注:货款”应标Review并收到Telegram消息。最后检查Log页是否有3行新日志。
可直接复制的材料
Bank标签页测试数据(合成CSV)
本站合成测试数据,全部为虚构公司与金额。第三行故意含糊,用于验证Review分支。
Date,Description,Counterparty,Amount,Currency,Status,MatchedInvoice,MatchNote
2026-09-04,转账 备注:INV-1042,杭州青禾贸易,5000.00,CNY,,,
2026-09-04,蓝海设计 项目尾款,上海蓝海设计工作室,3200.00,CNY,,,
2026-09-04,转账 备注:货款,不明付款方,999.00,CNY,,,Invoices标签页测试数据(合成CSV)
本站合成数据;邮箱为虚构示例域。INV-1044已逾期,用于周一账龄报告。
InvoiceNumber,ClientName,ClientEmail,Amount,Currency,DueDate,Status,PaidAmount,PaidDate,MatchNote
INV-1042,杭州青禾贸易,ap@qinghe-example.cn,5000.00,CNY,2026-09-05,Open,,,
INV-1043,上海蓝海设计工作室,finance@lanhai-example.cn,3200.00,CNY,2026-09-03,Open,,,
INV-1044,广州南风餐饮,ap@nanfeng-example.cn,1500.00,CNY,2026-08-20,Open,,,AI匹配提示词(本站重写练习版)
本站为重做练习编写的等价提示词,供你理解AI分支逻辑;导入模板后以其内置提示词为准,本条仅方案。
你是记账对账助手。给你一笔银行流水和一份未结发票清单。流水:日期{{date}},描述{{description}},对方{{counterparty}},金额{{amount}} {{currency}}。未结发票JSON:{{openInvoices}}。只能在清单中选择,不得编造清单外的发票号。只输出JSON:{"matchedInvoiceNumber":"发票号或null","confidence":0到100,"reasoning":"一句话说明依据,指出描述或对方名与哪张发票的客户名/金额对应"}。金额差异超过发票金额的百分之十时必须把confidence降到60以下。Log标签页表头
按模板文档给出的表头原样列出,第一行粘贴进Log页即可。
RunAt,BankRow,Date,Counterparty,Description,Amount,Currency,InvoiceNumber,ClientName,OutstandingBefore,Difference,Result,Method,Confidence,Reasoning输入与输出示例
本站虚构演示,置信度与理由为示意,非实际运行结果。
输入
Bank页第三行测试数据:2026-09-04 | 转账 备注:货款 | 不明付款方 | 999.00 CNY;Invoices页无999元且客户名不匹配的未结发票。对应输出
该行Status被写为Review,MatchedInvoice留空;Log页新增一行:Result=Review,Method=AI,Confidence=42,Reasoning="描述仅写'货款',金额999与任何未结发票不符";同时Telegram收到一条待复核提醒,内容含金额999.00与付款方名。做完检查这些
- INV-1042流水未经AI调用即完成匹配,Invoices页该行Status=Paid、PaidAmount=5000.00
- AI匹配置信度达到80以上才回写发票,低于80的行只在Bank页标Review且发票不动
- Log页每个决定都有Method(exact或AI)、Confidence和Reasoning三列非空
- 修改Schedule Trigger为立即触发后,周一报告能生成含INV-1044的逾期HTML表并投递到Gmail
容易卡住的地方
- Google凭据必须同时有Sheets和Gmail两个scope,只授Sheets会导致周一报告节点报错
- 发票号正则默认认INV-####样式,编号格式不同会先全部落入AI分支甚至Review
- 置信度阈值80与容差±0.01是模板默认值,银行常扣手续费时应放宽容差,否则正常付款会被判partial
- 表头改名后Set节点找不到字段会静默匹配失败,新增别名要在Set Payment Fields和Set Invoice Fields里同步加
- Telegram节点需先与机器人对话过一次,否则chat ID正确也收不到消息
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Reconcile bank payments with GPT-4o-mini, Google Sheets, Gmail and Telegram
- 原作者
- Vitaliy Voitik
- 原始发布日期
- 2026-09-04T18:22:48.711Z
- 来源
- https://n8n.io/workflows/19220