精华内容
下载资源
问答
  • python3钉钉消息机器人模块

    千次阅读 2020-03-06 19:13:38
    钉钉有两种机器人: 一种是消息推送机器人只支持发送消息 这种机器人直接电脑端进群添加就可以了 然后获取webhook与key 一种是企业内部机器人支持消息接收与发送 添加企业机器人方法: 1、公网服务器一台 ...

     

    模块名:dingpy

    钉钉有两种机器人:

    一种是消息推送机器人只支持发送消息

    这种机器人直接电脑端进群添加就可以了

    然后获取webhook与key

    aa

    一种是企业内部机器人支持消息接收与发送

    bbb

    添加企业机器人方法:

    1、公网服务器一台

    2、阿里云便宜域名(¥15/y)

    3、域名绑定服务器ip,域名管理开启ssl证书 点击出现付费得点返回出现免费得 申请下来下载下来2个文件新建一个ssl文件夹放进去备用

    4、创建机器人第二步第一栏填写你的公网ip地址,第二栏填写一个能接收post请求得 https url 这个需要先利用本模块开启能接收https post请求得应用

    5、开启应用后 填写https url才能添加收消息得机器人,如: https://heiheihei.com:5000

    添加机器人成功后,后台发布机器人 发起一个企业内部群聊使用pc端将机器人加入群组中就可以了

    @机器人就会将消息发到服务器进行处理

     

    针对这两钟机器人api与图灵机器人api做了深层次包装开箱即用

    先上api:

    钉钉机器人模块

        使用说明:
            1、robot.config{} 配置  别被这个配置吓到了 很简单。。。。。。大部分都是默认

               这三个配置 是针对与 钉钉消息推送机器人的  前面截图上有webhook 与key
                config['dingUrl']设置为钉钉机器人的webHook
                config['dingKey']设置为安全设置自定义关键词
                config['sendAtAll']设置send发送消息@所有人 默认False

             2、这两个配置是针对图灵机器人的
                config['tuLingUrl']设置为图灵机器人的api
                config['tuLingKey']设置为图灵机器人key

     

              3、这几个配置是针对企业内部收发消息机器人的
                config['sslDirPath']设置ssl证书路径 默认同级文件夹'ssl'
                config['recvPort']设置接收数据的端口号 默认5000
                config['recvSendAtAll']设置接收消息后发送消息@所有人 默认False
                config['recvHandleFunc']设置接收消息处理函数
                
            2、robot.send(str) 发送消息

            3、robot.talk(str) 发送消息 返回图灵机器人消息

            4、robot.recvHandleBind(func) 绑定接收消息处理函数
                定义接收消息处理函数
                形参info用来获取消息数据
                info['user']获取发送消息的用户名称
                info['msg']获取发送来的消息
                发送此函数返回的消息
                
                def handle(info):
                    # 
                    return ''
                    
            5、robot.recv() 堵塞接收消息 port设置端口号
                模块同级创建ssl文件夹放入ssl证书后支持https
                企业内部钉钉机器人必须支持https post地址

    上个demo:

    # demo.py
    # 这个是运行文件(演示)
    
    import robot
    import config
    
    
    def handleSend(info):
        # 接收消息后的处理函数
        user = info['user']
        msg = info['msg']
        # 返回消息
        return '亲爱的【' + user + '】您发送的【' + msg + '】我已经收到,但是现在的我不具备处理能力非常抱歉,风里雨里dingpy等你!'
    
    
    if __name__ == '__main__':
        # 初始化robot配置
        config.init()
        # 绑定接收消息处理函数
        robot.recvHandleBind(handleSend)
        # 堵塞接收消息
        robot.recv()
    # config.py
    # 这个是用来设置配置的
    
    
    import robot
    
    
    def init():
        # 钉钉机器人webHook
        robot.config['dingUrl'] = ''
        # 钉钉机器人安全自定义关键词
        robot.config['dingKey'] = '~'
        # 图灵机器人api
        robot.config['tuLingUrl'] = 'http://openapi.tuling123.com/openapi/api/v2'
        # 图灵机器人密钥
        robot.config['tuLingKey'] = ''
    """
        钉钉机器人模块
        @卜平凡
        依赖三方库 requests, flask
        使用说明:
            1、robot.config{}
                config['dingUrl']设置为钉钉机器人的webHook
                config['dingKey']设置为安全设置自定义关键词
                config['sendAtAll']设置send发送消息@所有人 默认False
                config['tuLingUrl']设置为图灵机器人的api
                config['tuLingKey']设置为图灵机器人key
                config['sslDirPath']设置ssl证书路径 默认同级文件夹'ssl'
                config['recvPort']设置接收数据的端口号 默认5000
                config['recvSendAtAll']设置接收消息后发送消息@所有人 默认False
                config['recvHandleFunc']设置接收消息处理函数
    
            2、robot.send(str) 发送str消息
    
            3、robot.talk(str) 发送str数据 返回图灵机器人str消息
    
            4、robot.recvHandleBind(func) 绑定接收消息处理函数
                定义接收消息处理函数
                形参info用来获取消息数据
                info['user']获取发送消息的用户名称
                info['msg']获取发送来的消息
                发送此函数返回的str消息
    
                def handle(info):
                    #
                    return ''
    
            5、robot.recv(port=5000) 堵塞接收消息 port设置端口号
                模块同级创建ssl文件夹放入ssl证书后支持https
                企业内部钉钉机器人必须支持https post地址
    
    """
    
    import os
    import json
    import requests
    from flask import Flask, request, jsonify
    
    # 配置
    config = {'dingUrl': '',
              'dingKey': '',
              'sendAtAll': False,
              'tuLingUrl': '',
              'tuLingKey': '',
              'sslDirPath': 'ssl',
              'recvPort': 5000,
              'recvSendAtAll': False,
              'recvHandleFunc': None}
    
    # flask实例
    __app = Flask(__name__)
    # api请求头数据
    __header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }
    
    
    def recvHandleBind(func):
        """
            绑定接收消息处理函数
        """
        config['recvHandleFunc'] = func
    
    
    # flask接收处理请求
    @__app.route('/', methods=['POST'])
    def __recvSend():
        # 获取钉钉消息
        data = json.loads(request.get_data(as_text=True))
        # 整合钉钉消息
        info = {'user': data.get('senderNick'),
                'msg': data.get('text').get('content')}
        # 处理发送信息
        sendInfo = config['recvHandleFunc'](info)
        message = {
            "msgtype": "text",
            "text": {
                "content": sendInfo
            },
            "at": {
                "isAtAll": False
            }
        }
        # 发送消息
        return jsonify(message)
    
    
    def __ssl():
        """
            整合ssl证书
        """
        sslList = [0, 1]
        sslPath = config.get('sslDirPath')
        for temp in os.listdir(sslPath):
            if temp[-1] == 'm':
                sslList[0] = sslPath + '/' + temp
            elif temp[-1] == 'y':
                sslList[1] = sslPath + '/' + temp
        return sslList
    
    
    def recv():
        """
            堵塞收发消息
        """
        __app.run(host='0.0.0.0', port=config['recvPort'], ssl_context=(__ssl()[0], __ssl()[1]))
    
    
    def send(msg):
        """
            发送钉钉消息
        """
        message = {
            "msgtype": "text",
            "text": {
                "content": str(config['dingKey']) + str(msg)
            },
            "at": {
                "isAtAll": config['sendAtAll']
            }
        }
        messageJson = json.dumps(message)
        info = requests.post(url=config['dingUrl'],
                             data=messageJson,
                             headers=__header)
        info = json.loads(info.text)
        return info.get('errmsg')
    
    
    def talk(msg):
        """
            发送数据 返回图灵机器人消息
        """
        message = {
            "perception":
                {
                    "inputText":
                        {
                            "text": msg
                        },
    
                    "selfInfo":
                        {
                            "location":
                                {
                                    "city": "潍坊",
                                    "province": "山东",
                                    "street": "XXX"
                                }
                        }
                },
            "userInfo":
                {
                    "apiKey": config['tuLingKey'],
                    "userId": 123456789
                }
        }
        messageJson = json.dumps(message)
        info = requests.post(url=config['tuLingUrl'],
                             data=messageJson,
                             headers=__header)
        info = json.loads(info.text)
        try:
            info = info['results'][0]['values']['text']
        except KeyError:
            info = ''
        return info
    

    这三个文件保存下载放在同一个目录 然后把准备好的ssl文件夹也放在同级目录

    安装依赖三方库 requests, flask, 偷懒用了requests 不然还能省点一个库 flask是比较好用的web框架 要它来收发钉钉企业机器人消息

    配置好你自己的config.py

    运行 demo.py就可以了  

    不用的功能 config可以不配置 简单!!!

    源码贴出来了 可查看

    亲测可用  我绑定了图灵机器人 

     

    展开全文
  • 下面介绍如何用Python实现钉钉发送报警消息获取access token 要使用钉钉发送消息,首先需要获取access token,代码如下: def get_access_token(): url = '...
  • 目录一、获取自定义机器人webhook二、安全设置三、使用自定义机器人四、消息类型及数据格式text类型link类型markdown类型整体跳转ActionCard类型独立跳转ActionCard类型FeedCard类型五、发送消息钉钉六、发送本地...

    如果你在使用钉钉,并且经常需要发送某些消息到钉钉群中,例如在监控某些数据,当出现异常的时候,及时发送消息通知钉钉群;或者在完成某些操作,发送消息到钉钉群中,那么我们可以使用钉钉机器人,实现自动化信息同步。

    目录一至目录四,均为官网说明:官网

    一、获取自定义机器人webhook

    步骤一,打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择“机器人管理”。
    在这里插入图片描述
    步骤二,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像。
    在这里插入图片描述
    步骤三,完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”。安全设置目前有3种方式,设置说明见下文介绍。
    在这里插入图片描述
    步骤四,完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:

    https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
    

    注意:请保管好此Webhook 地址,不要公布在外部网站上,泄露后有安全风险。

    二、安全设置

    安全设置目前有3种方式:

    1)方式一,自定义关键词
    最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。

    例如:添加了一个自定义关键词:监控报警

    则这个机器人所发送的消息,必须包含 监控报警 这个词,才能发送成功。

    2)方式二,加签
    第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
    在这里插入图片描述
    签名事例代码

    #python 3.7 
    import time
    import hmac
    import hashlib
    import base64
    import urllib.parse
    
    timestamp = str(round(time.time() * 1000))
    secret = 'this is secret'
    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_plus(base64.b64encode(hmac_code))
    print(timestamp)
    print(sign)
    

    注意:安全设置的上述三种方式,需要至少设置其中一种,以进行安全保护。校验不通过的消息将会发送失败,错误如下:

    // 消息内容中不包含任何关键词
    {
      "errcode":310000,
      "errmsg":"keywords not in content"
    }
    
    // timestamp 无效
    {
      "errcode":310000,
      "errmsg":"invalid timestamp"
    }
    
    // 签名不匹配
    {
      "errcode":310000,
      "errmsg":"sign not match"
    }
    
    // IP地址不在白名单
    {
      "errcode":310000,
      "errmsg":"ip X.X.X.X not in whitelist"
    }
    

    三、使用自定义机器人

    (1)获取到Webhook地址后,用户可以向这个地址发起HTTP POST 请求,即可实现给该钉钉群发送消息。注意,发起POST请求时,必须将字符集编码设置成UTF-8。

    (2)当前自定义机器人支持文本 (text)、链接 (link)、markdown(markdown)、ActionCard、FeedCard消息类型,大家可以根据自己的使用场景选择合适的消息类型,达到最好的展示样式。

    (3)自定义机器人发送消息时,可以通过手机号码指定“被@人列表”。在“被@人列表”里面的人员收到该消息时,会有@消息提醒(免打扰会话仍然通知提醒,首屏出现“有人@你”)。

    (4)当前机器人尚不支持应答机制 (该机制指的是群里成员在聊天@机器人的时候,钉钉回调指定的服务地址,即Outgoing机器人)。

    SDK :
    可以下载SDK,简化调用方式。

    消息发送频率限制:
    每个机器人每分钟最多发送20条。消息发送太频繁会严重影响群成员的使用体验,大量发消息的场景 (譬如系统监控报警) 可以将这些信息进行整合,通过markdown消息以摘要的形式发送到群里。

    四、消息类型及数据格式

    text类型

    {
        "msgtype": "text", 
        "text": {
            "content": "我就是我, 是不一样的烟火@156xxxx8827"
        }, 
        "at": {
            "atMobiles": [
                "156xxxx8827", 
                "189xxxx8325"
            ], 
            "isAtAll": false
        }
    }
    

    在这里插入图片描述
    在这里插入图片描述

    link类型

    {
        "msgtype": "link", 
        "link": {
            "text": "这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林", 
            "title": "时代的火车向前开", 
            "picUrl": "", 
            "messageUrl": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"
        }
    }
    

    在这里插入图片描述
    在这里插入图片描述

    markdown类型

    {
         "msgtype": "markdown",
         "markdown": {
             "title":"杭州天气",
             "text": "#### 杭州天气 @150XXXXXXXX \n> 9度,西北风1级,空气良89,相对温度73%\n> ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n> ###### 10点20分发布 [天气](https://www.dingalk.com) \n"
         },
          "at": {
              "atMobiles": [
                  "150XXXXXXXX"
              ],
              "isAtAll": false
          }
     }
    

    在这里插入图片描述
    在这里插入图片描述
    markdown格式:目前只支持md语法的子集,具体支持的元素如下:

    标题
    # 一级标题
    ## 二级标题
    ### 三级标题
    #### 四级标题
    ##### 五级标题
    ###### 六级标题
    
    引用
    > A man who stands for nothing will fall for anything.
    
    文字加粗、斜体
    **bold**
    *italic*
    
    链接
    [this is a link](http://name.com)
    
    图片
    ![](http://name.com/pic.jpg)
    
    无序列表
    - item1
    - item2
    
    有序列表
    1. item1
    2. item2
    

    整体跳转ActionCard类型

    {
        "actionCard": {
            "title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", 
            "text": "![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png) 
     ### 乔布斯 20 年前想打造的苹果咖啡厅 
     Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", 
            "btnOrientation": "0", 
            "singleTitle" : "阅读全文",
            "singleURL" : "https://www.dingtalk.com/"
        }, 
        "msgtype": "actionCard"
    }
    

    在这里插入图片描述
    在这里插入图片描述

    独立跳转ActionCard类型

    {
        "actionCard": {
            "title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", 
            "text": "![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png) 
     ### 乔布斯 20 年前想打造的苹果咖啡厅 
     Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", 
            "btnOrientation": "0", 
            "btns": [
                {
                    "title": "内容不错", 
                    "actionURL": "https://www.dingtalk.com/"
                }, 
                {
                    "title": "不感兴趣", 
                    "actionURL": "https://www.dingtalk.com/"
                }
            ]
        }, 
        "msgtype": "actionCard"
    }
    

    在这里插入图片描述
    在这里插入图片描述

    FeedCard类型

    {
        "feedCard": {
            "links": [
                {
                    "title": "时代的火车向前开", 
                    "messageURL": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI", 
                    "picURL": "https://gw.alicdn.com/tfs/TB1ayl9mpYqK1RjSZLeXXbXppXa-170-62.png"
                },
                {
                    "title": "时代的火车向前开2", 
                    "messageURL": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI", 
                    "picURL": "https://gw.alicdn.com/tfs/TB1ayl9mpYqK1RjSZLeXXbXppXa-170-62.png"
                }
            ]
        }, 
        "msgtype": "feedCard"
    }
    

    在这里插入图片描述
    在这里插入图片描述

    五、发送消息到钉钉

    发送消息需要前置条件:
    1、根据安全模式,确定钉钉机器人API
    2、确定发送消息的类型和数据格式
    3、使用urllib.request库发送请求

    以下使用安全模式为secret+markdown数据格式:

    import time
    import hmac
    import hashlib
    import base64
    import json
    import urllib.parse
    import urllib.request
    
    
    class DingDingWebHook(object):
        def __init__(self, secret=None, url=None):
            """
            :param secret: 安全设置的加签秘钥
            :param url: 机器人没有加签的WebHook_url
            """
            if secret is not None:
                secret = secret
            else:
                secret = 'SECa0ab7f3ba9742c0*********'  # 加签秘钥
            if url is not None:
                url = url
            else:
                url = "https://oapi.dingtalk.com/robot/send?access_token=1554a3dd1e748*********"  # 无加密的url
    
            timestamp = round(time.time() * 1000)  # 时间戳
            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_plus(base64.b64encode(hmac_code))  # 最终签名
    
            self.webhook_url = url + '&timestamp={}&sign={}'.format(timestamp, sign)  # 最终url,url+时间戳+签名
    
        def send_meassage(self, data):
            """
            发送消息至机器人对应的群
            :param data: 发送的内容
            :return:
            """
            header = {
                "Content-Type": "application/json",
                "Charset": "UTF-8"
            }
            send_data = json.dumps(data)  # 将字典类型数据转化为json格式
            send_data = send_data.encode("utf-8")  # 编码为UTF-8格式
            request = urllib.request.Request(url=self.webhook_url, data=send_data, headers=header)  # 发送请求
    
            opener = urllib.request.urlopen(request)  # 将请求发回的数据构建成为文件格式
            print(opener.read())  # 打印返回的结果
    
    
    if __name__ == '__main__':
        my_secret = 'SECa0ab7f3ba9742c0b6c36d8808b***********'
        my_url = 'https://oapi.dingtalk.com/robot/send?access_token=*******'
        my_data = {
            "msgtype": "markdown",
            "markdown": {"title": "测试markdown样式",
                         "text": "# 一级标题 \n## 二级标题 \n> 引用文本  \n**加粗**  \n*斜体*  \n[百度链接](https://www.baidu.com) "
                                 "\n![草莓](https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1906469856,4113625838&fm=26&gp=0.jpg) "
                                 "\n- 无序列表 \n1.有序列表  \n@某手机号主 @18688889999"},
            "at": {
                "atMobiles": [18688889999],
                "isAtAll": False}  # 是否@所有人
        }
    
        dingding = DingDingWebHook(secret=my_secret, url=my_url)
        dingding.send_meassage(my_data)
    

    运行脚本,钉钉群收到消息:
    在这里插入图片描述
    注意:
    1、标题的’#’、引用的’>’、无序列表的’-‘后面必须加一个空格,否则不生效
    2、建议’\n’换行符放在行头,不要放在上一行的行尾,有些情况下会失效,放行头的基本能成功
    3、如果你的内容加了’\n’换行符号,但是发送到钉钉仍然没有换行的话,这个时候你要考虑一下行头或者行尾加一下1-2个空格

    总结:到这里已经完成了发送消息到钉钉代码,剩下的只需要在你想要发送钉钉的地方,准备好内容,调用send_meassage方法即可

    六、发送本地图片到钉钉

    如果你想要发送图片到钉钉,并且图片是在你的本地,没有在网上,这种情况下,只需要将你的本地图片,转换成base64编码,再将转换后的图片内容发送即可
    以下承接目录五代码:

    import base64
    
    if __name__ == '__main__':
        my_secret = 'SECa0ab7f3ba9742c0b6c36d8808b***********'
        my_url = 'https://oapi.dingtalk.com/robot/send?access_token=*******'
        
        # 转换指定图片为base64编码
        photo_path = r'C:\Users\Pictures\你的图片.png'
        with open(photo_path, 'rb') as f:
            bs64 = base64.b64encode(f.read())  # 读取文件,转换为base64编码(二进制)
            f.close()
            bs64 = bs64.decode()  # 重新解码为字符串
            print(len(bs64))  # 打印长度
    
        my_data = {
            "msgtype": "markdown",
            "markdown": {"title": "测试发送本地图片",
                         "text": "![myphoto](data:image/png;base64,"+bs64+")"  # 固定格式:data:image/png;base64, bs64内容;image/后面填你的图片后缀,base64,后面填编码好的bs64字符串
                         },
            "at": {
                "atMobiles": [],
                "isAtAll": False}  # 是否@所有人
        }
    
        dingding = DingDingWebHook(secret=my_secret, url=my_url)
        dingding.send_meassage(my_data)
    

    注意:发送的内容大小超过20000字节,否则发送失败

    b'{"errcode":460101,"errmsg":"message too long, exceed 20000 bytes"}'
    

    换算过来,最多19.53125kb
    在这里插入图片描述

    展开全文
  • Python调用钉钉机器人发送消息

    千次阅读 2020-08-18 17:06:58
    步骤一,登录钉钉,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”,完成后会生成Webhook地址 步骤二,点击“复制”按钮...

    一、添加钉钉机器人

    步骤一,登录钉钉,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”,完成后会生成Webhook地址

    步骤二,点击“复制”按钮,即可获得这个机器人对应的Webhook地址,其格式如下:

    https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx

     二、获取timestamp与sign参数

    # 获取timestamp参数
    timestamp = str(round(time.time() * 1000))
    # 获取sign参数
    secret = 'this is secret'
    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_plus(base64.b64encode(hmac_code))

    三、推送消息完整代码

    import time
    import hmac
    import hashlib
    import base64
    import urllib.parse
    import requests
    import json
    from common.common_logger import Logger
    '''
    对接钉钉消息通知
    '''
    # 自己写的记录日志方法
    basepagelog = Logger('logger', r'D:\po_test\outputs\\').getlog()
    
    
    def dingding(test_report):
        # 获取时间
        timestamp = str(round(time.time() * 1000))
        secret = 'this is secret'
        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_plus(base64.b64encode(hmac_code))
    
        access_token = ''
        url = 'https://oapi.dingtalk.com/robot/send?access_token={}&timestamp={}&sign={}'.format(access_token,
                                                                                                 timestamp, sign)
        # 获取当前时间
        str_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
        # 发送的消息格式
        data = {"msgtype": "markdown",
                "markdown": {
                    "title": "测试已完成",
                    "text": r"#### {}测试报告生成成功 \n> 存放地址:\\192.168.1.80\share\TestFolder\自动化分享\测试文件夹\n> "
                            r"![微信截图_20200817153548.png](https://i.loli.net/2020/08/17/gKVw2qTXYf3aPRG.png)"
                            r"\n> ###### {}生成成功\n".format(test_report, str_time)
                },
                "at": {"atMobiles": ["15386174586"]}
                }
        headers = {'Content-Type': 'application/json'}
        message = requests.post(url, json.dumps(data), headers=headers).json()
        # 将操作的状态记录到日志中
        if message['errmsg'] == 'ok':
            return basepagelog.info('钉钉消息推送成功')
        else:
            return basepagelog.error('钉钉消息推送失败')
    

     

    展开全文
  • 发送钉钉消息 参考地址: https://blog.csdn.net/qq_42293487/article/details/108082005 import requests, datetime, time, hmac, hashlib, urllib.parse, base64, json def send_dinner_message(): # ...

    发送钉钉消息

    参考地址:

    https://blog.csdn.net/qq_42293487/article/details/108082005

     

    import requests, datetime, time, hmac, hashlib, urllib.parse, base64, json
    
    def send_dinner_message():
    
        # 获取当前时间戳
        timetamp = str(round(time.time() * 1000))
    
        # 机器人密钥
        secret = "SEC27d90bf2e1978acc134ac171961384f6"
    
        secret_enc = bytes(secret.encode('utf-8'))
        string_to_sign = '{}\n{}'.format(timetamp, secret)
        string_to_sign_enc = bytes(string_to_sign.encode('utf-8'))
    
        hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
        sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    
        access_token = 'https://yach-oapi.zhiyinlou.com/robot/send?access_token=YlhIUEp5cGxCc2xQZ3dpczlremNzWWYycXdJQkg3ZnJWZTlsLy9TTjY3dUZNTXlPY0tDbk95ZVhsU1MzeEdwSg'
        # url = 'https://oapi.dingtalk.com/robot/send?access_token={}&timestamp={}&sign={}'.format(access_token, timetamp, sign)
    
        # 获取当前时间
        str_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    
        # 发送的消息格式
    
        data = {"msgtype": "markdown",
                "markdown": {
                    "title": "测试已完成",
                    "text": r"#### {}测试报告生成成功 \n> 存放地址:\\192.168.1.80\share\TestFolder\自动化分享\测试文件夹\n> "
                            r"![微信截图_20200817153548.png](https://i.loli.net/2020/08/17/gKVw2qTXYf3aPRG.png)"
                            r"\n> ###### {}生成成功\n".format('test', str_time)
                },
                "at": {"atMobiles": ["15386174586"]}
                }
    
        headers = {'Content-Type': 'application/json'}
    
        post_url = access_token + "&timestamp=%s&sign=%s" % (timetamp, sign)
    
    
     
    展开全文
  • 环境:python3.x 使用模块:requests,json 一:创建钉钉群聊机器人 ...创建完成后获取时间戳和签名 #python 3.8 import time import hmac import hashlib import base64 import urllib.parse timestamp = str(ro
  • [815]python实现钉钉发送报警消息

    千次阅读 2020-05-22 20:55:50
    消息类型及数据格式 text类型 link类型 markdown类型 整体跳转ActionCard类型 独立跳转ActionCard类型 FeedCard类型 获取自定义机器人webhook 步骤一,打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像...
  • python3发送钉钉消息

    2021-03-13 20:25:59
    发送钉钉消息 在钉钉自定义机器人,添加关键字 获取token pip3 install requests 安装模块 import requests content = { "msgtype": "text", "text": { "content": "lwq 出发!" # 这里必须包含之前定义...
  • 文章目录前言准备工作配置使用Pipeline构建Pipeline的介绍新建Pipeline项目job UI 界面(参数化构建)Pipeline脚本钉钉通知依赖包脚本通知效果小结 前言 SonarQube 最需要的功能之一是能够在质量未达到预期水平时使...
  • 前言 Python+七牛云+钉钉+ODPS实现数据获取及群消息自动推送。 几个步骤 获取数据 制表、绘图 利用七牛云获取图片url 通过钉钉sdk发送群消息 ...参考python获取外部数据源 e.g. def get_monitor_data(): ...
  • import requests # 导入requests包 import json import time from bs4 import BeautifulSoup # 知乎URL ...# 获取知乎热榜数据 def get_hot_zhihu(): res = requests.get(url, headers=headers
  • 1. 开通邮箱SMTP服务,并获取 授权码 这个账户是你要使用此邮箱发送邮件的账户,密码不是平时登录邮箱的密码,而是开通 POP3/SMTP 功能后设置的客户端授权密码。 这里以 126 邮箱为例: 2 安装 pip3 install ...
  • 首先pip下载第三方库: ...DingtalkChatbot库 ...第一步:电脑上开启钉钉群机器人,获取它的urlToken和secret 开始Python编码,只是演示,不是封装,不必在意我的中文命名 from dingtalkchatbot.chatbot import Dingtalk...
  • python钉钉机器人告警

    2020-06-01 17:44:31
    获取Webhook 钉钉里新建个群,添加个机器人,获取Webhook。 脚本 # !/usr/bin/env/python3 # _*_coding:utf-8_*_ # @__Data__:2021-05-27 ...# 发送消息钉钉 """ try: import sys import json import time..
  • python 钉钉 自动发送文件

    千次阅读 2020-07-07 15:14:41
    钉钉机器人只允许发送文字,markdown等消息,不支持media,所以要自己开发个小程序,不过很简单。 服务 出口ip的设置要注意了 到这个网址获取 http://myip.fireflysoft.net/ 添加发送文件到群的权限 添加企业会话...
  • 根据zabbix的告警信息从zabbix的api获取生成对应的图像,然后和消息组合成对应的信息发送到钉钉
  • 文章目录前言实现效果预备知识钉钉自定义机器人获取自定义机器人webhook使用自定义机器人消息类型及数据格式消息发送频率限制Python Jenkins API连接Jenkins获取Jenkins job numberSonarQube Web-APIPython Requests...
  • 文章目录一....自动群发钉钉消息2.发链接和Markdown五.文件管理1.搜索文件2.一键打开办公软件 一.数据分析(pandas) 1.导入数据 安装:pip install pandas (1)一维数据 import pandas as pd # 一维数据
  • # coding: utf-8 import json import requests ... # 机器人的webhooK 获取地址参考:https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq webhook = "https://oapi.dingtalk.com/robot...
  • 1.编写python的监控脚本  A.通过获取mysql库中的状态值来判断这...进行调取钉钉机器人,发送消息   2.设置定时任务进行脚本运行  crontab -e 添加定时任务  */5 * * * * source ~/.bashrc && /usr...
  • 钉钉群机器人token获取请参考:jenkins构建结果钉钉消息通知 #!\usr\bin\python3.6 # coding=utf-8 # Author: 文 from time import strftime from requests import session def nail_inform(statis): """ :...
  • 钉钉机器人推送消息安全设置三选一(*) 关键字和IP限制都挺简单的。 然后加签官网没有C#的演示代码,只有java和python,在网上找了下C#的 只需将Webhook和加签密钥换了就可以了 static void Main(string[] args) ...
  • python通过webhook发送告警消息

    千次阅读 2020-08-04 14:59:03
    说明: 当触发prometheus的告警规则后,...python脚本使用flask进行实时获取数据,然后发送消息钉钉python脚本: #!/usr/bin/python # -*- coding: utf-8 -*- import json import os from flask import reque
  • 第五步 点击“完成”,获取webhook,webhook就是一个请求接口,我们之后会向这个接口发送POST请求,发送我们想要让机器人发送的消息。 第六步 编写代码,新建一个test.py文件,我的python是3.8 #python 3.8 ...
  • 今天就跟大家分享一下如何在钉钉中设置机器人实现消息推送 获取自定义机器人webhook 在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设...
  • YaSQL简介 YaSQL是MySQL / TiDB的数据库审核执行平台,逐步降低了DBA的运维成本,规范了在线SQL执行流程。 开发组件 功能简介 自定义工单环境可根据...DML语句执行,支持获取锁定超时,事务封装,自动开启严格模式执行

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

python获取钉钉消息

python 订阅