☰
OpenClaw 钉钉集成完整实战:从零到消息收发
2026/10/8 17:32:17 网站建设 项目流程

1. 为什么要在 OpenClaw 里接钉钉机器人

OpenClaw 钉钉集成这件事,本质上解决的是「让本地或容器里的 AI Agent 直接出现在团队日常沟通工具里」的问题。OpenClaw 是一个可自托管的 Agent 运行框架,支持通过插件方式接入不同聊天通道;钉钉则是很多团队已经在用的协作平台。把两者打通之后,你在钉钉里 @ 一下机器人,消息会经 Stream 长连接推到 OpenClaw,Agent 处理完再把结果回传到钉钉会话里,整个过程不需要公网 IP,也不需要自己写 Webhook 转发服务。

这套方案适合谁?我梳理了三类:第一类是团队里已经用钉钉做日常沟通,想让 AI 助手直接在群里回答问题的开发者;第二类是在 WSL2 或 Docker 里跑 OpenClaw、希望把通道能力扩展到国内办公 IM 的同学;第三类是想拿钉钉当入口做内部工具机器人、但不想折腾内网穿透的运维或后端。核心检索词就是 OpenClaw 钉钉集成、钉钉机器人消息收发、Stream 模式回调配置。

我实测下来,整个链路里最容易卡住的不是 OpenClaw 本身,而是钉钉开放平台那边的应用权限和发布状态。很多人 Client ID 和 Secret 填对了,但应用没发布、或者权限没勾全,通道状态就会一直停在 not configured 或者连接测试 403。所以这篇会按「钉钉侧准备 → OpenClaw 侧安装插件 → 配置通道 → 验证消息收发 → 排错」的顺序走一遍,每一步都给可复制的命令和参数。

环境信息先对齐一下,避免版本差异导致命令对不上:OpenClaw 版本 2026.6.10,钉钉插件 @soimy/dingtalk v3.6.4,运行环境 Docker + WSL2,钉钉应用类型选企业内部应用,消息接收模式用 Stream 模式。Stream 模式的好处是不需要公网回调地址,OpenClaw 主动和钉钉建立长连接,消息通过这条连接推过来,对本地开发环境非常友好。

下面从钉钉开放平台开始,一步步把应用建出来。

2. 钉钉开放平台应用创建与权限配置

打开钉钉开发者平台 open-dev.dingtalk.com,用企业管理员或有开发者权限的账号登录。进入「应用开发」→「企业内部应用」→「创建应用」,填应用名称和描述。创建完成后,在「凭证与基础信息」页面能看到两个关键值:Client ID(也就是 AppKey)和 Client Secret(AppSecret)。这两个值后面要填进 OpenClaw 的通道配置里,先复制到安全的地方。

接下来是机器人配置。在应用详情页找到「机器人」标签,开启机器人能力。消息接收模式这里选Stream 模式,不要选 HTTP 回调。Stream 模式不需要你提供公网 URL,OpenClaw 侧用钉钉 SDK 建立长连接即可。机器人名称可以自定义,比如叫「OpenClaw 助手」,这个名称就是后面在钉钉里搜索机器人时用的关键词。

权限这块是重灾区。进入「权限管理」页面,至少开通以下三个权限:

权限标识用途
Card.Streaming.Write流式卡片写入,Agent 分段回复时用
Card.Instance.Write卡片实例创建与更新
qyapi_robot_sendmsg机器人主动发送消息

少任何一个,消息回传阶段都可能报权限不足。开通后记得点保存。

然后必须做的一步是发布应用。进入「版本管理与发布」,创建新版本,至少发布一个测试版本。很多人配置全对但通道连不上,就是因为应用还停在草稿状态,钉钉不会把 Stream 连接授权给未发布的应用。发布后状态变成「已发布」或「测试中」都可以。

注意:企业内部应用的可见范围要包含你自己,否则在钉钉里搜不到机器人。在「应用发布」→「可见范围」里把测试人员加进去。

到这里钉钉侧的准备就完成了。把 Client ID、Client Secret、机器人名称记好,下一步进 OpenClaw 容器装插件。

3. OpenClaw 钉钉插件安装与通道配置

先进入 OpenClaw 容器。如果你是用 Docker 跑的,命令是:

docker exec -it openclaw bash

进去之后安装钉钉插件。官方源用 npm:

openclaw plugins install npm:@soimy/dingtalk

如果这一步卡住不动,大概率是 npm 源的问题,换 clawhub 源重试:

openclaw plugins install clawhub:@soimy/dingtalk

安装完成后添加钉钉通道:

openclaw channels add

交互式向导会依次问你几个问题,按下面选:

  1. 通道类型选DingTalk (钉钉)
  2. 账户选择Add default account
  3. 是否自动获取凭证选No,手动输入
  4. 输入 Client ID 和 Client Secret
  5. 私聊策略选Open - anyone can DM
  6. 群聊策略选Open - any group can use bot
  7. 回复类型选Markdown
  8. 高级选项选No

如果向导跑完提示 allowFrom 相关警告,手动补一条配置:

openclaw config set channels.dingtalk.allowFrom '["*"]'

这一步是放开来源限制,测试阶段用["*"]最省事,上线前再收紧到具体用户或部门。

配置写完后退出容器并重启,让插件和通道生效:

exit docker restart openclaw docker exec -it openclaw bash

对应的openclaw.json核心片段长这样,你可以直接对照检查字段名和层级:

{ "channels": { "dingtalk": { "enabled": true, "clientId": "你的Client ID", "clientSecret": "你的Client Secret", "dmPolicy": "open", "groupPolicy": "open", "allowFrom": ["*"] } }, "bindings": [ { "agentId": "main", "match": { "channel": "dingtalk", "accountId": "default" } } ] }

这里三个关键字段必须齐全:Base URL 概念上对应钉钉的 Stream 接入点(插件内部处理,无需手填)、Client ID、Client Secret。bindings 里的 accountId 要和 channels 里的账户名一致,默认就是 default,改过名字的话两边要同步。

配置完成后,下一步验证通道状态和消息收发。

4. 通道状态检查与消息收发验证

先看通道状态:

openclaw channels status

期望输出里 DingTalk 那一行应该是:

DingTalk default: enabled, configured, running, connected

四个状态词缺一不可。如果只到 configured 没有 running,说明插件加载了但连接没建立;如果连 configured 都没有,说明 clientId 或 clientSecret 没读到。

状态正常后,打开钉钉客户端,搜索你设置的机器人名称,进入单聊窗口,发送一条「你好」。同时在容器里跟日志:

openclaw logs --follow

日志里应该能看到消息进入、Agent 处理、回复发出的完整链路。钉钉窗口里几秒内会收到 Markdown 格式的回复。这条消息的完整路径是:钉钉 → Stream 长连接 → OpenClaw 通道 → binding 匹配到 main agent → Agent 生成回复 → 通过 qyapi_robot_sendmsg 权限回传 → 钉钉会话显示。

群聊验证同理,把机器人拉进一个群,@ 它发消息,日志和回复行为一致。如果单聊通、群聊不通,检查群聊策略是不是 open,以及机器人是否真的在群里。

提示:测试阶段建议先只验证单聊,链路最短,排错变量最少。单聊通了再测群聊和卡片流式回复。

到这一步端到端就跑通了。下面把常见的报错和排查方法整理出来。

5. 常见报错排查:403、not configured 与消息无响应

连接测试 403。这是最高频的问题,原因通常有三个:Client ID 或 Secret 填错、应用没发布、Stream 模式没启用。先用 curl 直接验证凭证有效性:

curl -X POST "https://api.dingtalk.com/v1.0/oauth2/accessToken" \ -H "Content-Type: application/json" \ -d '{"appKey":"你的Client ID","appSecret":"你的Client Secret"}'

返回里有 accessToken 说明凭证没问题,403 就出在应用状态或 Stream 配置上。返回错误码说明凭证本身错了,回钉钉后台重新复制。

通道状态显示 not configured。检查openclaw.json里channels.dingtalk是否同时包含 clientId 和 clientSecret,字段名大小写要对。改完配置必须重启容器,热加载不一定生效。

消息无响应。按这个顺序查:第一,channels.dingtalk.allowFrom是否包含["*"]或你的用户 ID;第二,bindings 里的 accountId 是否和 channels 里的账户名一致;第三,openclaw logs --follow看消息有没有进来。如果日志里连入站消息都没有,问题在钉钉侧或 Stream 连接;如果有入站没出站,问题在 Agent 或发送权限。

local proxy failed 类报错。这类通常是容器网络或插件下载源的问题,换 clawhub 源重装插件,或者检查容器 DNS 配置。

OAuth 相关报错。钉钉新版 API 用 accessToken 机制,如果日志里出现 OAuth 字样,多半是插件版本和 OpenClaw 版本不匹配,确认插件是 @soimy/dingtalk v3.6.4 及以上。

reading choices 类解析错误。这通常出现在 Agent 返回结构不符合预期时,检查回复类型是否设成 Markdown,以及 Agent 输出是否被截断。

排查时记住一个原则:先确认钉钉侧应用已发布、权限齐全,再确认 OpenClaw 侧配置字段完整、容器已重启,最后看日志定位是入站还是出站问题。三步走能覆盖九成以上的故障。

6. 把钉钉通道接入你的 Agent 工作流

通道跑通只是起点。真正让 OpenClaw 钉钉集成产生价值,是把它接进你的 Agent 工作流:比如在钉钉群里 @ 机器人触发代码审查、查询内部文档、跑定时任务汇报。这些能力依赖 OpenClaw 的 agent 配置和模型接入。

模型接入这块,如果你需要统一管理 API Key 和模型路由,可以用 TaoToken 的控制台创建密钥,然后在 OpenClaw 的模型配置里填对应的 Base URL 和 Model ID。具体操作路径是:先到 TaoToken API Keys 页面 生成 Key,再参考 接入文档 把 Base URL 和 Key 写进 OpenClaw 的模型配置。想先验证模型连通性,可以直接在 模型对话页面 发一条测试消息,确认 Key 和模型都正常,再回 OpenClaw 配通道。

如果你打算长期跑编码类或 Agent 类任务,Coding Plan 更适合按周期使用;临时调试用按量计费的 Key 就够了。控制台入口在 console,密钥管理在 api-keys。

回到钉钉通道本身,上线前建议做三件事:把 allowFrom 从["*"]收紧到具体用户或部门 ID;给机器人加频率限制,避免群里刷屏;把openclaw logs接到日志系统,方便回溯消息链路。这三步做完,OpenClaw 钉钉集成就算从「能跑」进入「能用」了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询