模块名:dingpy
钉钉有两种机器人:
一种是消息推送机器人只支持发送消息
这种机器人直接电脑端进群添加就可以了
然后获取webhook与key
一种是企业内部机器人支持消息接收与发送
添加企业机器人方法:
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可以不配置 简单!!!
源码贴出来了 可查看
亲测可用 我绑定了图灵机器人