@openclaw/googlechat Plugin として動作します。Google Chat API Webhook 経由の DM とスペースに対応します(HTTP エンドポイントのみ、Pub/Sub なし)。
インストール
クイックセットアップ(初心者向け)
- Google Cloud プロジェクトを作成し、Google Chat API を有効にします。
- 移動先: Google Chat API 認証情報
- API がまだ有効でない場合は有効にします。
- サービスアカウントを作成します:
- 認証情報を作成 > サービスアカウントを押します。
- 任意の名前を付けます(例:
openclaw-chat)。 - 権限とプリンシパルは空のままにします(続行、次に 完了)。
- JSON キーを作成してダウンロードします:
- 新しいサービスアカウント > キータブ > キーを追加 > 新しいキーを作成 > JSON > 作成をクリックします。
- ダウンロードした JSON ファイルを Gateway ホストに保存します(例:
~/.openclaw/googlechat-service-account.json)。 - Google Cloud Console Chat Configuration で Google Chat アプリを作成します:
- アプリケーション情報(アプリ名、アバター URL、説明)を入力します。
- インタラクティブ機能を有効にします。
- 機能で、スペースとグループ会話に参加するにチェックを入れます。
- 接続設定で、HTTP エンドポイント URLを選択します。
- トリガーで、すべてのトリガーに共通の HTTP エンドポイント URL を使用するを選択し、公開 Gateway URL の後に
/googlechatを付けたものに設定します(公開 URL を参照)。 - 公開設定で、この Chat アプリを
<Your Domain>内の特定のユーザーとグループに公開するにチェックを入れ、メールアドレスを入力します。 - 保存をクリックします。
- アプリのステータスを有効にします: ページを更新し、アプリのステータスを見つけ、ライブ - ユーザーが利用可能に設定し、もう一度保存します。
- サービスアカウントと Webhook オーディエンス(Chat アプリ設定と一致している必要があります)で OpenClaw を設定します:
- 環境変数:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json(デフォルトアカウントのみ)、または - 設定: 設定の要点 を参照してください。
openclaw channels add --channel googlechatは--audience-type、--audience、--webhook-path、--webhook-urlも受け付けます。
- 環境変数:
- Gateway を起動します。Google Chat は Webhook パス(デフォルト
/googlechat)に POST します。
Google Chat に追加
Gateway が実行中で、自分のメールアドレスが公開設定リストに含まれている場合:- Google Chat に移動します。
- ダイレクト メッセージの横にある +(プラス)アイコンをクリックします。
- Google Cloud Console で設定したアプリ名を検索します。
- 非公開アプリであるため、ボットは Marketplace の参照リストには表示されません。名前で検索してください。
- ボットを選択し、追加またはチャットをクリックして、メッセージを送信します。
公開 URL(Webhook のみ)
Google Chat Webhook には公開 HTTPS エンドポイントが必要です。セキュリティのため、インターネットには**/googlechat パスのみ**を公開し、OpenClaw ダッシュボードやその他のエンドポイントは非公開のままにしてください。
オプション A: Tailscale Funnel(推奨)
非公開ダッシュボードには Tailscale Serve を、公開 Webhook パスには Funnel を使用します。-
Gateway がバインドされているアドレスを確認します:
IP をメモします(例:
127.0.0.1、0.0.0.0、または Tailscale の100.x.x.xアドレス)。 -
ダッシュボードを tailnet のみに公開します(ポート 8443):
-
Webhook パスのみを公開します:
- プロンプトが表示された場合は、出力に表示された認可 URL にアクセスして、このノードで Funnel を有効にします。
-
確認します:
https://<node-name>.<tailnet>.ts.net/googlechat です。ダッシュボードは https://<node-name>.<tailnet>.ts.net:8443/ で tailnet のみのままです。Google Chat アプリ設定では公開 URL(:8443 なし)を使用します。
注: この設定は再起動後も保持されます。後で削除するにはtailscale funnel resetとtailscale serve resetを使用します。
オプション B: リバースプロキシ(Caddy)
Webhook パスのみをプロキシします:your-domain.com/ へのリクエストは無視されるか 404 になり、your-domain.com/googlechat は OpenClaw にルーティングされます。
オプション C: Cloudflare Tunnel
Webhook パスのみをルーティングするようにトンネルの ingress ルールを設定します:- パス:
/googlechat->http://localhost:18789/googlechat - デフォルトルール: HTTP 404(Not Found)
仕組み
- Google Chat は Gateway Webhook パスに JSON を POST します(POST のみ、JSON content type が必須、IP ごとのレート制限あり)。
- OpenClaw はディスパッチ前にすべてのリクエストを認証します:
- Chat アプリイベントは
Authorization: Bearer <token>を保持します。完全な本文が解析される前にトークンが検証されます。 - Google Workspace アドオンイベントは本文内(
authorizationEventObject.systemIdToken)にトークンを保持し、検証前により厳しい事前認証予算(16 KB、3 秒)の下で読み取られます。
- Chat アプリイベントは
- トークンは
audienceType+audienceに対してチェックされます:audienceType: "app-url"→ オーディエンスは HTTPS Webhook URL です。audienceType: "project-number"→ オーディエンスは Cloud プロジェクト番号です。app-url下のアドオントークンでは、さらにappPrincipalをアプリの数値 OAuth 2.0 クライアント ID(21 桁、メールではありません)に設定する必要があります。設定されていない場合、検証はログ警告付きで失敗します。
- メッセージはスペースごとにルーティングされます:
- スペースはスペースごとのセッション
agent:<agentId>:googlechat:group:<spaceId>を取得します。返信はメッセージスレッドに送られます。 - DM はデフォルトでエージェントのメインセッションに統合されます。ピアごとの DM セッションには
session.dmScopeを設定します(セッション を参照)。
- スペースはスペースごとのセッション
- DM アクセスはデフォルトでペアリングです。不明な送信者にはペアリングコードが送信されます。次で承認します:
openclaw pairing approve googlechat <code>
- グループスペースではデフォルトで @メンションが必要です。メンションはアプリを対象とする Chat
USER_MENTIONアノテーションから検出されます。検出にアプリのユーザーリソース名が必要な場合はbotUser(例:users/1234567890)を設定します。 - Google Chat から exec または Plugin 承認が開始され、安定した
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:は受け付けられ、取り除かれます。
設定の要点
- サービスアカウント認証情報:
serviceAccountFile(パス)、serviceAccount(インライン JSON 文字列またはオブジェクト)、またはserviceAccountRef(env/file SecretRef)。環境変数GOOGLE_CHAT_SERVICE_ACCOUNT(インライン JSON)とGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(パス)はデフォルトアカウントにのみ適用されます。複数アカウント設定では、アカウントごとのserviceAccountRefを含め、同じキーでchannels.googlechat.accounts.<id>を使用します。 - デフォルトの Webhook パスは、
webhookPathが未設定の場合/googlechatです。webhookUrlは代わりにパスを提供できます。 - グループキーは安定したスペース ID(
spaces/<spaceId>)である必要があります。表示名キーは非推奨であり、その旨がログに記録されます。 dangerouslyAllowNameMatchingは、許可リストに対する可変メールプリンシパル照合を再度有効にします(緊急互換モード)。doctor はメールエントリについて警告します。- リアクションはデフォルトで有効で、
reactionsツールとchannels actionを通じて公開されます。無効にするにはactions.reactions: falseを使用します。 - ネイティブ承認カードは、リアクションイベントではなく Google Chat
cardsV2ボタンクリックを使用します。承認者はdm.allowFromまたはdefaultToから取得され、安定した数値のusers/<id>値である必要があります。 - メッセージアクションは、テキスト用の
sendと、明示的な添付送信用のupload-fileを公開します。upload-fileはmedia/filePath/pathに加え、任意のmessage、filename、スレッドターゲット(threadId/replyTo)を受け付けます。 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 Method Not Allowed
Google Cloud Logs Explorer に次のようなエラーが表示される場合:-
チャンネルが設定されていない:
channels.googlechatセクションがありません。次で確認します:“Config path not found” が返る場合は、設定を追加します(設定の要点 を参照)。 -
Plugin が有効でない: Plugin のステータスを確認します:
“disabled” が表示される場合は、設定に
plugins.entries.googlechat.enabled: trueを追加します。 -
設定変更後に Gateway が再起動されていない:
その他の問題
openclaw channels status --probeは認証エラーと不足しているオーディエンス設定を表示します(audienceとaudienceTypeはどちらも必須です)。- メッセージが届かない場合は、Chat アプリの Webhook URL とトリガー設定を確認します。
- メンションゲーティングが返信をブロックする場合は、
botUserをアプリのユーザーリソース名に設定し、requireMentionを確認します。 - テストメッセージの送信中に
openclaw logs --followを実行すると、リクエストが Gateway に到達しているかどうかが表示されます。
関連
- チャネル概要 — サポートされているすべてのチャネル
- チャネルルーティング — メッセージのセッションルーティング
- Gateway 設定
- グループ — グループチャットの動作とメンションによるゲート制御
- ペアリング — DM 認証とペアリングフロー
- リアクション
- セキュリティ — アクセスモデルと堅牢化