听了 @JailbreakHum 的两场关于任务管理的 Live后,我把任务管理从 OmniFocus 迁到了 Todoist。但在使用过程中发现了个问题——使用 Workflow 内置动作向 Todoist 添加任务时,无法为任务打上标签。经过一番摸索后发现,我们可以利用 Todoist 的 API 实现打标签这个需求。这样,我们也可以实现批量用 Workflow 向 Todoist 添加任务,并且附上标签、项目等详细信息。
Workflow 下载:批量添加任务、打上标签、加上快速评论并分配至指定项目
一、获取 Token 令牌
和所有需要验证身份的 Workflow 一样,这个 Workflow 下载以后也不能直接使用,而是需要先在 Worklfow 里填一个叫组 Token 的东西,它等于你的 Todoist 账户密码,所以不要外泄。好在 Todoist 对这一点实现得非常容易。
进入 Todoist 网页版,登录之后在页面右上角点击「齿轮图标」,在设置页面最后一个标签页「整合」的最下方,有一个「API 令牌」,这就是后文中调用 API 需要用到的 Token。
二、获取并处理标签的 ID
对 Todoist 内的条目进行的操作,大都需要用到对应的 ID,比如每一个项目的 ID,每一条任务的 ID,以及这里需要用到的标签的 ID。
根据官网提供的说明,使用不同的参数,能够获取不同类别条目的 ID。这里只是为了给任务添加标签,参数填入 Labels
即可。
Todoist 提供的示例代码只有 Shell 和 Python 的,在使用 Workflow 获取 ID 时需要稍微改一下格式。
运行 Workflow 之后,返回的内容如下,每个花括号内就是一个标签。里面包含了标签的 ID "id"
,标签的名称 "name"
,我们只需要这两项信息。
接下来就需要用到 Workflow 内置的一些功能,将这两项信息提取出来,整合在一起,做成一个「Dictionary」,将标签名定义为「Dictionary」里面条目的关键字,将标签的 ID 定义为「Dictionary」里面对应条目的值,供后续的动作进行调用。获取及处理标签的具体方法请下载下面的 Workflow 来查看。
Workflow 下载:获取并处理标签的 ID
三、在 Workflow 内为单条新任务打上标签
Todoist 提供的 API 中,有一个功能是「Update an item」更新任务,有着非常丰富的参数可以选用,可以更改任务内容、优先级、日期等等。这里我们所要做的是,先利用 Workflow 自带的 Todoist 模块添加任务,再用 API 为刚刚添加的任务加上标签。
1. 添加标签
使用 Workflow 自带模块添加完一个任务后,会返回一个链接,这个链接最后的数字就是此任务的 ID。
根据官网所提供的示例代码,操作的命令为 item_update
更新任务,将上一步最后得到的任务的 ID,以及需要添加的标签的 ID 填入指定的位置,多个标签 ID 需要用 ,
英文逗号隔开,并用 []
中括号括起来。成功之后会提示 ok
。
需要特别注意的是,第二张图中 uuid
的数值和最后返回的 ok
前面的那串数值是一致的,而且每次操作都必须使用不同的 uuid,这是为了避免出现重复操作或者数据错乱[^1]。
因此,我们需要用到 Online UUID Generator Tool这家网站所提供的服务,来为每一次操作生成一个 uuid。
2. 利用 Workflow 自动填充标签
如果每次操作都要手动输入标签的 ID,那可是相当痛苦的。所以在文中第二部分,获取并处理标签的 ID的最后,我用 Workflow 生成了一个存有全部标签的 「Dictionary」,这里要做的就是通过调用 「Dictionary」内的数据实现快速填充标签的 ID。
这里一共有三个步骤:
- 从 「Dictionary」里获取标签名称,进行排序,供用户选择(图 1 和图 2);
- 根据用户所选标签名称,再从「Dictionary」里获取标签的 ID(图 2);
- 获取新增任务的 ID,与第 2 步得到的标签的 ID 一同填入代码中,最后发送给 Todoist 服务器(图 3)。
四、最终目标:批量添加任务,打上标签、添加快速评论、再分配至指定项目
使用 Workflow 自带 Todoist 模块批量添加任务,并将每一条任务分配至不同的「项目」,只能使用 Ask When Run
来选择「项目」,这个过程需要点击多次,非常难看且效率低下。
下图左边为 Workflow 自带模块选择「项目」的方式,右边为最终实现的更高效的选择方式:
为了实现更高的效率,我想实现的是,把所有的「项目」生成一个列表,在添加任务的过程中,只需一次点击就能分配至指定任务。再将此功能与打标签、添加快速评论的功能结合在一起,做到真正的高效批量添加任务。
1. 打标签、分配任务、添加快速评论
在这个 Workflow 运行过程中需要同时获取「标签」和「项目」的 ID。
获取「标签」和「项目」的 ID 之后,需要使用与上文一致的方法,将它们分别制作成两个「Dictionary」,在运行时调用相应的「Dictionary」选择「标签」和「项目」。
利用 Workflow 的 Repeat with Each
和 Choose from List
为每一个任务加上标签 ID 及项目 ID。再用 Ask for Input
输入任务的快速评论/Notes。由于每条任务可以有多个标签,所以在选择标签时需要开启 Select Multiple
。
上述操作完成后形成的文本包含了每一条任务该有的信息:
2. 转化格式
每条任务的信息都整合完成后,还需要将这些信息转化为 Todoist 服务器能识别的专用格式文本发送出去。要注意的是,包含与不包含「快速评论/Notes」的任务所需要生成的专用格式文本还有所不同。
下面两张图中红色部分代表一条命令,item_add
新建任务,其内容是一致的,意思是告诉 Todoist 服务器,需要生成的任务及其对应标签和所属项目。
左图中蓝色部分则是第二条命令,note_add
添加「快速评论/Notes」,意思是告诉服务器,为刚刚生成的那条任务加上对应的快速评论。
再把上面左图单独拿出来看看,下半部分(上面左图中蓝色部分) args
后面 {}
大括号内 item _id
的值,必须要和上半部分(上面左图中红色部分)temp_id
的值完全一致。只有数值一致,Todoist 服务器才知道,这条「快速评论/Notes」要添加给刚才新建的那条任务。temp_id
同样可以利用上文提到的 Online UUID Generator Tool 来生成。
所有的信息都正确填充后,将专用格式文本发送给 Todoist 服务器,就完成了整个操作。
效果演示请看下图(为了演示方便,输入「任务」和「快速评论/Notes」的地方使用了自动填充):
这个 Workflow 最终能实现「添加多条/单条任务、打上标签、加上快速评论并分配至指定项目」。整个流程相对比较复杂,需要一定的 Workflow 知识才能完全理解,相关的地方我都进行了标注。具体的运行流程请下载后进行查看。
五、结语
通过 Workflow 去调用各家服务的 API,能够做的事情太多了。本文中介绍了 Workflow 调用 Todoist API 中的 Update an item
和 Add an item
能够完成的一些操作。 如果上文中的使用场景与你的需求不符,那就去看看其他 API 接口,动动手实现自己的需求吧。制作 Workflow 就是第一次费时费力,后续长久有用这么一个概念。
至于 Todoist 本身的用法,一起期待 JailbreakHum的系列文章吧。
[^1]: UUID 及后文提到的 temp_id 具体作用参见官方说明。