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

2026-09-29 · 原文发布日

n8n:Gmail 财务邮件自动分类归档到表格和网盘

每小时运行的邮件整理流:拉取 Gmail 未读邮件,用 OpenAI 按主题和正文分成销售、费用、结算、交易、通知、其他六类。费用类提取发票字段(含 GST 拆分、金额)并把 PDF 附件传 Google Drive、在 Sheets 追加带链接的行;销售类提取订单后生成 HTML 确认单,经 PDFBolt 转 PDF 存 Drive 再记账;结算类同理归档;其余只打标签并标已读。任一步出错会把技术错误翻成白话,经 Discord 和 Gmail 告警。

原文要点

该免费n8n模板每小时定时运行:读取Gmail全部未读邮件,把主题和正文交给OpenAI分为销售、费用、结算、交易、通知、其他六类。费用邮件提取供应商、发票号、GST拆分、金额、付款信息,抓取PDF附件上传Google Drive并在Sheets的Expense页追加带链接行;销售邮件提取订单字段,生成HTML确认单,经PDFBolt转PDF后上传Drive并写入Sales页;结算邮件同理写Settlement页;其余三类只加Gmail标签并标记已读。任一步失败由错误触发器让OpenAI把技术报错翻成白话,经Discord和Gmail告警并附失败执行链接。需配置Gmail、OpenAI、Sheets、Drive、Discord、PDFBolt凭据,自建n8n需安装n8n-nodes-pdfbolt社区节点。

这次做成什么

在n8n里搭一个可独立验证的邮件分类归档练习流:定时触发→取未读邮件→AI六分类→按类别走分支(费用提取字段+记表格,其余打标签)→失败告警。不依赖真实Drive/PDFBolt也能跑通核心分支逻辑,先用合成邮件测试。

准备什么

  • 一个n8n实例(云版或自建,版本支持Schedule Trigger与Gmail节点)
  • 一个Gmail账号并完成OAuth2凭据授权(需gmail.modify权限范围)
  • 一个OpenAI API Key(仅作分类与字段提取,模型可按账户可用情况选择)
  • 一个Google Sheets表格,预先建好Expense、Sales、Settlement三个分页及对应表头
  • (可选)Discord服务器与Webhook用于失败告警,自建实例需装n8n-nodes-pdfbolt才有PDF转档

具体怎么做

  1. 建定时触发与拉信节点

    新建工作流,拖入Schedule Trigger设为每1小时一次;后接Gmail节点,操作选Get Many,Filters里设labelIds为UNREAD,凭据选你的Gmail OAuth2。先手动Execute一次,确认能返回未读邮件的主题、正文、附件元信息。

  2. 加AI分类节点

    接OpenAI节点的Message a Model操作,把下方分类提示词粘贴进System提示,用户消息填入表达式拼接{{$json.subject}}与{{$json.snippet}}。输出应为单个类别词。后用Switch节点按该输出建六条分支:sales/expense/settlement/transaction/notification/other。

  3. 配置费用分支的字段提取

    在expense分支再放一个OpenAI节点,用下方发票提取提示词,要求返回JSON。后接Google Sheets节点(Append Row),Document选你的表格,Sheet选Expense,把vendor、invoice_number、gst、amount等列映射到AI输出字段;有PDF附件时在中间加Gmail下载附件节点再接Google Drive上传节点,把文件链接写入同一行。

  4. 配置其余分支与已读处理

    sales与settlement分支复制expense结构,只换目标分页与提示词;transaction/notification/other分支各接一个Gmail节点(Add Labels,标签需先在Gmail后台建好并复制标签ID),所有分支末尾汇合到一个Gmail节点把邮件标记为已读(Remove UNREAD标签)。

  5. 加错误告警

    在工作流Settings里指定Error Workflow;新建一个错误工作流:Error Trigger→OpenAI(用错误翻译提示词把堆栈翻成白话)→Discord节点发告警→Gmail节点发邮件给运维地址,正文附{{$json.execution.url}}指向失败执行。

可直接复制的材料

邮件六分类System提示词

本站独立编写,可直接粘贴到OpenAI节点的System提示;类别词需与Switch分支名一致。

你是一名财务邮件分类器。根据用户提供的邮件主题和正文摘要,把邮件归入且仅归入以下六类之一:sales(客户下单、询价、订单确认)、expense(供应商发票、报销、账单)、settlement(平台结算、付款划拨、对账)、transaction(银行动账、支付回执)、notification(系统通知、新闻简报)、other(无法归入以上)。只输出类别英文单词本身,不要输出任何解释、标点或多余文字。

费用发票字段提取提示词

本站独立编写示例;{{$json.snippet}}按你Gmail节点实际输出字段调整;GST拆分逻辑需按原文模板核对具体字段名。

从下面的费用类邮件正文中提取发票信息,严格输出一个JSON对象,不要输出其他文字。字段:vendor(供应商名)、invoice_number(发票号)、invoice_date(YYYY-MM-DD)、subtotal(税前金额,数字)、gst(税额,数字,没有则0)、total(含税总额,数字)、currency(三字母币种)、payment_terms(付款条件,没有则空字符串)。找不到的字段填空字符串或0。邮件正文:{{$json.snippet}}

合成测试邮件CSV

本站虚构的合成测试数据,不含真实个人信息;可在无真实邮件时通过Code节点逐条注入验证分类与分支。

subject,snippet,expected_category
"发票 INV-2041 - 云服务3月账单","尊敬的客户,附件为INV-2041发票,税前金额12000元,税额2160元,合计14160元,请于30天内付款。",expense
"您的订单 #88912 已确认","感谢您的购买,订单号88912,商品:机械键盘x2,金额合计798元,预计3个工作日发货。",sales
"本周结算单已生成","商户号M-3390本周结算金额56000元,已划拨至尾号6688账户,明细见附件PDF。",settlement
"账户动账提醒","您尾号6688的账户于今日14:05支出人民币56000元,余额128300元。",transaction
"系统维护通知","本平台将于本周六凌晨2点至4点进行系统维护,期间服务可能短暂中断。",notification

错误翻译告警提示词

本站独立编写示例,用于错误工作流的OpenAI节点;字段路径以Error Trigger实际输出为准。

下面是自动化工作流的一次失败信息。请把技术错误翻译成一段不超过80字的中文白话说明:发生了什么、大概是什么原因、建议第一步检查什么。语气简洁直接,不要堆术语。失败信息:{{$json.error.message}},节点:{{$json.node.name}}

输入与输出示例

本站虚构演示输出,数字与输入一一对应,非原作者运行结果,未实际调用OpenAI或Gmail。

输入

合成邮件:主题"发票 INV-2041 - 云服务3月账单",正文含税前12000元、税额2160元、合计14160元,带一个PDF附件。

对应输出

分类节点输出:expense。提取节点输出JSON:{"vendor":"云服务供应商","invoice_number":"INV-2041","invoice_date":"","subtotal":12000,"gst":2160,"total":14160,"currency":"CNY","payment_terms":"30天"}。Sheets Expense分页追加一行:INV-2041 | 12000 | 2160 | 14160 | Drive链接占位。邮件被加Expense标签并标为已读。

做完检查这些

  • Schedule Trigger手动执行后,Gmail节点能返回至少一封未读邮件的主题和正文
  • 对5封合成测试邮件,分类节点输出与expected_category列一致,且只输出单词
  • expense分支在Sheets的Expense分页追加的行中,发票号与金额列与AI提取JSON一致
  • 所有分支执行完毕后,测试邮件的UNREAD标签被移除
  • 故意断开OpenAI凭据触发失败,能收到Discord或Gmail白话告警且含执行链接

容易卡住的地方

  • Switch分支匹配的是AI原始输出,若模型多说一个标点或换行就会落到默认分支,需trim输出
  • Gmail标签必须先手动创建,节点里填的是标签ID而不是标签名
  • Sheets表头列名必须与Append Row映射完全一致,否则追加为空行或报错
  • 每小时拉全部未读邮件,量大时会消耗较多OpenAI调用;模板未内置去重逻辑,重跑可能重复记账,需自行加发票号判重
  • PDFBolt与OpenAI为外部付费服务,费用取决于各自账户;自建n8n没装社区节点时销售分支无法转PDF

原文与作者资料 ↗

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

原文标题
File and classify Gmail invoices, orders, and payouts with OpenAI and Google Sheets
原作者
Avkash Kakdiya
原始发布日期
2026-09-29T12:28:10.636Z
来源
https://n8n.io/workflows/20154