1. OpenClaw 接入 QQ Bot 到底解决什么问题
OpenClaw 接入 QQ Bot 这件事,本质上是在给一个本地运行的 AI Agent 框架装上一双能伸进 QQ 的手。OpenClaw 本身是一个支持多 Channel 的智能体网关,它能把大模型的推理能力、工具调用能力、插件生态统一起来;而 QQ Bot 插件则负责把 QQ 开放平台的消息事件翻译成 OpenClaw 能理解的输入,再把 OpenClaw 的输出回写成 QQ 消息。两者接上之后,你就能在手机 QQ 里直接和一个由自己配置的 AI 机器人对话,消息链路完全跑在你自己可控的环境里。
适合谁?三类人最需要这套方案。第一类是已经在用 OpenClaw 做本地 Agent、但苦于没有顺手的 IM 入口的开发者;第二类是想给团队或社群做一个私有问答机器人、又不想把数据交给第三方 SaaS 的运维同学;第三类是想学习「IM 平台 + Agent 框架」对接范式的技术爱好者。这三类人的共同诉求是:链路要通、配置要可复制、鉴权要统一。
我试过把鉴权散落在各个插件配置里的做法,结果是每加一个 Channel 就要重新填一遍 Key,改一次轮换一次,非常痛苦。所以这篇指南会把 TaoToken 作为统一的 Key/API 通道来管理鉴权,让 OpenClaw 侧只认一个入口,QQ Bot 插件只负责消息收发,职责边界清晰。
整条链路可以拆成四段:QQ 开放平台侧拿到 AppID 和 AppSecret;OpenClaw 侧安装 qqbot 插件;配置文件里把 channel 和 plugin 都启用;最后重启 gateway 并用手机 QQ 发消息验证。下面按这个顺序逐步展开,每一步都给可复制的命令和配置片段。
需要提前说明的是,QQ 开放平台的机器人目前主要面向私聊场景,群聊能力受平台策略限制,这一点在后面的排障章节会再提到。另外 AppSecret 首次查看后无法再次显示,务必当场保存,这是很多人踩过的第一个坑。
2. TaoToken 统一 Key 的前置准备与鉴权思路
在动手装插件之前,先把鉴权通道理顺,否则后面每配一个模型都要重复填 Key。TaoToken 在这里扮演的角色是统一的 API 入口:你只需要在它那里生成一个 Key,然后在 OpenClaw 的模型配置里指向 TaoToken 的 API 地址,所有走大模型推理的请求都从这一个通道出去。QQ Bot 插件本身不直接持有模型 Key,它只负责把消息转给 OpenClaw,OpenClaw 再用统一 Key 去调用模型。
具体操作上,先到 TaoToken 控制台创建一个 API Key。访问 https://taotoken.net/api 可以查看 API 的基础信息,Key 的创建入口在控制台的 API Keys 页面。创建时建议按用途命名,比如openclaw-qqbot,方便后续轮换时定位。Key 生成后同样只显示一次,复制保存到安全的地方。
拿到 Key 之后,在 OpenClaw 的模型配置里把它填进去。OpenClaw 的模型配置通常和 channel 配置在同一个openclaw.json里,或者通过环境变量注入。推荐用环境变量的方式,避免 Key 写死在配置文件里被误提交。你可以在启动 gateway 的 shell 里 export,或者写进 systemd 的 Environment 字段。
这里要强调一个边界:TaoToken 是 API 通道,不是编辑器,也不是插件市场。它的职责是让 OpenClaw 在调用模型时有一个稳定、可轮换、可审计的出口。QQ Bot 插件、OpenClaw 本体、TaoToken 三者是分层协作的关系,不要混为一谈。
如果你后续还要接 Claude Code 或做长期编码任务,可以了解 Coding Plan 这类方案,它和按量调用的 API Key 是两种不同的计费与使用模式,按自己的场景选。对于 QQ Bot 这种消息量不大、但要求低延迟的场景,按量 API Key 通常更合适。
前置准备的最后一步是确认环境。OpenClaw 已经安装并能正常运行,Node.js 版本在 18 以上,服务器能正常访问 QQ 开放平台。手机 QQ 准备好用于扫码登录开放平台。这些条件缺一不可,尤其是 Node 版本,低于 18 会在装插件时遇到各种奇怪的依赖报错。
3. 可复制的 OpenClaw 与 QQ Bot 配置片段
这一节是全文的核心,所有配置都可以直接复制。先装插件,再配 channel,最后启用 plugin,顺序不要乱。
安装 QQ Bot 插件,推荐用 npm 方式:
openclaw plugins install @sliverp/qqbot@latest安装过程中如果看到关于「dangerous code patterns」的 WARNING,这是插件里存在环境变量访问加网络发送、以及 shell 命令调用的静态扫描提示,属于正常现象,插件需要这些能力来做音频转换和平台适配。真正要关注的是最后一行npm install failed,如果出现,进入插件目录手动补依赖:
cd ~/.openclaw/extensions/qqbot npm install装完后验证目录结构:
ls -la ~/.openclaw/extensions/qqbot/确认openclaw.plugin.json、package.json、node_modules/三个都在。
接下来配置 channel。推荐用命令行方式,最不容易出错:
openclaw channels add --channel qqbot --token "你的AppID:你的AppSecret"执行成功会显示Added QQ Bot account "default".。注意 token 的格式是 AppID 和 AppSecret 用英文冒号连接,不要有多余空格。
如果你更习惯手改配置文件,编辑~/.openclaw/openclaw.json,加入 channel 段:
{ "channels": { "qqbot": { "enabled": true, "appId": "你的AppID", "clientSecret": "你的AppSecret" } } }然后启用插件,在同一份 JSON 里加 plugins 段:
{ "plugins": { "allow": [ "qqbot" ], "entries": { "qqbot": { "enabled": true } }, "installs": { "qqbot": { "source": "npm", "spec": "@sliverp/qqbot@latest", "installPath": "/root/.openclaw/extensions/qqbot", "version": "1.5.3" } } } }手改 JSON 最大的风险是逗号。相邻属性之间必须有逗号,最后一个属性后面不能有逗号。改完立刻用 Node 验证语法:
node -e "JSON.parse(require('fs').readFileSync('/root/.openclaw/openclaw.json', 'utf8')); console.log('JSON OK')"看到JSON OK才算过关。这一步能帮你省掉后面一大半的排查时间。
模型侧的统一 Key 配置,建议通过环境变量注入,在启动 gateway 前设置:
export TAOTOKEN_API_KEY="你的TaoToken Key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"然后在 OpenClaw 的模型配置里引用这两个变量。这样 Key 不会出现在 JSON 文件里,轮换时只改环境变量即可。
4. 启动 Gateway 并验证消息收发链路
配置写完,重启 gateway 让改动生效:
openclaw gateway restart然后检查状态:
openclaw status在输出的 Channels 部分,你应该能看到类似这样的一行:
│ QQ Bot │ ON │ OK │ configured │三个关键字段:ON 表示启用,OK 表示连接正常,configured 表示配置已加载。如果 QQ Bot 显示 OFF 或 ERROR,先别急着测消息,回到上一节检查配置。
状态正常后,打开手机 QQ,找到你创建的那个机器人,发一条消息测试。如果机器人回复「去火星了」这类兜底话术,说明消息到了 QQ 侧但没进 OpenClaw,问题出在鉴权或插件注册上,对照第 5 节排查。
验证模型通道是否走通,可以单独测一次模型对话。访问模型对话入口发一条测试消息,确认 TaoToken 的 Key 有效、额度正常。这一步和 QQ Bot 解耦,能帮你快速定位是模型侧的问题还是 IM 侧的问题。
如果一切正常,你在 QQ 里发的消息会经过这样一条路径:QQ 开放平台推送事件到你的服务器,qqbot 插件接收并转成 OpenClaw 输入,OpenClaw 调用模型(走 TaoToken 统一 Key),模型返回结果,插件再回写成 QQ 消息。整条链路跑通后,你可以在 gateway 日志里看到完整的请求记录:
openclaw logs --follow日志里能看到消息进入和模型调用的时间戳,延迟通常在几百毫秒到几秒之间,取决于模型响应速度。如果日志里只有消息进入没有模型调用,说明模型配置有问题;如果两者都有但 QQ 没收到回复,说明回写环节出了问题。
5. 常见报错逐条排查
这一节按真实报错来,遇到哪个查哪个。
openclaw: command not found。原因是 openclaw 命令的软链接不在 PATH 里。解决:
ln -sf /usr/lib/node_modules/openclaw/openclaw.mjs /usr/local/bin/openclaw chmod +x /usr/local/bin/openclawUnknown channel: qqbot。这是最高频的报错。QQ Bot 不是 OpenClaw 内置 channel,必须先装插件。如果装插件时npm install failed,插件文件虽然复制过去了,但没被正确注册,OpenClaw 就认不出 qqbot。解决顺序:先openclaw plugins install @sliverp/qqbot@latest,失败就cd ~/.openclaw/extensions/qqbot && npm install,然后openclaw channels add --channel qqbot --token "AppID:AppSecret",最后openclaw gateway restart。
JSON5: invalid character '"' at 198:7。手改 JSON 时漏了逗号。典型场景是在installedAt字段后面直接跟了"qqbot": {,中间缺逗号。修复:
sed -i '197s/}/},/' /root/.openclaw/openclaw.json node -e "JSON.parse(require('fs').readFileSync('/root/.openclaw/openclaw.json', 'utf8')); console.log('JSON OK')"教训是:大文件编辑后一定用node -e "JSON.parse(...)"验证,或者立刻openclaw status看配置是否生效。
401 鉴权失败。分两种。如果是模型侧 401,检查 TaoToken Key 是否正确、是否过期、环境变量是否真的注入到了 gateway 进程里。如果是 QQ 侧 401,检查 AppID 和 AppSecret 是否匹配、token 格式是否是AppID:AppSecret。注意 AppSecret 首次查看后无法再次显示,如果你当时没保存,只能重置。
local proxy failed。这类报错通常和网络出口有关,检查服务器能否正常访问外部 API,以及 TaoToken 的 Base URL 是否写对。Base URL 应该是https://taotoken.net/api,不要多加路径。
reading choices 相关报错。这是模型返回结构解析失败,通常意味着请求根本没到模型,或者返回的不是预期的 chat completion 结构。检查 Base URL 和模型 ID 是否匹配,以及 Key 是否有对应模型的权限。
OAuth 相关报错。如果你在配置里混用了 OAuth 流程和 API Key 流程,会出现这类冲突。QQ Bot 插件用的是 AppID/AppSecret 的 client credentials 模式,不是 OAuth 授权码模式,不要混。
排查的通用顺序是:先openclaw status看 channel 状态,再openclaw logs --follow看实时日志,最后openclaw doctor --fix让工具自动修一些常见问题。这三板斧能解决八成问题。
6. 统一 Key 方案的长期维护与接入入口
链路跑通只是开始,长期维护才是关键。统一 Key 方案的价值在于:当你要加第二个、第三个 Channel 时,模型鉴权部分完全不用动,只需要配新的 channel 和 plugin。QQ Bot 插件只关心消息收发,模型调用统一走 TaoToken,职责清晰,轮换 Key 时只改一处。
配置文件的版本管理建议用 git,但 Key 和 Secret 一定要用环境变量或.env文件隔离,.env加进.gitignore。每次改完配置先备份再改:
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak插件升级用:
openclaw plugins upgrade @sliverp/qqbot@latest升级后同样要重启 gateway 并检查 status。
如果你在接入过程中卡在鉴权或插件注册环节,可以直接到 API Keys 页面重新生成 Key 对照测试,接入文档里有各语言的调用示例。想先验证模型通道是否正常,用模型对话入口发一条消息最快。如果你打算把 OpenClaw 用于长期编码或 Agent 任务,Coding Plan 是比按量 Key 更省心的选择,具体可以到控制台看当前方案。
QQ 开放平台侧还有一点要留意:机器人目前主要支持私聊,群聊能力受平台策略限制,如果你的场景强依赖群聊,需要先确认平台是否开放了对应权限。另外测试成员要在开放平台的沙箱配置里添加,否则非白名单用户发消息机器人不会响应。
最后给一个实用技巧:把openclaw logs --follow常驻在一个终端窗口里,改配置、重启、发消息的全过程都能实时看到日志变化,比反复openclaw status高效得多。链路跑通后,你可以在日志里清楚看到每条消息从进入到模型调用再到回写的完整时间线,任何一环出问题都能立刻定位。