ByteNoteByteNote

字节笔记本

2026年6月21日

hermes教程-QQ 机器人

API中转
¥120

概述

QQ Bot 适配器使用 官方 QQ 机器人 API 实现以下功能:

  • 通过持久化 WebSocket 连接至 QQ 网关接收消息
  • 通过 REST API 发送文本和 Markdown 回复
  • 下载并处理图片、语音消息和文件附件
  • 使用腾讯内置 ASR 或可配置的 STT 提供商转写语音消息

前提条件

  1. QQ 机器人应用 — 在 q.qq.com 注册:

    • 创建一个新应用,记下你的 App IDApp Secret
    • 启用所需的意图:C2C 消息、群 @ 消息、频道消息
    • 在沙箱模式下配置机器人用于测试,或发布用于生产环境
  2. 依赖项 — 适配器需要 aiohttphttpx

    bash
    pip install aiohttp httpx

配置

交互式设置

bash
hermes gateway setup

从平台列表中选择 QQ Bot 并按提示操作。

手动配置

~/.hermes/.env 中设置所需的环境变量:

bash
QQ_APP_ID=your-app-id
QQ_CLIENT_SECRET=your-app-secret

环境变量

变量描述默认值
QQ_APP_IDQQ 机器人 App ID(必需)
QQ_CLIENT_SECRETQQ 机器人 App Secret(必需)
QQBOT_HOME_CHANNEL用于定时任务/通知投递的 OpenID
QQBOT_HOME_CHANNEL_NAME主频道的显示名称Home
QQ_ALLOWED_USERS允许私信访问的用户 OpenID 列表(逗号分隔)open(所有用户)
QQ_GROUP_ALLOWED_USERS允许群组访问的群 OpenID 列表(逗号分隔)
QQ_ALLOW_ALL_USERS设置为 true 以允许所有私信false
QQ_PORTAL_HOST覆盖 QQ 门户主机(设置为 sandbox.q.qq.com 用于沙箱路由)q.qq.com
QQ_STT_API_KEY语音转文本提供商的 API 密钥
QQ_STT_BASE_URL(不直接读取——改为在 config.yaml 中设置 platforms.qqbot.extra.stt.baseUrl不适用
QQ_STT_MODELSTT 模型名称glm-asr

高级配置

如需精细控制,可将平台设置添加到 ~/.hermes/config.yaml

yaml
platforms:
  qqbot:
    enabled: true
    extra:
      app_id: "your-app-id"
      client_secret: "your-secret"
      markdown_support: true       # 启用 QQ Markdown(msg_type 2)。仅配置项,无对应环境变量。
      dm_policy: "open"          # open | allowlist | disabled
      allow_from:
        - "user_openid_1"
      group_policy: "open"       # open | allowlist | disabled
      group_allow_from:
        - "group_openid_1"
      stt:
        provider: "zai"          # zai (GLM-ASR), openai (Whisper) 等
        baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4"
        apiKey: "your-stt-key"
        model: "glm-asr"

语音消息(STT)

语音转写分两个阶段进行:

  1. QQ 内置 ASR(免费,始终优先尝试)—— QQ 在语音消息附件中提供 asr_refer_text,使用腾讯自有的语音识别

  2. 配置的 STT 提供商(回退)—— 如果 QQ 的 ASR 未返回文本,适配器会调用兼容 OpenAI 的 STT API:

    • 智谱/GLM (zai):默认提供商,使用 glm-asr 模型
    • OpenAI Whisper:设置 QQ_STT_BASE_URLQQ_STT_MODEL
    • 任何兼容 OpenAI 的 STT 端点

故障排除

机器人立即断开连接(快速断开)

通常意味着:

  • 无效的 App ID / Secret — 在 q.qq.com 上仔细检查你的凭据
  • 缺少权限 — 确保机器人已启用所需的意图
  • 仅沙箱机器人 — 如果机器人处于沙箱模式,它只能接收来自 QQ 沙箱测试频道的消息

语音消息未转写

  1. 检查附件数据中是否存在 QQ 内置的 asr_refer_text
  2. 如果使用自定义 STT 提供商,验证 QQ_STT_API_KEY 是否正确设置
  3. 检查网关日志中的 STT 错误消息

消息未送达

  • 验证在 q.qq.com 上是否已启用机器人的 意图
  • 如果私信访问受限,检查 QQ_ALLOWED_USERS
  • 对于群消息,确保机器人被 @提及(群策略可能要求白名单)
  • 检查用于定时任务/通知投递的 QQBOT_HOME_CHANNEL

连接错误

  • 确保已安装 aiohttphttpxpip install aiohttp httpx
  • 检查到 api.sgroup.qq.com 和 WebSocket 网关的网络连接
  • 查看网关日志以获取详细的错误消息和重连行为


分享: