当前位置: 首页 > 后端技术 > Node.js

从头开始打造专属钉钉机器人

时间:2023-04-03 15:59:07 Node.js

官方定义如下:群机器人是钉钉群的高级扩展功能。群聊机器人可以将第三方服务的信息聚合到群聊中,实现信息的自动化同步。目前大部分机器人添加后,都需要配置Webhook才能正常使用(配置说明见操作过程中的帮助链接)。例如:通过聚合GitHub、GitLab等源码管理服务,实现源码更新同步。通过聚合Trello和JIRA等项目协调服务来同步项目信息。此外,群组机器人支持自定义接入Webhook协议,支持更多的可能性。比如可以通过自定义机器人将运维告警聚合到钉钉群,实现提醒功能。事实上,通过机器人,我们可以接入各种服务,比如源代码提交通知、服务器报警通知,甚至加班时主动查询天气、订餐等服务。钉钉目前支持传入方式,传出方式还在内部阶段。官方文件可以在这里查看。Incoming模式incoming是指被动接受通知,加入钉钉群的群机器人默认为该模式。在添加机器人的时候,我们可以看到已经包含了一些常用的机器人。推荐的有GitHub、GitLab、JIRA、Travis和Trello。当然,这次我们需要选择最后一个“自定义”机器人。只需在机器人信息栏填写“机器人名称”即可,必要时还可以设置头像。图中的“是否启用Outgoing机制”如果没有启用则看不到。点击Finish生成hook地址,如下图:我们会用到“Hook地址”,后面发送消息的时候需要请求这个地址。如何发送消息只是向Webhook地址发送POST请求和特定格式的消息的问题。具体接口文档可以在官网找到,这里不做扩展。在开源工具的一些简单的通知场景中,我们可以借助npm上的轮子来快速实现。dingtalk-robotdingtalk-robot-senderoutgoing方式的外发机器人的配置和之前基本一样,只是需要额外配置POST地址和Token。需要注意的是,Token保存后不可再次修改,POST地址为钉钉机器人收到消息后调用的地址。如何开通加入钉钉“钉钉机器人交流群”,群号:11733391在https://open-dev.dingtalk.com首页找到corpId记得加“大友”,私信coprId到他。目前每周四提交开通,预计周五生效。如何接收消息当@航空群里有人时,钉钉会通过POST回调我们之前设置的地址。地址本质上是一个接口,在Body中可以获取到消息的内容。截至发稿为止,钉钉的外发机器人文档无法访问,所以下面介绍一下。钉钉请求格式HTTPHeader格式如下:"Content-Type":"application/json;charset=utf-8""token":"6a71a455ffcfba92a66"HTTPBody文本消息内容:{//sessionid"conversationId":"8Yu7H8H8890kkl7h==","atUsers":[{"dingtalkId":"$:DFDS51:$R7E8dffdufdfjsdf2/oUCO/"}],"chatbotUserId":"$:df3234:$sdfsdfsdfsdfd234234/oUCO/","msgId":"msg4sdf35jh8jc9b51ss6/noYdzw==,"senderNick":"Neo","isAdmin":false,"sessionWebhookExpiredTime":1561711409165,//消息发送时间"createAt":1561710209132,//群聊消息类型或单条chat"conversationType":"2","senderId":"$:ASDD_v1:$df8sdfj&JS*J#FF==",//type为群聊时该参数有效"conversationTitle":"avalon","isInAtList":true,//sessionWebhook是发送消息的临时接口"sessionWebhook":"https://oapi.dingtalk.com/robot/sendBySession?session=qwe",//消息内容"text":{"content":"Iamme,aredifferentfireworks"},//消息类型"msgtype":"text",}HTTP响应格式支持返回文本、图片和markdown、actionCard、feedCard消息类型。下面仅列出markdown格式的消息。详细文件请参考网友提供的PDF。提取码:4qht。{"msgtype":"markdown",//消息类型"markdown":{"title":"杭州天气",//消息主题"text":"####杭州天气@ptt6gbq@17681800905\n"+">9度,西北风1级,良好空气89,相对温度73%\n\n"+">![截图](http://image.jpg)\n"+">######10:20发布[天气](http://www.thinkpage.cn/)\n"//消息正文},"at":{//@people"atMobiles":["17681800905"],"atDingtalkIds":["ptt6gbq"],"isAtAll":false}}如果我们回复的消息需要@someone,就会配置at字段,atDingtalkIds需要的dingtaklId可以是我们从请求中得到的senderId,即$:ASDD_v1:$k8DFJ837349Onmyway!==的形式也可以传入普通的@。另外,如果由于某种原因,请求无法响应时无法返回消息,我们也可以通过sessionWebhook主动发送消息。本文同步发表于作者博客:从零开始打造专属钉钉机器人