TL; DR

简而言之,【MatrixChannel】是一个定时同步 Tapd(来自腾讯的敏捷研发协作平台)到 Notion 的开源工具。

本篇文章主要根据一个软件开发从业人员的个人经历,介绍了工作任务纪录的痛点,并提出、开发、开源了自己的解决方案,也就是本文章分享介绍的工具。

最后,通过这个解决方案,除了能够更统一更高效的管理个人日常事务,同时,还能以更个人、更自由的方式管理自己的 Tapd 需求、任务的数据展示与数据记录,并记录个人关于需求的临时数据与需求分析,提高生产力。

工具 Github 地址:https://github.com/copriwolf/MatrixChannel

 

MatrixChannel 自动同步数据·效果演示

1 前言

开篇先来一个烂梗。自从众多互联网公司落实了 985 规定后,生产力他妈妈更早下班了,今天刚回来,就听到有人敲门,打开门一看,嚯,原来是生产力到家了

当然了,这是一个来自互联网从业人员的自嘲,不过确实越来越有趋势,需要在非办公时间段处理公司业务的需求。(就如同微信也拥有了 QQ 的多终端登录,趋向工作生活一体化一样)。而为了应对在家里更快的了解自己的任务进度、需求变更,我个人更迫切的需要一个工具去整合我的工作数据,而这个工具也就应运而生了。

2 为什么要开发这个插件?

2.1 直接用公司的项目管理工具不香嘛?

从本人的工作经历中,使用过的公司指定项目管理工具包括 Redmine/JIRA/Tapd 等,都存在一些让使用者非常不爽的地方。

  • Redmine
    • Web 1.0 界面非常简陋,且操作流程的按钮、提示,都是机翻中文非常变扭。
    • 支持的插件扩展有限(如 Markdown、流程图),需要额外开发。
    • 私有化部署,离开办公网络需要 VPN/IOA 才能浏览。
  • 共性
    • 筛选与排序功能欠佳,针对个人的自定义程度不高
    • 无法,也不应该记录个人对于需求的上下文数据

而针对每一个需求任务的上下文相关数据,亟需一个统一的位置进行维护,且在需要时能够快速根据关键信息(标题、需求目的)检索处理,并有详实的时间线历程与状态扭转记录。

2.2 过往的需求任务相关数据在哪?

在过去的时间段,跨越了我的几段工作经历,为了记录我的工作任务的上下文。我尝试了【Wiz】【印象笔记】【Angenda.】等知识管理类软件服务、【Trello】等看板类工具以及【Typora+github/dropbox】的 Geek 模式等等等的模式。

Evernote 国内版·记录公司的需求任务·截图
Agenda. 记录公司的需求任务·截图

 

我始终觉得,有几个痛点横跨在我的知识管理软件之上,无法解决:

  • 组织方式不明朗:到底以什么为关键词组织我的任务与需求(任务名称?需求迭代日期?需求类型?),在需要的时候,如果快速检索到我需要的上下文对应数据?(国外的效率软件一般对中文搜索支持极弱)
  • 灵活度不足:需多维度纪录需求时,无法满足(标识目前进度状态扭转等)
  • 数据储存可靠性:本地 Git/Dropbox 不可靠,在线工具的稳定性(印象笔记的氪金体系)。
  • 模版易用性:通过模版新建一个任务不够便捷,往往需要复制粘贴一个项目条来完成。
  • 手工维护成本:每次有新的需求,或者任务内容有所变更,需要手动录入到自己的管理工具上,并维护扭转的状态。

2.3 为什么要用 Notion?

在一路的尝试历程,发现 Notion 是比较符合选型要求的。其提出横空出世的 All-In-One Workspace 模式,开创了一个崭新的在线文档记录模式。

它在几个方面的特性,能够尝试解决以上提到的痛点:

  1. 高灵活度:其文档本质是一个数据库,可以内嵌多条数据。而每条数据,允许增加无限、不同维度的属性。故,可以对一条数据,增加【需求名称】【需求迭代】【当前状态】等等维度进行细分维护,同时,还能对文档进行有时间戳的评论,用于跟进数据。
  2. 组织方式自由:其文档可以按照列表、看板、时间线、日历等模式进行视图展示,同时允许附加筛选、排序条件,能够按照【当前指向我且状态未完成的状态】【目前迭代处于测试中状态】等等自己需要的条件进行任务筛选与展示。
  3. 模版定义:模版定义简单,新建文档,只需要选中对应模版,即可预生成对应模版已有的属性与展示。
  4. 数据储存:这个目前 Notion 都是处于 AWS,日常使用来说是稳定且图片上下传速度没有明显卡顿感。
  5. 上下文记录格式丰富:文档中允许多种记录格式,如表格、Markdown、语法高亮的代码块、音视频、图片直接拖动上传,在线播放等。
Notion Database 视图
Notion 具体 Page 视图

 

如上图所示,通过细分数据的维度,能够非常容易管理任务的进度,同时,附带一些个人用到的需求上下文数据。(请原谅我,为了脱敏工作数据,进行了大批量的打码,打码工具好用推荐给你👌)

2.4 如何让工作任务数据与 Notion 自动联动?

当然了,解决了需求的上下文关联,数据的统一管理检索,数据的状态扭转后。

就还有一个比较棘手的问题需要解决:「每次 Tapd 新来了需求都需要手工录入,能不能自动联动起来?」

仍然需要,手工更新、录入数据,这是一个繁琐而且容易疲倦的操作,也会因为落后于 Tapd 的更新速度,最后废弃了 Notion 上下文的维护,乃至于废弃了个人的工作便签记录

而解决这个自动更新的契机,则是部门的其他同事、领导也同样拥有对新事物探索的热情与无尽的宽容,容许成为我开发自动更新插件的首批试用玩家。

也就有了,今天隆重介绍的「MatrixChannel」—— 一个自动定时同步 Tapd 到 Notion 的工具。

3 这么做有什么好处

解决了个人以及领导的需求:在 Notion 以更自由更个性化的方式,并准实时的情况,管理自己的 Tapd 需求与任务。

4 工作原理

MatrixChannel 工作原理图

MatrixChannel 作为一个 Notion 与 Tapd 的中介,

  1. 会定时从 Notion Api 拉取现有数据,并以 Tapd 任务/需求ID 进行分组后;
  2. 向 Tapd Api 拉取配置的员工的最新数据,同时以 Tapd 任务/需求ID 进行分组;
  3. 比对 Notion 的分组数据与 Tapd 的分组数据,筛选出需要进行修改/新增的数据;
  4. 通过 Notion Api 对现有数据进行修复/新增。

由于 MatrixChannel 并不会落地任何用户数据,故每次触发时,都会重新获取 Notion/Tapd 的数据。

5 快速上手

首先,我们需要创建一个 Notion 机器人用于后续把 Tapd 数据保存到 Notion 中。同时,我们通过拷贝一个 Tapd Notion 模版(预设了 Tapd 数据相关的字段),用来创建一个用来记载 Tapd 数据的页面。最后,把 Notion 机器人配置到这个插件上,跑起来,即可自动同步数据。

5.1 前期工作

  • 贵公司正在使用 TAPD
  • 你获取了 TAPD 的 Api 账号密码

5.2 创建一个 Notion 机器人

1. 在官方的开发者页面,点击右上角的 My integrations 按钮

2. 登陆后,点击 New integration 新建一个机器人。

3. 填写机器人的名字, 即可进行提交。

4. 机器人创建成功后,保存机器人的 Secrets(密钥),这是操作这个机器人的唯一凭证或者说是钥匙。

5. 机器人类型选择 Internal Integration(自用类型),然后保存即可。

后续需要制作给多个用户同步 tapd 时,可用到 Public Integration。

5.3 复制 Tapd 需求、任务的 Notion 模版

我为你准备了一份预设的 Tapd Notion 模版,其中包含了【Story 需求表】以及【Task 任务表】。
 

每个表都预设了 Tapd 数据需要落地的字段(如 Task 表中的关键数据:「标题」「迭代」「任务状态」「需求Url」「TaskUrl」等等)

操作方式如下:

1. 点击右方链接,拷贝模版到你自己的 Notion 中。 [📍 Tapd 模版]

2. 授权你的机器人访问与修改该页面数据。(选中刚刚你在上一步创建的机器人名称。)

3. 获取页面的 PageID

由于 Notion Api 处于 Beta 版本,未开放处理 Database 级别权限,所以需要你手动复制 DataBase 的 ID。

分别进去【TapdStory需求表】与【TapdTask任务表】页面中,在右上角的 【Share】-【Copy Link】,在第两个 /?v=之间的即为 DataBaseID。

https://www.notion.so/copriwolf/84999c421caf4eeeab8bc66bc044408a?v=9...
                                <---------- DataBaseID --------->

5.4 配置一份同步配置

复制 Github 项目中的 config/demo.conf.yaml 为 conf.yaml,并在其中填充自定义的数据。你也可以复制下面的配置数据保存为 conf.yaml 即可。

Service:
    # 数据同步间隔
    refreshInterval: 10m0s
    # 请求失败的睡眠时间
    httpRequestFailSleepTime: 5s
    # 最大请求失败重试次数
    httpRequestAttempts: 5
    # Tapd Api 用户名
    tapdApiUser: vvvvvv
    # Tapd Api 密码
    tapdApiPassword: B8888888-8888-9999-0000
    # Tapd 公司 ID
    tapdCompanyID: "0000700"
User:
    # 用户 A 的昵称/电邮(任意..)
    copriwolf:
        # 按需开启需要同步的内容(task-任务/story-需求)
        enable:
            - task
            - story
        # 该用户在 Tapd 中的用户名
        tapdOwner: copriwolf
        # Notion 访问密钥(私有机器人使用 Bot Secret)
        notionBotSecret: secret_xxxxxxxxxxxxxxxxxx
        # Notion Database 任务页面的 ID
        notionDbTaskID: 84999c421caf4ee
        # Notion Database 需求页面的 ID
        notionDbStoryID: 77777777777777

5.5 跑起来

具体的插件,各系统执行文件,在 Github Release 页面可以下载,但是我更推荐你使用 Docker 运行。

原因是,你不需要沾污你的系统,把插件轻量化的跑在一个虚拟容器中,更方便省心。

  1. 安装 Docker,官方下载页面
  2. 执行命令,以 docker 形式运行
$ docker run -it \
-v "$PWD/conf.yaml:/app/config/conf.yaml" 
ghcr.io/copriwolf/matrixchannel:master

 

工具运行展示

6 高阶用法

如果你觉得独乐乐不如众乐乐,希望帮助同事也同步他们最新的 Tapd 数据到他们各自的 Notion 中,不要着急,MatrixChannel 也同样支持,去看看源码吧~后期作者完善后会同样分享教程。

同时 MatrixChannel 还为你实现了,官方对于公共机器人的强制要求 OAuth 鉴权与回调功能模块,你只需要稍微配置数据,即可完成公共机器人配置,实现多用户 Tapd 同步能力。

 

7 后记

📍 简述了我对工作记录的思考,以及对其中的优化方案。这也正是我目前运用到实际工作的解决方案。

🕹 如果你对工具有任何不满意或者改进的地方,欢迎评论或者直接在 Github 中提交 Issues。

👏 如果本文章对你的工作上下文记载有新的思考与启发,那就太好了。如果你觉得有不同的思路,更好的解决方案或者是批评,请留言告诉我,谢谢你。