NanoClaw NapCat QQ:为 NanoClaw v2 接入 QQ 渠道
已发布基于 TypeScript 与 OneBot v11 反向 WebSocket,为 NanoClaw v2 接入 QQ 私聊、群聊和图文消息,并提供 NapCat Docker 自动安装与宿主渠道集成。
项目概览
NanoClaw NapCat QQ 是我为 NanoClaw v2 开发的 QQ 渠道适配项目。它通过 NapCat 提供的 OneBot v11 接口,将 QQ 消息转换为 NanoClaw 的统一消息格式,让用户可以在私聊或群聊中与 agent 交互,并与已有的微信渠道同时使用。
项目已开源发布,目前处于公开测试阶段,采用源码安装方式,尚未发布 npm 包。
解决的问题
接入一个聊天平台,需要同时处理消息协议、会话标识、触发规则、附件和连接状态。仅仅打通文字收发,还不足以让 agent 在日常聊天中稳定工作。
这个项目围绕 QQ 渠道完成了两部分工作:一是实现 NanoClaw 原生渠道适配器,衔接消息收发和交互回调;二是提供安装脚本,将 NapCat 容器部署、连接配置和宿主集成串起来,减少手工配置步骤。
主要功能
私聊与群聊接入
支持 QQ 私聊和群聊消息,分别使用 private:<QQ号> 与 group:<群号> 标识会话。私聊与群聊沿用 NanoClaw 的渠道访问规则,未知发送者采用严格策略;群聊以真正 @ 机器人作为触发条件。
安装时可以将个人 QQ 绑定到指定 agent,并授予普通成员访问权限。群聊需要单独绑定,避免把机器人加入群聊后就直接开放访问。
图文消息与引用上下文
将 OneBot 消息段转换为 NanoClaw 的文字、图片附件和引用信息,并把 agent 的输出转换回 QQ 消息:
- 识别文字、@、图片与引用消息。
- 下载并校验入站图片,支持 PNG、JPEG、GIF 和 WebP,限制单张图片大小为 20 MiB。
- 通过
get_msg补充被引用消息的发送者和文字;查询失败时保留引用 ID。 - 图片读取失败时保留“图片不可用”提示,使同条消息的文字仍可继续处理。
文字选项交互
将 NanoClaw 的选项问题转为带编号的文字消息,用户通过 /nc-answer <问题ID> <选项序号> 回复,再由适配器回传对应选项及会话信息。
对于卡片内容,优先使用文字回退。由于 OneBot 不提供文字消息编辑接口,终态更新会作为新消息发送。
自动安装与部署
提供 setup 脚本,自动部署 NapCat Docker、生成连接配置并安装宿主渠道。已有 NapCat 的用户可以选择外部实例模式,复用现有部署。
NapCat 的登录状态和配置保存在宿主的 data/napcat/ 下。WebUI 默认仅允许本机访问;远程部署可以通过 SSH 端口转发完成扫码登录。项目同时提供中英文 README、环境变量示例与卸载说明。
技术实现
整体消息链路如下:
QQ 私聊 / 群聊 ↕ NapCat ↕ OneBot v11 反向 WebSocketNanoClaw QQ 渠道适配器 ↕NanoClaw v2 agent适配器使用 TypeScript 编写,按注册入口、连接管理和消息转换拆分职责:
| 模块 | 职责 |
|---|---|
src/channels/napcat.ts | 注册 qq 渠道,读取并校验环境配置 |
src/channels/napcat/adapter.ts | 实现渠道生命周期、消息收发、入站队列与选项回调 |
src/channels/napcat/connection.ts | 管理反向 WebSocket、鉴权、心跳与 API 请求响应 |
src/channels/napcat/messages.ts | 转换消息段、处理引用、下载并校验图片 |
scripts/setup.mjs | 编排 NapCat 部署与宿主安装 |
scripts/channel.mjs | 安装和卸载渠道代码 |
连接与消息处理
连接建立时校验 Bearer Token、机器人 QQ 号和客户端角色,并通过 get_login_info 再次确认账号。API 调用使用独立的 echo 关联请求与响应,待处理请求绑定到具体 WebSocket;连接断开或被替换时及时拒绝请求,避免旧连接的响应混入新会话。
入站消息按队列串行处理,设置队列长度上限,并在有限时间窗口内去重。连接层通过心跳检查存活状态,消息层则为图片下载设置超时、重定向次数和大小限制,控制异常消息带来的资源消耗。
使用方式
运行前需要可用的 NanoClaw v2、Node.js 22 或更高版本、宿主使用的包管理器,以及 Linux Docker Compose。
git clone https://github.com/xqcherry/nanoclaw-channel-napcat.gitcd nanoclaw-channel-napcatnpm ci --ignore-scriptsnpm run setup -- --target /absolute/path/to/nanoclaw随后在本机 NapCat WebUI 中扫码登录机器人 QQ,并按照仓库说明绑定个人 QQ 与目标 agent。部署参数及卸载步骤以 项目 README 为准。
项目状态
项目已发布,当前为公开测试版本,支持单个 QQ 账号,暂不支持语音、文件及群管理。
这次项目经历覆盖了聊天协议适配、WebSocket 连接生命周期、图文消息转换、渠道权限衔接和容器部署自动化,将 QQ 到 agent 的消息链路与实际安装流程一起落地。