钉钉群机器人设置——python版本

钉钉群机器人设置——python版本

  • 应用场景
  • 钉钉界面操作
  • 程序开发
  • 效果展示
  • 应用场景

    由于工作需要,很多项目执行程序后出现报错信息无法第一时间收到,因此实时预警对于监控程序还是有必要。(仅个人观点
    参考文档及博客
    钉钉官方文档
    个人博客

    钉钉界面操作

    1.钉钉群——群设置——机器人
    群机器人设置_01
    2. 添加机器人——自定义类型——添加
    群机器人设置_02

    群机器人设置_03

    群机器人设置_04
    3. 定义机器人名称——勾选加签——完成
    群机器人设置_05
    4.webhook是自动生成的,access_token是代码中access_token,也是自动生成
    群机器人设置_06
    5.添加机器人成功

    程序开发

    程序中主要展示需要 @指定人推送内容
    @指定人: 官方文档给出两种方式,可能我操作不对,只能实现使用手机实现@指定人的。有机智的小伙伴可以尝试一下官方文档上的另一种方式
    推送内容:推送的内容格式官方给出了几种,我只尝试使用文本和markdown。有机智的小伙伴可以尝试一下官方文档上的另外几种方式

    # -*- 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}&timestamp={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
    

    效果展示

    Alt

    作者:水兵没月

    物联沃分享整理
    物联沃-IOTWORD物联网 » 钉钉群机器人设置——python版本

    发表回复