本文面向 ClawPanel / OpenClaw 用户,说明如何把钉钉企业内部应用接入为消息渠道,并完成最小可用联调。
当前 ClawPanel 走的是 钉钉企业内部应用 + 机器人能力 + Stream 模式 + dingtalk-connector 插件 方案。
这不是自定义 Webhook 机器人方案,也不是 DEAP Agent 方案。
在开始前,请确认:
- 你已经安装并初始化 OpenClaw
- Gateway 可以正常运行
- ClawPanel 已能读写
~/.openclaw/openclaw.json - 你拥有钉钉企业内部应用的创建和发布权限
- 打开钉钉开放平台
- 进入 应用开发
- 选择 企业内部开发
- 创建一个新的企业内部应用
建议先准备好应用名称、图标和应用描述,便于后续在钉钉侧识别机器人。
在应用能力中添加 机器人。
关键点:
- 消息接收方式必须选择 Stream 模式
- 不要使用 Webhook 模式
如果这里选错,插件即使安装成功,机器人通常也不会正常收发消息。
至少确认已开通下列权限:
Card.Streaming.WriteCard.Instance.Writeqyapi_robot_sendmsg
如果你后续还想使用文档相关能力,再补充文档 API 所需权限。
在钉钉应用的 凭证与基础信息 页面,记录:
Client IDClient Secret
在 ClawPanel 中的字段映射如下:
| ClawPanel 字段 | 钉钉后台字段 | 说明 |
|---|---|---|
clientId |
Client ID / AppKey | 必填 |
clientSecret |
Client Secret / AppSecret | 必填 |
gatewayToken |
gateway.auth.token |
Gateway 开启 token 鉴权时填写 |
gatewayPassword |
gateway.auth.password |
Gateway 开启 password 鉴权时填写 |
这一步非常重要。
在你完成机器人能力、权限和基础信息配置后,需要 发布应用版本。
如果没有发布,常见现象包括:
- 插件已经安装成功,但机器人在钉钉里没有响应
- 卡片能力不生效
- 某些权限看起来已配置,但实际上线上不可用
打开 消息渠道 页面,选择 钉钉。
填写:
Client IDClient SecretGateway Token或Gateway Password(仅在 Gateway 启用了鉴权时填写)
填写规则:
- 如果
gateway.auth.mode = token,填写Gateway Token - 如果
gateway.auth.mode = password,填写Gateway Password - 如果 Gateway 未开启鉴权,这两个都可以留空
从当前版本开始,ClawPanel 在打开钉钉配置弹窗时会自动读取 openclaw.json 中的 gateway.auth:
- 如果
gateway.auth.mode = token,会自动带出Gateway Token - 如果
gateway.auth.mode = password,会自动带出Gateway Password
建议先点击 校验凭证,确认 Client ID / Client Secret 可用后,再点击保存。
保存钉钉渠道时,ClawPanel 会自动完成以下动作:
- 写入
channels.dingtalk-connector - 自动补齐
plugins.allow - 自动启用
gateway.http.endpoints.chatCompletions.enabled = true - 首次缺少插件时自动安装
@dingtalk-real-ai/dingtalk-connector
从当前版本开始:
- 首次保存:如果检测到插件未安装,会自动安装插件
- 后续保存:如果插件已经存在,只更新配置,不会重复安装
如果你不通过 ClawPanel,而是手改 ~/.openclaw/openclaw.json,最小示例如下:
{
"channels": {
"dingtalk-connector": {
"enabled": true,
"clientId": "你的 Client ID / AppKey",
"clientSecret": "你的 Client Secret / AppSecret",
"gatewayToken": "如果 gateway.auth.mode=token 则填这里",
"gatewayPassword": ""
}
},
"gateway": {
"http": {
"endpoints": {
"chatCompletions": {
"enabled": true
}
}
}
}
}注意:不要整段覆盖已有的 gateway 节点,而是将 http.endpoints.chatCompletions.enabled 追加到已有配置中。
openclaw plugins list确认输出中存在:
dingtalk-connector
curl http://127.0.0.1:18789/healthopenclaw gateway restart先确认以下前置条件:
- 应用版本已经发布
- 应用可见范围包含你当前的测试账号
- 你是该企业/组织内成员
推荐操作路径:
- 在钉钉客户端搜索你的应用名或机器人名
- 如果搜索不到,再到 工作台 / 全部应用 中查找该应用
- 打开后发一条简单消息,例如“你好”
说明:
- 不同客户端版本中,私聊入口文案可能略有差异
- 如果机器人已发布但依然完全搜不到,优先检查 可见范围 和 应用发布状态
- 如果首次私聊收到的是 配对码,请在终端执行
openclaw pairing approve dingtalk-connector <配对码>完成授权;如需先查看待审批项,可执行openclaw pairing list dingtalk-connector
根据钉钉开放平台“添加机器人到钉钉群”的使用说明,常见路径如下:
- 打开目标群聊
- 进入 群设置
- 找到 智能群助手、机器人 或相近入口
- 点击 添加机器人
- 搜索你的机器人名称并添加
- 返回群聊,先发送
@机器人 你好做测试
说明:
- 不同客户端里入口名称可能是“智能群助手”或“机器人”
- 企业内部应用机器人一般只在组织内部可见,外部群或不在可见范围内的成员可能搜不到
- 群里建议优先使用
@机器人触发,便于判断消息是否被正确路由到机器人 - 如果已经加群但仍不响应,请继续检查连接器配置里的
groupPolicy是否被设为disabled
建议按下面顺序测试:
- 先在钉钉里 私聊机器人,发一条简单消息,例如“你好”
- 确认私聊通了之后,再把机器人拉入群聊
- 再测试群聊消息和卡片回包
这样更容易判断问题到底在:
- 应用基础配置
- 消息接收模式
- 群聊权限
- 会话隔离策略
通常说明 chatCompletions 端点未启用。
检查 openclaw.json 中是否存在:
{
"gateway": {
"http": {
"endpoints": {
"chatCompletions": {
"enabled": true
}
}
}
}
}通常说明钉钉连接器填写的 gatewayToken / gatewayPassword 与 Gateway 实际鉴权配置不一致。
重点检查:
gateway.auth.modegateway.auth.tokengateway.auth.password
按顺序检查:
- Gateway 是否运行
- 机器人消息接收方式是否为 Stream 模式
Client ID / Client Secret是否正确- 钉钉应用版本是否已经发布
- 应用可见范围是否包含当前测试账号
- 首次私聊是否还在等待配对审批
通常是权限未开齐。
至少检查:
Card.Streaming.WriteCard.Instance.Write
修改权限后,记得重新发布应用版本。
优先检查:
- 应用是否已经发布
- 应用可见范围是否包含当前测试人
- 当前测试人是否属于该企业/组织
- 机器人是否是企业内部应用机器人,而不是另一个同名应用
如果是群聊场景,还要确认:
- 目标群是你当前组织内可用的群
- 加群入口中搜索的是机器人/应用当前发布名称
优先检查:
- 是否已经把机器人真正添加进该群
- 发消息时是否使用了
@机器人 groupPolicy是否被设为disabled- Gateway 日志里是否能看到群消息进入
旧逻辑在每次保存渠道配置时都会执行插件安装。
当前版本已经修复为:
- 检测插件已安装时,直接更新配置
- 仅在插件缺失时执行安装
这是 OpenClaw 对插件代码的静态审计提示,不一定等于本次安装失败的根因。
它表示插件中检测到了如下模式之一:
child_process- 环境变量读取 + 网络发送
是否接受该插件,仍需要你根据插件来源和使用场景自行判断。
这是旧版本安装器把临时备份目录放在 ~/.openclaw/extensions/ 下导致的。
当前版本已经改为:
- 把备份目录移动到
~/.openclaw/backups/plugin-installs/ - 保存配置和安装插件时会顺手清理旧的
.__clawpanel_backup遗留目录
dingtalk-connector 还支持一些高级项,当前 P0 页面未全部暴露到 UI,可以在 openclaw.json 中手工添加,例如:
separateSessionByConversationgroupSessionScopesharedMemoryAcrossConversationsasyncModeackText
这些适合后续做更细的群聊/私聊隔离、异步回执和高级会话策略。
ClawPanel 当前已经可以帮助你完成:
- 配置钉钉渠道
- 校验
Client ID / Client Secret - 自动安装插件
- 自动补齐 OpenClaw 关键配置
但以下动作仍必须由你在钉钉侧人工完成:
- 创建企业内部应用
- 添加机器人能力
- 选择 Stream 模式
- 配置权限
- 发布应用版本
- 在钉钉里把机器人拉入私聊或群聊并发起真实测试