Skip to content

QQ 频道

通过 QQ 官方机器人 API 将 PRX 接入 QQ,支持频道消息、私信和富文本内容。

概述

QQ 渠道基于腾讯 QQ 开放平台官方 Bot API 实现,通过 WebSocket 长连接接收消息事件,并通过 HTTP API 发送回复。与其他国内渠道类似,QQ 渠道使用 Stream 模式,无需公网回调地址。

主要特性:

  • 频道消息 -- 在 QQ 频道(Guild)的子频道中接收和回复消息
  • 群聊支持 -- 支持 QQ 群中的 @机器人 交互
  • 私信对话 -- 支持与用户的一对一私信
  • 富文本消息 -- 支持 Markdown、Embed 和 Ark 模板消息
  • 事件驱动 -- 基于 WebSocket Gateway 的实时事件推送

前置条件

  • QQ 开放平台账号(QQ 开放平台
  • 已创建的 QQ 机器人应用
  • 应用的 AppID 和 Token(或 AppSecret)
  • PRX 守护进程已运行

快速配置

1. 创建机器人

  1. 登录 QQ 开放平台
  2. 进入 机器人 > 创建机器人
  3. 填写机器人信息,选择使用场景(频道/群聊/私信)
  4. 开发设置 中获取 AppIDToken
  5. 如需沙箱测试,在 沙箱配置 中添加测试频道

2. 编辑配置

~/.config/openprx/config.toml 中添加:

toml
[channels_config.qq]
app_id = "102012345"
token = "your-bot-token-here"
app_secret = "your-app-secret"
sandbox = false
allowed_users = ["*"]
mention_only = true
intents = ["guild_messages", "direct_messages", "group_messages"]

也可以通过环境变量设置凭据:

bash
export OPENPRX_QQ_APP_ID="102012345"
export OPENPRX_QQ_TOKEN="your-bot-token-here"
export OPENPRX_QQ_APP_SECRET="your-app-secret"

3. 验证

bash
prx channel doctor qq

配置参考

字段类型默认值说明
app_idString必填QQ 机器人的 AppID
tokenString必填QQ 机器人的 Token
app_secretString必填QQ 机器人的 AppSecret,用于鉴权
sandboxboolfalse是否使用沙箱环境(测试用)
allowed_usersVec<String>[](拒绝全部)允许的用户 openid 列表("*" 允许全部)
mention_onlybooltrue在频道/群聊中是否只响应 @机器人 的消息
intentsVec<String>["guild_messages"]订阅的事件类型列表
reply_as_referencebooltrue回复时是否引用原消息
message_formatString"text"默认消息格式:"text" / "markdown" / "embed"

Intent 事件类型

Intent说明
guild_messages频道消息事件(公域机器人需要审核)
direct_messages私信消息事件
group_messagesQQ 群消息事件
guild_message_reactions频道消息表情回应事件
interaction按钮交互事件

功能特性

  • WebSocket Gateway -- 使用 QQ 官方 WebSocket 网关接收事件,自动维护心跳和断线重连
  • 频道和群聊 -- 同时支持 QQ 频道子频道消息和 QQ 群消息
  • 私信 -- 支持 DMS(Direct Message Session)一对一私信
  • 富文本 -- 支持发送 Markdown 格式、Embed 卡片和 Ark 模板消息
  • 配对认证 -- 支持 prx channel pair qq 进行安全配对
  • 沙箱模式 -- 开发阶段可启用沙箱环境,仅对指定频道生效

消息格式

纯文本

toml
message_format = "text"

Markdown

QQ 频道支持有限的 Markdown 子集(加粗、斜体、链接等):

toml
message_format = "markdown"

Embed 卡片

适合结构化信息展示:

toml
message_format = "embed"

限制

  • QQ Bot API 对消息发送有速率限制(频道约 5 条/秒,私信约 2 条/秒)
  • 公域机器人(非私域)在频道中发送消息需通过审核
  • 群消息仅在用户主动 @机器人 后机器人才能回复(被动回复模式)
  • 群消息的被动回复有效期为 5 分钟,超时后无法回复
  • 单条消息最大长度受 QQ API 限制
  • 沙箱环境仅对配置的测试频道生效

故障排除

机器人无响应

  1. 检查 app_idtokenapp_secret 是否正确
  2. 确认 intents 中包含了需要的事件类型
  3. 运行 prx channel doctor qq 查看诊断信息
  4. 检查网络连接是否正常(QQ API 需要访问 api.sgroup.qq.com

频道中不回复

  • 如果启用了 mention_only = true,需要在消息中 @机器人
  • 公域机器人检查是否已通过消息审核
  • 确认机器人已被添加到目标频道

群聊中不回复

  • QQ 群消息为被动回复模式,用户必须先 @机器人
  • 检查 intents 中是否包含 "group_messages"
  • 确认机器人已被添加到目标 QQ 群

沙箱模式问题

  • 设置 sandbox = true 后,仅在沙箱配置中添加的频道内可用
  • 正式环境需设置 sandbox = false 并完成审核

相关文档

Released under the Apache-2.0 License.