钉钉群机器人设置------python版本
应用场景
由于工作需要,很多项目执行程序后出现报错信息无法第一时间收到,因此实时预警对于监控程序还是有必要。(仅个人观点 )
参考文档及博客 :
钉钉官方文档
个人博客
钉钉界面操作
1.钉钉群------群设置------机器人
- 添加机器人------自定义 类型------添加
- 定义机器人名称------勾选加签 ------完成
4.webhook是自动生成的,access_token是代码中access_token,也是自动生成
5.添加机器人成功
程序开发
程序中主要展示需要 @指定人 和 推送内容
@指定人 : 官方文档给出两种方式,可能我操作不对,只能实现使用手机实现@指定人的。有机智的小伙伴可以尝试一下官方文档上的另一种方式
推送内容:推送的内容格式官方给出了几种,我只尝试使用文本和markdown。有机智的小伙伴可以尝试一下官方文档上的另外几种方式
python
# -*- coding:utf-8 -*-
# @Time : 2025/1/21 11:51
# @Author: 水兵没月
# @File : Dingding_jqr.py
# @Software: PyCharm
import sys
import traceback
from urllib import parse
import requests
import time
import hashlib
import base64
import hmac
import json
from fake_useragent import UserAgent
# 钉钉Webhook地址
webhook = "https://oapi.dingtalk.com/robot/send"
access_token = "01010f5983cdc79d006eda01b4e**************379cd8ba0e42693" # webhook 自动生成
secret = "SEC098e6793d38e0154a1f81a********************ebf02ae2ff74ca" # 钉钉上可以生成
mobile_list = ["137*******"] # @指定人的列表
# 加签函数
def get_sign(secret):
timestamp = str(int(time.time() * 1000)) # 当前时间戳(毫秒)
secret_byte = bytes(timestamp +'\n'+secret, encoding='utf-8') # 创建签名数据
hmac_key = bytes(secret, encoding='utf-8') # 使用secret创建HMAC密钥
sign = hmac.new(hmac_key, secret_byte, digestmod=hashlib.sha256).digest() # 生成签名
sign_base64 = parse.quote_plus(base64.b64encode(sign))
return sign_base64, timestamp # 返回签名和时间戳
# 发送消息函数
def send_message(content):
sign, timestamp = get_sign(secret) # 获取签名和时间戳
url = f"{webhook}?access_token={access_token}×tamp={timestamp}&sign={sign}" # 拼接成最终请求地址
stauts = content["stauts"]
stauts = "成功" if stauts else "失败"
msg_except = content["exception"]
msg_time = str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(time.time()))))
# markdown 类型展示
message = {
"msgtype": "markdown",
"markdown": {
"title":"程序执行情况",
"text": f"**执行情况: {stauts}**\n\n"
f"**服务器类型: {sys.platform}**\n\n"
f"**异常信息: {msg_except}**\n\n"
f"**时间: {msg_time}**\n\n @137*******"
},
"at": {
"atMobiles": mobile_list,
"isAtAll": False
}
}
# 文本类型展示
# message = {
# "msgtype": "text", # 消息类型
# "at": {
# "atMobiles": mobile_list,
# "atUserIds": [],
# "isAtAll": False
# },
# "text": {
# "content": f"{content}+"+"@137*******"
# },
# }
headers = {'Content-Type': 'application/json', "User-Agent":UserAgent().Chrome} # 设置请求头
response = requests.post(url, data=json.dumps(message), headers=headers) # 发送请求
# 打印响应结果
if response.status_code == 200:
return response.json()
else:
return response.text