1. 为什么 OpenClaw 接 QQ Bot 总卡在配置这一步
OpenClaw 是一个把大模型能力接到聊天通道里的网关型工具,你可以把它理解成一个「消息路由器」:QQ 那边来一条消息,它负责转给模型,再把模型的回复送回 QQ。它适合想自己搭一个 QQ 机器人、又不想从零写消息协议的人。而 QQ Bot 接入是 OpenClaw 里最容易被配置文件劝退的环节——settings.json 和 config.toml 两个文件、字段名对不上、Key 不知道往哪塞,跑起来日志一片红。
我实测下来,绝大多数失败不是代码问题,而是配置骨架没搭对:要么通道没启用,要么模型通道的 Key 写错了位置,要么 QQ 侧的回调地址和本地端口对不上。这篇就聚焦「配置落地」这一件事,给你两份可以直接复制的配置骨架,再走一遍从启动到消息回传的完整验证。核心思路是:把模型调用统一收敛到一个 Key 通道上,OpenClaw 只认这一个出口,QQ Bot 只负责收发,职责分清之后排查就简单了。
下面所有配置都以本地调试为前提,端口、路径你按自己环境改。涉及模型通道的部分,我用 TaoToken 作为统一出口来演示,因为它一个 Key 能覆盖多种模型,省得你在配置里堆一堆不同厂商的 Key。
2. 前置准备:统一 Key 通道与 OpenClaw 环境
在动配置文件之前,先把两件事准备好:OpenClaw 本体,以及一个能用的统一 Key。
OpenClaw 的安装按官方方式走即可,Node.js 建议 v20 以上:
npm install -g openclaw openclaw --version装完先别急着配 QQ,先确认网关能起来:
openclaw gateway status如果提示未初始化,跑一次openclaw gateway start让它生成默认目录,配置文件一般落在~/.openclaw/config/下。
接着是 Key。TaoToken 的定位是统一模型通道,你注册后在控制台创建一个 API Key,后面 OpenClaw 里所有模型请求都走这个 Key。创建入口在这里:
控制台创建 Key:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
创建完在 API Keys 页面能看到以sk-开头的字符串,复制保存。接口基址用https://taotoken.net/api,注意这个地址后面不加任何参数。如果你对可用模型和调用方式还不熟,可以先去模型对话页面试一条:
模型对话体验:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
环境层面还有两个容易忽略的点。一是 QQ Bot 侧通常需要一个能接收 HTTP 回调或 WebSocket 的本地服务,本地调试时确保端口没被占用;二是如果你用 NapCat 这类框架做 QQ 侧适配,它和 OpenClaw 是两个进程,配置里要写清楚谁连谁。这两点后面配置里都会体现。
3. 可复制配置:settings.json 与 config.toml 骨架
OpenClaw 的配置分两层:config.toml管网关和通道,settings.json管模型通道和运行时参数。很多人只改了一个文件,结果模型通道没生效,消息进来了但回不出去。
先看config.toml,路径一般是~/.openclaw/config/config.toml:
# ~/.openclaw/config/config.toml [gateway] host = "127.0.0.1" port = 8765 debug = true log_level = "info" # QQ Bot 通道:本地调试用 napcat 适配 [channels.qqbot] enabled = true type = "napcat" auto_reply = true [channels.qqbot.endpoint] host = "127.0.0.1" port = 3000 ws_path = "/onebot/v11/ws" [channels.qqbot.account] uin = "你的QQ号" # 模型通道统一指向 TaoToken [models] default = "taotoken/glm-4.7" reasoning = "taotoken/glm-4.7" provider = "taotoken" base_url = "https://taotoken.net/api"几个字段说明一下。type = "napcat"表示 QQ 侧走 NapCat 的 OneBot v11 协议,ws_path是 WebSocket 路径,NapCat 默认就是/onebot/v11/ws,如果你改过要同步。base_url固定写https://taotoken.net/api,不要带斜杠结尾之外的任何东西。
再看settings.json,路径一般是~/.openclaw/config/settings.json:
{ "runtime": { "logLevel": "info", "sessionDir": "~/.openclaw/sessions" }, "modelChannel": { "provider": "taotoken", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "defaultModel": "glm-4.7", "timeoutMs": 60000 }, "channels": { "qqbot": { "enabled": true, "replyPrefix": "", "maxReplyLength": 1500 } } }apiKey就是你在控制台创建的那串sk-开头的 Key。timeoutMs给到 60 秒,模型推理慢的时候不至于被网关提前掐断。maxReplyLength是防止模型输出太长把 QQ 消息撑爆,1500 字符对大多数场景够用。
如果你更习惯用环境变量管理密钥,可以把apiKey留空,改成在启动前导出:
export TAOTOKEN_API_KEY="sk-你的密钥"然后在settings.json里把apiKey写成"${TAOTOKEN_API_KEY}"。这样配置文件可以进版本库,密钥不落地。
4. 启动与消息回传验证
配置写完,按顺序启动。先起 QQ 侧适配(以 NapCat 为例),再起 OpenClaw 网关。
# 终端 1:启动 NapCat cd ~/NapCatQQ npm start # 终端 2:启动 OpenClaw 网关 openclaw gateway start openclaw gateway statusgateway status正常会显示 running 和版本号。接着看日志确认 QQ 通道连上了:
openclaw gateway logs --tail=50你要找的关键行是类似QQBot connected: account=xxxxx和model channel ready: taotoken。前者说明 QQ 侧握手成功,后者说明模型通道的 Key 被正确加载。两条都出现,链路基本就通了。
然后做消息回传验证。用另一个 QQ 号给机器人发一条消息,比如「你好」。预期流程是:NapCat 收到消息 → 通过 WebSocket 推给 OpenClaw → OpenClaw 调 TaoToken 的模型接口 → 拿到回复 → 原路返回 QQ。如果几秒内收到回复,说明整条链路跑通。
想更精确地确认模型调用没问题,可以单独打一条接口请求,绕开 QQ 直接验证 Key 通道:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-4.7", "messages": [{"role": "user", "content": "只回复两个字:收到"}] }'返回里有正常的choices结构,就说明 Key 和基址都对。这一步能帮你快速区分「是模型通道的问题」还是「是 QQ 通道的问题」——如果 curl 通但 QQ 不回,问题一定在 QQ 侧配置。
5. 本篇常见错排查
配置跑不通时,按下面几个高频点对号入座,基本能覆盖八成情况。
网关起不来,端口被占。报错通常是address already in use。查一下 8765 被谁占了:
lsof -i :8765要么杀掉占用进程,要么把config.toml里的gateway.port改成别的。
QQ 通道连不上,日志刷重连。先确认 NapCat 的 WebSocket 服务真的在监听:
curl http://127.0.0.1:3000/status如果这个都不通,说明 NapCat 没起来或端口不对,跟 OpenClaw 无关。通了但 OpenClaw 还连不上,检查ws_path是否和 NapCat 配置一致,OneBot v11 默认是/onebot/v11/ws。
消息进来了但机器人不回。这种多半是模型通道没生效。看日志里有没有model channel ready,没有的话就是settings.json的apiKey没读到。常见原因是 Key 写成了占位符没替换,或者用了环境变量但启动终端没导出。另外确认base_url是https://taotoken.net/api,多写或少写路径都会 404。
返回 401 或鉴权失败。Key 本身的问题。去控制台确认 Key 没被删、没超额,重新复制一次。注意别把 Key 前后的空格带进去。
回复超时。把timeoutMs调大,同时看是不是模型选了个响应慢的。本地调试阶段先用默认模型验证链路,别一上来就上重推理模型。
改了配置不生效。OpenClaw 不会热加载所有字段,改完config.toml或settings.json后要重启网关:
openclaw gateway restart这一步很多人忘,改完直接测,结果测的还是旧配置。
6. 把 Key 通道固定下来,后面就省心了
配置这件事,一次搭对骨架,后面加通道、换模型都是小改。我的建议是把模型出口统一收敛到 TaoToken 这一个 Key 上,OpenClaw 里只维护一份base_url和apiKey,QQ Bot 侧只管收发消息。这样出问题时排查路径很短:curl 通不通决定是不是模型通道的锅,日志里有没有 connected 决定是不是 QQ 侧的锅。
如果你后面要长期跑编码类或 Agent 类任务,单次调用按量计费可能不如包月划算,可以看看 Coding Plan:
Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
接入过程中遇到鉴权、通道字段这类具体报错,对照接入文档查字段定义最快:
接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
Key 管理和新建入口在 API Keys 页面:
API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
最后留一个我踩过的坑:本地调试时gateway.host别急着写0.0.0.0,先用127.0.0.1把链路跑通,确认没问题再放开监听范围,否则端口暴露出去又没配鉴权,容易出意外。配置骨架就这两份文件,复制过去改掉 QQ 号和 Key,重启网关,发条消息,链路就活了。