Google Chat (Chat API)
ステータス: Google Chat API webhook 経由の DM とスペースに対応済み(HTTP のみ)。クイックセットアップ(初級者向け)
- Google Cloud プロジェクトを作成し、Google Chat API を有効にします。
- 移動先: Google Chat API Credentials
- まだ有効になっていない場合は API を有効にします。
- Service Account を作成します。
- Create Credentials > Service Account を押します。
- 任意の名前を付けます(例:
openclaw-chat)。 - 権限は空欄のままにします(Continue を押します)。
- アクセス権を持つ principal も空欄のままにします(Done を押します)。
- JSON Key を作成してダウンロードします。
- Service Account の一覧で、先ほど作成したものをクリックします。
- Keys タブに移動します。
- Add Key > Create new key をクリックします。
- JSON を選択して Create を押します。
- ダウンロードした JSON ファイルを gateway host に保存します(例:
~/.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 を選択し、gateway の公開 URL の末尾に
/googlechatを付けて設定します。- ヒント:
openclaw statusを実行すると gateway の公開 URL を確認できます。
- ヒント:
- Visibility で Make this Chat app available to specific people and groups in <Your Domain> にチェックを入れます。
- テキストボックスに自分のメールアドレス(例:
user@example.com)を入力します。 - 下部の 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 アプリ設定と一致させます)。
- gateway を起動します。Google Chat が webhook パスに POST します。
Google Chat に追加する
gateway が実行中で、あなたのメールアドレスが visibility list に追加されていれば、次の手順を行います。- Google Chat にアクセスします。
- Direct Messages の横にある +(プラス)アイコンをクリックします。
- 検索バー(通常は人を追加する場所)に、Google Cloud Console で設定した App name を入力します。
- 注: この bot はプライベートアプリのため、「Marketplace」の参照一覧には 表示されません。名前で検索する必要があります。
- 結果から bot を選択します。
- Add または Chat をクリックして 1 対 1 の会話を開始します。
- 「Hello」を送ってアシスタントを起動します。
公開 URL(webhook のみ)
Google Chat webhook には公開 HTTPS エンドポイントが必要です。セキュリティのため、/googlechat パスのみをインターネットに公開してください。OpenClaw ダッシュボードやその他の機密エンドポイントはプライベートネットワーク内に維持してください。
オプション A: Tailscale Funnel(推奨)
プライベートなダッシュボードには Tailscale Serve を使い、公開 webhook パスには Funnel を使います。これにより、/ は非公開のまま、/googlechat のみを公開できます。
-
gateway がどのアドレスに bind されているか確認します。
IP アドレス(例:
127.0.0.1、0.0.0.0、または100.x.x.xのような Tailscale IP)を確認してください。 -
ダッシュボードを tailnet のみに公開します(ポート 8443)。
-
webhook パスのみを公開します。
- Funnel アクセス用にノードを認可します。 求められた場合は、出力に表示される認可 URL にアクセスして、tailnet policy でこのノードの 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を実行してください。
オプション B: リバースプロキシ(Caddy)
Caddy のようなリバースプロキシを使う場合は、特定のパスのみをプロキシしてください。your-domain.com/ へのリクエストは無視されるか 404 を返し、your-domain.com/googlechat は安全に OpenClaw にルーティングされます。
オプション C: Cloudflare Tunnel
tunnel の ingress ルールで、webhook パスのみをルーティングするよう設定します。- Path:
/googlechat->http://localhost:18789/googlechat - Default Rule: HTTP 404(Not Found)
仕組み
- Google Chat が gateway に webhook POST を送信します。各リクエストには
Authorization: Bearer <token>ヘッダーが含まれます。- OpenClaw は、そのヘッダーが存在する場合、webhook body 全体を読み取り・解析する前に bearer 認証を検証します。
- body 内に
authorizationEventObject.systemIdTokenを含む Google Workspace Add-on リクエストは、より厳格な事前認証 body 予算を通じてサポートされます。
- OpenClaw は、設定された
audienceType+audienceに対して token を検証します。audienceType: "app-url"→ audience は HTTPS webhook URL です。audienceType: "project-number"→ audience は Cloud project number です。
- メッセージはスペースごとにルーティングされます。
- DM はセッションキー
agent:<agentId>:googlechat:direct:<spaceId>を使います。 - スペースはセッションキー
agent:<agentId>:googlechat:group:<spaceId>を使います。
- DM はセッションキー
- DM アクセスはデフォルトで pairing です。未知の送信者には pairing code が送られ、次で承認します。
openclaw pairing approve googlechat <code>
- グループスペースでは、デフォルトで @-mention が必要です。mention 検出にアプリの user 名が必要な場合は
botUserを使用してください。
ターゲット
配信と allowlist には、次の識別子を使用します。- ダイレクトメッセージ:
users/<userId>(推奨)。 - 生のメールアドレス
name@example.comは変更可能であり、channels.googlechat.dangerouslyAllowNameMatching: trueの場合にのみ、ダイレクト allowlist 一致に使われます。 - 非推奨:
users/<email>はメール allowlist ではなく user id として扱われます。 - スペース:
spaces/<spaceId>。
主な設定
- Service Account 認証情報は
serviceAccount(JSON 文字列)としてインラインで渡すこともできます。 serviceAccountRefもサポートされています(env/file SecretRef)。channels.googlechat.accounts.<id>.serviceAccountRef配下のアカウント単位の ref も含みます。webhookPathが設定されていない場合、デフォルトの webhook path は/googlechatです。dangerouslyAllowNameMatchingは、allowlist 用の変更可能なメール principal 一致を再有効化します(緊急時の互換モード)。actions.reactionsが有効な場合、リアクションはreactionstool とchannels actionから利用できます。- メッセージアクションでは、テキスト用の
sendと、明示的な添付送信用のupload-fileが提供されます。upload-fileはmedia/filePath/pathと、任意のmessage、filename、スレッド指定を受け取ります。 typingIndicatorはnone、message(デフォルト)、reactionをサポートします(reaction には user OAuth が必要です)。- 添付ファイルは Chat API 経由でダウンロードされ、media pipeline に保存されます(サイズ上限は
mediaMaxMb)。
トラブルシューティング
405 Method Not Allowed
Google Cloud Logs Explorer に次のようなエラーが表示される場合:-
チャネルが設定されていない: config に
channels.googlechatセクションがありません。次で確認します。これが「Config path not found」を返す場合は、設定を追加してください(主な設定 を参照)。 -
プラグインが有効になっていない: plugin の状態を確認します。
「disabled」と表示される場合は、config に
plugins.entries.googlechat.enabled: trueを追加してください。 -
gateway が再起動されていない: config を追加した後、gateway を再起動します。
その他の問題
- 認証エラーや audience 設定不足については
openclaw channels status --probeを確認してください。 - メッセージが届かない場合は、Chat アプリの webhook URL とイベント購読を確認してください。
- mention ゲートによって返信がブロックされる場合は、
botUserをアプリの user resource name に設定し、requireMentionを確認してください。 - テストメッセージ送信中に
openclaw logs --followを使うと、リクエストが gateway に到達しているか確認できます。
関連
- Channels Overview — サポートされているすべてのチャネル
- Pairing — DM 認証と pairing フロー
- Groups — グループチャットの動作と mention ゲート
- Channel Routing — メッセージのセッションルーティング
- Security — アクセスモデルとハードニング