@钉钉机器人自动回复消息
一.pc端钉钉创建一个企业
二.登录钉钉开发者后台,创建企业机器人
开发者后台
登录「钉钉开发者后台」,选择「应用开发」——「企业内部开发」—— 「机器人」
三.配置服务器安全组项(这里以阿里云服务器为例)
配置钉钉机器人post数据的接口,即web运行开放的端口,
设置相应的ip白名单(可以设置当前pc端所在机器出口ip)
四.开启一个web服务,用于接收和发送数据
# -*- coding: utf-8 -*-
# @Time : 2023/2/15 11:25
# @Author : Cocktail_py
import time
import hmac
import hashlib
import base64
import json
import logging
from datetime import datetime
from flask import Flask, request
from dingtalkchatbot.chatbot import DingtalkChatbot
from traceback import format_exc
app = Flask(__name__)
# 机器人密钥
APP_SECRET = '4ugAwbOkbP-w0-3KpJ6RDQqoWNeUS2************H'
# 机器人URL
WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=cb10814658af115926887e6c9e12d4ae0bb14129******"
# 钉钉发送消息
class DingDingBot(object):
# WebHook地址
webhook = WEBHOOK
def __init__(self):
# 初始化机器人小丁DingDingBot
self.xiaoding = DingtalkChatbot(self.webhook)
# Text消息@所有人
def send_message(self, msg):
cnt = 0
while cnt < 3:
try:
self.xiaoding.send_text(msg='{}'.format(msg), is_at_all=False)
break
except:
logging.error(format_exc())
cnt += 1
def sha256_base64(timestamp=int(time.time() * 1000), app_secret=APP_SECRET):
"""
钉钉消息头部加密
:param timestamp: 时间戳
:param app_secret: 钉钉机器人后台AppSecret,如:4ugAwbOkbP-w0-3KpJ6RDQqoWNeUS2************H
:return:
"""
app_secret_enc = app_secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, app_secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(app_secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = base64.b64encode(hmac_code).decode('utf-8')
return sign
# 接收@机器人的消息
@app.route('/', methods=["POST"])
def index():
if request.method == "POST":
timestamp = request.headers.get('Timestamp')
sign = request.headers.get('Sign')
if sha256_base64(timestamp=timestamp) == sign:
req_data = json.loads(str(request.data, 'utf-8'))
senderNick = req_data.get('senderNick')
text = req_data.get('text').get('content', "").strip()
logging.info(text)
DingDingBot().send_message(
"[%s]\n执行人:%s\n执行内容:%s" % (datetime.now().strftime('%Y-%m-%d %H:%M:%S'), senderNick, text))
return "succeed"
else:
return "not found"
else:
return "method not found"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8083)
五.配置开发者后台开发管理
注意
:这里必须先执行步骤四才能配置成功
六.钉钉机器人管理与发布
为了方便开发和测试,机器人正式发布前,我们可以先在钉钉机器人开发管理后台点击版本管理与调试->调试,系统会自动帮我们创建一个调试群。
参考:
钉钉接收消息官方文档
如何打造一个能自动回复的钉钉机器人
从 0 到 1 使用 Python 开发一个钉钉群应答机器人