Python钉钉提醒

来自CloudWiki
跳转至: 导航搜索

钉钉简介

钉钉(DingTalk)是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台 [1] ,提供PC版,Web版,Mac版和手机版,支持手机和电脑间文件互传。 [2] 钉钉因中国企业而生,帮助中国企业通过系统化的解决方案(微应用),全方位提升中国企业沟通和协同效率。

服务器发生故障之后,编写python代码自动发送给公司钉钉群,可实现运维报警的快速化、方便性。

Python21051301.png

实训步骤

创建钉钉机器人

群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步;进入一个钉钉群,点击右上角的“群设置”进入群设置页面;

Python21051302.png

选择群机器人点击进入,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群,如果需要的话,可以为机器人设置一个头像。点击"完成添加",完成后会生成Hook地址,点击“复制”按钮,即可获得这个机器人对应的Webhook地址;

Python21051303.png

Python21051304.png

Python21051305.png

Python21051306.png

安装依赖库

pip install requests

推送信息到机器人

获取到Webhook地址后,用户可以向这个地址发起HTTP POST 请求,即可实现给该钉钉群发送消息,发起POST请求时,必须将字符集编码设置成UTF-8;msgtype:消息类型,可以根据自己的使用场景选择合适的消息类型,如text文本、link连接、markdown等;atMobiles:自定义机器人发送消息时,可以通过手机号码指定“被@人列表”,在“被@人列表”里面的人员收到该消息时,会有@消息提醒;isAtAll:bool类型,true为@所有人,否则为false;


import requests
import json

def send_msg(text,url):
        headers = {'Content-Type': 'application/json;charset=utf-8'}
        json_text = {
            "msgtype": "text",
            "text": {
                "content": text
            },
            "at": {
                "atMobiles": [
                    ""
                ],
                "isAtAll": False
            }
        }
        return requests.post(url, json.dumps(json_text), headers=headers).content
if __name__ == '__main__':
    url = 'https://oapi.dingtalk.com/robot/send?access_token=60bd4b5e21d82db59a36c2e9633aa251e57a9246abc00f6f1eca67e6d1f322d2'
    send_msg('马老师好,2号服务器异常,请处理',url)

原代码

import requests
import json
class DingTalk_Base:
    def __init__(self):
        self.__headers = {'Content-Type': 'application/json;charset=utf-8'}
        self.url = ''
    def send_msg(self,text):
        json_text = {
            "msgtype": "text",
            "text": {
                "content": text
            },
            "at": {
                "atMobiles": [
                    ""
                ],
                "isAtAll": False
            }
        }
        return requests.post(self.url, json.dumps(json_text), headers=self.__headers).content
class DingTalk_Disaster(DingTalk_Base):
    def __init__(self):
        super().__init__()
        # 填写机器人的url
        self.url = 'https://oapi.dingtalk.com/robot/send?access_token=60bd4b5e21d82db59a36c2e9633aa251e57a9246abc00f6f1eca67e6d1f322d2'
if __name__ == '__main__':
    ding = DingTalk_Disaster()
    ding.send_msg('马老师好,1号服务器异常,请处理')

拓展功能

钉钉机器人加签功能:

import base64

import hashlib

import hmac

import time

import urllib.request

##钉钉sha256签名

timestamp = round(time.time() * 1000)

secret = 'this is secret'

secret_enc = bytes(secret,encoding='UTF-8')

string_to_sign = '{}\n{}'.format(timestamp, secret)

string_to_sign_enc = bytes(string_to_sign,encoding='utf-8')

hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()

sign = urllib.request.quote(base64.b64encode(hmac_code))

print(timestamp)

print(sign)

参考文档:https://zhuanlan.zhihu.com/p/67471713