@钉钉机器人自动回复消息

@钉钉机器人自动回复消息

  • 一.pc端钉钉创建一个企业
  • 二.登录钉钉开发者后台,创建企业机器人
  • 三.配置服务器安全组项(这里以阿里云服务器为例)
  • 四.开启一个web服务,用于接收和发送数据
  • 五.配置开发者后台开发管理
  • 六.钉钉机器人管理与发布

一.pc端钉钉创建一个企业

@钉钉机器人自动回复消息_第1张图片

二.登录钉钉开发者后台,创建企业机器人

开发者后台
登录「钉钉开发者后台」,选择「应用开发」——「企业内部开发」—— 「机器人」
@钉钉机器人自动回复消息_第2张图片
@钉钉机器人自动回复消息_第3张图片
@钉钉机器人自动回复消息_第4张图片

三.配置服务器安全组项(这里以阿里云服务器为例)

@钉钉机器人自动回复消息_第5张图片
配置钉钉机器人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)

@钉钉机器人自动回复消息_第6张图片

五.配置开发者后台开发管理

注意:这里必须先执行步骤四才能配置成功
@钉钉机器人自动回复消息_第7张图片

六.钉钉机器人管理与发布

为了方便开发和测试,机器人正式发布前,我们可以先在钉钉机器人开发管理后台点击版本管理与调试->调试,系统会自动帮我们创建一个调试群。
@钉钉机器人自动回复消息_第8张图片
@钉钉机器人自动回复消息_第9张图片

参考:
钉钉接收消息官方文档
如何打造一个能自动回复的钉钉机器人
从 0 到 1 使用 Python 开发一个钉钉群应答机器人

你可能感兴趣的:(个人学习记录,钉钉,机器人,flask)