Mainstream messaging
Google Chat
Google Chat 以官方 @openclaw/googlechat 外掛執行:透過 Google Chat API 網路鉤子支援私訊與聊天室(僅限 HTTP 端點,不使用 Pub/Sub)。
安裝
openclaw plugins install @openclaw/googlechat本機簽出版本(從 git 儲存庫執行時):
openclaw plugins install ./path/to/local/googlechat-plugin快速設定(初學者)
- 建立 Google Cloud 專案並啟用 Google Chat API。
- 前往:Google Chat API 憑證
- 如果尚未啟用 API,請將其啟用。
- 建立一個服務帳戶:
- 按下 Create Credentials > Service Account。
- 使用任意名稱(例如
openclaw-chat)。 - 將權限與主體留空(按 Continue,再按 Done)。
- 建立並下載 JSON 金鑰:
- 按一下新的服務帳戶 > Keys 分頁 > Add Key > Create new key > JSON > Create。
- 將下載的 JSON 檔案儲存在閘道主機上(例如
~/.openclaw/googlechat-service-account.json)。 - 在 Google Cloud Console Chat 設定中建立 Google Chat 應用程式:
- 填寫 Application info(應用程式名稱、頭像 URL、說明)。
- 啟用 Interactive features。
- 在 Functionality 下勾選 Join spaces and group conversations。
- 在 Connection settings 下選取 HTTP endpoint URL。
- 在 Triggers 下選取 Use a common HTTP endpoint URL for all triggers,並將其設為公開閘道 URL 後接
/googlechat(請參閱公開 URL)。 - 在 Visibility 下勾選 Make this Chat app available to specific people and groups in
<Your Domain>,然後輸入你的電子郵件地址。 - 按一下 Save。
- 啟用應用程式狀態:重新整理頁面,找到 App status,將其設為 Live - available to users,再按一次 Save。
- 使用服務帳戶與網路鉤子對象設定 OpenClaw(必須符合 Chat 應用程式設定):
- 環境變數:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json(僅限預設帳戶),或 - 設定:請參閱設定重點。
openclaw channels add --channel googlechat也接受--audience-type、--audience、--webhook-path與--webhook-url。
- 環境變數:
- 啟動閘道。Google Chat 會向你的網路鉤子路徑傳送 POST 要求(預設為
/googlechat)。
新增至 Google Chat
閘道執行後,且你的電子郵件地址已列入可見性清單時:
- 前往 Google Chat。
- 按一下 Direct Messages 旁的 +(加號)圖示。
- 搜尋你在 Google Cloud Console 中設定的 App name。
- 此機器人是私人應用程式,因此_不會_出現在市集瀏覽清單中;請依名稱搜尋。
- 選取機器人,按一下 Add 或 Chat,然後傳送訊息。
公開 URL(僅限網路鉤子)
Google Chat 網路鉤子需要公開的 HTTPS 端點。為確保安全,請只將 /googlechat 路徑公開至網際網路,並將 OpenClaw 儀表板與其他端點保持為私人存取。
選項 A:Tailscale Funnel(建議)
使用 Tailscale Serve 提供私人儀表板,並使用 Funnel 提供公開網路鉤子路徑。
-
檢查閘道繫結的位址:
bash ss -tlnp | grep 18789記下 IP(例如
127.0.0.1、0.0.0.0或 Tailscale100.x.x.x位址)。 -
僅向 tailnet 公開儀表板(連接埠 8443):
bash # 如果繫結至 localhost(127.0.0.1 或 0.0.0.0):tailscale serve --bg --https 8443 http://127.0.0.1:18789 # 如果僅繫結至 Tailscale IP:tailscale serve --bg --https 8443 http://100.x.x.x:18789 -
僅公開網路鉤子路徑:
bash # 如果繫結至 localhost(127.0.0.1 或 0.0.0.0):tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # 如果僅繫結至 Tailscale IP:tailscale funnel --bg --set-path /googlechat http://100.x.x.x:18789/googlechat -
如果出現提示,請造訪輸出中顯示的授權 URL,為此節點啟用 Funnel。
-
驗證:
bash tailscale serve statustailscale funnel status
你的公開網路鉤子 URL 為 https://<node-name>.<tailnet>.ts.net/googlechat;儀表板仍僅限 tailnet 存取,位址為 https://<node-name>.<tailnet>.ts.net:8443/。請在 Google Chat 應用程式設定中使用公開 URL(不含 :8443)。
注意:此設定會在重新啟動後持續保留。日後可使用
tailscale funnel reset與tailscale serve reset移除。
選項 B:反向代理(Caddy)
僅代理網路鉤子路徑:
your-domain.com { reverse_proxy /googlechat* localhost:18789}對 your-domain.com/ 的要求會被忽略或傳回 404,而 your-domain.com/googlechat 會路由至 OpenClaw。
選項 C:Cloudflare Tunnel
設定通道輸入規則,僅路由網路鉤子路徑:
- Path:
/googlechat->http://localhost:18789/googlechat - Default rule:HTTP 404(找不到)
運作方式
- Google Chat 將 JSON 以 POST 傳送至閘道網路鉤子路徑(僅限 POST、必須使用 JSON 內容類型,並依 IP 限制速率)。
- OpenClaw 會在分派前驗證每個要求:
- Chat 應用程式事件帶有
Authorization: Bearer <token>;系統會先驗證權杖,再剖析完整主體。 - Google Workspace 外掛事件會將權杖放在主體中(
authorizationEventObject.systemIdToken),並在驗證前於更嚴格的預先驗證限制(16 KB、3 秒)下讀取。
- Chat 應用程式事件帶有
- 系統會依據
audienceType+audience檢查權杖:audienceType: "app-url"→ 對象為你的 HTTPS 網路鉤子 URL。audienceType: "project-number"→ 對象為 Cloud 專案編號。- 在
app-url下,外掛權杖還要求將appPrincipal設為應用程式的數字 OAuth 2.0 用戶端 ID(21 位數字,不是電子郵件);否則驗證會失敗並記錄警告。
- 訊息依聊天室路由:
- 聊天室會取得各自的工作階段
agent:<agentId>:googlechat:group:<spaceId>;回覆會傳送至訊息討論串。 - 私訊預設會合併至代理程式的主要工作階段;若要為各對象建立個別私訊工作階段,請設定
session.dmScope(請參閱工作階段)。
- 聊天室會取得各自的工作階段
- 私訊存取預設採用配對機制。未知的傳送者會收到配對碼;使用以下指令核准:
openclaw pairing approve googlechat <code>
- 群組聊天室預設要求 @提及。系統會從以應用程式為目標的 Chat
USER_MENTION註解偵測提及;如果偵測時需要應用程式的使用者資源名稱,請設定botUser(例如users/1234567890)。 - 當執行或外掛核准程序從 Google Chat 啟動,且已設定穩定的
users/<id>核准者時,OpenClaw 會在原始聊天室或討論串中發布原生核准卡片(cardsV2)。卡片按鈕帶有不透明的回呼權杖;只有在無法使用原生傳送時,才會顯示手動/approve <id> <decision>提示。
目標
傳送與允許清單請使用以下識別碼:
- 私訊:
users/<userId>(建議)。 - 聊天室:
spaces/<spaceId>。 - 原始電子郵件
name@example.com可變動,且僅在channels.googlechat.dangerouslyAllowNameMatching: true時用於允許清單比對。 - 已棄用:
users/<email>會被視為使用者 ID,而不是電子郵件允許清單項目。 - 接受並會移除前綴
googlechat:、google-chat:與gchat:。
設定重點
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // 或 serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", appPrincipal: "123456789012345678901", // 僅用於外掛驗證;數字 OAuth 用戶端 ID webhookPath: "/googlechat", botUser: "users/1234567890", // 選用;協助偵測提及 allowBots: false, dm: { policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { enabled: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "僅提供簡短回答。", }, }, typingIndicator: "message", mediaMaxMb: 20, }, },}注意事項:
- 服務帳戶憑證:
serviceAccountFile(路徑)、serviceAccount(行內 JSON 字串或物件)或serviceAccountRef(環境變數/檔案 SecretRef)。環境變數GOOGLE_CHAT_SERVICE_ACCOUNT(行內 JSON)與GOOGLE_CHAT_SERVICE_ACCOUNT_FILE(路徑)僅套用至預設帳戶。多帳戶設定使用channels.googlechat.accounts.<id>及相同的鍵,包括各帳戶的serviceAccountRef。 - 未設定
webhookPath時,預設網路鉤子路徑為/googlechat;也可由webhookUrl提供路徑。 - 群組鍵必須是穩定的聊天室 ID(
spaces/<spaceId>)。顯示名稱鍵已棄用,並會記錄相關訊息。 dangerouslyAllowNameMatching會重新啟用可變動的電子郵件主體允許清單比對(緊急相容模式);doctor 會針對電子郵件項目提出警告。- 不提供 Google Chat 回應動作。此外掛使用服務帳戶驗證,而 Google Chat 回應端點需要使用者驗證。現有的
actions.reactions設定會基於相容性而被接受,但不會產生任何效果。 - 原生核准卡片使用 Google Chat
cardsV2按鈕點擊,而不是回應事件。核准者來自dm.allowFrom或defaultTo,且必須是穩定的數字users/<id>值。 - 訊息動作只提供文字
send。Google Chat 附件上傳需要使用者驗證,而此外掛使用服務帳戶驗證,因此不提供對外檔案上傳。 typingIndicator:message(預設)會發布_<Bot> is typing..._預留訊息,並將其編輯為第一則回覆;none會將其停用;reaction需要使用者 OAuth,目前在服務帳戶驗證下會退回使用message,並記錄錯誤。- 傳入附件(每則訊息的第一個附件)會透過 Chat API 下載至媒體管線,大小上限由
mediaMaxMb控制(預設為 20)。 - 預設會忽略機器人撰寫的訊息。設定
allowBots: true後,接受的機器人訊息會使用共用的機器人迴圈防護:先設定channels.defaults.botLoopProtection,再以channels.googlechat.botLoopProtection或channels.googlechat.groups.<space>.botLoopProtection覆寫。
密鑰參照詳細資訊:密鑰管理。
疑難排解
405 不允許的方法
如果 Google Cloud Logs Explorer 顯示如下錯誤:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed表示尚未註冊網路鉤子處理常式。常見原因:
-
未設定頻道:缺少
channels.googlechat區段。使用以下指令驗證:bash openclaw config get channels.googlechat如果傳回「找不到設定路徑」,請新增設定(請參閱設定重點)。
-
未啟用外掛:檢查外掛狀態:
bash openclaw plugins list | grep googlechat如果顯示「已停用」,請在設定中新增
plugins.entries.googlechat.enabled: true。 -
設定變更後未重新啟動閘道:
bash openclaw gateway restart
確認頻道正在執行:
openclaw channels status# 應顯示:Google Chat default: enabled, configured, ...其他問題
openclaw channels status --probe會顯示驗證錯誤與缺少的對象設定(audience與audienceType兩者皆為必要設定)。- 如果未收到任何訊息,請確認 Chat 應用程式的網路鉤子 URL 與觸發條件設定。
- 如果提及門檻阻止回覆,請將
botUser設為應用程式的使用者資源名稱,並檢查requireMention。 - 傳送測試訊息時執行
openclaw logs --follow,即可查看要求是否到達閘道。