一、云服务器
①可通过阿里云购买一个轻量服务器
②配置好相关软件,我这里用的是windows,下载pycharm。
二、钉钉开放平台配置
①步骤一:创建机器人用于接收网络请求(钉钉开放平台)
②步骤二:配置服务器公网ip(这里着重注意)
三、最后汇总代码
最后汇总代码具体有稍微改动,在云服务器上运行即可成功搭建钉钉自动回复机器人
# -*- 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
#markdown书写
import logging
from traceback import format_exc
app = Flask(__name__)
# 机器人密钥
APP_SECRET = '你的机器人的APP_SECRET'
# 机器人URL
WEBHOOK = "你的机器人的WEBHOOK"
# 钉钉发送消息
class DingDingBot(object):
# WebHook地址
webhook = WEBHOOK
def __init__(self):
# 初始化机器人小丁DingDingBot
self.xiaoding = DingtalkChatbot(self.webhook)
# Text消息@所有人
# 设置markdown编写
def send_markdown_message(self, msg):
cnt = 0
while cnt < 3:
try:
self.xiaoding.send_markdown(title='Markdown消息', text='{}'.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=["GET","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)
if text == "你好":
DingDingBot().send_markdown_message(
"hi,%s,我可以帮助你带领你更快的熟悉供应链流程。可以试试@我,看板、新人培训、数据分析日报、组织介绍、" % (senderNick))
if text == "":
DingDingBot().send_markdown_message(
"hi,%s,我可以帮助你带领你更快的熟悉供应链流程。可以试试@我,看板、新人培训、数据分析日报、组织介绍" % (senderNick))
if text == "看板":
DingDingBot().send_markdown_message(
"#### ** 当前供应链看板:**\n"
"##### [奥莱全链路](https://fbi.alibaba-inc.com/dashboard/view/page.htm?spm=a2o1z.8190073.0.0.d7a0543fHD9PWX&id=1179110)\n"
"##### [奥莱-生鲜供应链看板](https://fbi.alibaba-inc.com/dashboard/view/page.htm?spm=a2o1z.8190073.0.0.d7a0543fVGSySI&id=1057367)\n"
"##### [上海冷藏仓临期预警报表](https://fbi.alibaba-inc.com/dashboard/view/page.htm?spm=a2o1z.8189972.0.0.538b543fCY4Esx&id=1009034)")
if text == "新人培训":
DingDingBot().send_markdown_message(
"#### ** 新人培训合集:**\n"
"##### [语雀新人培训](https://aliyuque.antfin.com/tgb52p/fos7la)\n"
"##### [特殊时间数据分析](https://aliyuque.antfin.com/tgb52p/pudm9h)\n")
return "succeed"
else:
return "not found"
else:
return "method not found"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)