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

Google Chat

通過服務賬號 JWT 驗證接入 Google Workspace Chat,入站活動由 [email protected] 簽名。

🟡 出站通過服務賬號,入站經 JWT 驗證 適用於 Google Workspace 部署。出站時從服務賬號 JSON 密鑰生成短效訪問 token;入站時驗證每條 POST 是否由 [email protected] 簽名。

功能概覽

  • 出站文本:通過 POST https://chat.googleapis.com/v1/{space}/messages 發送 {text},支持話題串(thread.name)。
  • 入站 webhook:路徑為 /webhooks/google-chat。Google 為每條入站請求附加由 [email protected] 簽發的 bearer JWT。
  • 訪問 token 緩存:TTL 1 小時,提前 5 分鐘刷新。
  • 本版本僅支持純文本。 Cards v2、對話框、斜槓命令及附件下載暫未實現。
  • 每條消息文本上限 4096 字符。

配置步驟

1. 創建 Google Cloud 項目與服務賬號

  1. 進入 Google Cloud Console,選擇(或新建)一個用於 Chat 應用的項目。
  2. 進入"APIs & Services"→"Enable APIs",啟用 Google Chat API
  3. 進入"IAM & Admin"→"Service Accounts"→"Create Service Account",填寫名稱(如 minara-chat-bot)。
  4. 創建完成後,打開該服務賬號,進入"Keys"標籤,點擊"Add Key"→"JSON",保存下載的文件。

2. 配置 Chat 應用

  1. 在同一 Google Cloud 項目中,進入 Google Chat API→"Configuration"標籤。
  2. 填寫 App nameAvatar URLDescription,內容合理即可。
  3. Functionality:勾選"Receive 1:1 messages"與"Join spaces and group conversations"。
  4. Connection settings:選擇"App URL",將端點設為 https://<your-host>/webhooks/google-chat
  5. Authentication Audience:選擇一項並記錄:
    • "Project Number":audience 為 12 位 GCP 項目編號。
    • "HTTP endpoint URL":audience 為你的端點 URL。
  6. Permissions:選擇"Specific people and groups"或你的域。

3. 將服務賬號 JSON 放入沙盒

CLAUDE.md §4 要求服務賬號密鑰必須存放在 data / 沙盒目錄下。將下載的 JSON 移動到 ~/.minara/sandbox/(或你的 MINARA_DATA_DIR 對應路徑):

mv ~/Downloads/<project>-<hash>.json ~/.minara/sandbox/google-chat-sa.json
chmod 600 ~/.minara/sandbox/google-chat-sa.json

4. 獲取默認 Space

將 Chat 應用添加到某個 Space(或從測試賬號私信該機器人)後,從 URL 中獲取 Space 資源名,格式為 spaces/AAAA1234567,保存為 GOOGLE_CHAT_DEFAULT_SPACE_ID

5. 配置 Minara

minara auth messaging add
# 从列表中选择 `google_chat`。

或直接設置環境變量:

GOOGLE_CHAT_SERVICE_ACCOUNT_JSON_PATH=/Users/you/.minara/sandbox/google-chat-sa.json
GOOGLE_CHAT_DEFAULT_SPACE_ID=spaces/AAAA1234567
GOOGLE_CHAT_AUDIENCE=1234567890

GOOGLE_CHAT_AUDIENCE 必須與 Workspace 控制台中的值完全一致。若控制台選擇了"Project Number",填純數字;若選擇了"HTTP endpoint URL",填完整 URL(含控制台顯示的末尾斜槓)。

6. 測試

minara auth messaging test google_chat

入站 webhook

Google 入站 JWT 包含以下聲明:

聲明預期值
iss(簽發方)[email protected]
aud(audience)GOOGLE_CHAT_AUDIENCE 一致
簽名RS256,通過 https://www.googleapis.com/service_accounts/v1/jwk/[email protected] 發佈的 X.509 證書驗證
時鐘偏差±5 分鐘

JWKS 緩存 24 小時;kid 未命中時自動處理密鑰輪換。

接受的事件類型:MESSAGE(用戶在應用所在 Space 中發言)。其他類型(ADDED_TO_SPACEREMOVED_FROM_SPACECARD_CLICKED)將被丟棄。

限制與注意事項

  • GOOGLE_CHAT_AUDIENCE 須逐字節匹配。 入站 401 最常見的原因是該環境變量與控制台設置不一致。若選擇"Project Number",必須填寫字面數字字符串,不得有前導零。
  • 服務賬號 JSON 路徑須在沙盒內。 依據 CLAUDE.md §4(僅允許沙盒內文件引用)。工廠函數在啟動時讀取該文件;輪換密鑰需重啟服務。
  • 一個 JSON 對應一個 audience。 若在控制台更改"Authentication Audience",必須在同一小時內同步更新 GOOGLE_CHAT_AUDIENCE
  • 不支持卡片。 Cards v2 消息與對話框暫未在任何方向上接入。

故障排查

"401 Unauthorized on inbound"

  • GOOGLE_CHAT_AUDIENCE 與控制台不一致。打開 Chat API Configuration 頁面,逐字複製 audience 值。

"Missing required scope" on outbound

  • 該服務賬號缺少 https://www.googleapis.com/auth/chat.bot 權限範圍。工廠函數會自動請求該範圍;請確認服務賬號所屬項目已啟用 Chat API。

"Service-account JSON not found"

  • GOOGLE_CHAT_SERVICE_ACCOUNT_JSON_PATH 指向沙盒外路徑,或文件不存在。請將文件移至 ~/.minara/sandbox/ 並更新環境變量。

參考

本頁目錄