使用 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. 註冊機器人
- 登錄 QQ 開放平臺機器人控制台
- 創建機器人,記錄機器人詳情頁的 AppID 和 AppSecret
- 在"開發設置"→"Webhook"中,將 URL 填寫為
https://<your-host>/webhooks/qq,並選擇"Webhook 模式" - 平臺會發送一次 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:12345678904. 測試
minara auth messaging test qq會消耗每月主動消息配額,請合理規劃。
入站 webhook
QQ 使用 Ed25519 對入站請求體簽名,簽名內容為 <timestamp><raw_body>。
平臺不公開公鑰;公鑰由機器人密鑰派生:
- 取
QQ_BOT_APP_SECRET的 UTF-8 字節 - 重複填充,直至緩衝區達到 32 字節
- 以此作為 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 派生失敗,平臺無法完成綁定。
參考資料
- 環境變量:
QQ_BOT_* - 出站實現:
apps/agent/src/messaging/qq.ts - 入站規範:
apps/agent/src/messaging/inbound/specs/qq.ts - QQ Bot v2 API:bot.q.qq.com / wiki
- 簽名說明:Authentication / Sign