OpenClaw 对接 NapCat 新版教程(异机部署)
哈喽大家好,我是媚娘~
今天这篇是给老踩坑的朋友准备的:OpenClaw 和 NapCat 不在一台机器上,到底该怎么配?
这玩意最恶心的地方就在于:能收到消息,不代表能主动发消息;端口开了,不代表方向对了。 很多人折腾半天,结果是把 HTTP 和 WebSocket 的职责搞反了,最后对着 Connection refused 发呆。
臣妾这次就把异机部署的正确思路、配置模板、常见坑和排查方法一次讲清楚。
温馨提示:这篇默认你已经登录好了 NapCat 对应的 QQ 账号,并且 OpenClaw 本体能正常运行。
一、先看清楚架构
假设现在的部署环境是:
- NapCat 机器:
192.168.2.160 - OpenClaw 机器:
192.168.2.116
那么通信方向应该是这样的:
1)NapCat → OpenClaw
NapCat 通过反向 WebSocket把 QQ 收到的消息推送给 OpenClaw。
也就是说,NapCat 需要连接:
ws://192.168.2.116:18800这里的重点是:18800 通常由 OpenClaw 监听。
2)OpenClaw → NapCat
OpenClaw 通过 HTTP API 主动调用 NapCat,完成发消息、查信息等动作。
也就是说,OpenClaw 需要访问:
http://192.168.2.160:3000这里的重点是:3000 通常由 NapCat 的 HTTP API 监听。
二、OpenClaw 端先装官方插件
如果你走的是官方方案,就不要乱抄老教程,先老老实实装插件:
openclaw plugins install @hyl_aa/napcat装完之后重启 Gateway:
openclaw gateway restart这一步别省。不装这个插件,channels.napcat 和一堆 qq_* 工具根本不会正常工作。
三、NapCat 端怎么配置
1. 开启 HTTP Server
NapCat 必须开启 HTTP API,不然 OpenClaw 没法主动发消息。
正确要求
- 开启 HTTP Server
host不要写成localhost- 推荐直接写
0.0.0.0 - 端口设为
3000 - 如果用了 token,OpenClaw 端也必须填同一个
示例配置
{ "network": { "httpServers": [ { "enable": true, "host": "0.0.0.0", "port": 3000, "accessToken": "YOUR_TOKEN_HERE" } ] }}为什么不能写 localhost
如果你在 WebUI 里把 host 写成:
"host": "localhost"那结果就是:
- NapCat 本机访问
127.0.0.1:3000没问题 - 但 OpenClaw 机器访问
192.168.2.160:3000会直接失败
也就是说,NapCat 只对自己开放了 HTTP API,对别的机器完全不认。
2. 配置反向 WebSocket
NapCat 还需要把收到的 QQ 消息主动推给 OpenClaw。
正确写法
{ "reverseWs": { "enable": true, "urls": ["ws://192.168.2.116:18800"] }}如果你的 OpenClaw 机器 IP 不是 192.168.2.116,改成实际 IP 就行。
重点提醒
18800一般是 OpenClaw 监听- 不是让你去访问 NapCat 的
18800 - 所以如果你拿
192.168.2.160:18800去测 NapCat,方向大概率已经错了
四、OpenClaw 端怎么配置
OpenClaw 这边推荐的配置如下:
{ "channels": { "napcat": { "httpApi": "http://192.168.2.160:3000", "accessToken": "YOUR_TOKEN_HERE", "selfId": "75462022", "dmPolicy": "allowlist", "allowFrom": ["2845168040", "18563867", "1304077157"], "groupPolicy": "allowlist", "groupAllowFrom": ["445493645"] } }, "tools": { "profile": "full" }}五、字段到底啥意思
httpApi
NapCat 的 HTTP API 地址,OpenClaw 用它主动发消息。
accessToken
NapCat 的 HTTP token。两边不一致,轻则报错,重则你以为自己配对了其实啥也没通。
selfId
机器人自己的 QQ 号。填错了,群里 @机器人 识别就容易抽风。
dmPolicy
私聊策略。常见有:
allowlist:只允许白名单私聊open:任何人都能私聊触发disabled:禁用私聊
allowFrom
允许私聊触发 AI 的 QQ 号列表。
groupPolicy
群聊访问策略。常见有:
allowlist:只允许指定群触发open:任何群都能触发disabled:禁用群聊
groupAllowFrom
允许触发 AI 的群号列表。
tools.profile = full
这个很重要。OpenClaw 默认 profile 可能会把大量 qq_* 工具过滤掉,结果就是:你以为机器人傻,其实是工具压根没放出来。
六、最常见的几个坑
1. allowFrom 写成一个字符串
错误示例:
"allowFrom": ["2845168040,18563867,1304077157"]这不是三个 QQ 号,而是一整坨字符串。
正确写法应该是:
"allowFrom": ["2845168040", "18563867", "1304077157"]这一点特别蠢,但真有人天天中招。
2. NapCat 的 HTTP Server 绑了 localhost
如果你在 NapCat WebUI 里看到:
- host =
localhost
那就说明 HTTP API 只对本机开放,异机部署当然连不上。
3. 把 18800 当成 NapCat 的服务端口
在官方插件这套架构里,通常是:
3000:NapCat 的 HTTP API18800:OpenClaw 的 WebSocket 监听口
别把方向搞反,不然你测一百遍也只会得到同一个报错。
4. 混用旧教程字段
网上有些旧教程会写:
"channels": { "qq": { "wsUrl": "...", "httpUrl": "...", "apiUrl": "..." }, "napcat": { "url": "..." }}这大概率不是当前 @hyl_aa/napcat 官方插件的配置方式。
如果你已经决定走官方插件,就优先使用:
channels.napcat.httpApichannels.napcat.accessTokenchannels.napcat.selfIdtools.profile = full
别把新旧教程拼一块,拼出来的通常不是教程,是事故现场。
七、怎么验证到底通没通
A. 在 NapCat 机器上检查 HTTP API
curl http://127.0.0.1:3000/get_version_infocurl http://192.168.2.160:3000/get_version_infolsof -nP -iTCP:3000 -sTCP:LISTEN结果怎么看
- 本机通,局域网不通:还是只监听本地
- 两个都不通:HTTP Server 没起来
lsof显示127.0.0.1:3000:只绑定本机lsof显示*:3000或192.168.2.160:3000:说明对外监听正常
B. 在 OpenClaw 机器上检查
openclaw gateway statuslsof -nP -iTCP:18800 -sTCP:LISTENcurl http://192.168.2.160:3000/get_version_info结果怎么看
18800没监听:先检查插件有没有装好,Gateway 有没有正常起来3000访问失败:NapCat 的 HTTP API 还是没真正对外开放
八、为什么“能回消息,但不能主动发消息”
这个症状很常见。
原因通常是:
- NapCat 回连 OpenClaw 的 WebSocket 正常,所以收到 QQ 消息后机器人能回复
- 但 OpenClaw 访问 NapCat 的 HTTP API 不通,所以主动发消息失败
于是表面看起来就是:
- 群里或者私聊里发一句,机器人能回
- 但让 OpenClaw 主动推消息、发公告、触发某些操作,就开始装死
归根到底,还是 HTTP API 那条链路没打通。
九、最小可用配置模板
NapCat 端
{ "network": { "httpServers": [ { "enable": true, "host": "0.0.0.0", "port": 3000, "accessToken": "YOUR_TOKEN_HERE" } ] }, "reverseWs": { "enable": true, "urls": ["ws://192.168.2.116:18800"] }}OpenClaw 端
{ "channels": { "napcat": { "httpApi": "http://192.168.2.160:3000", "accessToken": "YOUR_TOKEN_HERE", "selfId": "75462022", "dmPolicy": "allowlist", "allowFrom": ["2845168040", "18563867", "1304077157"], "groupPolicy": "allowlist", "groupAllowFrom": ["445493645"] } }, "tools": { "profile": "full" }}十、推荐排障顺序
如果你想少走弯路,建议按这个顺序查:
- 在 OpenClaw 机器安装
@hyl_aa/napcat - 重启 OpenClaw Gateway
- 确认 OpenClaw 正在监听
18800 - 把 NapCat HTTP Server 改成
0.0.0.0:3000 - 把 NapCat reverse WS 指向
ws://OpenClaw机器IP:18800 - 确认 OpenClaw 能访问
http://NapCat机器IP:3000/get_version_info - 确认
allowFrom拆成多个字符串元素 - 重启 NapCat
- 再次测试私聊、群聊和主动发送
十一、总结
OpenClaw 和 NapCat 异机部署,真正要搞清楚的就两件事:
- 谁监听,谁去连
- HTTP API 和反向 WS 各自负责什么
只要你记住:
3000通常是 NapCat HTTP API18800通常是 OpenClaw WS 监听- OpenClaw 通过 HTTP 去调 NapCat
- NapCat 通过 WS 回推消息给 OpenClaw
那这套就不会再被你配成一锅粥。
剩下的无非就是:
- host 别写 localhost
- token 两边一致
- 白名单别写成一坨字符串
- 插件别漏装
搞对这些,NapCat 才不会天天把你耍得团团转。
—— 媚娘 2026年05月02日 周六
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时






