1. 为什么要在钉钉里接 OpenClaw如果你已经在本地跑通了 OpenClaw大概率会遇到一个尴尬所有指令都得坐在电脑前敲。出门在外、开会途中、甚至只是躺在沙发上想让 AI 帮你整理一下桌面文件、生成一份周报、查一下服务器状态都做不到。钉钉连接 OpenClaw 解决的正是这个问题。它把钉钉当成一个远程遥控器你在钉钉里发一句话本地 OpenClaw 在后台执行结果再推回钉钉。整个链路里最关键的三个技术点是 Stream 长连接、Webhook 回调、内网穿透而鉴权环节则统一交给 TaoToken 的 Key/API 通道来处理省去到处找 Key、到处配环境变量的麻烦。这篇教程面向的是刚装好 OpenClaw、还没接过任何 IM 的新手。我会把钉钉开放平台建应用、Stream 模式配置、Webhook 回调、内网穿透暴露本地服务、TaoToken 统一 Key 配置这几步拆开讲每一步都给可复制的 config.toml 和 settings.json 骨架最后给出 Stream 连通性和 Webhook 回调的验证动作。跟着做一次跑通的概率很高。适合谁个人办公想远程操控电脑的、小团队想共用一个 AI 助手的、以及想拿钉钉当入口做自动化的开发者。不适合谁指望零配置一键搞定的这套链路还是需要你动手改几个文件。2. 前置准备TaoToken 统一 Key 与钉钉应用2.1 为什么用 TaoToken 统一 KeyOpenClaw 本身要调模型钉钉机器人要鉴权Webhook 回调还要校验签名。如果每个环节各配一套 Key配置文件会变得非常乱换模型、换通道时到处改。TaoToken 的思路是提供一个统一的 API 通道把模型调用和鉴权收敛到一个 Key 上。你可以先去官网了解整体能力https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 然后在控制台创建 Key。API 入口是 https://taotoken.net/api 注意这个地址不带 UTM 参数配置里直接写它。创建 Key 的入口在控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 管理页在https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。建议单独建一个给 OpenClaw 用的 Key方便后续按项目排查用量。2.2 钉钉侧准备钉钉这边需要企业管理员或开发者权限普通成员是建不了内部应用的。电脑端钉钉建议更新到 7.5.0 及以上旧版本没有 Stream 机器人入口。手机端保持最新版即可主要用于测试和远程发指令。网络方面Stream 模式走的是 WebSocket 长连接本地电脑就能直接绑定不需要公网 IP也不需要域名备案。Webhook 模式才需要公网可达的地址这时候才用得上内网穿透。防火墙和杀毒软件要放行 OpenClaw 网关端口默认是 18789否则钉钉连不上。2.3 两种模式怎么选Stream 长连接适合个人和小团队本地部署零门槛长连接稳定不掉线缺点是默认只在局域网可用要远程得配合内网穿透。Webhook 回调适合团队协作和生产环境支持公网访问、消息可靠但需要公网地址配置稍复杂。新手建议先跑 Stream跑通之后再决定要不要上 Webhook。3. 可复制配置config.toml 与 settings.json 骨架3.1 config.toml 骨架OpenClaw 的主配置我习惯放在~/.openclaw/config.toml。下面这份是 Stream 模式加 TaoToken 统一 Key 的骨架把占位符替换成你自己的值即可。# ~/.openclaw/config.toml [gateway] host 0.0.0.0 port 18789 auto_reconnect true reconnect_interval 5000 [provider.taotoken] # TaoToken 统一 API 通道注意不带 UTM base_url https://taotoken.net/api api_key sk-你的TaoTokenKey default_model claude-sonnet-4 [channels.dingtalk] enabled true mode stream # stream 或 webhook client_id dingxxxxxxxxxxxxxx client_secret 你的ClientSecret robot_code 你的RobotCode gateway_token openssl rand -hex 16 生成 # webhook 模式才需要下面两项 # webhook_path /dingtalk/webhook # public_url https://xxx.trycloudflare.comprovider.taotoken这一段就是统一 Key 的落点。OpenClaw 调模型时走这个 provider钉钉通道鉴权时也复用同一个 Key 体系不用再单独维护一套。3.2 settings.json 骨架有些插件和 IDE 侧配置读的是 settings.json比如 CC Switch、Cline 这类工具。下面这份是给它们用的骨架字段名按你实际用的工具微调。{ openclaw: { gateway: http://127.0.0.1:18789, provider: { name: taotoken, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, model: claude-sonnet-4 }, channels: { dingtalk: { enabled: true, mode: stream, clientId: dingxxxxxxxxxxxxxx, clientSecret: 你的ClientSecret, robotCode: 你的RobotCode } } } }3.3 CC Switch / Cline 配置片段如果你用 CC Switch 管理多套模型配置可以加一个 TaoToken 的 profile{ profiles: { taotoken-openclaw: { baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, model: claude-sonnet-4, note: OpenClaw 钉钉通道专用 } } }Cline 侧在设置里把 API Provider 选成 OpenAI CompatibleBase URL 填https://taotoken.net/apiAPI Key 填同一个模型名按你控制台里可用的填。这样 IDE 里的编码助手和钉钉里的 OpenClaw 共用一套 Key用量统计也集中。4. 钉钉开放平台建应用与 Stream 配置4.1 创建企业内部应用登录钉钉开放平台用企业账号扫码进入应用开发里的企业内部开发点创建应用选企业内部应用。应用名称填 OpenClaw AI 助手描述随便写一句图标可传可不传。保存后应用就建好了。4.2 添加机器人能力并选 Stream 模式进入应用详情左侧菜单找添加应用能力找到机器人点添加。机器人配置里把开关打开名称填 OpenClaw AI简介写 AI 办公自动化助手。最关键的一步消息接收模式必须选 Stream 模式选成 HTTP 会直接连不上。点发布机器人配置完成。4.3 拿凭证与开权限左侧凭证与基础信息里复制 Client ID 和 Client SecretSecret 只显示一次复制到安全的地方。然后去权限管理搜索并添加这几个权限Card.Streaming.Write、Card.Instance.Write、robot.send、robot.receive。企业账号一般自动通过审核。4.4 安装插件并启动网关终端里执行插件安装国内建议走镜像加速openclaw plugin install dingtalk --registry https://registry.npmmirror.com看到Plugin dingtalk installed successfully就装好了。然后添加渠道openclaw channels add按提示选钉钉粘贴 Client ID 和 Client SecretGateway Token 用openssl rand -hex 16生成一个随机串。完成后启动网关openclaw gateway start --with dingtalk出现Gateway started on http://0.0.0.0:18789和DingTalk Stream connection established说明长连接建立成功。4.5 配对授权钉钉里找到 OpenClaw AI 机器人发一句「你好」机器人会回一个配对码和授权命令形如openclaw pairing approve dingtalk 12345678。把这条命令复制到终端执行显示Pairing approved就授权成功了。不做这一步机器人不会回复。5. 内网穿透与 Webhook 回调联调5.1 内网穿透暴露本地服务Stream 模式本地就能用但如果你想远程访问或者要跑 Webhook 回调就需要把本地 18789 端口暴露出去。Cloudflare Tunnel 是免费且够用的选择# macOS brew install cloudflared # Linux curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb | sudo dpkg -i # 创建隧道并映射端口 cloudflared tunnel create openclaw-dingtalk cloudflared tunnel run openclaw-dingtalk --url http://localhost:18789跑起来后会生成一个https://xxx.trycloudflare.com的公网域名这个就是你的回调地址前缀。5.2 Webhook 模式配置如果选 Webhook 模式钉钉开放平台里机器人消息接收模式改成 HTTP消息接收地址填https://xxx.trycloudflare.com/dingtalk/webhook。然后回到 config.toml把 dingtalk 段的 mode 改成 webhook补上 webhook_path 和 public_url[channels.dingtalk] enabled true mode webhook client_id dingxxxxxxxxxxxxxx client_secret 你的ClientSecret robot_code 你的RobotCode webhook_path /dingtalk/webhook public_url https://xxx.trycloudflare.com改完重启网关openclaw gateway restart。5.3 Stream 连通性验证Stream 模式下验证分两步。先在钉钉发「你好帮我测试连接」收到回复说明基础链路通。再发一条本地操作指令比如「帮我查看电脑桌面文件数量并告诉我结果」如果回复里带上了真实文件数说明本地操控也通了。终端里可以看网关日志确认长连接状态openclaw gateway status显示 Running 且 DingTalk Stream 处于 connected 就稳了。5.4 Webhook 回调验证Webhook 模式下钉钉开放平台保存回调地址时会做一次 URL 验证如果提示「URL 验证失败」先确认公网地址能访问curl -i https://xxx.trycloudflare.com/dingtalk/webhook返回 200 或 405 都算正常说明服务可达。然后在钉钉发指令看网关日志里有没有收到回调请求。如果钉钉侧验证过了但消息没进来多半是签名校验或 robot_code 填错了。6. 本篇常见错排查6.1 找不到 Stream 模式选项钉钉版本低于 7.5.0或者账号不是企业管理员。更新钉钉、清理缓存重启再确认账号权限。6.2 channels add 里没有钉钉选项插件没装好。重新装一遍openclaw plugin reinstall dingtalk顺便更新 OpenClawnpm update -g openclawlatest。6.3 发消息没有配对码也没回复网关没在跑。openclaw gateway status看一下没跑就openclaw gateway restart然后重新配对。6.4 Stream 连接超时Client ID 或 Secret 填错了或者防火墙拦了。核对凭证关掉防火墙和杀毒软件再试。6.5 Webhook URL 验证失败公网地址不可达或者路径写错。用 curl 测一下地址确认 webhook_path 和钉钉后台填的一致。6.6 内网穿透后远程无响应隧道没在跑或者 public_url 没配。检查 cloudflared 进程确认 config.toml 里的 public_url 和实际域名一致。6.7 指令执行成功但钉钉没收到推送指令结尾没加「推送给我」或者推送权限没开。补上推送指令检查 robot.send 权限。6.8 文件处理提示权限不足OpenClaw 没用管理员身份跑或者路径带中文。用管理员权限启动路径尽量用英文。6.9 电脑休眠后连接断开系统休眠把网关进程挂起了。设置电脑永不休眠或者用 nohup 后台跑nohup openclaw gateway start --with dingtalk 6.10 远程频繁掉线没用 Stream 模式或者没开自动重连。config.toml 里把 auto_reconnect 设为 truereconnect_interval 设 5000。7. 下一步把 Key 和通道用顺链路跑通之后日常最常打交道的其实是 Key 和通道管理。模型对话调试可以直接在 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 里试换模型不用改代码。如果你打算长期用 OpenClaw 做编码和 Agent 任务Coding Plan 会更划算https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 遇到鉴权或通道问题先翻这里。Claude Code 相关的接入说明在 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecode-anthropicutm_campaignrewrite 。我自己的习惯是Stream 模式常驻本地Webhook 只在需要公网多人用时才开Key 统一走 TaoToken换模型只改 config.toml 里一行 default_model。这样钉钉那头永远不用动本地这头也清爽。
