Google Chat
ステータス: Google Chat API Webhook(HTTPのみ)によるDMおよびスペース対応準備完了。
クイックセットアップ(初心者向け)
- Google Cloudプロジェクトを作成し、Google Chat APIを有効にします。
- アクセス先: Google Chat API 認証情報
- まだ有効になっていない場合はAPIを有効にします。
- サービスアカウントを作成します:
- 認証情報を作成 > サービスアカウントを押します。
- 任意の名前を付けます(例:
openclaw-chat)。 - 権限は空白のままにします(続行を押します)。
- アクセス権を持つプリンシパルも空白のままにします(完了を押します)。
- JSONキーを作成してダウンロードします:
- サービスアカウントの一覧で、作成したばかりのアカウントをクリックします。
- キータブに移動します。
- キーを追加 > 新しいキーを作成をクリックします。
- JSONを選択し、作成を押します。
- ダウンロードしたJSONファイルをゲートウェイホストに保存します(例:
~/.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を使用を選択し、ゲートウェイの公開URLの後に
/googlechatを付けたものを設定します。- ヒント:
openclaw statusを実行してゲートウェイの公開URLを確認してください。
- ヒント:
- 公開範囲で、このChatアプリを
あなたのドメイン内の特定のユーザーとグループが利用できるようにするにチェックを入れます。 - テキストボックスにあなたのメールアドレスを入力します(例:
user@example.com)。 - 下部の保存をクリックします。
- アプリケーション情報を入力します:
- アプリのステータスを有効にします:
- 保存後、ページを更新します。
- アプリステータスセクションを探します(通常、保存後に上部または下部近くにあります)。
- ステータスをライブ - ユーザーが利用可能に変更します。
- 再度保存をクリックします。
- サービスアカウントのパスとWebhookのオーディエンスを指定してOpenClawを設定します:
- 環境変数:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - または設定ファイル:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json"。
- 環境変数:
- Webhookオーディエンスのタイプと値を設定します(Chatアプリの設定と一致させる)。
- ゲートウェイを起動します。Google ChatがあなたのWebhookパスにPOSTリクエストを送信します。
Google Chatへの追加
ゲートウェイが起動し、あなたのメールアドレスが公開範囲リストに追加されたら:
- Google Chatにアクセスします。
- ダイレクトメッセージの横にある +(プラス)アイコンをクリックします。
- 検索バー(通常は人を追加する場所)に、Google Cloud Consoleで設定したアプリ名を入力します。
- 注意: このボットはプライベートアプリであるため、「マーケットプレイス」の閲覧リストには表示されません。名前で検索する必要があります。
- 検索結果からあなたのボットを選択します。
- 追加またはチャットをクリックして1対1の会話を開始します。
- 「Hello」と送信してアシスタントを起動します!
公開URL(Webhook専用)
Google Chat Webhookは公開されたHTTPSエンドポイントを必要とします。セキュリティのため、/googlechatパスのみをインターネットに公開してください。OpenClawダッシュボードやその他の機密性の高いエンドポイントはプライベートネットワーク上に保持します。
オプションA: Tailscale Funnel(推奨)
プライベートダッシュボードにはTailscale Serveを、公開WebhookパスにはFunnelを使用します。これにより、/はプライベートに保ちながら、/googlechatのみを公開できます。
-
ゲートウェイがバインドされているアドレスを確認します:
Copy
ss -tlnp | grep 18789IPアドレスをメモします(例:
127.0.0.1、0.0.0.0、またはTailscale IP100.x.x.xなど)。 -
ダッシュボードをtailnet内のみに公開します(ポート8443):
Copy
# localhostにバインドされている場合(127.0.0.1 または 0.0.0.0): tailscale serve --bg --https 8443 http://127.0.0.1:18789 # Tailscale IPのみにバインドされている場合(例: 100.106.161.80): tailscale serve --bg --https 8443 http://100.106.161.80:18789 -
Webhookパスのみを公開します:
Copy
# localhostにバインドされている場合(127.0.0.1 または 0.0.0.0): tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # Tailscale IPのみにバインドされている場合(例: 100.106.161.80): tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat -
Funnelアクセスのノードを承認します: プロンプトが表示されたら、出力に表示される承認URLにアクセスし、tailnetポリシーでこのノードのFunnelを有効にします。
-
設定を確認します:
Copy
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パスのみをルーティングします:
- パス:
/googlechat->http://localhost:18789/googlechat - デフォルトルール: HTTP 404 (Not Found)
仕組み
- Google ChatはWebhook POSTをゲートウェイに送信します。各リクエストには
Authorization: Bearer <token>ヘッダーが含まれます。- OpenClawは、ヘッダーが存在する場合、完全なWebhookボディを読み取り/解析する前にベアラー認証を検証します。
- ボディ内に
authorizationEventObject.systemIdTokenを含むGoogle Workspaceアドオンリクエストは、より厳格な事前認証ボディ予算を介してサポートされます。
- OpenClawは、設定された
audienceType+audienceに対してトークンを検証します:audienceType: "app-url"→ オーディエンスはあなたのHTTPS Webhook URLです。audienceType: "project-number"→ オーディエンスはCloudプロジェクト番号です。
- メッセージはスペースごとにルーティングされます:
- DMはセッションキー
agent:<agentId>:googlechat:dm:<spaceId>を使用します。 - スペースはセッションキー
agent:<agentId>:googlechat:group:<spaceId>を使用します。
- DMはセッションキー
- DMアクセスはデフォルトでペアリングです。未知の送信者にはペアリングコードが送信されます。承認は以下で行います:
openclaw pairing approve googlechat <code>
- グループスペースはデフォルトで@メンションを必要とします。メンション検出にアプリのユーザー名が必要な場合は
botUserを使用してください。
ターゲット
配信と許可リストには以下の識別子を使用します:
- ダイレクトメッセージ:
users/<userId>(推奨)。 - 生のメールアドレス
name@example.comは可変であり、channels.googlechat.dangerouslyAllowNameMatching: trueの場合にのみダイレクト許可リストマッチングに使用されます。 - 非推奨:
users/<email>はメールアドレスの許可リストではなく、ユーザーIDとして扱われます。 - スペース:
spaces/<spaceId>。
設定のハイライト
{
channels: {
googlechat: {
enabled: true,
serviceAccountFile: "/path/to/service-account.json",
// または serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" }
audienceType: "app-url",
audience: "https://gateway.example.com/googlechat",
webhookPath: "/googlechat",
botUser: "users/1234567890", // オプション; メンション検出に役立ちます
dm: {
policy: "pairing",
allowFrom: ["users/1234567890"],
},
groupPolicy: "allowlist",
groups: {
"spaces/AAAA": {
allow: true,
requireMention: true,
users: ["users/1234567890"],
systemPrompt: "Short answers only.",
},
},
actions: { reactions: true },
typingIndicator: "message",
mediaMaxMb: 20,
},
},
}
注記:
- サービスアカウントの認証情報は、
serviceAccount(JSON文字列)でインラインで渡すこともできます。 serviceAccountRefもサポートされています(環境変数/ファイル SecretRef)、channels.googlechat.accounts.<id>.serviceAccountRefの下のアカウントごとの参照も含みます。webhookPathが設定されていない場合、デフォルトのWebhookパスは/googlechatです。dangerouslyAllowNameMatchingは、許可リストのための可変メールアドレスプリンシパルマッチングを再び有効にします(緊急互換モード)。- リアクションは、
actions.reactionsが有効な場合、reactionsツールとchannels actionで利用可能です。 typingIndicatorはnone、message(デフォルト)、reaction(リアクションにはユーザーOAuthが必要)をサポートします。- 添付ファイルはChat APIを介してダウンロードされ、メディアパイプラインに保存されます(サイズは
mediaMaxMbで制限されます)。
シークレット参照の詳細: シークレット管理。
トラブルシューティング
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セクションがありません。以下で確認します:Copy
openclaw config get channels.googlechat「Config path not found」が返された場合は、設定を追加してください(設定のハイライトを参照)。
-
プラグインが有効になっていない: プラグインのステータスを確認します:
Copy
openclaw plugins list | grep googlechat「disabled」と表示される場合は、設定に
plugins.entries.googlechat.enabled: trueを追加してください。 -
ゲートウェイが再起動されていない: 設定を追加した後、ゲートウェイを再起動します:
Copy
openclaw gateway restart
チャネルが実行されていることを確認します:
openclaw channels status
# 次のように表示されるはずです: Google Chat default: enabled, configured, ...
その他の問題
openclaw channels status --probeを実行して、認証エラーやオーディエンス設定の欠落を確認します。- メッセージが届かない場合は、ChatアプリのWebhook URLとイベントサブスクリプションを確認してください。
- メンションゲートにより返信がブロックされる場合は、
botUserをアプリのユーザーリソース名に設定し、requireMentionを確認してください。 - テストメッセージを送信しながら
openclaw logs --followを使用して、リクエストがゲートウェイに到達しているか確認します。
関連ドキュメント: