使用Python实现钉钉Stream模式服务开发及内部程序通信

news2024/11/25 16:24:03

1、什么是Stream模式

Stream 模式是钉钉开放平台提供的一种集成方式,它可以监听机器人回调、事件订阅回调和注册卡片回调。使用 Stream 模式接入,钉钉开放平台将通过 Websocket 连接与应用程序通讯,Stream 模式将极大降低接入门槛和资源依赖,不需要公网服务器、IP、域名等资源,只需集成钉钉开放平台 SDK 即可。

2、Stream模式原理

在 Stream 模式下,开发者的应用程序通过集成 SDK 的方式与钉钉开放平台建立一条 WebSocket 连接,建立连接过程中开放平台将对连接进行鉴权。当有卡片回调发生时,开放平台将通过 WebSocket 连接将数据通知到开发者的应用程序。开发者的应用程序可以接收到这些数据并进行相应处理,从而实现与钉钉开放平台的实时通信,参考下图所示

在这里插入图片描述

3、Stream模式优势

在钉钉开放平台向应用程序发送请求的场景中,大部分都是采用 Webhook (注册公网 HTTPS 服务)的方式,包括卡片回调,使用 Webhook 方式开发过程中会遇到较多的问题,包括

  • 申请公网域名和TLS证书

  • 申请公网IP并部署接入网关

  • 部署应用防火墙并配置白名单

  • 独立处理请求的鉴权,以及加解密处理

  • 搭建内网穿透环境进行本地开发调试

4、stream 服务开发(python)

直接上源码

from flask import Flask, request, jsonify
import threading
import dingtalk_stream
from dingtalk_stream import AckMessage
import requests

app = Flask(__name__)

# 钉钉应用的App Key和App Secret
APP_KEY = 'xxxxxx'
APP_SECRET = 'xxxxxxxxxxxxx'

# 定义事件处理器
class MyEventHandler(dingtalk_stream.EventHandler):
    async def process(self, event: dingtalk_stream.EventMessage):
        print(event.headers.event_type, event.headers.event_id, event.headers.event_born_time, event.data)
        # 处理接收到的事件,并发送到WordPress
        send_data_to_wordpress_thread = threading.Thread(target=send_data_to_wordpress,args=(event.data,))
        send_data_to_wordpress_thread.start()
        return AckMessage.STATUS_OK, 'OK'

class MyCallbackHandler(dingtalk_stream.CallbackHandler):
    async def process(self, message: dingtalk_stream.CallbackMessage):
        print(message.headers.topic, message.data)
        # 处理接收到的回调消息,并发送到WordPress
        send_data_to_wordpress_thread = threading.Thread(target=send_data_to_wordpress,args=(message.data,))
        send_data_to_wordpress_thread.start()
        return AckMessage.STATUS_OK, 'OK'

# 启动钉钉Stream客户端
def start_dingtalk_client():
    credential = dingtalk_stream.Credential(APP_KEY, APP_SECRET)
    client = dingtalk_stream.DingTalkStreamClient(credential)
    client.register_all_event_handler(MyEventHandler())
    client.register_callback_handler(dingtalk_stream.ChatbotMessage.TOPIC, MyCallbackHandler())
    client.start_forever()

# 发送数据到wordpress 
def send_data_to_wordpress(data, allowed_origin=None):
    url = 'http://10.11.11.111:1111/dingtalk/data'  # 网站服务接口
    headers = {'Content-Type': 'application/json'}
    
    # 添加允许跨域的请求头
    if allowed_origin:
        headers['Access-Control-Allow-Origin'] = allowed_origin
    
    requests.post(url, json=data, headers=headers)
    

# 启动钉钉Stream客户端线程
thread = threading.Thread(target=start_dingtalk_client)
thread.start()

# Flask路由,用于健康检查或其他用途
@app.route('/')
def index():
    return 'DingTalk Stream client is running.'

if __name__ == '__main__':
    app.run(port=5000)


运行
在这里插入图片描述

5、如何配置stream模式 钉钉事件订阅

请看官方文档 https://open.dingtalk.com/document/orgapp/stream
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1873522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统开启python虚拟环境

.\env4socre\Scripts\activate : 无法加载文件 E:\SocreMan\env4socre\Scripts\Activate.ps1,因为在此系统上禁止运行脚本。 环境:windows 11、vscode 1、用管理员权限打开powershell 输入set-executionpolicy remotesigned,选择Y 2、返回v…

信创认证 | Smartbi Insight V11成功适配申威3231处理器

在信息技术飞速发展的浪潮中,软硬件的深度融合与协同发展已成为推动行业创新的关键因素。 近日,思迈特商业智能与数据分析软件[简称:Smartbi Insight]V11在统信服务器操作系统V20和中电科申泰信息科技有限公司产品申威3231处理器环境下完成适…

【Linux 命令行参数解析函数getopt()】原理及直白理解

最近写代码恰好碰见getopt()这个函数,去网上找了很久,说实话,其他人写的有点看不懂,所以将我认为可以便于理解的地方描述一下: int getopt(int argc, char * const argv[], const char *optstring);首先理解这个函数的…

pdf合并,这三种方法学会了吗?

在信息爆炸的时代,PDF文档凭借其跨平台、不易修改的特性,成为了我们工作和学习中不可或缺的一部分。然而,当面对多个PDF文件需要合并成一个完整的文档时,许多人可能会感到头疼。今天,就让我们一起来探讨三种高效的PDF合…

OOXML入门学习

进入-飞入 <par> <!-- 这是一个并行动画序列的开始。"par"代表并行&#xff0c;意味着在这个标签内的所有动画将同时开始。 --><cTn id"5" presetID"2" presetClass"entr" presetSubtype"4" fill"hold&…

利用大模型技术,打造本地个人专属知识库

文章目录 利用大模型技术&#xff0c;打造本地个人专属知识库一 简介二 部署2.1 硬件要求2.2 部署信息2.3 通过docker部署、启动Ollama2.3 进入Ollama容器、拉取qwen2:7b模型2.4 测试Ollama2.5 通过docker部署、启动MaxKB2.6 登录MaxKB管理后台2.7 MaxKB系统配置2.8 创建知识库…

第56期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

一种自定义SPI通信协议

本文介绍一种自定义SPI通信协议。 项目开发过程中&#xff0c;有时候会涉及到主处理器或FPGA和MCU之间的SPI通信&#xff0c;涉及到通信就需要考虑通信协议&#xff0c;本文给出一种简单的通信协议。 1.协议格式 协议格式如下图。 其中&#xff0c;将40 bit划分为2大部分&am…

Spring Boot 过滤器和拦截器详解

目录 Spring Boot 过滤器1.什么是过滤器2.工作机制3.实现过滤器 Spring Boot 拦截器1. 什么是拦截器2. 工作原理3.实现4.拓展&#xff08;MethodInterceptor 拦截器&#xff09;实现 过滤器和拦截器区别过滤器和拦截器应用场景过滤器拦截器 Spring Boot 过滤器 1.什么是过滤器 …

OpenCV视觉--视频人脸微笑检测(超详细,附带检测资源)

目录 概述 具体实现 1.加载分类器 2.打开摄像头并识别人脸 3.处理人脸并检测是否微笑 效果 总结 概述 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习库&#xff0c;广泛应用于图像处理和视频分析等领…

精密机器中的交叉导轨负荷与容许负荷的差异!

交叉导轨的设计和制造过程中&#xff0c;负荷及容许负荷是至关重要的参数&#xff0c;只有准确计算出交叉导轨的载荷&#xff0c;才能保证交叉导轨的稳定性和使用寿命。 负荷和容许载荷是两个不同的参数&#xff0c;那这两者的有什么差异呢&#xff1f; 交叉导轨的负荷是指其承…

[深度学习] 前馈神经网络

前馈神经网络&#xff08;Feedforward Neural Network, FFNN&#xff09;是人工神经网络中最基本的类型&#xff0c;也是许多复杂神经网络的基础。它包括一个输入层、一个或多个隐藏层和一个输出层。以下是详细介绍&#xff1a; 1. 结构 1. 输入层&#xff08;Input Layer&am…

在微信小程序中使用svg图标

在项目中引入图标组件是很常见的一个问题&#xff0c;但是这里我在小程序中引入图标组件的时候报错了&#xff01; 这个主要原因是 微信小程序上不支持 SVG 字体图标&#xff01; <image src"./xx.svg"/>所以参考微信开放社区 我们想要在微信小程序中使用svg图…

java基于ssm+jsp 电子商城系统

1管理员功能模块 管理员登录&#xff0c;通过填写用户名、密码进行登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入电子商城系统可以查看个人中心、用户管理、医生管理、药品信息管理、线上诊疗管理、医生信息管理、管理员管理、论坛管理、系统管理、订单管…

智慧数据中心可视化:高效管理与直观监控的未来

随着数据中心的规模和复杂性不断增加&#xff0c;传统管理方式难以满足需求。智慧数据中心通过图扑可视化实现实时数据监控和智能分析&#xff0c;将复杂的基础设施直观呈现&#xff0c;极大提升了运维效率、故障排查速度和资源优化能力&#xff0c;为企业提供现代化、智能化的…

卡尔曼滤波公式推导笔记

视频见B站上DR_CAN的卡尔曼滤波器 【卡尔曼滤波器】3_卡尔曼增益超详细数学推导 &#xff5e;全网最完整_哔哩哔哩_bilibili

4. node联调devtools

4. node联调devtools 把node代码放在开发者工具执行代码执行命令 node --inspect-brk js文件浏览器执行命令 chrome://inspect/#devices检测到文件之后会有个点击选项,点击进入就能调试自己的代码 有了开发者工具调试之后我们可以给自己的吐环境脚本在完善一下,当获取的参数是…

实力认可!安全狗受聘成为福建省网信系统2024年度网络安全技术支撑单位

6月6日&#xff0c;福建省委网信办组织召开福建省网信系统2024年度网络安全技术支撑单位座谈会。 作为国内云原生安全领导厂商&#xff0c;安全狗也受邀出席此次活动。 省委宣传部副部长、省委网信办主任、省互联网信息办公室主任张远出席会议并颁发支撑单位证书。安全狗凭借出…

Java面向对象特性

Java继承&#xff1a; 继承的概念&#xff1a; 在Java中&#xff0c;继承&#xff08;inheritance&#xff09;是面向对象编程的一个重要概念&#xff0c;它允许一个类&#xff08;子类&#xff09;继承另一个类&#xff08;父类&#xff09;的属性和方法。通过继承&#xff0c…

Java养老护理助浴陪诊小程序APP源码

&#x1f496;护理助浴陪诊小程序&#x1f496; 一、引言&#xff1a;养老新趋势&#x1f331; 在快节奏的现代生活中&#xff0c;养老问题逐渐成为了社会关注的焦点。如何为老年人提供便捷、贴心的服务&#xff0c;让他们晚年生活更加安心、舒适&#xff0c;是我们每个人都需…