自建服务器可能的确备案困难
但是腾讯其实不要求你的域名是备案的。
显然不能。
服务器到期了,意味着公网IP、域名、SSL将无法使用,这会导致你的webhook地址不再能接受消息,导致机器人直接接收不到消息,形成掉线。
切换到webhook之后是不能再切换回websocket的
我建议你能用websocket就先websocket,
如果非要webhook不可,那我建议你只用国外服务器,配置域名、SSL、nginx之后,做FRP服务器,把你nas穿透到服务器
这样可以让服务器所需的开销最小。
自建服务器可能的确备案困难
但是腾讯其实不要求你的域名是备案的。
显然不能。
服务器到期了,意味着公网IP、域名、SSL将无法使用,这会导致你的webhook地址不再能接受消息,导致机器人直接接收不到消息,形成掉线。
切换到webhook之后是不能再切换回websocket的
我建议你能用websocket就先websocket,
如果非要webhook不可,那我建议你只用国外服务器,配置域名、SSL、nginx之后,做FRP服务器,把你nas穿透到服务器
这样可以让服务器所需的开销最小。
正如我上面说的 腾讯并不要求你的域名是备案的
并且按照目前的情况来看,webhook连接方式 在启用 沙盒模式 的时候,是不需要IP白名单的,并且可以接收到沙盒之外的消息。
换言之,你可以用你本地的nas运行机器人,但是需要绑定域名和SSL,公网IP使用 沙盒模式 连接解决。
不过注意,如果套cf之类的一定要注意延迟不要太高。腾讯似乎对webhook地址校验有延迟要求。
是443吧
好麻烦呀。现在qq机器人还是测试中,没有发布。不过不影响自己个人使用。
我看websocket腾讯那边不维护了,这个是否会影响qq机器人的后续发布呢?
后续一直用websocket有没有什么影响?
目前没有
下面就有nginx配置
大佬您好,我在配置时遇到一些问题
我按照教程来,到最后一步设置回调时,开放平台提示
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 映射表用于 WebSocket
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# 定义变量来识别 Cloudflare Tunnel 流量
# 使用 X-Forwarded-For 头是否存在来判断
map $http_x_forwarded_for $is_cf_tunnel {
default 0;
"~*" 1; # 如果 X-Forwarded-For 头存在,则认为是 Tunnel 流量
}
# HTTP 服务器块 (端口 80)
server {
listen 80;
server_name webhook.*****.top 192.168.0.107;
# Cloudflare Tunnel 流量 - 直接代理
location / {
# 通用的代理头设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 根据流量类型决定代理目标或重定向
if ($is_cf_tunnel) {
# 来自 Cloudflare Tunnel 的流量,直接代理到后端
proxy_pass http://localhost:5140;
break;
}
# 非 Tunnel 流量(直接访问 HTTP),重定向到 HTTPS
return 301 https://$server_name$request_uri;
}
# 单独处理静态资源,避免 if 指令的问题
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
proxy_pass http://localhost:5140;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
# HTTPS 服务器块 (端口 443) - 用于直接访问
server {
listen 443 ssl;
server_name webhook.*****.top 192.168.0.107;
ssl_certificate /www/ssl/cert.pem;
ssl_certificate_key /www/ssl/cert.key;
# SSL 配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
# 根路径代理
location / {
proxy_pass http://localhost:5140;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
# 处理 /qq 路径
location /qq {
proxy_pass http://localhost:5140/qq;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
# 静态资源处理
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
proxy_pass http://localhost:5140;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
}
`昨天的时候,我尝试配置,通过了地址校验,koishi日志输出
[W] qq GET /users/@me response: { message: ‘固定Token已禁用,请使用AccessToken鉴权…’, code: 11245, … }
但在保存时开放平台提示endpoint error
在这以后,就没有通过过地址校验
请问大佬我该如何解决这个问题,谢谢
其他部分都是和教程一样的
这里是因为你的adapter-qq的验证方式配置项,应该选择为bear
解决验证方式问题之后,
确保adapter-qq的配置项的协议使用的是webhook协议
在最下面的配置项
确保你可以通过域名访问你的koishi控制台
不出意外的话 是可以验证成功的
另外
QQ开放平台要求配置IP白名单的
你没有公网IP的话,就不方便配置IP白名单。会导致无法接收到消息。
即使没有IP白名单,需要注意的是,使用 cloudflare tunnel 可能会导致访问你的控制台的延迟增加。
在开放平台验证webhook地址的时候,对响应时间似乎也有一定的要求。
验证方式一直是bear,且这个报错
只出现了一次,后面在开放平台配置依然会出现校验签名失败,把koishi日志等级开到debug都看不见任何反应,大概是cloudflare 在国内的延迟问题吧
大佬,我该如何继续操作,谢谢
应该只是历史日志,不是实时报错。不需要在意。
只有这个配置webhook地址的校验这里对延迟比较严格。配置完成之后 对延迟似乎就没有什么要求了。
不太确定是不是延迟导致的,因为腾讯没有说明有延迟要求。但是实际配置的时候,有不少 cloudflare 代理的地址校验失败的。感觉是有延迟要求。
如果是延迟问题,你可以试试租一个很小的服务器,用他的公网 来代理腾讯的服务器,把adapter-qq的配置项的服务器地址改成这个地址。配置webhook到这个小服务器,小服务器下发事件到你的本地。
也就是这个服务器用来代理和解决腾讯那边的请求和事件。
顺便说一句唔,webhook还没有强制推行,换到webhook之后会比websocket麻烦不少(域名、证书等都需要维护),相比之下 webhook却只是响应快了几百毫秒。
所以还是建议你保持在目前的websocket协议。
你在QQ开放平台后台,有没有配置IP白名单呢?如果有对应IP白名单可配置,但是没配置IP白名单的话,会导致收不到消息
配置了ip白名单,在找办法去掉白名单
八嘎,去不掉哦
只可以删掉已经配置的IP白名单和加入新的IP
只有在已经配置的IP白名单里才能连上机器人和收到事件
IP白名单是QQ开放平台的硬性要求,如果有这个配置项,那就必须要配置。
如果没有这个配置项可填,那就对IP没有限制
那太可怕了,tunnel的ip起码得有几百个
对
所以我才只推荐你这样
不过那你现在是怎么接收到websocket消息的?
IP白名单对websocket也生效的呀
你现在websocket连接的机器人可以响应消息吗
websocket是可以正常使用的,不管有几层nat,我上网总不能没有公网ip吧
咦,但是你的公网IP是会变动的呀,难道你IP白名单配置的都是动态IPV4吗
不清楚,只配置了一个,两个星期都能用,到时候再改吧
唔,好吧
那我建议你还是使用websocket协议
不要折腾webhook了
除非你有一个固定IPV4的服务器,不然十分不方便