☰
OpenClaw 钉钉机器人配置:内网部署 Stream 模式全攻略
2026/10/7 19:58:49 网站建设 项目流程

1. 内网环境为什么优先选 Stream 模式:OpenClaw 钉钉机器人接入的起点

内网部署钉钉机器人,最容易被卡住的地方不是代码,而是网络方向。传统 Webhook 回调要求钉钉开放平台能主动访问你的服务地址,这意味着你需要一个公网可解析的域名、可被外网访问的端口,还要处理证书和备案。对于放在公司内网、实验室隔离网段、甚至只有一台内网测试机的 OpenClaw 网关来说,这条路基本走不通。

Stream 模式换了个思路:不是让钉钉来找你,而是你的程序主动通过 WebSocket 长连接连到钉钉开放平台。连接建立后,消息沿着这条已经存在的长连接推下来,你的内网机器不需要暴露任何入站端口,也不需要公网域名。这就是 OpenClaw 钉钉机器人能在内网跑起来的关键。

先把几个概念对齐,后面配置才不会迷路。OpenClaw 是你本地或内网运行的网关/工具服务,负责接收钉钉消息、调用模型能力、把结果回传。钉钉企业内部应用是你在钉钉开发者后台创建的应用载体,机器人能力挂在它下面。Client ID 和 Client Secret 是这对应用的身份证,前者类似账号名,后者是密钥。Stream 模式则是消息接收方式,决定了钉钉怎么把用户消息送到你的程序。

适合谁看这篇:手上已经有一台能跑 OpenClaw 的内网机器,想把它接到钉钉群里做任务协同;或者你正在评估内网机器人方案,想确认 Stream 模式到底能不能绕开公网域名。整篇按“钉钉后台配置 → 拿凭证 → 写配置文件 → 启动验证 → 排错”的顺序走,每一步都给可复制的片段。

需要提前说明一点:钉钉后台的配置改动,必须发布新版本才会真正生效。很多人在开发态测试半天没反应,就是因为只保存没发布。这个坑后面会单独讲。

2. TaoToken 前置准备:模型侧凭证与 OpenClaw 网关的对接思路

OpenClaw 网关本身负责消息通道,但机器人要真正“会说话”,背后得有一个模型服务。这里我用 TaoToken 来做模型侧接入,它的接口是 OpenAI 兼容格式,配置起来比较直接。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api 。

在动手配钉钉之前,建议先把模型侧跑通,这样出问题时能快速判断是钉钉通道的问题还是模型调用的问题。先去控制台创建一个 API Key,入口在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,创建后复制保存,注意别把 Key 贴到公开仓库里。

模型侧需要记三个东西:Base URL、API Key、Model ID。Base URL 填 https://taotoken.net/api ,API Key 用刚创建的那串,Model ID 按你实际要用的模型填。这三个值在 OpenClaw 的模型配置段里会用到。如果你不确定该选哪个模型,可以先去模型对话页面试一下效果,地址是 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite ,在网页里发几条消息确认模型可用,再回到本地配置。

为什么强调先跑通模型侧?因为 OpenClaw 接钉钉后,消息链路是“钉钉 → OpenClaw 网关 → 模型服务 → 回传钉钉”。如果模型侧 Key 错了,你在钉钉里发消息会一直没回复,但日志里可能只看到网关在转圈,排查方向容易被带偏。先把模型侧用 curl 验证一遍,链路就清晰了。

如果你后续要做长期编码或 Agent 类任务,可以了解下 Coding Plan,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。不过本篇聚焦钉钉通道,模型侧只要保证 Base URL、Key、Model ID 三件套正确即可。

另外,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,遇到接口格式问题可以对照查。API Keys 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ,方便你随时轮换密钥。

3. 可复制配置:钉钉后台参数与 OpenClaw 配置文件片段

这一节是整篇的核心,分两部分:先在钉钉开发者后台把应用和机器人建好、拿到 Client ID 和 Client Secret,再把这些值写进 OpenClaw 的配置文件。

3.1 钉钉后台创建企业内部应用并开通机器人

打开钉钉开发者后台 https://open-dev.dingtalk.com ,用有开发者或管理员权限的企业账号登录。进入应用开发,选择创建企业内部应用,按提示填应用名称和描述。创建完成后进入应用面板,在应用能力区域找到“机器人”,点添加。这一步是前提,没开通机器人能力,后面 Stream 配置项不会出现。

机器人配置页里,名称、简介、描述按需填。图标要求 JPG/PNG、240×240px 以上、1:1、2MB 以内、无圆角;消息预览图 png/jpeg/jpg、不超过 2M。素材不合规会直接上传失败,建议提前用工具裁好。消息接收模式这里选 Stream 模式,选完不需要填公网回调地址。

配置完进入版本管理与发布,填版本号和描述,可用范围测试阶段建议选“仅我可见”,避免影响同事。点保存并发布。记住:不发布,配置不生效。

3.2 获取 Client ID 与 Client Secret

版本发布后,进入“凭证与基础信息”页面,记录两个值:

参数说明示例格式
Client ID原 AppKey,应用标识dingxxxxxxxxxx
Client Secret原 AppSecret,应用密钥一长串随机字符

复制时注意别带首尾空格,这是后面 401 报错的常见原因。

3.3 OpenClaw 配置文件片段

OpenClaw 的配置一般放在网关目录下的配置文件里,具体文件名以你部署版本为准,常见是config.toml或settings.json。下面给一份 TOML 片段,把钉钉通道和模型侧一起写进去:

[dingtalk] enabled = true client_id = "dingxxxxxxxxxx" client_secret = "你的ClientSecret" robot_code = "dingxxxxxxxxxx" stream_mode = true [model] base_url = "https://taotoken.net/api" api_key = "你的TaoTokenKey" model_id = "你的ModelID"

如果你用的是 JSON 配置,等价写法如下:

{ "dingtalk": { "enabled": true, "client_id": "dingxxxxxxxxxx", "client_secret": "你的ClientSecret", "robot_code": "dingxxxxxxxxxx", "stream_mode": true }, "model": { "base_url": "https://taotoken.net/api", "api_key": "你的TaoTokenKey", "model_id": "你的ModelID" } }

robot_code 通常和 Client ID 一致,部分版本要求单独填,按你部署包的字段说明来。stream_mode 必须为 true,否则会走回调模式,内网环境下会连不上。

注意:Client Secret 和 API Key 都属于敏感信息,配置文件不要提交到公开仓库,建议用环境变量注入或加本地权限控制。

4. 启动与验证:确认 Stream 长连接建立、消息能回

配置写好后,重启 OpenClaw 网关。启动日志里应该能看到类似“dingtalk stream connected”或“websocket established”的字样,这说明长连接已经建立。如果日志里出现连接重试,先别急着改配置,往下看排错节。

验证分两步。第一步,在钉钉里找到你刚发布的机器人,给它发一条消息,比如“你好”。如果模型侧配置正确,几秒内应该收到回复。第二步,看 OpenClaw 网关日志,确认消息进来时打印了接收记录,模型调用返回了内容,回传也成功。

如果钉钉端没反应,先用 curl 单独验证模型侧是否通:

curl https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer 你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "你的ModelID", "messages": [{"role": "user", "content": "ping"}] }'

返回里有 choices 字段和内容,说明模型侧没问题,问题在钉钉通道。如果这里就报 401,说明 Key 不对或没带 Bearer 前缀。

再验证钉钉侧凭证。可以在网关目录下用一段最小脚本测试 Stream 连接,或者直接看网关日志里 Client ID 是否被正确读取。很多“连不上”其实是 Client ID 复制时多了空格,或者 Client Secret 被截断。

成功的结果长这样:钉钉里发消息,机器人回复内容与模型输出一致;网关日志显示 stream 连接稳定,没有反复重连;模型侧 curl 返回正常。三者都对上,内网部署就算跑通了。

5. 常见报错排查:401、local proxy failed、reading choices、OAuth

这一节按真实报错来对。以下报错名都是实际会出现在日志里的关键词,对照着查。

401 Unauthorized:出现在模型侧 curl 或网关日志里。原因通常是 API Key 错误、没带Bearer前缀、Key 被撤销。检查 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 里的 Key 状态,重新复制一次。如果 Key 正确还报 401,看 Base URL 是不是写成了https://taotoken.net/api/多带斜杠导致路径拼接异常,统一用https://taotoken.net/api。

local proxy failed:这个报错一般出现在网关尝试走本地代理但代理不可用时。内网环境如果配了 HTTP_PROXY 之类的环境变量,但代理服务没起,就会报这个。检查环境变量,把不需要的代理配置清掉,或者确认代理服务在运行。注意不要配置任何违规的网络工具,内网直连即可。

reading choices 相关报错:通常是模型返回体里没有 choices 字段,或者返回了错误结构。原因可能是 Model ID 填错、请求体格式不对、或者模型侧返回了错误信息被当成正常响应解析。先用 curl 看原始返回,确认有choices[0].message.content再回来看网关配置。

OAuth 相关报错:钉钉侧凭证问题。Client ID 或 Client Secret 不对、应用没发布、机器人能力没开通,都可能触发。回到钉钉后台确认版本已发布,凭证页复制的是最新值。如果用了 CC Switch、Cline MCP 或 Codex 的 auth.json 这类配置,务必把 Base URL、Key、Model ID 三件套写全,缺一个都会在鉴权阶段失败。

再补几个非报错但常见的现象。机器人不回复但日志无异常:多半是版本没发布,回后台点发布。回复内容为空:模型侧返回了空 content,检查 Model ID 是否支持对话。连接反复断开:检查内网是否有防火墙拦截出站 WebSocket,Stream 模式需要能出站访问钉钉开放平台。

提示:排查时按“模型侧 curl → 钉钉凭证 → 网关日志”的顺序,能最快定位问题在哪一段,避免同时改多个配置。

6. 内网长期运行的配置建议与接入入口

跑通之后,如果打算长期在内网使用,有几个点值得注意。配置文件里的密钥建议用环境变量注入,比如DINGTALK_CLIENT_SECRET和TAOTOKEN_API_KEY,这样配置文件可以安全地放进版本管理。网关进程建议用系统服务方式托管,断线能自动重启,Stream 长连接偶尔抖动时不用人工干预。

日志要保留,尤其是连接建立和消息收发的记录。内网环境出问题时,日志是唯一能回溯的依据。如果机器人要开放给多个群使用,钉钉后台的可用范围按实际权限调整,测试阶段保持“仅我可见”最稳妥。

模型侧如果后续要换模型或做更复杂的 Agent 任务,Base URL 和 Key 不变,只改 Model ID 即可。需要管理密钥就去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ,要查接口细节就去 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。想先试模型效果,模型对话页在 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。长期编码或 Agent 场景可以看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。

最后回到配置本身:Client ID、Client Secret、Stream 模式、版本发布,这四个点任何一个出问题都会导致机器人不工作。我自己的习惯是每次改完钉钉后台,先在后台确认版本状态是“已发布”,再重启网关看日志,两步都过了再去钉钉发消息。这样排查路径最短,也不会把配置问题和网络问题混在一起。

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

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

立即咨询