python3钉钉消息机器人模块

 

模块名:dingpy

python3钉钉消息机器人模块_第1张图片

钉钉有两种机器人:

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

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

然后获取webhook与key

python3钉钉消息机器人模块_第2张图片

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

python3钉钉消息机器人模块_第3张图片

添加企业机器人方法:

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可以不配置 简单!!!

源码贴出来了 可查看

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

 

你可能感兴趣的:(python3钉钉消息机器人模块)