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 がまだ有効でない場合は有効にします。
- Service Account を作成します。
- Create Credentials > Service Account を押します。
- 任意の名前を付けます (例:
openclaw-chat)。 - 権限は空のままにします (Continue を押します)。
- アクセス権を持つプリンシパルも空のままにします (Done を押します)。
- JSON Key を作成してダウンロードします。
- サービス アカウントの一覧で、先ほど作成したものをクリックします。
- Keys タブに移動します。
- Add Key > Create new key をクリックします。
- JSON を選択し、Create を押します。
- ダウンロードした JSON ファイルを Gateway ホストに保存します (例:
~/.openclaw/googlechat-service-account.json)。 - Google Cloud Console の Chat 設定 で 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を付けた値を設定します。- ヒント: Gateway の公開 URL を確認するには
openclaw statusを実行します。
- ヒント: Gateway の公開 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 をクリックします。
- サービス アカウントのパス + Webhook オーディエンスで OpenClaw を設定します。
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - または設定:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json"。
- Env:
- Webhook のオーディエンスタイプ + 値を設定します (Chat アプリの設定と一致させます)。
- Gateway を起動します。Google Chat は Webhook パスに POST します。
Google Chat に追加する
Gateway が実行中で、メールアドレスが公開範囲リストに追加されている場合:
- Google Chat に移動します。
- Direct Messages の横にある + (プラス) アイコンをクリックします。
- 検索バー (通常はユーザーを追加する場所) に、Google Cloud Console で設定した App name を入力します。
- 注: これは非公開アプリのため、ボットは「Marketplace」の参照リストには表示されません。名前で検索する必要があります。
- 結果からボットを選択します。
- Add または Chat をクリックして 1:1 の会話を開始します。
- アシスタントを起動するには「Hello」を送信します。
公開 URL (Webhook のみ)
Google Chat Webhook には公開 HTTPS エンドポイントが必要です。セキュリティのため、インターネットには /googlechat パスだけを公開してください。OpenClaw ダッシュボードやその他の機密エンドポイントはプライベートネットワーク上に保ちます。
オプション A: Tailscale Funnel (推奨)
プライベートダッシュボードには Tailscale Serve を使用し、公開 Webhook パスには Funnel を使用します。これにより / はプライベートのまま、/googlechat だけが公開されます。
-
Gateway がどのアドレスにバインドされているか確認します。
ss -tlnp | grep 18789IP アドレスをメモします (例:
127.0.0.1、0.0.0.0、または100.x.x.xのような Tailscale IP)。 -
ダッシュボードを tailnet のみに公開します (ポート 8443)。
# 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 パスだけを公開します。
# 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 にアクセスして、このノードの Funnel を tailnet ポリシーで有効にします。
-
設定を確認します。
tailscale serve status tailscale 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 パスだけをルーティングするようにトンネルの ingress ルールを設定します。
- Path:
/googlechat->http://localhost:18789/googlechat - Default Rule: 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"→ オーディエンスは HTTPS Webhook URL です。audienceType: "project-number"→ オーディエンスは Cloud プロジェクト番号です。
- メッセージはスペースごとにルーティングされます。
- DM はセッションキー
agent:<agentId>:googlechat:direct:<spaceId>を使用します。 - スペースはセッションキー
agent:<agentId>:googlechat:group:<spaceId>を使用します。
- DM はセッションキー
- DM アクセスはデフォルトでペアリングです。不明な送信者はペアリングコードを受け取り、次で承認します。
openclaw pairing approve googlechat <code>
- グループスペースではデフォルトで @メンションが必要です。メンション検出でアプリのユーザー名が必要な場合は
botUserを使用します。
ターゲット
配信と許可リストには次の識別子を使用します。
- ダイレクトメッセージ:
users/<userId>(推奨)。 - 生のメールアドレス
[email protected]は変更可能であり、channels.googlechat.dangerouslyAllowNameMatching: trueの場合にのみ直接許可リスト照合に使用されます。 - 非推奨:
users/<email>はメール許可リストではなくユーザー ID として扱われます。 - スペース:
spaces/<spaceId>。
設定の要点
{
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
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配下のアカウントごとの参照も含みます。webhookPathが設定されていない場合、デフォルトの Webhook パスは/googlechatです。dangerouslyAllowNameMatchingは、許可リスト用の変更可能なメールプリンシパル照合を再度有効にします (緊急互換モード)。actions.reactionsが有効な場合、リアクションはreactionsツールとchannels actionから利用できます。- メッセージアクションは、テキスト用の
sendと、明示的な添付ファイル送信用のupload-fileを公開します。upload-fileはmedia/filePath/pathに加え、任意のmessage、filename、スレッドターゲットを受け付けます。 typingIndicatorはnone、message(デフォルト)、reactionをサポートします (reactionにはユーザー OAuth が必要です)。- 添付ファイルは Chat API 経由でダウンロードされ、メディアパイプラインに保存されます (サイズは
mediaMaxMbで上限設定)。
Secrets 参照の詳細: Secrets 管理。
トラブルシューティング
405 Method Not Allowed
Google Cloud Logs Explorer に次のようなエラーが表示される場合:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed
これは Webhook ハンドラーが登録されていないことを意味します。一般的な原因:
-
チャンネルが設定されていない: 設定に
channels.googlechatセクションがありません。次で確認します。openclaw config get channels.googlechat"Config path not found" が返る場合は、設定を追加します (設定の要点 を参照)。
-
Plugin が有効ではない: Plugin のステータスを確認します。
openclaw plugins list | grep googlechat"disabled" と表示される場合は、設定に
plugins.entries.googlechat.enabled: trueを追加します。 -
Gateway が再起動されていない: 設定を追加した後、Gateway を再起動します。
openclaw gateway restart
チャンネルが実行中であることを確認します。
openclaw channels status
# Should show: Google Chat default: enabled, configured, ...
その他の問題
- 認証エラーやオーディエンス設定不足を確認するには
openclaw channels status --probeを確認します。 - メッセージが届かない場合は、Chat アプリの Webhook URL + イベントサブスクリプションを確認します。
- メンションゲートが返信をブロックする場合は、
botUserをアプリのユーザーリソース名に設定し、requireMentionを確認します。 - テストメッセージを送信しながら
openclaw logs --followを使用して、リクエストが Gateway に到達しているか確認します。
関連ドキュメント:
関連
- チャンネル概要 — サポートされているすべてのチャンネル
- ペアリング — DM 認証とペアリングフロー
- グループ — グループチャットの動作とメンションゲート
- チャンネルルーティング — メッセージのセッションルーティング
- セキュリティ — アクセスモデルと強化