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

2026-09-19 · 原文发布日

发票PDF自动提取、查重并按风险分流审批

webhook接收含供应商信息和PDF的提交,提取文本后由OpenAI转成金额、日期、行项目等结构化字段,缺关键字段就邮件退回供应商;再在Google Sheets按发票号查重,重复则通知财务;非重复发票由AI判断类别、优先级、风险等级和是否需审批,并校验总额是否等于小计加税。低值低风险自动批准,其余发审批邮件等webhook回传决定,最终写表并通知财务。

原文要点

原工作流用POST webhook接收含供应商信息和PDF文件的提交,提取PDF文本后由OpenAI转成金额、日期、行项目等结构化字段;缺关键字段时用Gmail退回供应商;在Google Sheets按invoice_number查重,重复则通知财务;非重复发票由OpenAI判断类别、优先级、风险等级和是否需审批,并校验total是否等于subtotal加tax;低值低风险自动批准,其余发审批邮件并经Wait节点等webhook回传approved或rejected,最终写表并通知财务。需@n8n/n8n-nodes-langchain包、OpenAI、Gmail OAuth2、Google Sheets凭据,并替换占位邮箱与YOUR_GOOGLE_SHEET_ID。

这次做成什么

在n8n中搭建一条发票处理流水线:webhook收票→PDF提取→OpenAI结构化→字段校验→按发票号查重→AI风险分级→低值低风险自动批准或邮件审批→写入Google Sheets台账并通知。以下为按原流程独立设计的练习方案,不涉及付费内容。

准备什么

  • 一个可联网的n8n实例,且已安装@n8n/n8n-nodes-langchain包以使用Agent、Chat Model和Structured Output Parser节点
  • OpenAI API凭据,或任何可替换进两个Chat Model节点的LangChain兼容模型凭据
  • 已配置OAuth2的Gmail凭据,用于给供应商、审批人和财务发通知
  • Google Sheets凭据和一个已建好的Invoices表,含invoice_number等列
  • 能向webhook POST发票文件和元数据的途径,如表单或内部工具
  • 一个自建审批端点,可向Wait节点的resume webhook地址回传decision字段

具体怎么做

  1. 建表并配置三个凭据

    在Google Sheets新建Invoices工作表,首行写入invoice_number,vendor,invoice_date,due_date,subtotal,tax,total,currency,category,priority,risk_level,approval_status,processed_at。在n8n凭据页依次添加OpenAI、Gmail OAuth2、Google Sheets凭据,并在工作流中把占位符YOUR_GOOGLE_SHEET_ID替换为实际表格ID。

  2. 搭建webhook接收与PDF提取

    添加Webhook节点,方法设为POST,路径如/invoice-intake,接收供应商名称、邮箱和PDF二进制文件。接PDF文本提取节点把文件内容转成纯文本,供后续AI节点读取。

  3. OpenAI结构化提取与必填校验

    添加AI Agent节点挂Chat Model与Structured Output Parser,用下方提取提示词把发票文本转成invoice_number、vendor、subtotal、tax、total等字段。随后用Code节点校验必填字段,缺失时用Gmail节点给供应商发退回邮件,列出所缺字段并要求重发。

  4. 按发票号在表中查重

    添加Google Sheets查找节点,按invoice_number在Invoices表检索。查到已有记录时走重复分支:用Gmail通知财务审核邮箱,标记为重复并终止;查不到才继续。

  5. AI风险分级与金额校验

    第二个AI Agent用下方分析提示词输出category、priority、risk_level和requires_approval,同时用表达式校验total是否等于subtotal加tax,不等则转入人工审核分支。

  6. 分流审批并落表

    用Switch节点按金额阈值和风险等级分流:低值低风险直接置approval_status为auto_approved;其余发审批邮件并用Wait节点等审批webhook回传approved或rejected。最后用Google Sheets节点写入完整记录,Gmail通知财务处理完成。

可直接复制的材料

发票字段提取提示词

本站独立编写的示例提示词,需替换其中的输入变量名以匹配你工作流中PDF文本所在字段。

你是发票信息提取助手。从下面的发票文本中提取字段,只输出JSON,不要输出其他文字。字段:invoice_number(发票号)、vendor(供应商名)、invoice_date(开票日期,YYYY-MM-DD)、due_date(到期日)、subtotal(小计,数字)、tax(税额,数字)、total(总额,数字)、currency(货币代码)、payment_terms(付款条件)、line_items(行项目数组,每项含description、quantity、unit_price、amount)。文本中找不到的字段填null,不要猜测。发票文本:{{ $json.pdfText }}

发票分析与风险分级提示词

本站独立编写示例,阈值口径需在Switch节点中另行设定,不在提示词内硬编码。

你是发票审核助手。根据下面的发票JSON给出审核结论,只输出JSON:category(类别,如办公用品/差旅/服务/软件订阅)、priority(low/medium/high)、risk_level(low/medium/high,金额异常大、供应商陌生、日期不一致等视为高风险)、requires_approval(true/false)、risk_reason(一句话说明)。发票数据:{{ $json.invoiceData }}

练习用发票提交数据

本站虚构的练习输入,金额与字段相互对应,供应商邮箱为演示占位,请勿替换为真实客户信息。

{"vendor_email":"vendor-demo@example.com","vendor_name":"杭州演示办公用品有限公司","invoice_number":"INV-2026-1042","invoice_date":"2026-09-10","due_date":"2026-10-10","subtotal":3600.00,"tax":468.00,"total":4068.00,"currency":"CNY","line_items":[{"description":"A4打印纸","quantity":20,"unit_price":180.00,"amount":3600.00}]}

输入与输出示例

本站虚构演示,数字与字段一一对应,非原作者运行结果,未在真实环境执行。

输入

向webhook提交:供应商杭州演示办公用品有限公司,发票号INV-2026-1042,开票日期2026-09-10,小计3600.00元,税额468.00元,总额4068.00元,行项目为20箱A4打印纸,供应商邮箱vendor-demo@example.com。

对应输出

结构化结果:{"invoice_number":"INV-2026-1042","vendor":"杭州演示办公用品有限公司","subtotal":3600.00,"tax":468.00,"total":4068.00};金额校验4068.00=3600.00+468.00通过;查重未发现同号发票;AI输出category=办公用品、priority=low、risk_level=low;若自动批准阈值设为5000元且低风险,则approval_status=auto_approved并写入Invoices表。

做完检查这些

  • 向webhook提交练习发票后,Sheets的Invoices表新增一行且invoice_number为INV-2026-1042
  • 再次提交同一发票号时走重复分支,财务邮箱收到重复提醒且表中没有新增行
  • 删除提交中的total字段后,供应商邮箱收到列出缺失字段的退回邮件
  • subtotal加tax不等于total时,该发票进入人工审核分支而不是自动批准
  • 低值低风险发票不经审批邮件,approval_status直接写为auto_approved

容易卡住的地方

  • 必须安装@n8n/n8n-nodes-langchain包,否则Agent、Chat Model和Structured Output Parser节点无法使用,这是本条特有前提
  • 占位邮箱finance-team@yourcompany.com等四个地址必须替换,否则通知全部发往无效地址
  • 审批分支依赖外部端点向Wait节点的resume webhook回传decision字段,没实现该端点工作流会一直挂起
  • Invoices表缺少invoice_number列时查重节点直接报错,建表列名必须与节点配置一致
  • OpenAI结构化输出偶尔字段名漂移,校验节点应对缺失字段做兜底而非假定格式恒定
  • OpenAI调用按用量计费,本条不承诺免费或具体费用

原文与作者资料 ↗

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

原文标题
Process, validate, and approve invoices with OpenAI GPT-4o and Google Sheets
原作者
Bhaskar Gorati
原始发布日期
2026-09-19T15:29:22.739Z
来源
https://n8n.io/workflows/19739