最近疫情严重。很多公司都依赖阿里的办公软件钉钉进行远程办公。这是一个极客功能。可以将第三方服务的信息聚合到钉钉群中,实现信息的自动同步。注意:很多人在学习Python的过程中都会遇到各种烦人的问题,谁也不能轻易放弃。例如:通过聚合Github、Gitlab等源码管理服务,实现源码更新同步;通过聚合Trello、JIRA等项目协同服务,实现项目信息同步;同时支持自定义接入Webhook协议,支持更多可能,如:聚合运维告警提醒、自动化测试结果报告提醒、工作生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日……)等,通过定制机器人Nailed变成指甲。不过钉钉机器人网上有些攻略比较老,很多代码都是基于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))secret='SEC90485937c351bfaed41fea8eda5f1e155bbf22842d5f9d6871999e05822fd894'secret_enc=secret.encode('utf-8')string_to_sign='{}n{}'.format(timestamp,code_secret-enf-to-string_to_sign='{}n{}'.')hmac_code=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#导入依赖库headers={'Content-Type':'application/json'}#定义数据类型webhook='https://oapi.dingtalk.com/robot/send?access_token=f0??ca7636f5812fe4815c97a72de9a7cc780c414c258b6c9a631036b1d0f49e3b×tamp+sign='+timestamp#定义要发送的数据#"at":{"atMobiles":"['"+mobile+"']"data={"msgtype":"text","text":{"content":'谁还没有进群?小心别升了'},"isAtAll":True}res=requests.post(webhook,data=json.dumps(data),headers=headers)#发送post请求print(res.text)复制代码推送效果如下:
