背景
最近写了一个简单的小工具。
由于每天需要记录的内容链接比较多,所以想通过 im 做中转。例如当天我发给机器人一些消息,最后会记录到 notion 一个文档中。
效果
目前只实现了 dingtalk to notion.
说明
为什么使用 notion?
我对 notion 其实使用不多,notion 刚好是比较满足需求的,database 自带搜索功能,每一行都是一个 page,还有 notion api 可以调用,并且免费 plan 正常是够用的。
为什么暂时只实现了 dingtalk 的?
dingtalk 机器人功能支持了 stream 模式,stream 模式的好处主要有本地调试方便、部署简单等,详细可以参考 Stream模式优势
目标群体?
有类似需求的用户,目前配置比较繁琐,可能需要一点点开发小知识。
配置
前置依赖
1、notion 账号,创建集成(integrations)
如果你还没有 notion 账号,请自行进行相关账号注册。
为了调用 notion api,我们需要创建一个集成或者说叫 integration,成功注册账号之后,访问 my-integrations 进行创建
- 点击 “New intergration”
- 填写 Name,点击 “Submit”
- 会跳转到 Secrets 页面,点击 “Show”,再点击 “Copy”,注意保存这个 secret,后续会用到
创建好 intergration 之后,需要回到 notion 主页,然后通过我创建的 notion 模版 复刻一个文档出来。
复刻完成之后,我们需要将此文档和上面创建好的 intergration 进行关联,或者说叫 add connections,通过 add connections 之后,后续这个 intergration 才有访问此文档以及此文档下所有子文档的权限。
最后,我们需要把此文档在浏览器上面的地址中的中间的一串有数字和字母组成的值给复制出来,我们称这个为文档的 ID
2、dingtalk 账号,需要创建属于自己的组织。
假定你已经创建好了属于自己的组织,接下来到"dingtalk 开放平台",在应用开发页面,点击"创建应用",填写应用名称和应用描述,其他不变。
应用创建好之后, 在"应用功能"-“机器人与消息"推送部分,打开"机器人配置”,填写必要的信息,消息接受模式选择 “Stream 模式”,点击调试,如果正常的话,会自动创建一个 dingtalk 群出来。
完成上一步之后,回到"基础信息"-“应用信息”,在应用凭证栏,可以看到 AgentId、AppKey、AppSecret 三个值,我们需要把 AppKey 和 AppSecret 保存下来。
3、保存好 notion 以及 dingtalk 相关凭证之后,接下来需要安装 docker 进行部署。
各种环境下的 docker 中文安装教程,官网教程
安装好 docker 之后,接下来只需要使用一行命令即可部署 im-to-notion 服务。
docker run -itd \
-e LOG_LEVEL=info \
-e LOG_OUTPUT=stdout \
-e DINGTALK_APP_KEY=${DINGTALK_APP_KEY} \
-e DINGTALK_APP_SECRET=${DINGTALK_APP_SECRET} \
-e NOTION_SECRET=${NOTION_SECRET} \
-e NOTION_DATABASE_ID=${NOTION_DATABASE_ID} \
--name im-to-notion ghcr.io/ronething/im-to-notion:0.0.2
其中 ${} 花括号为需要设置环境变量的位置,如果你不知道什么是环境变量设置,也可以不用管。
将 ${DINGTALK_APP_KEY} 替换为之前保存的 dingtalk 应用 appKey,
将 ${DINGTALK_APP_SECRET} 替换为之前保存的 dingtalk 应用 appSecret,
将 ${NOTION_SECRET} 替换为之前保存的 notion 集成 secret,
将 ${NOTION_DATABASE_ID} 替换为之前保存的 notion 文档 id。
如果你已经正常部署,可以通过 docker logs
看到类似如下的日志消息:
$ docker logs -f im-to-notion
2023-09-03T16:36:57Z info app/app.go:42 connect success, sessionId=[19049x85-xxxx-xxxx-af68-fe38832b071b]
接下来就可以发送对应消息给 dingtalk 进行测试。
- 示例一:
只发送文本或者链接
- 示例二:
发送文本和链接
- 示例三:
发送文本、链接、以及多行备注
最后
此工具功能相当简单,目前已基本满足我个人的需求,理论上也可以接入其他 im 或者相关软件。
代码已经进行开源:ronething/im-to-notion,欢迎共同维护。