钉钉机器人
配置 Stream 机器人、连接管理、交互卡片与消息附件。
钉钉机器人渠道使用组织应用的 AppKey 和 AppSecret,通过出站 Stream WebSocket 接收消息。若要使用现有 DWS 登录账号,应改读DingTalk Workspace。
创建与连接
在钉钉开发者后台创建应用,启用 Robot 能力,并在机器人协议中启用 Stream 模式。把 AppKey 映射到 clientId、AppSecret 映射到 clientSecret;此模式不要求公网回调 URL。
{
"channels": {
"dingtalk-work": {
"type": "dingtalk",
"clientId": "$DINGTALK_CLIENT_ID",
"clientSecret": "$DINGTALK_CLIENT_SECRET",
"useConnectionManager": true,
"privatePolicy": "pairing",
"groupPolicy": "disabled",
"sessionScope": "user",
"cwd": "/path/to/project"
}
}
}qwen channel start dingtalk-workuseConnectionManager 默认 true,连接管理器可替换陷入异常状态的 SDK 连接。设为 false 后仍保留 SDK 自身的保活和自动重连,不是关闭所有恢复机制。
交互卡片
不写 interactiveCards 时,交互卡片关闭;写入对象后,总开关、状态卡和问题卡默认都开启。以下是应合并到已有渠道对象中的片段:
{
"interactiveCards": {
"enabled": true,
"statusCard": { "enabled": true },
"questionCard": { "enabled": true, "timeoutMs": 270000 }
}
}问题卡默认 270000 毫秒超时。timeoutMs 要是正的有限数值,上限为 2147483647。渠道编辑器可能不展示这些字段,但会保留已配置对象;可通过配置文件或 API 管理。输出模式与后台任务的关系见钉钉输出策略。
群提及与引用
atSender 默认 false;开启时,普通 Markdown 回复会在首个分块中使用发送者 staff ID 提及对方。它不控制入站消息是否通过 requireMention;后者根据平台 isInAtList 判断。
钉钉普通文本回调会去掉机器人提及,之后的 /clear 或 !command 可能被识别为命令。富文本回调保留的 @Bot 文本可能让同样内容作为普通任务输入。排查命令未执行时,应检查消息类型和实际传入文本。
引用用户消息时,可带入文本、图片及引用媒体;引用机器人先前回复目前不支持。合并转发记录会保留标题、摘要和发送者信息,最多 50 条、总文本约 4000 字符,每条约 500 字符,截断会有提示。作为引用的合并记录总预算为 500 字符。渠道会处理群上下文的单行和括号格式,但这些内容仍是外部消息,不应当成系统指令。
文件和媒体
图片及富文本混合图片需要视觉模型。文件、音频和视频会下载为本地路径。让机器人发回生成的文件时,应明确请求;可发送工作区或系统临时目录内的非空文件,每个不超过 20 MB,每次回复最多 5 个。无法发送会在最终文本说明。
Markdown 大约按 3800 字符分块,表格交给平台展示。处理期间的 👀 表情会在结束后移除,它不是投递成功回执。找不到 sessionWebhook 等问题先检查应用能力、权限和渠道 stderr 中的同次请求错误。
主动投递私聊使用 user ID,群使用 openConversationId,并明确 isGroup;不使用传统 incoming webhook URL,也不提供群内任意线程定位。接入方式见Webhook 与联系人。