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

2026-09-24 · 原文发布日

n8n流程:发票自动提取、记账和Slack审批

该n8n模板每分钟检查Gmail未读邮件里的发票附件和指定Google Drive文件夹的新文件,只处理PDF和图片。Google Gemini负责把发票内容提取成结构化JSON并归类费用类别,提取不完整或金额对不上会发Slack提醒。流程还会按发票号查重避免重复入账,低于金额门槛的直接写入Google Sheets台账标记为已批准,超额的则发带批准或拒绝按钮的Slack消息,最多等三天后把结果回写到台账。需要配置Google全家桶和Slack交互应用。

原文要点

这是 n8n 模板库中的免费发票处理工作流(模板页 19845)。触发器每分钟检查 Gmail 未读邮件的发票附件和指定 Google Drive 文件夹的新文件,只处理 PDF 与图片;Google Gemini 把发票提取为结构化 JSON 并归类费用类别;按发票号在 Google Sheets 查重;低于金额门槛直接写入台账标记 Approved,超额则发带 Approve/Reject 按钮的 Slack 消息,最多等待三天后把 Approved/Rejected/No Response 回写到台账;提取不完整或金额对不上会发 Slack 提醒,错误可经 Error Trigger 发 Slack。

这次做成什么

把该免费模板导入自己的 n8n,用一封合成测试发票邮件跑通“收票→Gemini 提取→查重→按金额分流→Slack 审批→回写台账”的完整链路,并理解每个分支的字段映射。

准备什么

  • 一个可访问 Google 与 Slack 的 n8n 实例(云版或自托管均可)
  • Gmail、Google Drive、Google Sheets、Google Gemini(PaLM API)、Slack 五套凭据
  • 一个含 invoices 工作表的 Google Sheets 文档和一个可配置交互功能的 Slack 应用
  • 用于测试的合成发票 PDF 或图片,不含真实供应商与个人信息

具体怎么做

  1. 导入模板并挂接五套凭据

    在 n8n 模板页 19845 把免费工作流复制到自己的实例,逐节点打开,把 Gmail、Drive、Sheets、Gemini、Slack 凭据替换为自己的;任何节点出现红叉先解决凭据再继续。

  2. 建台账表并统一字段映射

    在 Google Sheets 新建 invoices 工作表,表头按原模板写为 vendor_name、invoice_number、invoice_date、due_date、subtotal、tax、total、currency、category、source、needsApproval、status 共 12 列,并在所有 Google Sheets 节点里选中这份文档,保证 Gemini 提取字段与列名一一对应。

  3. 设置监听范围与审批分流参数

    在 Gmail 触发节点确认只查含附件的未读发票邮件,在 Drive 触发节点选定要监听的文件夹;找到金额门槛判断节点,按自己的报销制度设置阈值(本站练习设为 500 元),并确认每个 Slack 节点都指向同一目标频道。

  4. 配置 Slack 交互回调

    在 Slack 应用后台开启 Interactivity,把 Request URL 填为本工作流等待节点的 webhook 地址,把 bot token 和 signing secret 填进 Slack 凭据;这一步决定 Approve/Reject 按钮点击后能否回传结果。

  5. 开启错误通知并用合成发票测试

    在工作流设置里把本工作流设为 error workflow(或确认 Error Trigger 已启用),激活后向被监听的 Gmail 发一封带合成发票附件的邮件,一分钟内观察执行记录走完提取、查重、分流和 Slack 消息全过程。

可直接复制的材料

Gemini 发票提取提示词

本站独立编写的提取提示词,与模板要求的字段一致;若原模板 Gemini 节点已有提示词,可在节点参数中核对后替换或对照。

你是发票信息提取器。阅读附件中的发票或收据,只输出一个 JSON 对象,不要输出其他文字。字段:vendor_name(开票方名称,字符串)、invoice_number(发票号,字符串)、invoice_date(开票日期,YYYY-MM-DD)、due_date(到期日,YYYY-MM-DD,无则 null)、subtotal(税前金额,数字)、tax(税额,数字)、total(含税总额,数字)、currency(三字母货币代码)。要求:subtotal 加 tax 必须等于 total,若不等则在 JSON 中增加 "reconcile_error": true;任何字段无法从票面确认就填 null,不要猜测。

合成测试发票数据

本站虚构的两张测试发票:474.60 元低于练习阈值应直接 Approved,1356.00 元超过 500 元阈值应走 Slack 审批;金额仅供练习。

vendor_name,invoice_number,invoice_date,due_date,subtotal,tax,total,currency
启航办公用品(虚构),INV-2026-TEST-001,2026-09-20,2026-10-20,420.00,54.60,474.60,CNY
启航办公用品(虚构),INV-2026-TEST-002,2026-09-21,2026-10-21,1200.00,156.00,1356.00,CNY

台账列与分支映射说明

按原模板文字说明整理的映射表,阈值具体数值需在节点参数中自行设定。

{"sheet":"invoices","columns":["vendor_name","invoice_number","invoice_date","due_date","subtotal","tax","total","currency","category","source","needsApproval","status"],"branches":{"duplicate_invoice_number":"跳过写入并 Slack 提醒","total_below_threshold":"写入台账,status=Approved,needsApproval=false","total_above_threshold":"写入台账,status=Pending Review,发 Slack 按钮消息","wait_result":"三天内按按钮回写 Approved 或 Rejected,超时回写 No Response"}}

输入与输出示例

本站虚构演示的预期流转,非真实运行记录;类别名取决于 Gemini 归类结果,可能不同。

输入

向监听邮箱发送一封主题为『9 月办公用品发票』的未读邮件,附件为合成发票 PDF:发票号 INV-2026-TEST-002,税前 1200.00 元,税额 156.00 元,合计 1356.00 元,练习阈值 500 元。

对应输出

Google Sheets 新增一行:vendor_name=启航办公用品(虚构),invoice_number=INV-2026-TEST-002,total=1356.00,currency=CNY,category=办公用品,needsApproval=true,status=Pending Review;同一分钟 Slack 频道收到含 Approve 与 Reject 按钮的审批消息;点击 Approve 后该行 status 更新为 Approved。

做完检查这些

  • Gmail 与 Drive 两个触发器都能在一分钟周期内发现测试文件,非 PDF/图片的文件被跳过并触发 Slack 通知
  • Gemini 提取结果解析后 12 个台账字段齐全,subtotal 加 tax 与 total 对不上时会发 Slack 提醒而非静默入账
  • 重复发票号的第二次提交被识别为重复,不新增台账行并有 Slack 提示
  • 超额发票点击 Slack 按钮后台账状态被回写,三天无操作则回写为 No Response

容易卡住的地方

  • Slack 审批必须先在 Slack 应用后台开启 Interactivity 并把 Request URL 指向本工作流的等待 webhook,否则按钮点击无响应
  • 台账列名与原模板不一致会导致写入错位或查重失效,改列名要同步改所有 Sheets 节点
  • 错误通知依赖在工作流设置中启用 error workflow 或 Error Trigger,漏配则失败静默
  • Gemini(PaLM API)调用可能产生费用,免费额度与单价以 Google 官方为准,模板本身免费
  • 每分钟轮询会在无人提交时也产生执行记录,自托管需注意执行日志体积

原文与作者资料 ↗

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

原文标题
Process invoices from Gmail and Drive using Google Gemini, Slack, and Sheets
原作者
Muhammad Hammad
原始发布日期
2026-09-23T18:48:09.250Z
来源
https://n8n.io/workflows/19845