1. 为什么要把 OpenClaw skills 接到 TaoToken 上
OpenClaw(旧名 ClawDbot、Moltbot)这两年在自动化圈子里火得挺快,核心原因就一个:它把「自然语言指令 → 自动执行任务」这条链路做成了开箱即用的形态。你不用写脚本,在微信里发一句「帮我整理今天的会议纪要并发到群里」,它就能调模型、跑工具、把结果回传。但很多人卡在同一个地方——模型通道。OpenClaw 本身不带推理能力,它必须挂一个大模型 API 才能「听懂人话」。默认教程大多让你去某个云厂商开百炼、配 DashScope,流程长、要实名、要备案,对只想快速验证微信自动化的开发者来说太重了。
TaoToken 在这里的角色就是一个兼容 OpenAI 协议的模型网关。你拿到一个 Base URL 和一个 API Key,就能让 OpenClaw 的 skills 走通「指令解析 → 工具调用 → 消息回传」的完整闭环。我实测下来,从零到微信里收到第一条自动回复,10 分钟是够的,前提是配置别写错。这篇就按「skills 目录结构 → 启动参数 → 微信侧联调」的顺序拆,每一步都给可复制的配置和验证命令,你跟着做就行。
适合谁看:想让 OpenClaw 跑微信自动化、但不想折腾复杂云账号体系的开发者;已经在用 ClawDbot 旧版、想换模型通道的人;以及想用 skills 机制扩展自定义工具、但不确定配置怎么写的人。核心检索词就三个:OpenClaw skills 部署、TaoToken 接入、微信自动化。下面从环境准备开始。
2. TaoToken 前置准备:Key、Base URL 与 skills 目录
在动 OpenClaw 之前,先把 TaoToken 侧的凭证拿到手,这是后面所有配置的基础。访问 https://taotoken.net/api 对应的控制台入口,注册登录后进 API Keys 页面创建一个新 Key。创建时给它起个能认出来的名字,比如openclaw-wechat,方便后面轮换时定位。Key 只在创建时完整显示一次,复制到加密记事本里,别直接贴在聊天窗口。
TaoToken 的 Base URL 统一用https://taotoken.net/api,注意结尾不要带/v1,OpenClaw 的 provider 配置里会自己拼路径。Model ID 这块,OpenClaw skills 对模型的工具调用能力有要求,建议选支持 function calling 的模型,具体可用列表在控制台的模型对话页能看到,先拿一个稳定的 ID 填进去,后面验证通了再换。
然后是 skills 目录。OpenClaw 的 skills 机制本质是「一个目录一个能力」,每个 skill 有自己的manifest.json和入口文件。默认路径在~/.openclaw/skills/,旧版 ClawDbot 在~/.clawdbot/skills/。你可以先跑一条命令确认当前版本用的是哪个路径:
ls -la ~/.openclaw/skills/ 2>/dev/null || ls -la ~/.clawdbot/skills/ 2>/dev/null如果两个都不存在,说明还没初始化,手动建一个:
mkdir -p ~/.openclaw/skills一个最小可用的 skill 目录长这样:
~/.openclaw/skills/ └── wechat-echo/ ├── manifest.json └── index.jsmanifest.json里声明 skill 名称、触发关键词、需要的权限;index.js里写实际执行逻辑。微信自动化场景下,你至少需要一个「消息接收 → 模型处理 → 消息发送」的 skill。TaoToken 的 Key 和 Base URL 会写进 OpenClaw 的主配置openclaw.json,skills 通过主配置里的 provider 去调模型,不需要每个 skill 单独配 Key。这一点很关键,很多人误以为要在 skill 里再填一次,结果 401 排查半天。
前置准备清单:TaoToken API Key 一个、Base URL 记牢、确认 skills 目录路径、选好一个支持工具调用的 Model ID。这四样齐了,进下一步。
3. 可复制配置:openclaw.json 与 skills 启动参数
这一步是全文最核心的,配置写错后面全白搭。OpenClaw 的主配置在~/.openclaw/openclaw.json(旧版~/.clawdbot/openclaw.json)。用你顺手的编辑器打开,或者直接 cat 覆盖。下面这份是接 TaoToken 的最小可用配置,把apiKey换成你自己的:
{ "models": { "mode": "merge", "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "api": "openai-completions", "models": [ { "id": "你的ModelID", "name": "taotoken-main", "reasoning": false } ] } } }, "gateway": { "port": 18789, "host": "0.0.0.0" }, "skills": { "enabled": true, "dir": "~/.openclaw/skills", "autoLoad": true }, "channels": { "wechat": { "enabled": true, "corpid": "你的企业微信ID", "corpsecret": "你的应用Secret", "agentid": "你的应用AgentID", "webhookUrl": "你的企业微信机器人Webhook地址" } } }几个容易踩的点。第一,baseUrl结尾不要加/v1,OpenClaw 的 openai-completions 适配层会自己拼/v1/chat/completions,你加了就变成/v1/v1/...,直接 404。第二,api字段必须是openai-completions,这是告诉 OpenClaw 用 OpenAI 兼容协议去请求,TaoToken 正好吃这套。第三,skills.dir用绝对路径更稳,~在某些 systemd 启动环境下不展开,建议写成/root/.openclaw/skills。
如果你用的是旧版 ClawDbot,把skills段换成:
"skills": { "enabled": true, "dir": "/root/.clawdbot/skills", "autoLoad": true }启动参数方面,OpenClaw 支持命令行覆盖配置,调试阶段很有用。比如临时指定 skills 目录和日志级别:
openclaw start --skills-dir /root/.openclaw/skills --log-level debug旧版对应:
clawdbot start --skills-dir /root/.clawdbot/skills --log-level debug--log-level debug会把每次模型请求的 URL、状态码、响应体前几百字打出来,排查 401 和超时全靠它。生产环境改回info,不然日志涨得飞快。配置写完先别急着重启,用一条命令校验 JSON 语法:
python3 -m json.tool ~/.openclaw/openclaw.json > /dev/null && echo "JSON OK"输出JSON OK再往下走。语法错的话 OpenClaw 启动会直接失败,报错信息还不一定指向行号,先校验能省很多时间。
4. 验证请求:从 health 检查到微信收发闭环
配置就位后,分三层验证:先验 TaoToken 通道通不通,再验 OpenClaw 服务起没起,最后验微信消息能不能闭环。
第一层,直接 curl TaoToken 的 chat completions 接口,确认 Key 和 Base URL 没问题:
curl -s -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "你的ModelID", "messages": [{"role": "user", "content": "回复两个字:通了"}] }'正常会返回一段 JSON,choices[0].message.content里是「通了」。如果返回 401,说明 Key 错了或没带Bearer前缀;返回 404,检查 URL 是不是多写了/v1;返回model not found,说明 Model ID 填错了,回控制台模型对话页核对。
第二层,重启 OpenClaw 并看服务状态:
systemctl restart openclaw || systemctl restart clawdbot systemctl status openclaw -l || systemctl status clawdbot -l看到active (running)后,打本地 health 接口:
curl http://localhost:18789/health返回{"status":"ok"}之类就说明 gateway 起来了。如果 connection refused,检查gateway.host是不是0.0.0.0、端口有没有被占:
netstat -tlnp | grep 18789有别的进程占着就 kill 掉再重启。
第三层,微信侧联调。在企业微信里给机器人发一条测试指令,比如「用一句话介绍你自己」。同时开一个终端跟日志:
openclaw logs --module channels --follow正常流程是:日志里先出现wechat message received,接着skill matched: wechat-echo,然后model request -> taotoken,最后wechat message sent。如果卡在model request不动,多半是 TaoToken 侧超时或 Key 失效;如果压根没有message received,那是企业微信回调配置的问题,检查webhookUrl和服务器公网 IP 是否放通 18789 端口。
闭环验证成功的标志:微信里 30 秒内收到模型生成的回复,日志里四步齐全。到这一步,OpenClaw skills 接 TaoToken 的链路就算打通了,后面加自定义 skill 只是往skills目录里丢新文件夹的事。
5. 常见报错排查:401、local proxy failed 与 choices 读取失败
这一节按真实报错来,都是我在配置过程中实际撞到的。
401 Unauthorized。日志里长这样:model request failed: status=401 body={"error":{"message":"invalid api key"}}。原因就三类:Key 复制时带了空格或换行、Key 被删了、Authorization头没拼对。OpenClaw 的 openai-completions 适配层会自动加Bearer,你只需要保证apiKey字段里是纯 Key。检查方法:
grep -o '"apiKey": *"[^"]*"' ~/.openclaw/openclaw.json | head -1看输出的 Key 首尾有没有多余字符。另外确认 Key 没在控制台被禁用。
local proxy failed / connection refused。日志:local proxy failed: dial tcp 127.0.0.1:7890: connect: connection refused。这是 OpenClaw 读到了系统里某个代理环境变量,试图走本地代理但代理没开。TaoToken 是直连的,不需要任何代理。清掉环境变量再重启:
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY systemctl restart openclaw || systemctl restart clawdbot如果 systemd 服务里写死了代理,去/etc/systemd/system/openclaw.service的Environment=行删掉。
reading choices 失败。日志:failed to parse response: reading choices: unexpected end of JSON input。这通常是 TaoToken 返回了非 JSON 内容,比如网关层的 HTML 错误页。先手动 curl 一次看原始返回:
curl -i -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{"model":"你的ModelID","messages":[{"role":"user","content":"hi"}]}'如果返回的是 HTML,说明请求根本没到模型层,检查 Base URL 和路径。如果返回 JSON 但choices为空,可能是 Model ID 对应的模型不支持当前请求格式,换一个支持 chat completions 的 ID。
OAuth / token 过期类报错。日志:oauth token expired, please re-auth。OpenClaw 某些版本会缓存模型通道的 token,换 Key 后没刷新。清缓存再重启:
openclaw cache clear || clawdbot cache clear systemctl restart openclaw || systemctl restart clawdbot微信回调 404。企业微信后台配的回调 URL 是http://公网IP:18789/wechat/callback,但 OpenClaw 实际监听路径可能是/channels/wechat/callback。用这条命令确认实际路由:
openclaw routes list | grep -i wechat按输出改企业微信后台的 URL。改完在企业微信里点「验证回调」通过即可。
排查顺序建议:先 curl TaoToken 确认通道,再看 OpenClaw 日志定位是接收端还是发送端,最后查微信回调。三层分开,别混在一起猜。
6. 继续用 TaoToken 跑你的微信自动化
链路通了之后,日常维护就三件事:Key 轮换、日志巡检、skills 扩展。Key 建议每 3 个月换一次,换的时候只改openclaw.json里的apiKey字段,然后systemctl restart,不用动 skills 目录。日志巡检用openclaw logs --module channels --since 1h看最近一小时有没有异常,重点盯 401 和超时。
skills 扩展是 OpenClaw 真正好玩的地方。往~/.openclaw/skills/里丢新目录,manifest.json里声明触发词,index.js里写逻辑,autoLoad开着的话重启就生效。比如加一个「每日天气播报」skill,触发词设成「今天天气」,微信里发这四个字就能自动查天气并回传。模型调用统一走主配置里的 TaoToken provider,skill 本身不用碰 Key。
如果你要长期跑 coding 类或 Agent 类任务,TaoToken 的 Coding Plan 比按量计费更划算,适合高频调用的场景。验证模型能力或者临时试新模型,用模型对话页直接聊两句最快。接入文档里有完整的协议说明和示例,配置卡住的时候翻一翻比瞎试省时间。
最后留一个实用技巧:把openclaw.json和skills目录一起打包备份,命令是tar -zcvf openclaw-backup-$(date +%Y%m%d).tar.gz ~/.openclaw,换服务器或者重装时解压就能恢复,省得重新配一遍。微信自动化跑起来之后,你会发现最花时间的不是部署,而是想清楚让 skills 帮你做什么——这个只能你自己定。