跳到主要内容

基于Airtable的瑞士二维码账单:使用PDF4me在Make中生成、附加并通过电子邮件发送

· 阅读需 25 分钟
SEO and Content Writer

PDF4me Create Swiss QR-bill是一个Make模块,可以将付款详情转换为瑞士二维码账单图像。它与Airtable数据库关联,从一行数据中读取债权人、债务人和QR-IBAN,将生成的账单作为附件添加到同一记录中,并通过电子邮件发送给债务人。

问Airtable能否生成发票,答案是否定的,至少不能生成可支付的发票。它能很好地保存债权人、债务人、金额和QR-IBAN信息,但瑞士二维码发票需要特定的格式:明确的布局、裁剪线、正确格式的参考信息,以及银行应用程序能够识别的二维码。通常的建议是退出Airtable,打开银行网站,重新输入数据。但这种方法恰恰相反,数据始终保留在 Airtable 中,不会离开它原本所在的数据库。

概况
1. Watch records
Airtable. 从Swiss QR Requests中提取Status为“新建”的行。
2. Create Swiss QR-bill
PDF4me. 根据债权人、债务人和QR-IBAN生成付款凭证。
3. Upload an attachment
Airtable将 PNG 文件放回同一记录的Document字段中。
4. Update a record
Airtable会将结果写回,以便该行显示发生了什么。
5. Send an email
Gmail会将邮件发送到该行所示的地址。
简短版

有人在Airtable表格中添加了一行,包含债权人、债务人、金额和QR-IBAN,并将Status设置为“新建”。Make Make识别该记录, PDF4me会渲染瑞士二维码账单,并将图像作为附件直接添加到该记录中。债务人会通过电子邮件收到账单。整个过程仅需五个模块,无需银行门户,发票数据就保留在您团队已编辑的数据库中。

基于原因的问答​

Why keep the payment data in Airtable?因为对于很多小型财务团队来说,客户信息已经存在于客户记录和所属项目旁边。如果将其导入会计软件以生成一张付款单,就意味着要在两个系统中维护同一个客户信息。而且,即使是不懂技术的同事也能自行解决数据错误,无需咨询任何人。

Why put the image back on the record instead of into a folder?因为文件夹中的文件会失去与生成它的原始文件的关联。将 PNG 文件附加到同一行的Document ”字段中,意味着单据、其来源数量和状态都会一起传输,任何查看该行的人都可以直接看到该文件,而无需跳转到其他位置。

Why filter the trigger on Status rather than watching everything?因为否则Watch records会在您添加的每一行数据时触发,包括未完成的行。触发器上的公式将“新建”明确定义为一条指令:该行已完成并准备就绪。它还提供了一种安全的方式来重新签发单据,即将状态设置回原状态。

Why does the QR-IBAN get cleaned before it is sent?因为人们输入IBAN时会带空格,而规范要求账户信息中不包含空格。IBAN IBAN会对该列进行替换,去除空格,这正是银行应用程序能够读取凭证和被拒绝凭证之间的区别所在。同样的道理也适用于金额,金额会被格式化为两位小数,而不是直接传递原始数据。


您将获得​

输入:一条Airtable记录,包含债权人、债务人、金额、币种和QR-IBAN, Status设置为“新建”。输出:一张附加到该记录的瑞士二维码账单 PNG 图片,以及一封附加了该账单的电子邮件,发送给债务人。

Airtable base PDF4me Live Automations with the Swiss QR Requests table open, showing rows INV-1001 to INV-1004 with CreditorName Muster AG, Bahnhofstrasse 1, 8001 Zuerich CH, a QRIBAN beginning CH4431999123, a structured Reference, DebtorName Test Kunde AG at Seestrasse 10 in 8002 Zuerich, Amount 100.50, Currency CHF, a Message column reading Rechnung INV-1001 and a Status column reading Generated

每张钞票一行。此处的每一列都对应瑞士二维码规范要求的一个字段。

The generated Swiss QR bill for INV-1003: a Receipt half and a Payment part separated by a scissor line, both showing account CH44 3199 9123 0008 8901 2 payable to Muster AG at Bahnhofstrasse 1, 8001 Zuerich, reference 21 00000 00003 13947 14300 09017, additional information Rechnung INV-1003, payable by Test Kunde AG at Seestrasse 10, 8002 Zuerich, currency CHF and amount 100.50, with the QR code in the payment part

左侧是收据,右侧是付款部分,中间用剪刀线隔开。

Gmail showing the received message with subject Your Swiss QR bill INV-1003, the body reading Hello Test Kunde AG, Please find your Swiss QR bill INV-1003 attached, Amount 100.5 CHF, and one attachment previewing the QR bill

债务人收到的东西,完全由这笔钱建造而成。


你需要什么​

  • A Make account。Open Make标准应用包含五个模块,无需高级版。
  • PDF4me API key。Get your API key一次PDF4me连接即可覆盖整个场景。
  • An Airtable base捕获的数据库名为PDF4me Live Automations其中包含一个名为Swiss QR Requests表。它需要债权人信息块、债务人信息块、 QRIBAN、参考Amount、金额、货币、消息、电子邮件、 Status字段以及名为Document的附件字段,用于存储最终的收据。
  • A Gmail account用于交付,与Make连接。
  • A real QR-IBAN来自您的银行。这不是普通的IBAN:瑞士QR-IBAN属于专用的机构代码范围,是结构化QR码参考代码发挥作用的关键。您的银行可应要求签发。

概览​

  1. Watch records (Airtable) 开始在Swiss QR Requests中获取新行。
  2. Create Swiss QR-bill ( PDF4me)将账单渲染为 PNG 格式。
  3. Upload an attachment ( Airtable)会将其附加到同一行的Document字段中。
  4. Update a record ( Airtable)会将结果写回该行。
  5. Send an email ( Gmail)即可将催款单送达债务人。

完整场景概述​

The Make scenario canvas showing five connected modules in order: Airtable Watch records with a clock icon, PDF4me Create Swiss QR-bill, Airtable Upload an attachment, Airtable Update a record, and Gmail Send an email, each marked with a green tick and one operation

三个Airtable模块、一个PDF4me模块和一个Gmail模块。数据库既是数据源,也是目标数据源。


步骤 1:如何从Airtable行触发场景?​

目前流程:尚未启动,这是触发点。

标记为“就绪”的行是请求,所以Make会监视它。

  1. 添加Airtable > Watch records作为触发器。
  2. 配置:
    • 根据: PDF4me Live Automations
    • 桌子: Swiss QR Requests
    • Trigger field: Created
    • Label field: Title
    • 限制: 10
    • 公式: {Status}='New'

Watch records配置​

Make Airtable Watch records module with Base set to PDF4me Live Automations, Table Swiss QR Requests, Trigger field Created, Label field Title, Limit 10, View left empty and Formula braces Status equals New

该公式可以防止场景在未完成的行上触发。

Tip.Trigger field必须是“创建时间”或“最后修改时间”字段, Make模块中也有明确说明。如果没有此字段,触发器将无法对记录进行排序,并且行为将不可预测。如果您的表中没有此类字段,请在构建其余部分之前添加该字段。


步骤 2:如何将一行转换成瑞士 QR 钞票?​

目前为止的流程: Airtable触发器。

这是生成单据的模块。它的大部分字段直接映射到行数据;其中两个字段需要表达式。

  1. 添加PDF4me > Create Swiss QR-bill。
  2. Configure影响输出结果的设置:
    • Format Type: PNG
    • Reference Type: QRR
    • 语言: English
    • Separator Line: Line With Scissor
    • Creditor Address Type: S
  3. 根据触发器映射支付数据:
    • Amount: formatNumber(1.Amount; 2; "."; "")
    • IBAN: replace(1.QRIBAN; " "; "")
    • Creditor Name、街道、邮政编码、城市和国家/地区(来自“债权人”栏)
    • Debtor姓名和地址取自“债务人”列, Reference取自该行。

Create Swiss QR-bill配置​

Make PDF4me Create Swiss QR-bill module showing Format Type PNG, a Currency dropdown, Reference Type QRR, Language English, Separator Line Line With Scissor, Amount set to a formatNumber expression over the Amount column, IBAN set to a replace expression over the QRIBAN column, Creditor Address Type S and the start of the Creditor Name field

面板在此处可滚动查看。债权人名称下方显示的是债权人地址的其余部分以及完整的债务人信息。

每个设置决定什么​

场地这里的价值它控制着什么
Format TypePNG它不是 PDF 文件,而是图片,因此可以附加到Airtable单元格并进行内嵌预览。
Reference TypeQRR结构化二维码参考,这种类型需要QR-IBAN。其他选择包括SCOR和NON
Separator LineLine With Scissor在收据和付款部分之间画出切割线
Creditor Address TypeS结构化地址,即街道、邮政编码和城镇分别位于不同的字段中,而不是自由文本。
AmountformatNumber(...)两位小数,不设千位分隔符,这符合规范要求。
IBANreplace(...)在账户验证之前,去除用户在IBAN中输入的空格。

Tip.Reference Type和账户必须一致。QRR 需要QR-IBAN和 27 位数的 QR 参考号;普通IBAN加上QRR参考号是QRR生成的凭证验证失败的最常见原因。如果您还没有 QR-IBAN,请选择NON,并将参考号留空,直到您的银行签发QR-IBAN为止。


步骤 3:如何将纸条放回唱片上?​

目前流程:触发器加上PDF4me模块。

该排的客人要求结账,所以应该由该排的客人来付账。

  1. 添加Airtable > Upload an attachment。
  2. 配置:
    • Base和Table:同步骤 1
    • Record ID:触发器中的id
    • Attachment field: Document
    • File: PDF4me的输出结果 - Create Swiss QR-bill
    • File name: QRBill_ + 行Title + .png
    • Data:模块 2 的Document输出。
    • Content type: PNG image

Upload an attachment配置​

Make Airtable Upload an attachment module with Base PDF4me Live Automations, Table Swiss QR Requests, Record ID mapped from the trigger id, Attachment field Document, File set to the PDF4me Create Swiss QR-bill output, File name QRBill_ plus the Title token plus .png, Data set to the module 2 Document output and Content type PNG image

Record ID来自触发器,因此该单据会落在请求它的行上。


步骤 4:如何将结果记录在行中?​

目前流程:所有操作均通过附件上传完成。

上传文件并不等同于工作完成。最终结果需要通过单独的更新程序来写入。

  1. 添加Airtable > Update a record。
  2. 配置:
    • Base和Table:同步骤 1
    • Record ID:触发器中的id
    • Record:填写您希望返回的字段。 Status非常重要,因为它是触发公式读取的内容;而OutputLink列则方便您放置可共享的 URL。

Update a record配置​

Make Airtable Update a record module with Base PDF4me Live Automations, Table Swiss QR Requests, Record ID mapped from the trigger, and the Record section listing the table fields Title, CreditorName, CreditorStreet, CreditorPostalCode, CreditorCity, CreditorCountry, QRIBAN, Reference, DebtorName, DebtorStreet and DebtorPostalCode as empty inputs

该面板列出了表格中的每一列。如果您不想被覆盖,请将任何列留空。

Tip.除了您实际要更改的字段外,请将所有其他字段留空。已映射但为空的字段会清除单元格内容,这很容易导致看似正常的情况下,债权人地址被清除。在捕获的运行中,面板是滚动的,并且所有可见字段均为空,因此请特意设置Status,而不是直接复制您看到的内容。


第五步:如何将账单寄给债务人?​

目前流程:所有操作均已完成记录更新。

最后一个模块将收据送到指定地址。

  1. 添加Gmail > Send an email。
  2. 配置:
    • To:触发器中的Email列
    • Subject: Your Swiss QR bill 及Title
    • Body type: Raw HTML
    • Content:一段简短的 HTML 代码,包含债务人姓名、账单名称和金额。
  3. 添加附件:
    • File: PDF4me - Create Swiss QR-bill输出
    • File name: QRBill_ + Title + .png
    • Data:模块 2 的Document输出。

Send an email配置​

Make Gmail Send an email module with the recipient mapped from the Email column, Subject Your Swiss QR bill plus the Title token, Body type Raw HTML, an HTML content block greeting the debtor and stating the amount and currency, and one attachment taking the PDF4me module output with the file name QRBill_ plus Title plus .png

附件从模块 2 获取字节,因此Airtable永远不会被读取。

Tip.注意邮件正文中的金额。截获的邮件内容如下。Amount: 100.5 CHF而纸条本身的内容是:100.50因为当二维码钞票通过时,主体会映射原始列。formatNumber除非你想向顾客解释其中的区别,否则请在两处使用相同的表达方式。


运行场景并验证​

  1. Save方案并运行一次。
  2. 向Swiss QR Requests中添加一行,其中包含债权人、债务人、金额、 QR-IBAN和Status New。
  3. 观察五个模块的指示灯亮起情况。每个模块应该报告一项操作。
  4. 打开该行: Document字段应包含一个以Title命名的 PNG 文件。
  5. 打开附件并检查两部分。收据和付款单上的账户、参考编号和金额必须一致,中间用剪刀线隔开。
  6. 请在电子邮件栏的收件箱中查看邮件及其附件。

在捕获的运行中,行INV-1003生成了一张支付给Muster AG (地址: Bahnhofstrasse 1, 8001 Zuerich的收款单,账户为 CH44 3199 9123 0008 8901 2,参考号为 21 00000 00003 13947 14300 09017,由Test Kunde AG (地址: Seestrasse 10, 8002 Zuerich支付,金额为 100.50 CHF。

What did you actually build?一个内置于您团队现有数据库中的付款单生成器。无需登录银行门户,无需重新输入IBAN,付款单会自动附加到生成它的记录中,因此一个月后您仍然可以查看哪条记录对应哪笔账单。


无需重建即可添加的常见变体​

将收据放在发票页上
将Format Type切换为 PDF,并添加合并步骤,将账单置于发票下方。overlay merge scenario详细介绍了这种模式。
发票以欧元和法郎两种货币开具
规范只允许使用CHF和欧元 (EUR),其他货币均不允许。请将“货币”列映射到“货币”字段,而不是对其进行固定,并在Airtable中添加一个验证视图,标记出所有其他货币。
从同一基地发送提醒
添加“付款日期”列和一个定时任务,以便在 30 天后对任何未付款项重新发送现有附件。由于收款单已存在于记录中,因此无需重新生成。
涉及多个实体的法案
债权人信息已来自列,因此一个基础账户可以代表两家公司发行债券。只需在每行中为每家公司分配QR-IBAN,其他信息无需更改。

与其他制作瑞士二维码钞票的方式相比,这种方式有何异同?​

每一行描述了一种替代方案。最后一行就是当前的情况。

比较谁在运营它数据来源你所维护的
银行门户网站与此场景对比一个人,一次失误,慢慢积累起来。手工重录没什么,但每张账单都会占用别人几分钟时间。
具备瑞士二维码导出功能的会计软件包与此方案的对比金融,在该产品内部该产品的账簿订阅服务,以及客户的第二个家
开发者库与此场景应用程序内部的开发人员通过代码实现您的数据库代码、规范更新和版本发布
这种情况任何可以添加Airtable行的人团队已经保留的基础五个模块和一个QR-IBAN

常见问题​

什么是瑞士二维码钞票?​

瑞士二维码账单是取代瑞士旧式橙红色支付单的支付凭证。它包含一个二维码,其中包含债权人、债务人、金额和参考编号等信息,因此付款人只需在银行应用程序中扫描二维码即可,无需手动输入任何内容。

它分为两部分,收据部分和付款部分,中间有一条切割线隔开,布局由……固定。Swiss implementation guidelines published by SIX因此,生成一个这样的模型是一个规范问题,而不是一个设计问题。

瑞士的QR-IBAN号码是什么?​

QR-IBAN是银行除了您的普通IBAN之外发放的第二个账号,其机构标识符位于预留范围内,因此很容易识别。它的存在是为了让银行能够识别收到的付款带有结构化的 QR 参考号,并自动将其与发票匹配。

针对这种情况,实用规则是:如果将Reference Type设置为QRR则必须使用QR-IBAN,而不是您常用的 IBAN。混用两者会导致生成的凭证虽然看起来正确,但无法扫描。

如何支付瑞士二维码账单?​

付款人打开银行应用程序,扫描支付部分的二维码,查看屏幕上的金额并确认。无需输入任何内容,这正是这种支付方式的意义所在。

也可以在邮局柜台支付汇票,或者从打印的字段中手动输入,因此付款部分会在代码旁边以可读文本的形式重复显示账户、参考号和金额。

Airtable可以创建发票吗?​

仅靠Airtable本身无法做到这一点。Airtable 可以存储数据,并将其布局在界面或可打印视图中,但它无法生成符合支付标准的文档,也无法生成符合该规范的可扫描二维码。

它的优势在于能够提供真实可靠的信息。这种方案也保留了这种划分: Airtable保存数据行, PDF4me生成符合规范的文档,最终结果以附件的形式返回到数据行中。


故障排除​

银行应用程序无法扫描二维码

请同时核对账户和参考类型。QRR参考信息需要QR-IBAN;普通IBAN需要SCOR或者NON然后检查IBAN是否确实到达了模块,并且没有空格,这才是关键所在。replace表达方式就在那里。

该场景会在行未准备就绪时触发。

触发器公式缺失或不匹配。{Status}='New'区分大小写,且该字段必须是单选或文本字段,其值必须为“新建”。另请确认Trigger field为“创建时间”或“最后修改时间”字段。

附件从未出现在记录中。

检查模块 3 中的Record ID它必须来自触发器,而不是来自PDF4me模块。然后检查Content type是否与Format Type匹配:从模块 2 上传的 PNG 文件如果被当作 PDF 文件上传,则会附加到附件中,但无法预览。

运行后,一列数据被清空了。

模块 4 会列出表格中的每个字段,如果某个字段已映射但为空,则会清除该单元格。请勿修改任何您并非有意写入的内容。


后续步骤​

您现有的数据库通常比看起来更接近最终的付款单据。它只需要一些能够体现规范的内容。