Google Chat(Chat API)
ステータス: Google Chat API の Webhook(HTTP のみ)経由で、DM とスペースに対応済みです。クイックセットアップ(初心者)
- Google Cloud プロジェクトを作成し、Google Chat API を有効化します。
- こちらへ移動: Google Chat API Credentials
- まだ有効でない場合は API を有効化します。
- Service Account を作成します。
- Create Credentials > Service Account をクリックします。
- 任意の名前を付けます(例:
openclaw-chat)。 - 権限は空欄のままにします(Continue を押します)。
- アクセス権を持つプリンシパルも空欄のままにします(Done を押します)。
- JSON Key を作成してダウンロードします。
- Service Account の一覧から、作成したものをクリックします。
- Keys タブに移動します。
- Add Key > Create new key をクリックします。
- JSON を選択して Create を押します。
- ダウンロードした JSON ファイルをゲートウェイ ホストに保存します(例:
~/.openclaw/googlechat-service-account.json)。 - Google Cloud Console Chat Configuration で Google Chat アプリを作成します。
- Application info を入力します。
- App name:(例:
OpenClaw) - Avatar URL:(例:
https://openclaw.ai/logo.png) - Description:(例:
Personal AI Assistant)
- App name:(例:
- 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を設定します。- ヒント:
openclaw statusを実行すると、ゲートウェイの公開 URL を確認できます。
- ヒント:
- Visibility で Make this Chat app available to specific people and groups in <Your Domain> にチェックします。
- テキストボックスに自分のメールアドレス(例:
[email protected])を入力します。 - 画面下部の Save をクリックします。
- Application info を入力します。
- アプリのステータスを有効化します。
- 保存後、ページを更新します。
- App status セクション(保存後、通常は上部または下部に表示されます)を探します。
- ステータスを Live - available to users に変更します。
- 再度 Save をクリックします。
- Service Account のパスと Webhook audience を使って OpenClaw を設定します。
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - または config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json"。
- Env:
- Webhook audience のタイプと値を設定します(Chat アプリの設定と一致させます)。
- ゲートウェイを起動します。 GoogleチャットはWebhookのパスにPOSTします。
Google Chat に追加
ゲートウェイが稼働しており、可視性リストに自分のメールが追加されている場合:- Google Chat に移動します。
- Direct Messages の横にある +(プラス)アイコンをクリックします。
- 検索バー(通常人を追加する場所)に、Google Cloud Console で設定した App name を入力します。
- 注記: このボットはプライベートアプリのため、「Marketplace」の一覧には表示されません。名前で検索する必要があります。 名前で検索する必要があります。 名前で検索する必要があります。
- 検索結果からボットを選択します。
- Add または Chat をクリックして 1:1 の会話を開始します。
- 「Hello」を送信してアシスタントを起動します。
公開 URL(Webhook のみ)
Google Chat の Webhook には公開 HTTPS エンドポイントが必要です。セキュリティのため、インターネットに公開するのは/googlechat パスのみにしてください。OpenClaw ダッシュボードやその他の機密エンドポイントは、プライベートネットワーク上に保持します。 セキュリティのため、/googlechatのパスだけをインターネットに公開します。 OpenClawダッシュボードやその他の機密性の高いエンドポイントをプライベートネットワーク上に保持します。 セキュリティのため、/googlechatのパスだけをインターネットに公開します。 OpenClawダッシュボードやその他の機密性の高いエンドポイントをプライベートネットワーク上に保持します。
オプション A: Tailscale Funnel(推奨)
プライベートなダッシュボードには Tailscale Serve、公開 Webhook パスには Funnel を使用します。これにより/ を非公開のまま、/googlechat のみを公開できます。 /は/googlechatのみを公開しています。
-
ゲートウェイがどのアドレスにバインドされているか確認します。
IP アドレス(例:
127.0.0.1、0.0.0.0、または100.x.x.xのような Tailscale IP)をメモします。 -
ダッシュボードを tailnet のみに公開します(ポート 8443)。
-
Webhook パスのみを公開します。
- ノードを Funnel アクセス用に承認します。 プロンプトが表示された場合は、出力に表示される承認 URL にアクセスして、tailnet ポリシーでこのノードの Funnel を有効化します。
-
設定を確認します。
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を実行します。 注記: この設定は再起動後も保持されます。後で削除するには、tailscale funnel resetとtailscale serve resetを実行します。
オプション B: リバースプロキシ(Caddy)
Caddy のようなリバースプロキシを使用する場合は、特定のパスのみをプロキシします。your-domain.com/ へのリクエストは無視されるか 404 が返され、your-domain.com/googlechat のみが安全に OpenClaw にルーティングされます。
オプション C: Cloudflare Tunnel
トンネルの ingress ルールを設定し、Webhook パスのみをルーティングします。- Path:
/googlechat->http://localhost:18789/googlechat - Default Rule: HTTP 404(Not Found)
How it works
- ゲートウェイを起動します。 GoogleチャットはWebhookのパスにPOSTします。 各リクエストには
Authorization: Bearer <token>ヘッダーが含まれています。 - OpenClaw は、設定された
audienceTypeとaudienceに対してトークンを検証します。audienceType: "app-url"→ audience は HTTPS の Webhook URL です。audienceType: "project-number"→ audience は Cloud プロジェクト番号です。
- メッセージはスペースごとにルーティングされます。
- DM はセッションキー
agent:<agentId>:googlechat:dm:<spaceId>を使用します。 - スペースはセッションキー
agent:<agentId>:googlechat:group:<spaceId>を使用します。
- DM はセッションキー
- DMアクセスはデフォルトでペアリングされています。 不明な送信者はペアリングコードを受け取ります。以下を承認してください:
openclaw pairing approve googlechat <code>
- グループスペースにはデフォルトで@-メンションが必要です。 グループスペースでは、デフォルトで @ メンションが必要です。メンション検出にアプリのユーザー名が必要な場合は
botUserを使用します。
対象
配信および許可リストには、次の識別子を使用します。- ダイレクトメッセージ:
users/<userId>またはusers/<email>(メールアドレスも使用できます)。 - 非推奨:
users/<email>はメール許可リストではなく、ユーザー ID として扱われます。 - スペース:
spaces/<spaceId>。
設定の要点
- Service Account の認証情報は、
serviceAccount(JSON 文字列)でインライン指定することもできます。 - デフォルトの Webhook パスは、
webhookPathが設定されていない場合、/googlechatです。 - リアクションは、
actions.reactionsが有効な場合にreactionsツールおよびchannels actionで利用できます。 typingIndicatorはnone、message(デフォルト)、およびreactionをサポートします(リアクションにはユーザー OAuth が必要です)。- 添付ファイルは Chat API 経由でダウンロードされ、メディアパイプラインに保存されます(サイズは
mediaMaxMbにより制限されます)。
トラブルシューティング
405 Method Not Allowed
Google Cloud Logs Explorer に次のようなエラーが表示される場合:-
チャンネルが未設定: 設定に
channels.googlechatセクションがありません。次で確認します。 以下の認証を行います。 以下の認証を行います。「Config path not found」と返る場合は、設定を追加してください(設定の要点 を参照)。 -
プラグインが有効でない: プラグインの状態を確認します。
「disabled」と表示される場合は、
plugins.entries.googlechat.enabled: trueを設定に追加します。 -
ゲートウェイが再起動されていない: 設定追加後にゲートウェイを再起動します。
その他の問題
- 認証エラーや audience 設定の不足については
openclaw channels status --probeを確認します。 - メッセージが届かない場合は、Chat アプリの Webhook URL とイベントサブスクリプションを確認します。
- メンション制御により返信がブロックされる場合は、
botUserをアプリのユーザーリソース名に設定し、requireMentionを確認します。 - テストメッセージ送信時に
openclaw logs --followを使用して、リクエストがゲートウェイに到達しているか確認します。