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