钉钉单聊机器人 Stream 模式接入实现
开发 Stream 模式推送服务端(推荐)
什么是 Stream 模式
Stream 模式是钉钉开放平台提供的一种集成方式,它可以监听机器人回调、事件订阅回调和注册卡片回调。使用 Stream 模式接入,钉钉开放平台将通过 Websocket 连接与应用程序通讯,Stream 模式将极大降低接入门槛和资源依赖,不需要公网服务器、IP、域名等资源,只需集成钉钉开放平台 SDK 即可。
Stream 模式原理
在 Stream 模式下,开发者的应用程序通过集成 SDK 的方式与钉钉开放平台建立一条 WebSocket 连接,建立连接过程中开放平台将对连接进行鉴权。当有卡片回调发生时,开放平台将通过 WebSocket 连接将数据通知到开发者的应用程序。开发者的应用程序可以接收到这些数据并进行相应处理,从而实现与钉钉开放平台的实时通信。
Stream 模式优势
在钉钉开放平台向应用程序发送请求的场景中,大部分都是采用 Webhook(注册公网 HTTPS 服务)的方式,包括卡片回调。使用 Webhook 方式开发过程中会遇到较多的问题,包括申请公网域名和 TLS 证书、申请公网 IP 并部署接入网关、部署应用防火墙并配置白名单、独立处理请求的鉴权以及加解密处理、搭建内网穿透环境进行本地开发调试等。
针对以上问题,Stream 模式将为开发者提供五零接入体验,将 1~2 周的接入开发周期降低到 5 分钟:
- 零公网 IP:不需要依赖公网 IP 或域名,也不需要暴露公网 IP,减少了公网暴露服务的安全风险并降低了开发门槛。
- 零加解密/签名/TLS 证书管理:使用应用身份对连接进行鉴权,通过反向连接的方式与钉钉开放平台建立 TLS 加密连接,提供了快速、安全的通信体验。
- 零防火墙白名单:Stream 模式下开发者无需向公网开放提供任何服务端口,无需部署防火墙和配置白名单。
- 零网关部署:通过反向连接的方式建立通道,开发者只需保证运行环境具备公网访问能力即可,无需部署网关。
- 零内网穿透:开发者无需在本地搭建内网穿透工具,通过 Stream 模式在本地开发环境中即可接收卡片回调。
接入限制
- 应用程序所部署环境具备访问公网的能力。
- 仅适用于企业内部开发和第三方企业应用。
- 每个客户端实例默认启用一条 WebSocket 连接,一个应用默认最多建立 50 条连接。
协议接入步骤
钉钉 Stream 协议接入主要包括两个步骤:
- 注册连接凭证:通过 HTTP POST 方法,获取 WebSocket 通道的 endpoint(协议域名和 Path 信息)和 ticket(URL 中的 Ticket 参数);
- 建立 WebSocket 连接:通过步骤一中获取的 endpoint 和 ticket 信息,建立 WebSocket 通道,开始订阅。
步骤一:注册连接凭证
调用以下接口注册 Stream 连接凭证:
请求方法 (HTTP) 示例:
POST /v1.0/gateway/connections/open HTTP/1.1
Host: api.dingtalk.com
Content-Type: application/json
Accept: application/json
{"clientId": "${ClientID}", "clientSecret": "${ClientSecret}", "localIp": "10.34.22.11", "subscriptions": [{"topic": "*", "type": "EVENT"}, {"topic": "/v1.0/im/bot/messages/get", "type": "CALLBACK"}], "ua": "dingtalk-sdk-java/1.0.2"}

