Notion 的自动化改造之路:Notion x Zapier 初尝试
Matrix 首页推荐
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
这篇文章将介绍,我为什么以及如何将自动化数据处理应用到 Notion 当中。并通过我实际的案例,介绍自动化工具 Zapier 的用法,分享我的使用体验。
数据更新和维护的不智能,让 Notion 的使用体验变得糟糕
随着 Notion 功能的不断完善,越来越多的人会选择使用 Notion 作为自己的第二大脑。无论是构建个人的知识网络、保存整理数据信息、还是展示自己的数字世界的成就,这些场景中,Notion 提供的功能都显得游刃有余。此外,得益于 Notion 可以高度个人定制化以及提供在线编辑的特性,用 Notion 管理待办事项,规划日程,同步团队信息,乃至于记账、写博客这种更进阶的用法,使用 Notion 都可以让数据为用户服务,一切变得井井有条。
操作的不便
但是,所谓凡事有一利就有一弊。在 Notion 当中构建的精巧且复杂的数据库,不仅意味着数据在展示层面上的美观和应用层面上的便利,同时也意味着需要在数据的更新维护上花更多的时间和精力。
按照我自己的使用习惯,我在 Notion 当中搭建了任务管理的数据库和财务管理的数据库。这其中有着大量的数字格式的数据存储在其中。但是因为 Notion 当中并不支持直接将数据进行运算得出结果
例如,数字一栏记录的值是 100,并不能通过直接填写 「+10」得到 110,数字数据的更新是需要删除原有的数据,并把计算好的新结果填入原来的位置。
在 PC 端或网页端,这样的操作还勉强可以接受,但是在手机的 App 上,这样的操作就显得过于麻烦。更不要提在记账这个应用情境中,为了追求及时、准确且无遗漏的余额显示,我通常会在付款之后就立刻更新数据。因此总是在这种时候,会在繁琐的操作当中,倍感抓狂。
臃肿的操作,带来使用方式的偏离
不仅是操作上的繁琐,更重要的在于,如果我们把使用 Notion 数据库记录、更新、回顾数据,进而改变自己行为模式的过程视作一个 PDCA 循环,那么无疑操作的复杂让 PDCA 循环失去了平衡。大部分的精力用于如何处理执行当中细碎的操作,而没有足够的时间回顾数据,反思自己的行为。这样在 Notion 当中建立数据库,也是去了最重要的作用和意义。
于是我想,是否能借助工具,自动化地处理更新数据库当中的数据。回到记账的场景当中,我作为账簿的使用者,只需要事前设计账簿信息的展示方式、规划自己的消费,定期查看账簿中留存的信息、改善自己的消费习惯。也就是将自己从繁复且无意义的数据库操作中解放出来,找回借助 Notion 记录数据,实现 PDCA 循环的意义。
寻找自动化工具
在找寻自动化工具的过程中,我想起很久之前读过的一篇少数派的文章:怎么管理自己的工作和生活?我尝试了 Notion+滴答清单。
在这篇文章中,作者用 Automate.io 串联起 Notion 和滴答清单,构建他的工作生活流。其中 Automate.io 可以在后台自动填写 Notion 表格的功能,给我留下了印象。
我也本想以 Automate.io 为自动化工具,构建我的自动化记账流程。然而不巧的是,在我已经使用一段时间 Automate.io 之后,收到了这个平台将于今年 10 月 31 日停止运营的消息。为了让这篇文章提供的方法,更能有实操层面的意义,我选择重新在 Zapier 平台上重新搭建自动化的流程,并介绍我的经验。在功能上,两个平台并无明显区别,只是收费策略上有所不同,这一点我会放在使用建议中讨论。
Zapier 简介
Zapier 所提供的服务,简单地来讲,是通过接入各个 web 应用的 API 读写信息,并将这样的读写单元以模块化的方式提供给用户。这样用户就可以根据自己的需求,选择使用哪个应用的模块,给 Zapier 读写的权限,搭建属于自己的自动化任务流。根据 Zapier 官网的介绍,目前 Zapier 已经支持超过 5000 款应用。这基本上包括了市面上大部分主流的 web 引用。
Zapier 当中搭建一个自动化任务处理流的方式非常简单易懂,在开始之前需要厘清一下几个概念。
- 触发器(Trigger) 触发器就是在什么样的条件下,开始执行这个自动化处理流程。可以是有新的日程信息被添加到日历类的应用当中,也可以是在即时通信应用中收到了新的消息。只要 Zapier 检测到和触发器设定相符的条件达成,就会自动开始接下来的处理。
- 动作(Action) 动作就是 Zapier 将要执行的每一个步骤。比如根据前面得到的日程信息创建新的待办事项,或者将即时通讯软件收到的信息转发给其他人。
- 自动化任务流(Zap) Zap 就是在 Zapier 中,对一个自动化任务流的称呼。用户使用网站提供的模板,快速开始自己的自动化之旅。同时也可以完全自定义,实现自己想要的功能。一个自动化任务流当中,需要一个触发器和至少一个动作。处理相对复杂的任务的时候,当然可以添加多个动作。
- 输入输出(Input/Output)从触发器开始,每一个动作执行结束之后,都会留有数据输出的接口。后续的动作可以通过读取前面动作的输出作为自己的输入,让整个流程相互串联。
或许这样的解释,还不够明确和清晰,所以我会用我自己创建的,在 Notion 当中自动记账更新账簿,以及和 Notion 联动的番茄钟为案例,介绍 Zapier 是如何应用在我的 Notion 自动化改造当中。
案例 1 自动化记账工具
首先,在开始动手创建自动化任务流之前,先要理清我自己的需求和 Zapier 所能提供的功能。
目前我用两个数据库管理我自己的账户,分别是各个账户的真实余额和我每个月的剩余预算。我在每次消费之后,要更新账户中和预算余额。而我希望自动化任务流,在获取我消费的金额之后,自动计算两个数据库当中对应项目的余额,然后将新的数据更新进去。整个过程如图 3 所示。而且,最好能满足以下两个要求。
- 考虑到数据在不同应用之间流动会带来数据泄露的风险,整个过程应该只发生在 Notion 内部。
- 输入的操作越简化越好,具体而言就是:不需要的信息就不用输入,能选择的项目就不手动输入。
根据我的需求,在 Notion 当中应该有一个用于记录消费信息的数据库,而当这个数据库有新的信息被添加的时候,Zapier 的自动化流程就会被触发,开始一系列的处理。
刚好 Zapier 提供了以 Notion 当中添加新数据为条件的触发器。而后 Zapier 需要读取目标数据库的当前信息,和输入的信息相加减得出结果,并将新的结果写入数据库当中。为此,在 Zapier 当中,被创建的自动化处理流程如图 5 所示,Zapier 当中的模块衔接如图 6 所示。
具体各个模块的编辑过程,由于并不是很复杂,就不在这里逐一展示了。相信即使是初次使用的朋友,根据模块中自带的说明演示文档,也是可以轻松上手的。这里想要分享一些比较值得注意的点,和我在实现基础功能之上的一点点设计。
- Zapier 获取 Notion 访问权限的范围,是可以由用户指定的,但是可以指定的范围仅限于一级页面。Zapier 获取 Notion 权限的页面如图 7 所示。对于注重页面内内容隐私的用户来说,尽量把要交给 Zapier 操作的页面单独放在一级页面,开放权限。
- 在一个动作内,通常只能完成一个操作。也就是说,一个动作内不能同时读取两个不同数据库当中的信息;同时一个动作内也不能既读取信息又写入新的信息。所以我这里必须用两个动作,分别读取两个数据库的信息,再用两个动作更新两个数据库的信息。这一点还是有所不便的。
- 不仅仅是和应用的联动,Zapier 也提供了一些简单的内建的工具,用于自动化任务流的搭建。比如,这其中用到的,延迟和 Python 代码块。此外还有给数据规整格式、分叉路径(根据条件是否达成,选择不同路径)等等。基本上提供了轻量级编程可能用到的模块。
- 在我的这个流程当中,延迟的操作是不可缺少的。由于 Zapier 的特性是每隔一段时间,检查一下触发器的触发条件是否达成,然后以触发器为开头开始一个处理流。如果在这个周期当中,有多个消费记录被添加进来,就会同时开启多个任务流。而如果当多个任务流参考并修改同一条数据的时候,后面的数据会修改会覆盖前一次数据修改,这是我不想要的局面。所以,需要设定一个延迟来确保数据的修改和读取是依次进行的。两种情况如图 8 所示。
- 根据最少操作的原则,本来我希望能够有一个自动递增的序号,用于延时的计算与操作。(尚未实现)然而,在 Notion 当中建立自增序号,需要有一个专门管理序号数据库,对具体做法感兴趣的朋友可以阅读博客:Auto-Increment Table Row IDs。这样依靠外链的方式构建的自增序号,会使得 Zapier 无法正确读取,所以目前还是需要我手动输入一个延时顺序。
以上这些点,基本上我构建自动化记账的过程中着重注意解决的问题。这其中很多是基于 Zapier 和 Notion 的特性,不得不设计稍微复杂的流程来避免自动化的出错。要知道,很多时候,自动化工具启动以后,我只希望它能够正确的运转,给到我正确的结果。而不是,我从维护 Notion,变成维护自动化工具。
案例 2 Notion 的待办事项和番茄钟
在一开始,依然需要分析我的需求和 Zapier 提供的功能。
我有在 Notion 当中建立数据库,用于管理我的待办事项。每一个代办事项,我都会以半小时的番茄钟为单位,预估需要花费的番茄钟个数。也会在开始处理任务后,开始番茄钟计时,番茄钟结束后将最新的任务完成状态更新到数据库当中。具体的数据库构成如图 9 所示。
如果应用市场中,有能直接读写 Notion 数据的番茄钟,就可以让我节省很多操作上的麻烦。遗憾的是,目前还没有。所以我要在 Zapier 中创建一个自动化任务流,来完成我手动的操作。在我开始一个任务以后,自动帮我开启一个番茄钟的计时,并在结束之后,将完成的状态更新到 Notion 的数据库当中。最好还能通过 Apple Watch 将番茄钟结束的信息提示给我。
前半部分数据库的操作,在上一个案例中都有所展示,基本的框架可以直接挪用。至于消息提醒的方式,我发现 Zapier 支持在 Discord 的频道中发送消息,而消息提醒也刚好可以在 Apple Watch 上显示。
因此我在 Discord 当中建立了一个专属于番茄钟的频道,并将 Zapier 的机器人拉入其中。整个自动化的流程如图 11 所示。
在创建前一个案例的基础之上,创建这一个自动化任务流就会轻车熟路。但依然有一个点需要被考虑。
- Zapier 的文档中提到,判断触发条件的方式,是每隔一段时间检查一下条件是否被达成。在 Zapier 当中,根据订阅服务等级的不同,这个间隔会有所不同,对于个人用户来说,通常是 15 分钟。一开始我猜测这个时间间隔是指每过 15 分钟,Zapier 会检查一下当前的触发器状态。但经过我的测试,这个时间间隔更像是游戏中的 CD,两次检查之间的间隔至少是 15 分钟,在 15 分钟过后,触发器就是随时可以被触发的状态。更直观的说明请参考图 11。为此,我们不需要过分担心触发时间的间隔是否会影响番茄钟计时的准确,只要不是在刚刚执行上一个任务之后立刻开启一个待办事项。
自动化带来的改变
经过一段时间的使用,我确信自动化工具让我使用 Notion 的习惯有所改变。毫无疑问,我从繁复的数据维护当中解放了出来。更少的数据维护,更多的思考,如何用数据记录如何改变我的行为。
在财务管理方面,我更加理解金钱为什么是一个可以支配的资源。当我不再需要计算具体的数字时,我打开余额展示页面的次数也就更少,数字增减不再会给我带来一种说不清楚的匮乏感。我更加关注如何支配有限的预算,更好地用于改善生活的状态。消费的心态,从考虑花多少,变成了为什么而花钱。必要的支出不再过分节俭,不必要的支出也不会心心念念。我想我这里有小小的成长。
任务管理和番茄钟的应用,可以让我对完成一个大一点的任务需要花多长时间有所概念,并管理好自己的时间、精力和进度。比如这一次我对 Notion 的自动化改造,包括这篇文章的写作,就是我用这个番茄钟的系统所管理的。整个计划被拆解成 4 个子任务,平均每个子任务要花费 5 个小时左右,一共在其中用了 23 个小时。有了这样的数据,我就能思考我如何更高效的分配自己的时间和精力,以及这样使用时间的方式是否让我感到值得和满意。在过去,我虽然也想考虑这样的问题,但是既没有抓手,也没有时间和精力。
也许,我实现了我最初的目标:让 PDCA 的循环,回到正确的轨道上。
使用建议和未来计划
Zapier 虽然满足了我目前的需求,但是我依然觉得相较于 Automate.io ,Zapier 的收费会有些过高。在这两个平台,如果创建的自动化任务流当中,要包含多个动作,那么就一定需要成为付费用户。在 Zapier 最低一档的付费,是 19.9 美元每月,甚至是一次性付清一年的份额,才能得到这个价格。而相对的 Automate.io 则只需要 9.9 美元每月。
如果是个人用户,从价格上来讲,我并不十分推荐成为 Zapier 的付费用户。当然,如果自动化能帮你节省的时间和精力远超过订阅的费用,那么当然可以尝试使用。如果你需要自动化帮你做的任务非常简单,只需要一个动作就可以完成的话,那么免费的账户就完全足够你使用。另外,如果你知道有其他的功能相似平台,收费更合理的平台,也希望能在评论区推荐分享给各位。
目前我还是每月付费的形式使用 Zapier。我不知道我是否还能在 Zapier 当中找到更价值、更有趣的使用方式。也许,在不久的将来,我可能会选择用写代码的方式,搭建一个更属于我自己的自动化任务流。希望那个时候,还能把我的经验与体会,分享在少数派这个社区。