详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)


Posted in Python onApril 01, 2020

最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用,真的让人觉得阿里的pm都是脑残才会设计出这种脑残产品,不过吐槽归吐槽,该用还得用,虽然钉钉别的功能很鸡肋,但是机器人这个功能还是让人眼前一亮,属于比较极客的功能,它可以将第三方服务的信息聚合到钉钉群中,实现信息的自动化同步,例如:通过聚合Github、Gitlab等源码管理服务,实现源码更新同步;通过聚合Trello、JIRA等项目协调服务,实现项目信息同步;同事,支持Webhook协议的自定义接入,支持更多可能性,例如:将运维报警提醒、自动化测试的结果报告提醒、工作、生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日...)等等的提醒,通过自定义机器人聚合到钉钉中。

不过关于钉钉机器人网上的一些攻略年代都比较久远,代码很多都基于python2,为了与时俱进,我们尝试用python3.7来开发配置钉钉自定义机器人。

首先明确一点,钉钉自定义机器人早就不支持在手机端创建了,所以打开你的pc端或者mac端的钉钉客户端,在需要机器人的聊天群界面,点击智能群助手

详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

随后点击添加机器人按钮

详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

此时能看到很多已经封装好的第三方机器人,本次我们选择自定义机器人

详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

值得一提的是,钉钉的机器人基于webhook协议,webhook呢是一个api概念,是微服务api的使用范式之一,也被成为反向api,即前端不主动发送请求,完全由后端推送,有机会会单门写一篇文章阐述webhook

在添加机器人界面里,填写一些机器人的信息

详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

需要注意的是,在安全设置一栏里,我们选择加签的方式来验证,在此说明一下,钉钉机器人的安全策略有三种,第一种是使用关键字,就是说你推送的消息里必须包含你创建机器人时定义的关键字,如果不包含就推送不了消息,第二种就是使用加密签名,第三种是定义几个ip源,非这些源的请求会被拒绝,综合来看还是第二种又安全又灵活。

详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

创建成功后,系统会分配给你一个webhook地址,这个地址需要保存一下,地址中有唯一的accesstoken

ok,那么怎么利用这个地址让你的机器人推送消息呢?查看官方文档: https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

发现文档居然还是python2.0的版本,好吧,我们自己来翻译成3.0

import time
import hmac
import hashlib
import base64
import urllib.parse

timestamp = str(round(time.time() * 1000))
secret = 'SEC90485937c351bfaed41fea8eda5f1e155bbf22842d5f9d6871999e05822fd894'
secret_enc = secret.encode('utf-8')
string_to_sign = '{}n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
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)


import requests,json #导入依赖库
headers={'Content-Type': 'application/json'} #定义数据类型
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=f0ca7636f5812fe4815c97a72de9a7cc780c414c258b6c9a631036b1d0f49e3b×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)

推送效果是下面这样的:

详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)

原文转载自「刘悦的技术博客」 v3u.cn/a_id_132

到此这篇关于详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)的文章就介绍到这了,更多相关python3.7 钉钉群自定义机器人内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
python版本单链表实现代码
Sep 28 Python
python使用matplotlib绘制热图
Nov 07 Python
解决python中无法自动补全代码的问题
Dec 04 Python
Python3字符串encode与decode的讲解
Apr 02 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
Sep 20 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
Django 5种类型Session使用方法解析
Apr 29 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 30 Python
Django更新models数据库结构步骤
Apr 01 #Python
pycharm工具连接mysql数据库失败问题
Apr 01 #Python
利用Python自动化操作AutoCAD的实现
Apr 01 #Python
python使用信号量动态更新配置文件的操作
Apr 01 #Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 #Python
python自动脚本的pyautogui入门学习
Apr 01 #Python
Python自动重新加载模块详解(autoreload module)
Apr 01 #Python
You might like
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
Javascript注入技巧
2007/06/22 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
express.js中间件说明详解
2019/03/19 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
python统计文本文件内单词数量的方法
2015/05/30 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
ipad上运行python的方法步骤
2019/10/12 Python
Python基于requests库爬取网站信息
2020/03/02 Python
python关于变量名的基础知识点
2020/03/03 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
python time()的实例用法
2020/11/03 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
护理专科毕业推荐信
2013/11/10 职场文书
人事专员的职责
2014/02/26 职场文书
人事任命书格式
2014/06/05 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
vue3获取当前路由地址
2022/02/18 Vue.js
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技
box-shadow单边阴影的实现
2023/05/21 HTML / CSS