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

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.mfbz.cn/a/763657.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android- Framework 非Root权限实现修改hosts

一、背景 修改system/etc/hosts,需要具备root权限,而且remount后,才能修改,本文介绍非root状态下修改system/etc/hosts方案。 环境:高通 Android 13 二、方案 非root,system/etc/hosts只有只读权限&…

工业智能网关的功能特点有哪些?工业智能网关在工业企业的应用-天拓四方

随着工业4.0时代的到来,数字化转型已成为工业企业提升竞争力、实现可持续发展的必经之路。在这一过程中,工业智能网关以其强大的连接、数据处理和安全防护能力,成为推动工业数字化转型的关键力量。本文将深入探讨工业智能网关的功能特点、应用…

基于Java中的SSM框架实现大学生就业预测系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现大学生就业预测系统演示 摘要 科技不断飞速发展,人类文明走向一个又一个的高峰。在科技进步的浪潮中,计算机技术得到了巨大的发展,随着技术的完善,生产成本的降低,计算机走进千家万户。计算机…

API-Window对象

学习目标: 掌握Window对象 学习内容: BOM(浏览器对象模型)定时器-延时函数JS执行机制location对象navigation对象history对象 BOM(浏览器对象模型): BOM是浏览器对象模型。 window对象是一个全…

Outlook 2021 LTSC for Mac v16.86.2中文正式版

Outlook 2021是微软公司推出的一款电子邮件、日历、联系人管理器和任务管理器应用程序。它是Microsoft 365套件的一部分,适用于Windows、macOS以及iOS和Android移动设备。Outlook 2021在界面设计、功能性和性能方面进行了多项改进,以帮助用户更有效地管理…

(超详细)数据结构——“队列”的深度解析

目录 前言: 1.队列的概念 2.队列的实现 3.代码实现队列 3.1 队列的初始化 3.2 插入 3.3 删除 3.4 队列的队头,队尾和大小 3.5 判空 3.6 销毁 3.7 测试 前言: 队列与栈都是线性表,它们的结构也非常类似&#…

备份SQL Server数据库并还原到另一台服务器

我可以将SQL Server数据库备份到另一台服务器吗? 有时您可能希望将 SQL数据库从一台服务器复制到另一台服务器,或者将计算机复制到计算机。可能的场景包括测试、检查一致性、从崩溃的机器恢复数据库、在不同的机器上处理同一个项目等。 是的&#xff0c…

DevExpress WinForms磁贴导航面板 TileBar组件,让桌面应用触摸更友好!

界面控件DevExpress WinFormsTileNavPane被设计为位于应用程序窗口的顶部(就像Ribbon一样),可以被认为是Windows桌面应用程序中传统导航元素的触摸友好版本。 P.S:DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力…

使用高斯混合模型识别餐厅热点

使用 GMM 识别加拿大多伦多的直观餐厅集群(附 Python 代码) 聚类算法(例如 GMM)是一种有用的工具,可帮助识别数据中的模式。它们使我们能够识别数据集中的子组,从而提高你的理解或增强预测模型。在本文中&a…

LVM核心概念

1. LVM简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。 优点: 可以灵活分配…

postgresql命令行基本操作指令

文章目录 前言一、psql下载安装二、未配置环境变量连接方式1.可视化工具2. 命令行操作连接到postgreSQL 三、配置环境变量四、常用操作指令1. 连接数据库2. 查看数据库3. 创建数据库4. 切换数据库5. 创建数据库表结构6. 查看表结构7. 查看所有的表8. 插入数据9. 查看数据10. 更…

YOLOv8改进 | 主干网络 | C2f融合动态卷积模块ODConv

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容,内含各种Head检测头、损失函数Loss、…

Open3D 点云CPD算法配准(粗配准)

目录 一、概述 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2配准后点云 一、概述 在Open3D中,CPD(Coherent Point Drift,一致性点漂移)算法是一种经典的点云配准方法,适用于无序点云的非…

Top 5 免费 PDF 转 Word 转换工具

PDF 是可移植文档格式的缩写,是一种文件格式,用于独立于软件、硬件或操作系统可靠地呈现和交换文档。PDF 不是为编辑而设计的,因此如果您想更改某些内容,可能需要将 PDF 转换为 Word/Doc 转换器。 Top 5 免费 PDF 转 Word 转换工具…

OFDM关键技术——ICI消除技术

ICI消除算法可以分为以下几类: 1、OFDM符号长度和载波间隔的最优选择,较短的符号周期更有利于降低ICI 2、OFDM基信号的最佳选择,选择频域衰减更快的OFDM基带脉冲 3、自干扰消除技术,将信息调制到一组子载波上 4、频域均衡器&a…

电影交流平台小程序的设计

管理员账户功能包括:系统首页,个人中心,电影类型管理,留言反馈管理,电影中心管理,系统管理 微信端账号功能包括:系统首页,电影中心,留言反馈 开发系统:Window…

Rust Eq 和 PartialEq

Eq 和 PartialEq 在 Rust 中&#xff0c;想要重载操作符&#xff0c;你就需要实现对应的特征。 例如 <、<、> 和 > 需要实现 PartialOrd 特征: use std::fmt::Display;struct Pair<T> {x: T,y: T, }impl<T> Pair<T> {fn new(x: T, y: T) ->…

iptable精讲

SNAT策略 SNAT策略的典型应用环境 局域网主机共享单个公网IP地址接入Internet SNAT策略的原理 源地址转换&#xff0c;Source Network Address Translantion 修改数据包的源地址 部署SNAT策略 1.准备二台最小化虚拟机修改主机名 主机名&#xff1a;gw 主机名&#xff1…

WPF布局控件

目录 Grid StackPanel WrapPanel DockPanel UniformGrid Canvas&InkCanvas Canvas InkCanvas Border Grid 属性 ShowGridLines&#xff1a;显示边线 ColumnDefinitions 列集合 表示有几列下面就写几个ColumnDefinition Width 宽&#xff1a;如果写具体数字则表…

【面试题】IPS(入侵防御系统)和IDS(入侵检测系统)的区别

IPS&#xff08;入侵防御系统&#xff09;和IDS&#xff08;入侵检测系统&#xff09;在网络安全领域扮演着不同的角色&#xff0c;它们之间的主要区别可以归纳如下&#xff1a; 功能差异&#xff1a; IPS&#xff1a;这是一种主动防护设备&#xff0c;不仅具备检测攻击的能力&…