起因
团队准备弄个知识库,作为语雀的忠实用户,极力向我的领导推荐使用语雀来构建我们团队的知识库,为此我还穿上了语雀送给我的短袖(手动狗头)。语雀还是很好用的,yyds。 我们的知识库也顺利组织起来了,但是消息通知出现了点问题。团队内有人在语雀写了文章,或者什么重要的通知,我们只能在群里@所有人
通知下,变得很被动。 我在查看语雀的文档时,发现可以使用消息推送,对接机器人,自动推送一些消息,这就方便多啦,有了这个诉求,那就开整。
推送流程
语雀中只有钉钉可以直接填写机器人链接,直接对接然后进行推送。其他平台需要自己手动处理,然后推送到机器人上。我们团队使用的是企业微信,也就是要对接企业微信的机器人。 我们需要通过一个中间服务,语雀消息推送到中间服务,服务处理消息之后,推送到企业微信机器人。大致是这么一个过程:
技术选型-云函数
我们的消息服务只需要处理一下消息就可以了,其他的都不需要做,所以也不需要有多厉害的服务。现在比较热门的云函数很符合我们的要求,我们只需要写个函数把消息处理下就可以了,所以我选择了腾讯云的云函数。说真的,有了云函数,以前想实现的一些小玩意变得很简单了。 比起传统服务架构,云函数有以下优点:
秒级部署,写好了直接发布就行了
无需运维,云服务帮我们处理了
可以根据需求调整服务资源
按需按量进行付费(像咱们这个小东西就不需要付费了)
通过事件来触发,不会浪费资源
创建云函数
我们到腾讯云控制台函数服务中创建一个云函数,我们可以选择通过模板创建,选择自己的后端语言框架创建一个就可以了,我这里选择express(咱毕竟还是个前端,对node更熟) 点击下一步,可以做一些服务配置,可以改一个函数名称,方便我们区分我们函数的用途,其他先选默认就好。 点击完成,等待部署一下,我们的云函数就创建好了。
消息处理
创建好云函数,我们可以查看函数代码,我们会发现,他就是一个简单的后端服务,只是不需要我们再管理部署、运维这些,服务已经帮我们做好了。 函数代码下面,有我们的访问路径,我们连域名都省了!在这里我们可以进行一些测试,比如我们写了一个get请求的接口,路径加上path就是完整的接口了 现在我们写一个接口处理我们的消息就可以了。 我们先写一个处理函数,我们需要处理的语雀的状态包括:导出知识库、导出文档、对空间外分享文档、对空间外分享知识库、邀请加入空间成员、申请加入空间成员、确认加入空间成员、删除空间成员, 这些状态,语雀都给到了相应的标识。
const ActionType = {// '导出文档''export_Doc': ({actor,auditable,group}) => { return `${actor.name} 导出《${auditable.title}》文档;\n归属 ${group.name} / ${auditable.title}`},// 对空间外分享文档'public_share_Doc': ({actor,auditable,group}) => { return `${actor.name} 对空间外分享《${auditable.title}》文档;\n归属 ${group.name} / ${auditable.title}`},// 导出知识库'export_Book': ({actor,auditable,group}) => { return `${actor.name} 导出知识库`},// 对空间外分享知识库'public_share_Book': ({actor,auditable,group}) => { return `${actor.name} 对空间外分享《${auditable.name}》知识库;\n归属 ${group.name} / ${auditable.name}`},// 邀请加入空间成员'invite_OrganizationUser': ({actor}) => { return `${actor.name} 邀请加入空间成员`},// 申请加入空间成员'apply_OrganizationUser': ({actor}) => { return `${actor.name} 申请加入空间成员`},// 确认加入空间成员'join_OrganizationUser': ({actor,auditable}) => { return `${actor.name} 确认 ${auditable.name} 加入空间成员`},// 删除空间成员'delete_OrganizationUser': ({actor,auditable})=> { return `${actor.name} 删除空间成员 ${auditable.name}`},}
然后通过接口,接收语雀传递的数据,根据对应的类型进行消息处理,然后发送给企业微信机器人就可以了
app.post(`/yuque/safety`, (req, res) => {const {body_html,body_draft,body,...data} = req.body.dataconsole.log(data);// 处理消息const { action, auditable_type} = req.body.data;const fn = ActionType[`${action}_${auditable_type}`] || (() => '未定义格式')const content = fn({...req.body.data})console.log(content);// 发送给企业微信机器人axios .post(baseUrl, { msgtype: "markdown", markdown: { content }, }) .then((response) => { // console.log(response.data); res.send("发送成功"); }) .catch((error) => { console.log(error); });});
部署、配置、测试
我们的消息处理开发完成以后,直接点击部署,云函数就部署成功了,然后在语雀平台配置好我们的接口地址,直接写文章就可以测试了。 语雀中我们给到了什么权限,当我们做相应操作时,我们的接口就可以接收到对应的类型。然后就会自动发送通知企业微信啦。
下次介绍一下curl如何对接企业微信。
原文:https://juejin.cn/post/7102971980193726478