Google Chat (Chat API)

ステータス: Google Chat API Webhook(HTTPのみ)を介したDM + スペースに対応しています。

クイックセットアップ(初心者向け)

  1. Google Cloudプロジェクトを作成し、Google Chat APIを有効にします。
  2. **Service Account(サービスアカウント)**を作成します:
    • Create Credentials > Service Accountを押します。
    • 任意の名前を付けます(例: openclaw-chat)。
    • 権限は空白のままにします(Continueを押します)。
    • アクセス権を持つプリンシパルは空白のままにします(Doneを押します)。
  3. JSON Keyを作成してダウンロードします:
    • サービスアカウントのリストで、作成したアカウントをクリックします。
    • Keysタブに移動します。
    • Add Key > Create new keyをクリックします。
    • JSONを選択してCreateを押します。
  4. ダウンロードしたJSONファイルをGatewayホストに保存します(例: ~/.openclaw/googlechat-service-account.json)。
  5. Google Cloud Console Chat ConfigurationでGoogle Chatアプリを作成します:
    • Application infoを入力します:
      • App name: (例: OpenClaw
      • Avatar URL: (例: https://openclaw.ai/logo.png
      • Description: (例: Personal AI Assistant
    • 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>**をチェックします。
    • テキストボックスにメールアドレス(例: [email protected])を入力します。
    • 下部のSaveをクリックします。
  6. アプリのステータスを有効にします:
    • 保存後、ページを更新します
    • App statusセクションを探します(通常、保存後の上部または下部付近にあります)。
    • ステータスをLive - available to usersに変更します。
    • 再度Saveをクリックします。
  7. サービスアカウントパス + Webhook audienceでOpenClawを設定します:
    • 環境変数: GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json
    • または設定: channels.googlechat.serviceAccountFile: "/path/to/service-account.json"
  8. Webhook audienceタイプ + 値を設定します(Chatアプリ設定と一致させます)。
  9. Gatewayを起動します。Google ChatがWebhookパスにPOSTします。

Google Chatに追加

Gatewayが実行中で、メールアドレスがvisibilityリストに追加されたら:

  1. Google Chatに移動します。
  2. Direct Messagesの横にある**+**(プラス)アイコンをクリックします。
  3. 検索バー(通常人を追加する場所)で、Google Cloud Consoleで設定したApp nameを入力します。
    • : プライベートアプリなので、botは「Marketplace」ブラウズリストには表示されません。名前で検索する必要があります。
  4. 検索結果からbotを選択します。
  5. AddまたはChatをクリックして1対1の会話を開始します。
  6. 「Hello」を送信してアシスタントをトリガーします!

公開URL(Webhookのみ)

Google Chat WebhookにはPublic HTTPS Endpoint(公開HTTPSエンドポイント)が必要です。セキュリティのために、/googlechatパスのみをインターネットに公開してください。OpenClawダッシュボードやその他の機密エンドポイントはプライベートネットワークに保持してください。

オプションA: Tailscale Funnel(推奨)

プライベートダッシュボードにはTailscale Serveを使用し、公開Webhookパスにはfunnelを使用します。これにより/はプライベートのままで、/googlechatのみが公開されます。

  1. Gatewayがバインドされているアドレスを確認します:

    ss -tlnp | grep 18789
    

    IPアドレス(例: 127.0.0.10.0.0.0、またはTailscale IP 100.x.x.xなど)をメモします。

  2. ダッシュボードをtailnetのみに公開します(ポート8443):

    # 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
    
  3. Webhookパスのみを公開します:

    # 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
    
  4. Funnelアクセスのためにノードを認証します: プロンプトが表示されたら、出力に表示される認証URLにアクセスして、このtailnetポリシーのノードのFunnelを有効にします。

  5. 設定を確認します:

    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 resettailscale serve resetを実行します。

オプションB: Reverse Proxy(リバースプロキシ)(Caddy)

Caddyのようなリバースプロキシを使用する場合、特定のパスのみをプロキシします:

your-domain.com {
    reverse_proxy /googlechat* localhost:18789
}

この設定では、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)

動作方法

  1. Google ChatはGatewayにWebhook POSTを送信します。各リクエストにはAuthorization: Bearer <token>ヘッダーが含まれます。
  2. OpenClawは設定されたaudienceType + audienceに対してトークンを検証します:
    • audienceType: "app-url" → audienceはHTTPS Webhook URLです。
    • audienceType: "project-number" → audienceはCloudプロジェクト番号です。
  3. メッセージはスペースごとにルーティングされます:
    • DMはセッションキーagent:<agentId>:googlechat:dm:<spaceId>を使用します。
    • スペースはセッションキーagent:<agentId>:googlechat:group:<spaceId>を使用します。
  4. DMアクセスはデフォルトでpairingです。未知の送信者はペアリングコードを受信します。承認するには:
    • openclaw pairing approve googlechat <code>
  5. グループスペースはデフォルトで@-メンションが必要です。メンション検出にアプリのユーザー名が必要な場合はbotUserを使用します。

ターゲット

配信と許可リストには以下の識別子を使用します:

  • ダイレクトメッセージ: users/<userId>またはusers/<email>(メールアドレスが受け入れられます)。
  • スペース: spaces/<spaceId>

設定のハイライト

{
  channels: {
    "googlechat": {
      enabled: true,
      serviceAccountFile: "/path/to/service-account.json",
      audienceType: "app-url",
      audience: "https://gateway.example.com/googlechat",
      webhookPath: "/googlechat",
      botUser: "users/1234567890", // オプション。メンション検出を支援
      dm: {
        policy: "pairing",
        allowFrom: ["users/1234567890", "[email protected]"]
      },
      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文字列)でインライン渡すこともできます。
  • webhookPathが設定されていない場合、デフォルトのWebhookパスは/googlechatです。
  • リアクションはreactions toolとchannels action経由で利用でき、actions.reactionsが有効な場合に使用できます。
  • typingIndicatornonemessage(デフォルト)、reaction(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ハンドラーが登録されていないことを意味します。一般的な原因:

  1. チャンネルが設定されていない: 設定にchannels.googlechatセクションがありません。確認するには:

    openclaw config get channels.googlechat
    

    「Config path not found」と返された場合、設定を追加してください(設定のハイライトを参照)。

  2. プラグインが有効になっていない: プラグインステータスを確認します:

    openclaw plugins list | grep googlechat
    

    「disabled」と表示される場合は、設定にplugins.entries.googlechat.enabled: trueを追加してください。

  3. Gatewayが再起動されていない: 設定を追加した後、Gatewayを再起動します:

    openclaw gateway restart
    

チャンネルが実行中であることを確認します:

openclaw channels status
# 表示されるはずです: Google Chat default: enabled, configured, ...

その他の問題

  • 認証エラーまたは欠落しているaudience設定についてはopenclaw channels status --probeを確認してください。
  • メッセージが届かない場合は、ChatアプリのWebhook URL + イベントサブスクリプションを確認してください。
  • メンションゲーティングが返信をブロックする場合は、botUserをアプリのユーザーリソース名に設定し、requireMentionを確認してください。
  • テストメッセージを送信しながらopenclaw logs --followを使用して、リクエストがGatewayに到達しているか確認してください。

関連ドキュメント: