如果你不知道怎么部署,你可以联系QQ:2862443924(有偿服务)
QQ机器人 WebHook 是 QQ 机器人提供的一种消息推送方式,通过 WebHook 接口,可以将消息实时推送到 QQ 机器人的服务端上。
然而在易语言中,Webhook 接口的实现并不方便,因此,本文档将介绍如何在易语言中使用 Websocket 接口来实现 QQ 机器人 WebHook。
- 一个拥有公网IP的服务器
- 一个QQ机器人(用于测试
- 一个备案的域名(用于接收 Webhook 推送,QQ开放平台强制备案
- 服务器安装宝塔面板,宝塔面板拥有 Python 的最新环境(宝塔面板拥有部署环境,项目本身不依赖宝塔面板
宝塔面板中:网站管理 -> Python项目 -> 添加 Python 项目,填写相关内容,指定好python文件位置以及目录,创建虚拟环境。
在虚拟环境中,使用 宝塔面板的[模块] 安装依赖库:
fastapi
cryptography
pydantic
websockets-connector-python
jinja2
uvicorn
安装后,尝试启动项目
找到main.py
·文件,修改以下内容:
ADMIN_PWD="xxxxx" # 后台管理员密码
ADMIN_ENTER="/admin" # 后台入口路径,格式:/xxx
找到随附的sqlitetest.py
文件,取消注释第9行,Bob修改为你的登录Secret,1111修改为你的APItoken。
修改/templates/index.html文件和/templates/manage.html文件,把post地址改为/{后台路径}/xxx。
点击创建的项目设置 -> 域名管理 -> 绑定域名
如何绑定这里不过多赘述。
再点击外网访问 -> 开启外网映射 -> 端口8000放行,已开启,代理路由:/
重启python项目,验证域名是否可以访问(能打开就行)。
再点击 SSL 证书,申请免费的 来此加密 证书即可。尝试是否可以 HTTPS 访问。如果正常访问,那么恭喜你,你已经成功部署了一个 Websocket 版本的 QQ 机器人 WebHook。
打开QQ开放平台,找到事件通知地址配置区域,输入你的地址:https://{域名}/webhook?secret={机器人密钥}&token={Token}
v1.1:使用前,需要先在管理后台内给 Secret 增加白名单,否则 Webhook 和 Websocket 都会拒绝连接。
其中,请将 {域名} 替换为你的域名,{机器人密钥} 替换为你的机器人密钥。密钥应该类似于 iChChjFlHnJqNuRyV3b9hFSJDNds5。token为10位,校验身份。(v.1.2新增)
完成配置后,你应该看到开放平台推送了回调验证,不提示任何信息、可以保存配置即代表部署成功!可以保存了。
进行配置前,需要连接 WebSocket 至对应 Secret,否则无法完成签名计算、消息推送
保存后,请配置【事件接收】。
WebSocket统一连接地址格式:ws://{域名}/ws/{机器人密钥}/{TOKEN}
【WebSocket文档】请见附录。 WebSocket Python Demo 请见
websocket_demo.py
其中,请将 {域名} 替换为你的域名,{机器人密钥} 替换为你的机器人密钥。密钥应该类似于 iChChChDjFlHnJqNuRyV3b9*****JDNds5。Token为10位,校验身份。(v.1.2新增)
打开你的 WebSocket 测试工具,输入上述地址,连接成功后,尝试在群/频道内@机器人 消息,看看 ws 里有没有收到消息。
服务端口默认为 8000.如果需要修改,请打开main.py
,拖动至最下方,修改以下内容:
uvicorn.run(app, host="0.0.0.0", port=8000)
为
uvicorn.run(app, host="0.0.0.0", port={端口})
即可({端口} 替换为你需要的端口号)。
基础科普
- WebSocket 协议是 HTML5 开始提供的一种协议,它是基于 TCP 协议的一种新的网络通信协议。
- WebSocket 协议在单个 TCP 连接上可以进行双向通信,实时地进行数据传输。
WebSocket 统一连接地址
ws://{域名}/ws/{机器人密钥}/{TOKEN}
WebSocket 生命心跳
代码未进行心跳验证。无需发送心跳包。开发者请自行维护好 WebSocket 连接(即掉线重连)。
WebSocket 消息结构
其他说明
- 目前,Websocket 连接成功建立后才能够正常收到由 WebHook 推送的消息。
前往宝塔面板-python项目-你的项目-模块,安装下列模块:
jinja2
python-multipart
复制最新的 v1.1 版本的 main.py 到你的项目目录下,覆盖原有文件。
将代码中的
ADMIN_PWD="xxxxx" # 后台管理员密码
ADMIN_ENTER="/admin" # 后台入口路径,格式:/xxx
修改为你的后台管理员密码和入口路径。
项目根目录下上传仓库内的 templates 目录。
重启项目,测试是否正常运行。然后增加 Secret 白名单即可使用。