用Python开发钉钉群机器人,自动办公神器
作者:域名 来源:人工智能 浏览: 【大中小】 发布时间:2025-11-05 11:24:00 评论数:
最近疫情比较严重,发钉很多公司依靠阿里旗下的钉群动办办公软件钉钉来进行远程办公,虽然钉钉别的机器功能很鸡肋,但是人自机器人这个功能还是让人眼前一亮,属于比较极客的公神功能,它可以将第三方服务的发钉信息聚合到钉钉群中,实现信息的钉群动办自动化同步。

注意:很多人学Python过程中会遇到各种烦恼问题,机器没有人解答容易放弃。人自
例如:通过聚合Github、公神Gitlab等源码管理服务,发钉实现源码更新同步;通过聚合Trello、钉群动办JIRA等项目协调服务,机器实现项目信息同步;同时,人自支持Webhook协议的公神自定义接入,支持更多可能性,例如:将运维报警提醒、自动化测试的结果报告提醒、工作、生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日...)等等的服务器托管提醒,通过自定义机器人聚合到钉钉中。
不过关于钉钉机器人网上的一些攻略年代都比较久远,代码很多都基于python2,为了与时俱进,我们尝试用python3.7来开发配置钉钉自定义机器人。
首先明确一点,钉钉自定义机器人早就不支持在手机端创建了,所以打开你的pc端或者mac端的钉钉客户端,在需要机器人的聊天群界面,点击智能群助手

随后点击添加机器人按钮

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

值得一提的是,钉钉的机器人基于webhook协议,webhook呢是一个api概念,是微服务api的使用范式之一,也被称为反向api,即前端不主动发送请求,完全由后端推送,有机会会专独写一篇文章阐述webhook
在添加机器人界面里,填写一些机器人的信息

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

创建成功后,系统会分配给你一个webhook地址,这个地址需要保存一下,地址中有唯一的accesstoken
ok,那么怎么利用这个地址让你的机器人推送消息呢?查看官方文档: ding-doc.dingtalk.com/doc#/server…
发现文档居然还是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) 复制代码推送效果是下面这样的:

什么是Kdump?Kdump 是一种的新的crash dump捕获机制,用来捕获kernel crash时候产生的crash dump。Kdump需要配置两个不同目的的kernel,其中一个我们在这里称作standard(production) kernel;另外一个称之为Crash(capture)kernel。standard(production)kernel,是指我正在使用的kernel,当standard kernel在使用的过程中出现crash的时候, kdump会切换到crash kernel, 简单来说,standard kernel会正运行时发生crash,而crash(capture) Kernel 会被用来捕获production kernel crash时候产生的crash dump。捕获crash dump是在新的crash(capture) kernel 的上下文中来捕获的,而不是在standard kernel上下文进行。具体是当standard kernel方式crash的时候,kdump通过kexec(后面介绍)自动启动进入到crash kernel当中。假如启动了kdump服务,standard kernel会预留一部分内存, 这部分内存用来启动crash kernel。kdump机制主要包括两个组件:kdump和kexec kexec是一个快速启动机制,允许通过已经运行的内核的上下文启动一个Linux内核,不需要经过BIOS。BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器。这种办法可以为经常启动机器的开发者节省很多时间。Kexec是实现kdump机制的关键,它包括2个组成部分:一是内核空间的系统调用kexec_load,负责在生产内核(production kernel 或 first kernel)启动时将捕获内核(capture kernel或sencond kernel)加载到指定地址。二是用户空间的工具kexec-tools,他将捕获内核的地址传递给生产内核,从而在系统崩溃的时候能够找到捕获内核的地址并运行。没有kexec就没有kdump。先有kexec实现了在一个内核中可以启动另一个内核,才让kdump有了用武之地。 kdump是一种先进的基于kexec的内核崩溃转储机制。当系统崩溃时,kdump使用kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于kdump利用kexec启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。kdump需要两个不同目的的内核,生产内核和捕获内核。生产内核是捕获内核服务的对像。捕获内核会在生产内核崩溃时启动起来,与相应的ramdisk一起组建一个微环境,用以对生产内核下的内存进行收集和转存。注意,在启动时,kdump保留了一定数量的重要的内存,为了计算系统需要的真正最小内存,加上kdump使用的内存数量,以决定真正的最小内存的需求。kexec和kdump的设计区别:Kexec的设计是用新内核去覆盖原内核位置;而KDUMP是预留一块内存来加载第二个内核(和相关数据),Crash后第二个内核在原位置运行(不然就达不到相关目的了),收集第一个内核的相关内存信息。下面开始试验kdump特性: 操作系统:ubuntu 12.10(3.5.0-17-generic)安装kdump工具复制代码代码如下: 发现安装过程中修改了grub,在引导内核配置上(/boot/grub/grub.cfg)多了如下参数复制代码代码如下: crashkernel用来指定保留内存的大小,我们可以知道crashkernel帮我们设定的保留区域的大小是:假如内存小于384M,不保留内存;假如内存大于等于384M但小于2G,保留64M;假如内存大于2G,保留128M。 复制代码代码如下:下载dbgsym文件,改文件是用来吊事内核信息的文件复制代码代码如下: 重启机器使配置生效。复制代码代码如下:kdump-tools配置(kdump-config show):复制代码代码如下:可以通过sysrq强制系统崩溃。 复制代码代码如下: 这造成内核崩溃,如配置有效,系统将重启进入kdump内核,当系统进程进入到启动 kdump服务的点时,(dump.时间戳文件)将会拷贝到你在kdump配置文件中设置的位置。ubuntu的缺省目录是:/var/crash/时间戳文件夹。然后系统重启进入到正常的内核。一旦回复到正常的内核,就可以在上述的目录下发现dump文件,即内存转储文件。可以使用之前安装的crash工具来进行分析。生成dump文件后/var/crash的目录结构:├── 201305061817复制代码代码如下:出现如下错误提示: crash: cannot resolve: xtime,此时crash的版本为5.1.6,版本太低,调试不了3.5的内核,需要升级crash,可以手动安装crash。
