在用 Notion 做 旅行计划 时,我提到在 Notion 中可以借由自动化自动计算汇率。Notion 内部并没有这样的系统,因此需要手动添加一个计算汇率的自动化才能实现。

自动化的思路是这样的:当用户在「账单」页面新建了一个条目、输入消费金额及币种后,自动提取信息,将其转化为某个固定币种的价值,添加到相应的条目中。如下图所示,我只需将花费输入「Local」,再选择相应的「Currency 币种」,工具会自动把这个价格换算为英镑,填进表格里。

这里分别使用了 Zapiermake 建立这个自动化流程。Zapier 的操作更简单,但每个月需要不小的一笔月费;make 的设置更复杂一点,但是免费的。

boxcnI1qbdXKYqXTF0CzQZVjWLd

Zapier

打开 Zapier,新建一个「Zap」,会来到下图的界面。一个 Zap 就是一个自动化的工作流程,将你的应用程序和服务连接在一起。

boxcnseB2BGy8LmLan9GlAUfkCg

每个 Zap 中至少需要一个触发器(trigger)和一个动作(action)才能进行。每个 Zap 可以有多个动作,但只能设置一个触发器。

对这个场景来说,触发器是「在 Notion 中新建条目」,因此需要作出如下选择:

boxcnPTZUue4U2bJnFfuIIzzMIc

下一步是将自动化与账户相连。如果之前绑定过账户,在这里将会直接显示。如果没有的话,点击「Connect a new account」,在弹出页面中登录 Notion,选择要实施自动化的 database 即可。在进入下一步之前,建议在 database 中添加一个条目,方便确认这一步是否能顺畅进行。

boxcnOobX0Gq3LXm6fyWeWwZkcd

下一步需要选择账本所在的页面。选中后进入测试,点击「Test trigger」。如果一切顺利,Zapier 会收集到这些数据:

boxcn2hw3Bk2PIo29Nk0koAOf8g

图中圈出的两个数据就是我们需要的。点击 Continue 进入下一步。此时需要设置的就是提取信息后,需要这个自动化流程的下一步操作。

boxcnB3fbN9nrRSklb5RSJ8VXRc

使用的汇率转换插件是 mallabe Currencies,需要选择的操作是「Convert Currency」。注册和使用 mallabe 都是免费的,注册成功后会自动生成一个 API key,在下一步「Choose account」中输入即可。

boxcnw6ZKkmPlsQhdGIEwQJARHg

下一步是选择转换的金额与币种。原币种(From / Base currency)的类型由于输入的数据来源并不统一,并在 Notion 原表格中有所标记,因此需要在 Custom(自定义)下选中「Currency」(原表格中用来标记币种的列名)。

而目标币种相对统一,只需要在下拉菜单中找到「英镑 GBP」的选项,选中即可。

boxcn8GXS4I2Li9omMFSYcpjdxd

Amount 指需要转换的金额。和选择原币种的思路类似,点选「Local」即可。如果想要某个特定日期的汇率(比如添加条目的时间),在「Date」中需要选择「Property Date Start」,否则将会按照运行时的最新汇率计算。

boxcnzpN3vskgwYCnR7SpIqsT2f

运行测试,成功换算后进入下一步:将转换后的数据添加进原先的表格中。

boxcngamqqfvGpjnXZyUhWCGopc

下一步中选择 App、连接 Notion 账户的过程与第一步中选择触发器时类似,区别在于这次的「Event」需要是「Update Database Item」。

boxcnzH4N7I51ZNh0HkFD7foeqf

在「Set up action」中,需要修改三个地方,分别是:

  • Database:即账单所在的页面。
  • Item:需要修改的条目 ID。来源是「Custom – ID」,用来辅助定位条目所在的位置。
  • Converted:原表格中给「转换后的英镑价值」留下的位置。数据来源是自动化流程里经 mallabe 转换后的输出结果。
boxcnrbpbJLEHIiT0HTrvyk92Xe
boxcn6JzFUNGc6accNkp2GYAo6f

如果可以成功输出,说明这个工作流是没有问题的。中途如果哪一步出现了错误,Zapier 会显示黄色提醒,按照提示修改即可。

测试中我发现,此时可以直接发布(Publish)这个 Zap,Zapier 也能收到「新增条目」的提醒,但并不能检测到数据、并在转换后输出。这是因为我在添加条目时习惯先添加花费名称, 再输入具体的消费金额和币种,而 Zapier 在「新建条目」时就接收到了信号,因此只能读取新条目的名称,消费数据还要在此之后,故而不能及时转换。

解决方式也很简单:在 Trigger 和第一个 Action 之间加入一个「延时操作」,选择需要延长的时间即可。延时的长短可以自由决定,直接在输入框中输入即可,我选择的是两分钟。

boxcnaaHcSwXE0o1EIDDOPSDDce
boxcnXf7QI5Pnvjrj7kaEdOhKug

如此一来,在 Zapier 检测到 Notion database 中的新条目时,不会立即进入下一步,而是等待两分钟后,再读取新条目中的信息,转换汇率,并把结果添加到表格中。

最终版本的工作流如下图所示,之后的测试都没有问题。

boxcnxa7j6xe1Nh9jlRzvBB2S6e

这里需要提一下,Zapier 根据订阅的服务不同,在每次检测之间都会相隔一段时间,称为「update time」。对 Starter 级别的订阅来说,意味着每两次检查的时间至少是 15 分钟;在 15 分钟内如果添加了新的数据,需要等待一段时间;但如果在 15 分钟后的任一时刻添加了新条目,这个变化能立即被 Zapier 检测到。检测到的新条目数没有限制。

另外,因为这个工作流涉及了多个 Action,因此需要订阅 Zapier 后才能使用,最低月费为 $19.99,每月限制 750 次转换。

boxcnDvEH2nf6vyh2lbtUm7qIZb

make

打开 make,选择新建一个 scenario。和 Zapier 类似,make 中的 scenario 就等同于一个 Zap / 自动化场景,由某个变化触发特定行动。

点击页面中央的 ➕,新建一个触发器。在这里用到的是「Watch Database Items」,会在数据库条目创建或更新后触发自动化。

boxcnrDIpnOSJLYExOuNHsdfOTh

首先需要设置的是与 Notion 的连接。这一步需要在 My integrations 中新建一个 token,粘贴过去即可。也可以在 database 中,点选右上角的「···」,在下拉菜单里找到 Connections,选择 make 并添加。

这一步会自动生成一个 internal integration(内部集成),外部工具只可通过内部集成访问 Notion 中的一个 workspace,而public integration 可以连接多个 workspace,不过需要 手动设置

boxcnJFvHitR5aWLEGfWtGNUDFV
boxcnVJ4XvQQnbEYOWpVlNtLCrf

Watch Database Items 是用来判定触发条件的,「By created time」会检测新加入的条目,「By updated time」则是检查更改过的条目。

接下来需要添加的 database ID 可以从 Notion 数据表的地址中解析出来。Database 页面的地址通常由两个部分组成,大致格式如下:https://www.notion.so/<long_hash_1>?v=<long_hash_2>其中<long_hash_1> 部分就代表了这个数据库的 ID。

下图中 20 的 limit 则是每次更新时获取的最大条目数。make 中查询更新的最短间隔是 15 分钟,可以根据自己的需要设定。

 

boxcnzHncdjQevrCN0inlrDPqWc

下一步需要选择的是「Choose where to start」,即从哪个数据开始计算。默认值是「From now on(从现在开始)」,如果有没来得及转换的老数据,可以选择其他时间。不过在运行过一次后,设置会自动回到默认选项。

boxcnukZZKwXvIvXAfjAgJOayPb

一切设置完成后,可以右键选择「Run this module only」来检查是否有 bug。运行过一次后,make 提取出表格中的数据,也会在下一步选择数据来源时更清晰直观。

boxcnySbB5upyJuaHIvU90MfHgh

第二步是点击圆形图标右侧的 ➕ 设置汇率转换器。make 中内置的 Currency 就足够好用。

需要填三个值,分别是:数据来源;原币种;输出币种。

数据来源就是表格中记录的消费金额。在 make 中,可以去 Properties Value – Local(列名)找到,也可以直接搜索。

原币种的默认值是已知的某种固定币种,而在旅游时会输入多个币种,因此需要点击左上方的「Map」,使其能读取表中的数据,再根据输入类型添加不同的币种名称。需要注意的是,因为在原数据表中这一列用到的是单选列表(Select),因此左图选项中的「Currency」并不能提取币种信息,而需要点开左侧的黑色三角,选中 Currency name 才能正确录入。

boxcn6oeKdwlDhkzktMuUhMMLch
boxcnQaQo8BPOq0eWKSH8meUQPh

这一步完成后,同样建议右键选择「Run this module only」来检查是否有 bug。

第三步中使用的 App 依旧是 Notion,不过这次需要「Update a database item」,才能把转换后的数值添加进原来的数据表中。

这一次需要输入三个基本选项:Database ID,Page ID,和任何需要更新的条目。

Database ID 和第一步中用到的是同一份 ID。Page ID 则是需要更改的条目的 ID,应该选择右侧弹出选项中的「Database Item ID」,对应的就是数据表中的这一条目,或者说,记录下花费的那一「行」。

boxcny6B79ETKCU5sMmLlDrxBHg

到这里,只能说是定位了数据所在的行,还需要知道转换后的花费要放进这一行的哪一列中。

在 Fields 中新建一个 Item,Key 指这一列的列名;Value Type 是数据类型(比如文字、数据、邮箱等),在这里需要选择数字;最后的 Value 是经过转换后的花费数值,需要选中右侧弹出选项中的「Amount in output currency」才能正确读取。

在输入 Key 时,默认的方式好像也是从右侧弹窗中选择,但当我选择了 1. properties_value: Converted(即第一步中读取的数据),输出时就会报错,直接输入列名反而不会有这个问题。

boxcnKwbBxOOUlvvgS64ispmShe

测试无误后就可以保存了。最后的自动化流程如下图:

boxcnPrQoJ802l3yALULBDIhXjh

make 中默认不会开启自动检测,需要打开 Scheduling 才可以。它的默认运转方式和 Zapier 不太一样,用户可以手动选择「Run once」运行程序,也可以等它每隔 15 分钟运行一次——就是确确实实的 15 分钟,像是 12:15、12:30、12:45 这样的间隔。除了每日、每周等监测频率,在高级设置中,还可以自行设置「自 XX 始」「周几」「每年十月」的频率。

boxcnN8zmGVMRoixNqJS5EPDKih
boxcnBvEH4rZLDrhWSzV2r5h6gd

make 免费版每个月可以运行 1000 次自动化,最多支持两个自动化同时运转。如果只是用来转换汇率的话,虽然界面难懂了点,但肯定是比 Zapier 更划算的。

参考资料

Notion 的自动化改造之路:Notion x Zapier 初尝试 - 少数派

How I built a Budget Tracker with Notion (Template Included)

Where to find Database Id for my database in Notion?