agentscope-extensions-channel-dingtalk 将你的 Agent 接入钉钉,支持两种接收模式:Stream(默认)——持久 WebSocket 实时接收机器人消息,无需暴露公网 webhook 端点;HTTP 回调——钉钉将消息以 App Secret 加签后 POST 到你的 Spring 应用。
适用场景
- Agent 需要响应钉钉机器人消息(单聊和群 @提醒)。
- 倾向 WebSocket 推送模型(Stream,默认):无需公网端点、无需接入层配置。
- 倾向 HTTP 回调:应用已暴露公网回调端点,或机器人/凭据需运行时动态增删(多租户部署),希望用单一无状态入口替代一组 WebSocket 连接。
添加依赖
前置准备
- 在钉钉开发者后台创建一个企业内部应用。
- 启用机器人能力并订阅机器人消息 topic。
- 记下 App Key、App Secret 和 Robot Code。
- HTTP 回调模式:将机器人的消息接收配置为 HTTP 模式,回调地址填
https://your-host/api/channels/dingtalk/{channelId}/callback;若开启了消息体加密,另记下 aes_key。
快速开始
DingTalkCallbackController 由组件扫描装配):
配置属性
注意: 面向公网的http回调建议开启消息体加密(aesKey):请求签名仅认证timestamp请求头,不开启加密时,被截获的签名对在有效时间窗口内仍可重放。
消息流转
入站(Stream):DingTalkStreamClient 通过 WebSocket 连接钉钉网关,接收机器人消息回调,ACK 每个帧后进入 DingTalkInboundMapper → 幂等去重 → 防循环 → Gateway。
入站(HTTP 回调): 钉钉携带 timestamp/sign 请求头将消息 POST 到 DingTalkCallbackController。控制器先校验 HMAC-SHA256 签名(并拒绝过期时间戳),配置了 aesKey 时解密 encrypt 信封,随后进入与 Stream 模式相同的 去重 → 映射 → 防循环 → Gateway 管线。回复经由出站 API 发送,不通过 HTTP 响应返回。
出站: 通过 DingTalkOutboundClient 使用 OpenAPI 的 batchSend 接口发送回复——oToMessages/batchSend 用于单聊,groupMessages/send 用于群聊。文本和 Markdown 格式自动识别。