MINARA
使用 Minara客戶端與界面消息平臺

QQ 機器人

QQ 官方機器人 v2 消息通知,支持 Ed25519 webhook 事件。每個機器人每月主動消息上限為 4 條,建議設計為被動回覆模式。

⚠️ 使用被動回覆,而非主動推送。 QQ 對每個機器人的主動消息 上限為每月 4 條。每日上限:主動私信 200 條,每個頻道子頻道主動消息 20 條。 大多數生產交互須回覆用戶的入站消息(機器人有 5 秒響應,不計配額), 僅在關鍵提醒時才主動推送。

功能概覽

  • 四個發送入口,按 channel 前綴路由:
    • c2c:<openid>/v2/users/{openid}/messages(C2C 私信)
    • group:<openid>/v2/groups/{openid}/messages(群組)
    • channel:<id>(默認)→ /channels/{channel_id}/messages(公開頻道)
    • dm:<guild_id>/dms/{guild_id}/messages(頻道私信)
  • 入站 webhook 地址為 /webhooks/qq,使用 Ed25519 簽名驗證。
  • access_token 緩存 7200 秒,自動刷新。
  • 僅支持文本。 富媒體消息(圖片、文件、ARK 卡片)為後續功能。
  • 文本長度上限 4000 字符。

配置步驟

1. 註冊機器人

  1. 登錄 QQ 開放平臺機器人控制台
  2. 創建機器人,記錄機器人詳情頁的 AppIDAppSecret
  3. 在"開發設置"→"Webhook"中,將 URL 填寫為 https://<your-host>/webhooks/qq,並選擇"Webhook 模式"
  4. 平臺會發送一次 op=13 驗證握手。Minara 會自動用簽名響應 plain_token。

2. 配置默認目標

選擇最常用的目標,並加上對應前綴:

場景QQ_BOT_DEFAULT_CHANNEL_ID
回覆公開頻道channel:<channel id>
推送到群組group:<group openid>
推送給單個用戶c2c:<user openid>
回覆頻道私信dm:<guild id>

公開頻道場景可省略前綴(最常見):

QQ_BOT_DEFAULT_CHANNEL_ID=1234567890

等同於 channel:1234567890

3. 配置 Minara

minara auth messaging add
# 选择 `qq`;粘贴 AppID、AppSecret 及默认目标。

或設置環境變量:

QQ_BOT_APP_ID=12345678
QQ_BOT_APP_SECRET=<opaque secret>
QQ_BOT_TOKEN=<bot token>
QQ_BOT_DEFAULT_CHANNEL_ID=channel:1234567890

4. 測試

minara auth messaging test qq

會消耗每月主動消息配額,請合理規劃。

入站 webhook

QQ 使用 Ed25519 對入站請求體簽名,簽名內容為 <timestamp><raw_body>。 平臺不公開公鑰;公鑰由機器人密鑰派生:

  1. QQ_BOT_APP_SECRET 的 UTF-8 字節
  2. 重複填充,直至緩衝區達到 32 字節
  3. 以此作為 Ed25519 seed,派生密鑰對

Minara 在內部處理此 seed 派生密鑰對。重放窗口為 5 分鐘(與 Discord、Slack 約定一致)。

驗證握手:平臺發送 {op: 13, d: {plain_token, event_ts}} 時, Minara 使用派生私鑰對 event_ts + plain_token 簽名, 並回復簽名後的十六進制字符串。平臺以此證明端點持有密鑰。

接受的入站事件類型:

  • AT_MESSAGE_CREATE:機器人在公開頻道被 @ 提及
  • GROUP_AT_MESSAGE_CREATE:機器人在群組中被 @ 提及
  • C2C_MESSAGE_CREATE:用戶私信

其他 op=0 分發事件(頻道更新、表情回應等)會被忽略。

限制與注意事項

  • 主動消息配額。 每月 4 條,私信每日 200 條,每個子頻道每日 20 條。 配額耗盡後返回錯誤碼 130_001;若有一定推送量,此錯誤屬於預期現象。
  • 被動回覆是推薦模式。 用戶 @ 機器人,機器人在 5 秒內回覆,不計主動配額。
  • 新機器人必須使用 Webhook。 WebSocket 沙盒模式在 v2 中已棄用。

常見問題

"測試消息返回 errcode 130001"

  • 每月主動消息配額已耗盡。請改用被動回覆。

"入站 webhook 返回 401"

  • 最常見原因:主機時鐘偏差。5 分鐘重放窗口嚴格執行。
  • 較少見:AppSecret 粘貼不完整。seed 派生會重複短密鑰, 但錯誤密鑰會生成錯誤公鑰。

"驗證握手(op=13)失敗"

  • 啟動時未配置 QQ_BOT_APP_SECRET。缺少該配置,seed 派生失敗,平臺無法完成綁定。

參考資料

本頁目錄