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

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凭据需有读取客户、更新客户与发票的权限

具体怎么做

  1. 导入模板并连接Stripe

    在n8n导入该工作流后,为Stripe Trigger节点绑定监听invoice.created事件的Stripe凭据(测试模式),并为更新节点配置具备读客户、改客户与发票权限的Stripe凭据;确认Stripe把invoice事件推送到本工作流。

  2. 配置Gmail通知凭据

    为发送财务通知的Gmail节点创建OAuth2凭据并完成授权,收件人地址稍后在VAT Rules步骤里填,不用在节点里写死。

  3. 填写VAT Rules规则参数

    在VAT Rules配置步骤设置:卖家国家、卖家VAT号(换取VIES咨询编号)、财务邮箱、欧盟客户国家清单;按需调整公司名称匹配阈值、VIES不可用时的重试次数与挂起策略、是否所有税务变更都需人工批准。

  4. 用测试数据走通三个分支

    在Stripe测试模式分别造三类客户:德国公司带有效测试VAT号(走VIES复查)、本国客户且已设反向征收(仅标记人工)、无VAT号客户(不适用直接放行)。各触发一张草稿发票,观察执行日志确认落入对应分支。

  5. 核对写入结果与通知

    打开发票元数据确认写入了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