很多公司都依赖阿里的办公软件钉钉进行远程办公。当然,钉钉是一个很难形容的产品。真让人觉得阿里的pm只能设置产品,但是都是投诉,需要用就得用。虽然钉钉的其他功能很鸡肋,但机器人的功能还是很抢眼的。这是一个比较极客的功能。可以将第三方服务的信息聚合到钉钉群中,实现信息的自动同步。例如:通过聚合Github、Gitlab等源码管理服务,实现源码更新同步;通过聚合Trello、JIRA等项目协同服务,实现项目信息同步;同时支持自定义接入Webhook协议,支持更多可能,如:聚合运维告警提醒、自动化测试结果报告提醒、工作生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日……)等。不过钉钉机器人网上有些攻略比较老,很多代码都是基于python2的。为了与时俱进,我们尝试使用python3.7开发配置钉钉定制机器人。首先要明确一点,钉钉自定义机器人在手机上已经很久不支持了,所以在PC或者Mac上打开钉钉客户端,在需要机器人的聊天群界面点击智能群助手。然后点击添加机器人按钮,可以看到已经打包好的很多第三方机器人。这次我们选择定制机器人。值得一提的是,钉钉的机器人是基于webhook协议的。Webhook是一个API概念,是微服务api的一种使用范式,也叫反向api,即前端不主动发送请求,完全由后端推送。有机会我会专门写一篇文章说明webhook需要注意在机器人界面填写一些机器人信息。另外,在安全设置栏中,我们选择添加签名的方式进行验证。这里先说明一下,钉钉机器人的安全策略有3种。第一个是使用关键字,也就是说你推送的消息必须包含如果你不包含你在创建机器人时定义的关键字,你将无法推送消息。第二种是使用加密签名。三是定义几个ip源。来自这些来源以外的请求将被拒绝。总的来说,它是第二个安全和灵活的。创建成功后,系统会给你分配一个webhook地址。这个地址需要保存。地址中有一个唯一的accesstokenok,那么如何使用这个地址让你的机器人推送消息呢?查看官方文档:ding-doc.dingtalk.com/doc#/server…发现文档居然还是python2.0的版本,好吧,我们自己来翻译成3.0importtimeimporthmacimporthashlibimportbase64importurllib.parsetimestamp=str(round(time.time()*1000))秘密='sec90485937c351bfaed41fea8eda5f1e1555bbbf22842d5f9d6871999e058222222fd894'secret_enc=secre=hmac.new(secret_enc,string_to_sign_enc,digestmod=hashlib.sha256).digest()sign=urllib.parse.quote(base64.b64encode(hmac_code))#print(timestamp)#print(sign)importrequests,json#import依赖libraryheaders={'Content-Type':'application/json'}#定义数据类型webhook='https://oapi.dingtalk.com/robot/send?access_token=f0??ca7636f5812fe4815c97a72de9a7cc780c414c258b6c9a631036b1d0f49e3b×tamp='+timestamp+"&sign"+sign#定义要发送的数据#"at:{"atMobiles":"['"+mobile+"']"data={"msgtype":"text","text":{"content":'谁没有加入群?注意不要升职'},"isAtAll":True}res=requests.post(webhook,data=json.dumps(data),headers=headers)#发送post请求print(res.text)推送效果为如下:
