2026-09-29 · 原文发布日
n8n模板:Stripe开票前自动复查欧盟VAT号
Stripe只在客户首次录入时校验一次欧盟VAT号,之后客户税务状态失效也照样按反向征收免税开票。这个n8n工作流监听invoice.created事件并去重,按客户地址、VAT号和当前税务设置分类;跨境欧盟订单把VAT号送欧盟官方VIES接口复查(含可选公司名称匹配),服务不可用时挂起草稿稍后重试。根据结果确认或移除反向征收、把查验凭证写入发票元数据,不清晰的情况一律挂起人工处理并邮件通知财务。作者声明它绝不删数据、绝不自行发票,纯规则判断无需AI和付费组件。
原文要点
作者指出Stripe只在客户首次录入VAT号时校验一次,之后客户税务状态失效仍按反向征收免税开票。该n8n工作流监听Stripe的invoice.created事件并去重,读取卖家国家、卖家VAT号、财务邮箱等规则配置,按客户地址、VAT号和当前税务设置把发票分为跨境欧盟复查、本国反向征收仅标记、不适用三类;跨境件送欧盟VIES REST接口复查(可选公司名称匹配),VIES暂时不可用时挂起草稿并等待重试。结果明确时确认或移除反向征收并把查验凭证写入发票元数据,不清晰时挂起人工处理并经Gmail通知财务。德国、西班牙不回传公司名,希腊名为希腊字母,这几国只查号码。模板免费,无需AI和付费组件,绝不删数据、绝不自行发票。
这次做成什么
在n8n里搭好这条VAT复查工作流,用Stripe测试模式造一张跨境欧盟草稿发票走通全流程:触发→分类→VIES复查→写元数据/挂起→邮件通知,并通过一个本设计的三种分类判别练习确认理解分支逻辑。
准备什么
- 一个Stripe账号并开启测试模式,能创建客户和发票
- 一个可用的n8n实例(Cloud或自托管均可),能访问外网VIES服务
- 一个Gmail账号用于OAuth2发送财务通知邮件
- 持有自己的欧盟VAT号,用于获取VIES官方咨询编号
- Stripe凭据需有读取客户、更新客户与发票的权限
具体怎么做
导入模板并连接Stripe
在n8n导入该工作流后,为Stripe Trigger节点绑定监听invoice.created事件的Stripe凭据(测试模式),并为更新节点配置具备读客户、改客户与发票权限的Stripe凭据;确认Stripe把invoice事件推送到本工作流。
配置Gmail通知凭据
为发送财务通知的Gmail节点创建OAuth2凭据并完成授权,收件人地址稍后在VAT Rules步骤里填,不用在节点里写死。
填写VAT Rules规则参数
在VAT Rules配置步骤设置:卖家国家、卖家VAT号(换取VIES咨询编号)、财务邮箱、欧盟客户国家清单;按需调整公司名称匹配阈值、VIES不可用时的重试次数与挂起策略、是否所有税务变更都需人工批准。
用测试数据走通三个分支
在Stripe测试模式分别造三类客户:德国公司带有效测试VAT号(走VIES复查)、本国客户且已设反向征收(仅标记人工)、无VAT号客户(不适用直接放行)。各触发一张草稿发票,观察执行日志确认落入对应分支。
核对写入结果与通知
打开发票元数据确认写入了VIES查验结果、决定与(如有的)咨询编号;不清晰案例应挂起草稿、关闭自动定稿并向财务邮箱发出通知邮件。确认无误后再考虑切换正式模式。
可直接复制的材料
VAT Rules步骤参考配置(JSON片段)
本站按原文描述独立编写的示例配置,字段名需与模板内VAT Rules节点实际字段核对后再填,所有值替换为你自己的信息。
{
"seller_country": "NL",
"seller_vat_number": "NL812345678B01",
"finance_email": "finance@example-corp.test",
"eu_customer_countries": ["AT","BE","DE","ES","FR","IE","IT","PL"],
"name_match_level": "lenient",
"vies_retry_count": 3,
"vies_retry_wait_minutes": 15,
"hold_on_unclear": true,
"hold_on_any_treatment_change": false
}三类发票分类判别练习用合成数据
本站虚构的练习数据:卖家设为NL时,001跨境走VIES复查,002本国反向征收只标记人工不查VIES,003无VAT号不适用。expected_branch为本站设定的参考判断,非模板内部字段名。
[
{"invoice_id":"in_test_001","customer_country":"DE","vat_id":"DE123456789","stripe_tax_status":"reverse_charge","expected_branch":"vies_recheck"},
{"invoice_id":"in_test_002","customer_country":"NL","vat_id":"NL999888777B66","stripe_tax_status":"reverse_charge","expected_branch":"flag_only_no_vies"},
{"invoice_id":"in_test_003","customer_country":"FR","vat_id":"","stripe_tax_status":"taxable","expected_branch":"not_applicable"}
]财务通知邮件正文草稿
本站独立编写的邮件模板示例,双花括号变量需映射到工作流实际字段;原文只说经Gmail通知财务,具体文案由你自定。
主题:【需人工核对】Stripe发票 {{invoice_id}} 的VAT处理被挂起
财务同事你好:
发票 {{invoice_id}}(客户国家 {{customer_country}},VAT号 {{vat_id}})在自动复查中被挂起,原因:{{hold_reason}}。
当前Stripe税务状态:{{stripe_tax_status}};VIES复查结果:{{vies_result}}。
请登录Stripe后台核对该客户的税务资料,确认后再手动定稿或调整。
本邮件由n8n自动复查流程发送,系统未删除任何数据,也未自行发送发票。输入与输出示例
本站虚构演示,未实际调用VIES或Stripe,咨询编号格式为示意。
输入
卖家国家NL;测试发票in_test_001,客户在德国,VAT号DE123456789,Stripe当前按reverse_charge免税;VIES返回valid=true、公司名与客户名近似匹配。对应输出
工作流判定为跨境欧盟复查分支→VIES结果有效→维持reverse_charge→发票元数据写入{"vies_valid":true,"vies_consultation_number":"WAPIXXXX00123","decision":"confirm_reverse_charge"}→发票正常放行,不发财务邮件(quiet confirmation)。若VIES返回invalid,则decision改为hold_draft、关闭自动定稿并向finance@example-corp.test发出挂起通知。做完检查这些
- Stripe测试发票触发后,执行日志显示同一invoice.created事件只被处理一次,重复事件被去重
- 跨境欧盟案例的发票元数据中出现VIES查验结果、决定与咨询编号字段
- VIES无效或名称不匹配的案例发票被挂起、自动定稿被关闭且财务收到邮件
- 本国反向征收案例只被标记人工处理,执行日志中未发起VIES请求
- 全流程未删除任何Stripe对象,未有任何发票被自动发送
容易卡住的地方
- Stripe凭据权限不足(只能读不能改客户/发票)会导致更新步骤失败,需提前开齐权限
- 德国和西班牙的VIES不回传公司名、希腊返回希腊字母,这几国名称匹配应视为只查号码,别误判为异常
- VIES服务繁忙时响应慢,重试间隔和次数设太短会把可恢复的临时不可用直接变成人工挂起
- 卖家VAT号未填会拿不到VIES官方咨询编号,影响留档凭证的完整性
- Stripe只在客户录入时查一次VAT号这一现状是本流程存在的前提,若只想依赖Stripe自带校验则本工作流无意义
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Re-check EU VAT numbers on Stripe invoices with VIES and notify finance via Gmail
- 原作者
- Melbin Francis
- 原始发布日期
- 2026-09-29T15:36:38.272Z
- 来源
- https://n8n.io/workflows/20171