OpenClaw 免费跑通后接入钉钉:用 ClawHub skills 打通企业消息流
1. OpenClaw 接入钉钉的真实场景与链路拆解OpenClaw 是一个开源的个人 AI Agent 网关它能把你本地的模型调用、工具执行、消息通道统一到一个 WebSocket Gateway 里管理。你可以把它理解成一个AI 消息中枢一边连着模型GLM、Claude、GPT 都行一边连着聊天软件Telegram、Discord、钉钉中间用 skills 做能力编排。适合谁适合想把 AI 助手塞进企业内部 IM、又不想把数据全交给第三方 SaaS 的开发者和小团队。我这次的目标很具体让 OpenClaw 在钉钉里跑起来员工在钉钉群里 机器人 就能触发 AI 回复并且用 ClawHub 上的 skills 做消息处理编排。整条链路是钉钉机器人回调 → openclaw-china 插件 → OpenClaw Gateway → 模型 API通过 TaoToken 统一鉴权→ 回复推回钉钉。为什么模型调用要单独走 TaoToken因为 OpenClaw 支持 OpenAI 兼容接口而 TaoToken 提供统一的 Base URL 和 Key 管理你不用在 OpenClaw 配置文件里硬编码各家厂商的 Key换模型只改一个 Model ID 就行。这对后面调试 rate limit、切换模型特别省事。链路里最容易出问题的三个点一是钉钉机器人回调地址和加解密配置二是 openclaw-china 插件的安装方式新版禁止 URL 安装三是模型通道的鉴权。下面按顺序拆。先说前置条件。你需要 Node ≥ 22macOS 或 Linux 都行Windows 建议 WSL2。钉钉这边需要一个企业应用个人也能申请拿到 Client ID 和 Client Secret。模型这边注册 TaoToken 拿 Key。这些准备好后面就是复制粘贴的事。我实测下来整个流程从零到钉钉里收到 AI 回复大概 40 分钟其中一半时间花在钉钉后台找配置项。所以下面我会把钉钉后台的每一步都写清楚避免你来回翻菜单。2. TaoToken 前置统一 Key 与 API 通道配置在动 OpenClaw 之前先把模型通道打通。OpenClaw 的模型配置写在~/.openclaw/openclaw.json里它支持 OpenAI 兼容的 provider。TaoToken 的 API 地址是https://taotoken.net/api这是一个 OpenAI 兼容端点你只需要 Base URL API Key Model ID 三件套。先去 TaoToken 控制台创建 API Key。地址是 https://taotoken.net/api-keys 登录后点创建密钥复制出来形如sk-xxxxxxxx。这个 Key 只显示一次存好。然后确认你要用的 Model ID。TaoToken 的模型列表在 https://taotoken.net/models 可以查常见的有claude-sonnet-4-5、gpt-4o、glm-4.7-flash等。Model ID 必须和平台上的完全一致大小写敏感写错了会报model not found。这里有个坑OpenClaw 默认的 provider 配置里baseUrl要写到/v1这一层还是根路径实测 TaoToken 的 OpenAI 兼容端点是https://taotoken.net/apiOpenClaw 会自动补/v1/chat/completions所以 Base URL 填https://taotoken.net/api即可不要自己加/v1否则会变成/api/v1/v1/...报 404。配置方式有两种命令行openclaw config set或者直接编辑 JSON。我推荐直接编辑 JSON因为 provider 结构嵌套较深命令行容易写错层级。文件路径~/.openclaw/openclaw.json用你熟悉的编辑器打开。如果你还没装 OpenClaw先装npm install -g openclawlatest openclaw onboard --install-daemononboard过程中会问你要不要配置 channel先跳过我们后面手动配钉钉。模型这一步也可以先跳过直接编辑 JSON。装完后确认版本openclaw --version看到类似OpenClaw 2026.2.21-2就对了。接下来编辑配置文件把 TaoToken 作为 provider 写进去。具体 JSON 片段在下一节给出这里先说明字段含义providers是一个对象key 是 provider 名字随便起比如taotokenvalue 里baseUrl填 TaoToken 地址apiKey填你的 Keymodels数组里列出你要用的 Model ID。为什么要用 TaoToken 而不是直连某一家因为 OpenClaw 的模型切换很频繁调试阶段你可能今天用 GLM 明天用 Claude如果每家都配一个 provider配置文件会越来越乱。TaoToken 把多家模型收敛到一个端点你只维护一个 Key换模型只改 Model ID。这对后面做 skills 编排时的模型路由也有好处。配好后先别急着接钉钉用 OpenClaw 自带的对话测试一下模型通道通不通。命令是openclaw agent --message 你好测试一下如果返回正常文本说明模型通道 OK。如果报API: rate limit或401先排查 Key 和 Model ID别往下走。这一步不通后面钉钉接上了也是白搭。3. 可复制配置openclaw.json 与钉钉回调参数这一节是核心所有配置都给你可复制的片段。先看~/.openclaw/openclaw.json的完整结构。注意如果你之前 onboard 生成过配置不要整个覆盖只把providers和channels两段合并进去。{ providers: { taotoken: { type: openai, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoToken密钥, models: [ claude-sonnet-4-5, glm-4.7-flash ] } }, agents: { default: { provider: taotoken, model: claude-sonnet-4-5 } }, channels: { dingtalk: { enabled: true, clientId: dingksa2c0om03kfjggp, clientSecret: 你的ClientSecret, robotCode: 你的RobotCode, enableAICard: false, dmPolicy: open, groupPolicy: open, messageType: markdown, debug: false } }, gateway: { http: { endpoints: { chatCompletions: { enabled: true } } } } }几个关键点。providers.taotoken.type必须是openai因为 TaoToken 是 OpenAI 兼容协议。agents.default里指定默认用哪个 provider 和 model这样钉钉消息进来时 OpenClaw 知道调哪个模型。channels.dingtalk里的clientId和clientSecret来自钉钉后台robotCode通常和 Client ID 相同但有些企业应用里是独立的以钉钉后台显示为准。enableAICard设为 false 是因为 AI 卡片模式在部分钉钉版本里渲染有问题先用普通 markdown 消息稳定后再开。dmPolicy和groupPolicy都设open意思是私聊和群聊都允许触发生产环境建议改成白名单。如果你不想编辑 JSON也可以用命令行逐条设置openclaw config set channels.dingtalk.enabled true openclaw config set channels.dingtalk.clientId dingksa2c0om03kfjggp openclaw config set channels.dingtalk.clientSecret 你的ClientSecret openclaw config set channels.dingtalk.enableAICard false openclaw config set gateway.http.endpoints.chatCompletions.enabled true但 provider 那段命令行不好写还是建议编辑 JSON。接下来装 openclaw-china 插件。OpenClaw 官方目前支持 Telegram、Discord 等国内 IM 靠社区插件。openclaw-china 是 BytePioneer-AI 维护的插件集包含钉钉、飞书等通道。安装统一包含所有渠道openclaw plugins install openclaw-china/channels或者只装钉钉单个渠道openclaw plugins install openclaw-china/dingtalk注意不要同时装统一包和单渠道包会冲突。另外网上有些教程教你用 URL 直接安装插件当前版本2026年2月已经禁止这种方式必须用 npm 包名安装否则会报plugin install from url is not allowed。装完后验证插件加载openclaw plugins list应该能看到openclaw-china/dingtalk在列表里状态是 enabled。钉钉后台这边你需要做四步。第一步登录钉钉开放平台进入应用开发→企业内部应用创建一个应用。第二步在应用能力里添加机器人填写机器人名称和图标消息接收模式选HTTP 回调或Stream 模式。openclaw-china 用的是 Stream 模式长连接不需要你暴露公网地址这点对本地开发很友好。第三步发布应用版本等审核通过企业内部应用通常秒过。第四步在凭证与基础信息里复制 Client ID 和 Client Secret。Stream 模式的好处是你不用配公网回调 URLOpenClaw 主动连钉钉的 WebSocket本地跑就行。这也是为什么gateway.http.endpoints.chatCompletions.enabled要设 trueOpenClaw 内部用 HTTP 端点做消息分发。配置写完后重启 Gatewayopenclaw gateway --force--force会先杀掉占用默认端口的进程再启动避免port already in use。4. 验证请求从本地对话到钉钉端到端测试配置写完先做三层验证逐层排除问题。第一层模型通道。前面已经测过openclaw agent --message再测一次确认配置生效openclaw agent --message 用一句话介绍你自己正常返回说明 provider 配置没问题。如果报reading choices错误通常是返回体结构不对检查 Base URL 是不是多写了/v1。第二层Gateway 健康检查。启动 Gateway 后另开一个终端openclaw health输出里应该看到 gateway 状态okchannels 里 dingtalk 状态connected。如果 dingtalk 显示disconnected看日志openclaw logs常见的是clientId or clientSecret invalid回去核对钉钉后台的凭证。第三层钉钉端到端。打开钉钉搜索你刚创建的应用名进入机器人对话发一条消息你好帮我总结一下今天的待办如果一切正常几秒内会收到 AI 回复。第一次可能会慢一点因为要建立 Stream 连接。我实测时遇到一个情况钉钉里发消息没反应但openclaw health显示 connected。查日志发现是messageType设成了markdown但钉钉应用没开 markdown 权限。解决办法是在钉钉后台机器人配置里勾选消息卡片或改用text类型。改完重启 Gateway 就好了。再测群聊。把机器人拉进一个群它发消息。群聊触发需要groupPolicy为open且钉钉后台机器人配置里要允许群聊。如果群里 没反应先确认是不是 了正确的机器人有些企业有多个机器人。端到端通了之后可以测一下 skills。ClawHub 是 OpenClaw 的公共 skills 注册中心所有 skills 都是公开的。先装 clawhub CLInpm i -g clawhub clawhub login clawhub whoamilogin会自动打开浏览器授权。登录后搜索一个 skillclawhub search github安装clawhub install github-repo-stats装完后 skill 位于~/.openclaw/workspace/skills/github-repo-stats/里面有一个SKILL.md描述文件。OpenClaw 启动时会自动扫描这个目录把 skills 注册进 agent 的能力列表。你可以写一个自定义 skill 来处理钉钉消息。目录结构~/.openclaw/workspace/skills/ └── dingtalk-todo/ ├── SKILL.md └── handler.jsSKILL.md里写触发条件和描述handler.js里写处理逻辑。OpenClaw 会根据消息内容匹配 skill匹配到就调用 handler。这样你就能在钉钉里实现发消息自动建待办发消息查工单之类的编排。验证 skill 是否加载openclaw skills list看到你的 skill 在列表里就说明注册成功。然后在钉钉里发一条能触发该 skill 的消息看是否走了自定义逻辑。5. 本篇常见错排查401、local proxy failed 与 OAuth这一节把我在配置过程中踩过的报错都列出来对照排查。报错一401 Unauthorized出现在openclaw agent或钉钉回复时。原因通常是 TaoToken Key 写错或过期。检查openclaw.json里providers.taotoken.apiKey是否完整有没有多余空格。另外确认 Key 没有在控制台被禁用。如果 Key 没问题检查baseUrl是不是https://taotoken.net/api写成https://taotoken.net会 404写成https://taotoken.net/api/v1会变成/api/v1/v1/chat/completions报 404。报错二local proxy failed这个报错通常出现在 Gateway 启动时提示本地代理端口被占用或无法绑定。OpenClaw 默认 Gateway 端口是 18789如果被其他进程占用用--force重启openclaw gateway --force如果还不行换端口openclaw gateway --port 18790同时检查系统代理设置。OpenClaw 会读取环境变量HTTP_PROXY/HTTPS_PROXY如果这些变量指向一个不可用的地址就会报local proxy failed。临时清掉unset HTTP_PROXY HTTPS_PROXY openclaw gateway --force报错三reading choices或cannot read property choices of undefined这是模型返回体解析失败。OpenClaw 期望 OpenAI 格式的choices数组如果返回的是错误对象或空体就会报这个。排查顺序先确认 Base URL 正确再确认 Model ID 在 TaoToken 平台存在最后看 Key 是否有该模型的权限。用 curl 直接测一下curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d {model:claude-sonnet-4-5,messages:[{role:user,content:hi}]}如果 curl 返回正常但 OpenClaw 报错说明是 OpenClaw 配置里的 Base URL 多写了路径。报错四钉钉 OAuth 或invalid client出现在钉钉通道连接时。检查clientId和clientSecret是否和钉钉后台一致。注意 Client Secret 里可能包含-和_复制时别漏字符。另外确认应用已发布未发布的应用凭证不生效。如果用的是 Stream 模式确认钉钉后台机器人配置里消息接收模式选的是 Stream不是 HTTP 回调。报错五plugin install from url is not allowed前面提过当前版本禁止 URL 安装插件。改用 npm 包名openclaw plugins install openclaw-china/dingtalk如果 npm 安装报网络错误检查 npm registry 配置或者用pnpm add -g替代。报错六Rate limit exceededClawHubclawhub search或clawhub install时出现。先确认已登录clawhub whoami如果未登录执行clawhub login。登录后还有限流等几分钟再试。另外确认安装的 skill 名字拼写正确clawhub search的结果里复制完整名字。报错七钉钉消息发出但无回复openclaw health显示 connected但消息没触发 agent。检查gateway.http.endpoints.chatCompletions.enabled是否为 true。这个端点负责把钉钉消息转成 chat completion 请求如果关了消息进来也不会调模型。另外看openclaw logs里有没有message received日志如果没有说明钉钉消息根本没到 OpenClaw检查钉钉后台的机器人权限和 Stream 连接状态。排查时养成看日志的习惯openclaw logs --follow实时滚动日志发一条钉钉消息看日志里走了哪些步骤哪一步断了一目了然。6. 语义一致 CTA把链路固化下来链路跑通后建议把配置固化。openclaw.json备份一份钉钉凭证和 TaoToken Key 用环境变量管理别硬编码在文件里。OpenClaw 支持从环境变量读取 provider 配置你可以在 JSON 里写apiKey: ${TAOTOKEN_API_KEY}然后启动前 export。模型通道这边TaoToken 的 Key 管理页面在 https://taotoken.net/api-keys 你可以按项目创建多个 Key方便轮换和审计。接入文档在 https://taotoken.net/doc 里面有 OpenAI 兼容接口的详细说明和示例代码。如果你要验证某个模型是否可用可以直接在 https://taotoken.net/chat 里对话测试确认 Model ID 和返回格式。长期跑编码类 Agent 或需要稳定模型调用的场景可以看 Coding Planhttps://taotoken.net/coding-plan 它针对高频调用做了配额优化。控制台在 https://taotoken.net/console 可以看调用量和余额。Claude Code 相关的接入配置参考 https://taotoken.net/claude-code 里面写了 Anthropic 协议的 Base URL 和 Key 配置方式和 OpenClaw 的 OpenAI 兼容配置是两套别混用。最后一步把 skills 目录纳入版本管理。~/.openclaw/workspace/skills/下的自定义 skill 用 git 管理ClawHub 上装的公共 skill 记录在package.json或一个清单文件里换机器时一键恢复。这样你的钉钉 AI 助手就是一个可复制、可迁移的工程而不是一堆散落的配置。