Mainstream messaging
Google Chat
ステータス: Google Chat API Webhook 経由の DM + スペース用のダウンロード可能な Plugin (HTTP のみ)。
インストール
チャンネルを設定する前に Google Chat をインストールします。
openclaw plugins install @openclaw/googlechatローカルチェックアウト (git リポジトリから実行する場合):
openclaw plugins install ./path/to/local/googlechat-pluginクイックセットアップ (初心者向け)
- Google Cloud プロジェクトを作成し、Google Chat API を有効にします。
- 移動先: Google Chat API 認証情報
- API がまだ有効でない場合は有効にします。
- サービス アカウントを作成します。
- 認証情報を作成 > サービス アカウントを押します。
- 任意の名前を付けます (例:
openclaw-chat)。 - 権限は空欄のままにします (続行を押します)。
- アクセス権を持つプリンシパルは空欄のままにします (完了を押します)。
- JSON キーを作成してダウンロードします。
- サービス アカウントの一覧で、作成したばかりのアカウントをクリックします。
- キータブに移動します。
- キーを追加 > 新しいキーを作成をクリックします。
- JSON を選択して 作成を押します。
- ダウンロードした JSON ファイルを Gateway ホストに保存します (例:
~/.openclaw/googlechat-service-account.json)。 - Google Cloud Console Chat 設定で Google Chat アプリを作成します。
- アプリケーション情報を入力します。
- アプリ名: (例:
OpenClaw) - アバター URL: (例:
https://openclaw.ai/logo.png) - 説明: (例:
Personal AI Assistant)
- アプリ名: (例:
- インタラクティブ機能を有効にします。
- 機能で、スペースとグループ会話に参加にチェックを入れます。
- 接続設定で、HTTP エンドポイント URLを選択します。
- トリガーで、すべてのトリガーに共通の HTTP エンドポイント URL を使用を選択し、Gateway の公開 URL に
/googlechatを付けたものを設定します。- ヒント: Gateway の公開 URL を確認するには
openclaw statusを実行します。
- ヒント: Gateway の公開 URL を確認するには
- 公開設定で、この Chat アプリを
<Your Domain>内の特定のユーザーとグループに公開するにチェックを入れます。 - テキストボックスにメールアドレス (例:
user@example.com) を入力します。 - 下部の 保存をクリックします。
- アプリケーション情報を入力します。
- アプリのステータスを有効にします。
- 保存後、ページを更新します。
- アプリのステータスセクションを探します (通常、保存後に上部または下部付近にあります)。
- ステータスを ライブ - ユーザーが利用可能に変更します。
- もう一度 保存をクリックします。
- サービス アカウントのパス + Webhook audience で OpenClaw を設定します。
- 環境変数:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - または config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json"。
- 環境変数:
- Webhook audience の種類 + 値を設定します (Chat アプリの設定と一致させます)。
- Gateway を起動します。Google Chat は Webhook パスに POST します。
Google Chat に追加
Gateway が実行中で、メールアドレスが公開設定リストに追加されたら:
- Google Chat に移動します。
- ダイレクト メッセージの横にある + (プラス) アイコンをクリックします。
- 検索バー (通常ユーザーを追加する場所) に、Google Cloud Console で設定したアプリ名を入力します。
- 注: 非公開アプリのため、ボットは「Marketplace」の参照リストには_表示されません_。名前で検索する必要があります。
- 結果からボットを選択します。
- 追加または チャットをクリックして 1:1 会話を開始します。
- アシスタントを起動するために「こんにちは」を送信します。
公開 URL (Webhook のみ)
Google Chat Webhook には公開 HTTPS エンドポイントが必要です。セキュリティのため、インターネットには /googlechat パスのみを公開します。OpenClaw ダッシュボードやその他の機密エンドポイントはプライベートネットワーク上に保持してください。
オプション A: Tailscale Funnel (推奨)
プライベートダッシュボードには Tailscale Serve を、公開 Webhook パスには Funnel を使用します。これにより / はプライベートのまま、/googlechat のみを公開できます。
-
Gateway がどのアドレスにバインドされているか確認します。
bash ss -tlnp | grep 18789IP アドレスをメモします (例:
127.0.0.1、0.0.0.0、または100.x.x.xのような Tailscale IP)。 -
ダッシュボードを tailnet のみに公開します (ポート 8443)。
bash # If bound to localhost (127.0.0.1 or 0.0.0.0):tailscale serve --bg --https 8443 http://127.0.0.1:18789 # If bound to Tailscale IP only (e.g., 100.106.161.80):tailscale serve --bg --https 8443 http://100.106.161.80:18789 -
Webhook パスのみを公開します。
bash # If bound to localhost (127.0.0.1 or 0.0.0.0):tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # If bound to Tailscale IP only (e.g., 100.106.161.80):tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat -
Funnel アクセス用にノードを承認します。 プロンプトが表示された場合は、出力に表示される承認 URL にアクセスし、tailnet ポリシーでこのノードの Funnel を有効にします。
-
設定を確認します。
bash tailscale serve statustailscale funnel status
公開 Webhook 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)
Caddy のようなリバースプロキシを使用する場合は、特定のパスのみをプロキシします。
your-domain.com { reverse_proxy /googlechat* localhost:18789}この設定では、your-domain.com/ へのリクエストは無視されるか 404 を返し、your-domain.com/googlechat は安全に OpenClaw へルーティングされます。
オプション C: Cloudflare Tunnel
Webhook パスのみをルーティングするように Tunnel の ingress ルールを設定します。
- パス:
/googlechat->http://localhost:18789/googlechat - デフォルトルール: HTTP 404 (Not Found)
仕組み
- Google Chat は Webhook POST を Gateway に送信します。各リクエストには
Authorization: Bearer <token>ヘッダーが含まれます。- OpenClaw は、ヘッダーが存在する場合、Webhook 本文全体を読み取り/解析する前に bearer 認証を検証します。
- 本文に
authorizationEventObject.systemIdTokenを含む Google Workspace Add-on リクエストは、より厳格な事前認証本文バジェットでサポートされます。
- OpenClaw は、設定された
audienceType+audienceに対してトークンを検証します。audienceType: "app-url"→ audience は HTTPS Webhook URL です。audienceType: "project-number"→ audience は Cloud プロジェクト番号です。
- メッセージはスペース別にルーティングされます。
- DM はセッションキー
agent:<agentId>:googlechat:direct:<spaceId>を使用します。 - スペースはセッションキー
agent:<agentId>:googlechat:group:<spaceId>を使用します。
- DM はセッションキー
- DM アクセスはデフォルトでペアリングです。不明な送信者にはペアリングコードが送られます。次で承認します。
openclaw pairing approve googlechat <code>
- グループスペースではデフォルトで @メンションが必要です。メンション検出にアプリのユーザー名が必要な場合は
botUserを使用します。 - exec または Plugin 承認リクエストが Google Chat から開始され、安定した
users/<id>承認者が設定されている場合、OpenClaw は発信元スペースまたはスレッドにネイティブの Google Chat 承認カードを投稿します。カードボタンは不透明なコールバックトークンを使用し、ネイティブ承認配信が利用できない場合にのみ手動の/approve <id> <decision>プロンプトが表示されます。
ターゲット
配信と許可リストには次の識別子を使用します。
- ダイレクトメッセージ:
users/<userId>(推奨)。 - 生のメールアドレス
name@example.comは変更可能であり、channels.googlechat.dangerouslyAllowNameMatching: trueの場合にのみダイレクト許可リスト照合に使用されます。 - 非推奨:
users/<email>はメール許可リストではなくユーザー ID として扱われます。 - スペース:
spaces/<spaceId>。
Config の要点
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // or serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", webhookPath: "/googlechat", botUser: "users/1234567890", // optional; helps mention detection allowBots: false, dm: { policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { enabled: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "Short answers only.", }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, },}注:
- サービス アカウント認証情報は
serviceAccount(JSON 文字列) でインライン渡しすることもできます。 serviceAccountRefもサポートされています (env/file SecretRef)。channels.googlechat.accounts.<id>.serviceAccountRef配下のアカウント別 refs も含みます。webhookPathが設定されていない場合、デフォルトの Webhook パスは/googlechatです。dangerouslyAllowNameMatchingは、許可リスト用に変更可能なメールプリンシパル照合を再度有効にします (緊急互換モード)。actions.reactionsが有効な場合、リアクションはreactionsツールとchannels actionで利用できます。- ネイティブ承認カードは、リアクションイベントではなく Google Chat
cardsV2ボタンクリックを使用します。承認者はdm.allowFromまたはdefaultToから取得され、安定した数値のusers/<id>値である必要があります。 - メッセージアクションは、テキスト用に
send、明示的な添付ファイル送信用にupload-fileを公開します。upload-fileはmedia/filePath/pathに加え、任意のmessage、filename、スレッドターゲットを受け付けます。 typingIndicatorはmessage(デフォルト)、none、reactionをサポートします (reactionにはユーザー OAuth が必要です)。- 添付ファイルは Chat API 経由でダウンロードされ、メディアパイプラインに保存されます (サイズは
mediaMaxMbで上限設定)。 - ボットが作成した Google Chat メッセージはデフォルトで無視されます。意図的に
allowBots: trueを設定した場合、受け入れられたボット作成メッセージは共有のボットループ保護を使用します。channels.defaults.botLoopProtectionを設定し、あるスペースに異なるバジェットが必要な場合はchannels.googlechat.botLoopProtectionまたはchannels.googlechat.groups.<space>.botLoopProtectionで上書きします。
シークレット参照の詳細: シークレット管理。
トラブルシューティング
405 Method Not Allowed
Google Cloud Logs Explorer に次のようなエラーが表示される場合:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowedこれは Webhook ハンドラーが登録されていないことを意味します。一般的な原因:
-
チャンネルが設定されていない: config に
channels.googlechatセクションがありません。次で確認します。bash openclaw config get channels.googlechat「Config path not found」が返る場合は、設定を追加します (Config の要点を参照)。
-
Plugin が有効化されていない: Plugin のステータスを確認します。
bash openclaw plugins list | grep googlechat「disabled」と表示される場合は、config に
plugins.entries.googlechat.enabled: trueを追加します。 -
Gateway が再起動されていない: config を追加した後、Gateway を再起動します。
bash openclaw gateway restart
チャンネルが実行中であることを確認します。
openclaw channels status# Should show: Google Chat default: enabled, configured, ...その他の問題
- 認証エラーや audience config の不足を確認するには
openclaw channels status --probeを確認します。 - メッセージが届かない場合は、Chat アプリの Webhook URL + イベントサブスクリプションを確認します。
- メンションゲートにより返信がブロックされる場合は、
botUserをアプリのユーザーリソース名に設定し、requireMentionを確認します。 - Gateway にリクエストが到達しているか確認するには、テストメッセージを送信しながら
openclaw logs --followを使用します。
関連ドキュメント:
関連
- チャネル概要 — サポートされているすべてのチャネル
- ペアリング — DM 認証とペアリングフロー
- グループ — グループチャットの動作とメンション制御
- チャネルルーティング — メッセージのセッションルーティング
- セキュリティ — アクセスモデルと強化