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

本文介绍了如何使用Python和Flask创建一个钉钉自动回复机器人,包括在钉钉开发者后台创建企业机器人,配置服务器安全组,设置Web服务,编写Python代码处理消息收发,并通过DingtalkChatbot库实现消息加密与解密功能。
摘要由CSDN通过智能技术生成

一.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 开发一个钉钉群应答机器人

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cocktail_py

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值