2026-10-10 · 原文发布日
邮件进来自动开出带编号的PDF发票
这个n8n模板把开票变成自动流程:每分钟轮询Gmail里主题为发票或订单请求的未读邮件,用Claude从正文提取客户、账单信息和明细行,校验必填字段与币种并以整数分为单位核算小计、税额和总额;无效或超限的请求转去Sheets复审标签页并邮件通知主人。通过的邮件会查发票日志去重、分配年度递增的发票号、生成HTML,再用MintPDF社区节点渲染成A4 PDF,存档到Google Drive、在原邮件线程回复附上PDF,并把明细和链接写入Sheets日志。卖家信息、税率、币种、审批上限都在设置节点里改。模板免费。
原文要点
Peter Hallander发布的免费n8n模板:每分钟轮询Gmail中主题匹配发票/订单请求的未读邮件,用Anthropic Claude提取客户、账单信息和明细行,校验必填字段与币种,以整数分为单位算小计、税额、总额;无效或超审批上限的请求转Google Sheets复审标签页并邮件通知主人。通过后查发票日志去重、分配年度递增发票号、生成HTML,用MintPDF社区节点渲染A4 PDF,存档Drive、回复原线程并写入Sheets日志。卖家信息、税率、币种、上限都在设置节点改。
这次做成什么
装好社区节点和四组凭据后,用一封虚构订单邮件走完'提取→校验→编号→生成PDF→回复→存档→记日志'全流程,并验证无效邮件被正确转入复审。
准备什么
- 自托管n8n(安装社区节点需要)或支持社区节点的n8n Cloud
- MintPDF API密钥(免费计划每月100份PDF)
- Gmail、Google Sheets、Google Drive、Anthropic四组凭据
- 含Invoices与Review两个标签页且列名匹配模板的Google表格
具体怎么做
安装MintPDF社区节点并配密钥
在n8n设置中安装n8n-nodes-mintpdf社区节点,然后在Credentials里新建MintPDF API凭据填入密钥。Cloud实例需确认允许社区节点。
配齐四组凭据和两处ID
分别新建Gmail、Google Sheets、Google Drive、Anthropic凭据。在'Invoice settings'节点填入卖家名称地址、主人邮箱、币种、税率、审批上限、付款条件,并把Google Sheet ID和Drive文件夹ID换成你自己的。
建好Sheets两个标签页
在测试表格建Invoices和Review两个标签页,列名严格按模板追加的字段设置(发票号、日期、客户、金额、Drive链接等)。列名不匹配会写入失败。
发一封虚构测试邮件
用另一个邮箱向受监控的Gmail发一封主题为'Invoice request'的邮件,正文用下方虚构示例(含客户名、两行明细、单价数量)。等轮询触发或手动执行,观察Claude提取出的结构化数据。
验证两条分支
正常邮件:确认拿到年度递增发票号、Drive里出现A4 PDF、原线程收到带附件回复、Invoices页新增一行。再发一封缺明细或金额超审批上限的邮件,确认它进入Review标签页且主人收到通知邮件。
核对金额口径
检查小计、税额、总额是否按整数分计算无浮点误差,重复发送同一封邮件确认被日志去重跳过,不再分配新发票号。
可直接复制的材料
Claude账单信息提取提示词
本站独立编写,币种集合和字段名需在模板实际节点中核对后调整。
你是开票助手。请从下面这封邮件正文中提取开票信息,只返回一个合法JSON对象,不输出其他文字。
格式:{"customer_name":"","customer_email":"","billing_address":"","currency":"EUR","line_items":[{"description":"","quantity":0,"unit_price_cents":0}]}
规则:金额一律换算为整数分;币种只接受EUR/USD/GBP,其他币种返回{"error":"unsupported_currency"};缺少客户名或明细时返回{"error":"missing_required_fields"}。
邮件正文:{{ $json.body }}Invoice settings配置示例
本站虚构示例;approval_limit_cents=500000即总额超5000.00欧元转人工复审,字段名以模板设置节点为准。
{
"seller_name": "示例设计工作室",
"seller_address": "示例市示例路1号",
"owner_email": "owner@example.com",
"currency": "EUR",
"tax_rate_percent": 21,
"approval_limit_cents": 500000,
"payment_terms": "30天内付款",
"google_sheet_id": "替换为你的表格ID",
"drive_folder_id": "替换为你的文件夹ID"
}输入与输出示例
本站虚构演示,非实际运行结果;发票号接续取决于日志中已有行数。
输入
测试邮件正文:'你好,请为Acme咨询公司开票:品牌Logo设计1项,单价800.00欧元;名片排版2项,单价150.00欧元。账单地址:示例大道10号。'对应输出
提取结果:{"customer_name":"Acme咨询公司","currency":"EUR","line_items":[{"description":"品牌Logo设计","quantity":1,"unit_price_cents":80000},{"description":"名片排版","quantity":2,"unit_price_cents":15000}]};小计110000分、税额23100分(21%)、总额133100分即1,331.00欧元,分配发票号2026-0007,Drive存档PDF并回复原线程。做完检查这些
- MintPDF渲染成功,Drive目标文件夹出现排版正确的A4 PDF
- 原邮件线程收到带PDF附件的自动回复,Invoices标签页新增含Drive链接的一行
- 重复邮件被日志去重跳过,不产生第二个发票号
- 缺明细或超审批上限的邮件进入Review标签页并触发主人通知邮件
容易卡住的地方
- MintPDF免费计划每月100份PDF,超出需付费或渲染失败(模板会邮件通知主人)
- 审批上限、税率、币种都在设置节点硬编码,换业务时务必同步改
- Sheets列名与模板追加字段不一致会导致日志写入失败
- Claude提取可能漏行或错读币种,建议先小额测试并对Claude节点输出做人工抽查
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Create numbered PDF invoices from Gmail with Claude, MintPDF, and Google Sheets
- 原作者
- Peter Hallander
- 原始发布日期
- 2026-10-10T07:54:38.019Z
- 来源
- https://n8n.io/workflows/20731