钉钉机器人对接指南
概述
本模块实现了钉钉机器人的 HTTP 回调模式对接。钉钉机器人收到用户消息后,会将消息 POST 到配置的回调地址,我们处理消息后直接在响应中返回回复内容。架构设计
核心组件
DingTalkRobotEndpoint- 处理钉钉回调的 REST 接口RobotChatService- 统一的机器人聊天服务DingTalkChannelConfig- 渠道配置(appKey, appSecret)
回调地址格式
消息处理流程
1. 接收消息
钉钉发送的消息请求格式:2. 返回回复
直接在 HTTP 响应中返回钉钉消息格式:与其他平台的差异
| 特性 | 钉钉机器人 | 飞书机器人 | 企业微信机器人 |
|---|---|---|---|
| 请求格式 | 明文 JSON | 明文/加密 JSON | 加密 JSON |
| 响应方式 | 直接返回 | 需主动调API发送 | 直接返回加密消息 |
| SDK 依赖 | 无需SDK | 需要SDK | 需要SDK |
| 加密配置 | 无 | 可选 | 必须 |
| 会话Webhook | 提供(可选用) | 无 | 无 |
配置说明
在 LangChat 管理后台创建 API 密钥时,选择”钉钉”渠道,配置以下信息:| 配置项 | 必填 | 说明 | 获取位置 |
|---|---|---|---|
| appKey | 是 | 应用AppKey | 钉钉开放平台 → 应用详情 → 凭证与基础信息 |
| appSecret | 是 | 应用AppSecret | 钉钉开放平台 → 应用详情 → 凭证与基础信息 |
钉钉后台配置
步骤一:创建应用
- 登录 钉钉开放平台
- 创建企业内部应用
- 获取 AppKey 和 AppSecret
步骤二:添加机器人能力
- 进入应用详情 → 添加应用能力
- 选择「机器人」能力
- 配置机器人名称和头像
步骤三:配置消息接收
- 进入「机器人」配置页面
- 消息接收模式选择:HTTP模式
- 消息接收地址填写:
https://你的域名/robot/dingtalk/callback/{apiKey} - 点击保存
步骤四:发布应用
- 创建应用版本
- 申请上线
- 管理员审批通过后生效
会话类型
钉钉机器人支持两种会话类型:| conversationType | 说明 | 特点 |
|---|---|---|
| 1 | 单聊 | 用户与机器人私聊 |
| 2 | 群聊 | 群内 @机器人 触发 |
主动发送消息(可选)
钉钉在回调请求中提供了sessionWebhook 字段,可用于主动向用户发送消息:
sessionWebhook 有过期时间(sessionWebhookExpiredTime),过期后无法使用。
注意事项
响应时间
钉钉对回调响应没有严格的 3 秒超时限制(不同于飞书),但建议:- 控制 AI 处理时间,避免用户等待过长
- 复杂任务可先返回”正在处理”,再通过 sessionWebhook 发送结果
消息去重
钉钉可能会重复推送同一条消息(网络问题),建议:- 根据
msgId进行去重 - 避免重复处理和回复
@机器人
在群聊场景中:- 用户需要 @机器人 才能触发消息
atUsers字段包含被 @的用户列表text.content中会包含 @机器人 的文本(需要清理)
域名配置
LangChat 前端.env 文件中的 VITE_API_URL 配置会影响显示的回调地址:
- 本地开发时显示
http://127.0.0.1:8100 - 生产环境应配置为真实的公网域名
支持的消息类型
当前支持的消息类型:text- 文本消息
image- 图片消息file- 文件消息audio- 语音消息markdown- Markdown消息actionCard- 卡片消息
错误处理
| 错误场景 | 返回内容 |
|---|---|
| API Key 无效 | 配置错误:无效的API Key |
| 渠道类型不匹配 | 配置错误:渠道类型不匹配 |
| 渠道配置无效 | 配置错误:渠道配置无效 |
| 消息内容为空 | 消息内容为空 |
| 处理异常 | 处理失败,请稍后重试 |

