OpenClawでGmailを自動連携:Pub/Sub設定とWebhook構築ガイド
大量に届くメールの中から重要な情報を抽出したり、特定のメールが届いた瞬間にアクションを起こしたりするのは、開発者にとって共通の悩みですよね。APIをポーリングし続けるのは非効率ですし、リアルタイム性を確保するためのインフラを整えるのは意外と骨が折れる作業です。
この記事では、Gmailの通知をPub/Sub経由で受け取り、OpenClawのWebhookへと繋げる効率的なパイプラインの構築方法を解説します。
作業を始める前に、以下のツールがインストールされ、設定が完了していることを確認してください。
gcloudがインストールされ、ログイン済みであること(インストールガイド)。gog(gogcli) がインストールされ、Gmailアカウントの認証が完了していること(gogcli.sh)。- OpenClawのhooksが有効になっていること(Webhooksを参照)。
tailscaleにログイン済みであること(tailscale.com)。このセットアップでは、パブリックなHTTPSエンドポイントとしてTailscale Funnelを使用します。 他のトンネルサービスも利用可能ですが、手動での設定が必要なためサポート対象外です。現時点ではTailscaleを推奨しています。
以下は、Gmailのプリセットマッピングを有効にするフック設定の例です。
{ hooks: { enabled: true, token: "OPENCLAW_HOOK_TOKEN", path: "/hooks", presets: ["gmail"], },}Gmailの要約をチャット画面に配信したい場合は、プリセットをオーバーライドして、deliver とオプションの channel/to を設定するマッピングを追加します。
{ hooks: { enabled: true, token: "OPENCLAW_HOOK_TOKEN", presets: ["gmail"], mappings: [ { match: { path: "gmail" }, action: "agent", wakeMode: "now", name: "Gmail", sessionKey: "hook:gmail:{{messages[0].id}}", messageTemplate: "New email from {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}\n{{messages[0].body}}", model: "openai/gpt-5.2-mini", deliver: true, channel: "last", // to: "+15551234567" }, ], },}特定のチャンネルに固定したい場合は、channel と to を設定してください。設定しない場合、channel: "last" は最後に使用された配信ルート(デフォルトはWhatsApp)を使用します。
Gmailの処理に安価なモデルを強制したい場合は、マッピング内で model(provider/model またはエイリアス)を指定します。agents.defaults.models を設定している場合は、そのリストに含める必要があります。
Gmailフック専用のデフォルトモデルや思考レベル(thinking level)を設定するには、設定ファイルに hooks.gmail.model や hooks.gmail.thinking を追加します。
{ hooks: { gmail: { model: "openrouter/meta-llama/llama-3.3-70b-instruct:free", thinking: "off", }, },}注意点:
- マッピング内の個別設定(
model/thinking)は、これらのデフォルト設定よりも優先されます。 - フォールバックの順序は次の通りです:
hooks.gmail.model→agents.defaults.model.fallbacks→ プライマリ(認証/レート制限/タイムアウト)。 agents.defaults.modelsが設定されている場合、Gmail用のモデルは許可リストに含まれている必要があります。- Gmailフックのコンテンツは、デフォルトで外部コンテンツの安全境界(safety boundaries)でラップされます。これを無効にする(危険を伴います)には、
hooks.gmail.allowUnsafeExternalContent: trueを設定してください。
ペイロードの処理をさらにカスタマイズしたい場合は、hooks.mappings を追加するか、hooks.transformsDir 配下にJS/TSの変換モジュールを作成してください(詳細は Webhooks を参照)。
ウィザード(推奨)
Section titled “ウィザード(推奨)”OpenClawのヘルパーを使用して、すべてを一括で設定することをおすすめします(macOSではbrew経由で依存関係をインストールします)。
openclaw webhooks gmail setup \ --account openclaw@gmail.comデフォルトの動作:
- パブリックなプッシュエンドポイントとしてTailscale Funnelを使用します。
openclaw webhooks gmail run用のhooks.gmail設定を書き込みます。- Gmailフックのプリセットを有効にします(
hooks.presets: ["gmail"])。
パスに関する注意:tailscale.mode が有効な場合、OpenClawは自動的に hooks.gmail.serve.path を / に設定し、パブリックパスを hooks.gmail.tailscale.path(デフォルトは /gmail-pubsub)に保持します。これは、Tailscaleがプロキシする前に設定されたパスプレフィックスを取り除くためです。
バックエンドでプレフィックス付きのパスを受け取る必要がある場合は、hooks.gmail.tailscale.target(または --tailscale-target)に http://127.0.0.1:8788/gmail-pubsub のようなフルURLを設定し、hooks.gmail.serve.path と一致させてください。
カスタムエンドポイントを使用したい場合は、--push-endpoint <url> を指定するか、--tailscale off を設定してください。
プラットフォームに関する注意:macOSではウィザードが gcloud, gogcli, tailscale をHomebrewでインストールしますが、Linuxでは事前に手動でインストールしておく必要があります。
Gatewayの自動起動(推奨):
hooks.enabled=trueかつhooks.gmail.accountが設定されている場合、Gatewayは起動時にgog gmail watch serveを開始し、監視を自動更新します。- この機能を無効にするには、
OPENCLAW_SKIP_GMAIL_WATCHER=1を設定してください(自身でデーモンを実行する場合などに便利です)。 - 手動でデーモンを実行している状態でこれを行うと、
listen tcp 127.0.0.1:8788: bind: address already in useというエラーが発生するため、同時に実行しないでください。
手動デーモン(gog gmail watch serve の開始と自動更新):
openclaw webhooks gmail run初回セットアップ
Section titled “初回セットアップ”gogで使用しているOAuthクライアントを所有するGCPプロジェクトを選択します。
gcloud auth logingcloud config set project <project-id>注意:Gmailの監視には、OAuthクライアントと同じプロジェクト内にPub/Subトピックが存在する必要があります。
- APIを有効にします:
gcloud services enable gmail.googleapis.com pubsub.googleapis.com- トピックを作成します:
gcloud pubsub topics create gog-gmail-watch- Gmailのプッシュ通知がパブリッシュできるように権限を付与します:
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \ --member=serviceAccount:gmail-api-push@system.gserviceaccount.com \ --role=roles/pubsub.publishergog gmail watch start \ --account openclaw@gmail.com \ --label INBOX \ --topic projects/<project-id>/topics/gog-gmail-watch出力された history_id を保存しておいてください(デバッグ時に役立ちます)。
プッシュハンドラーの実行
Section titled “プッシュハンドラーの実行”ローカルでの実行例(共有トークン認証):
gog gmail watch serve \ --account openclaw@gmail.com \ --bind 127.0.0.1 \ --port 8788 \ --path /gmail-pubsub \ --token <shared> \ --hook-url http://127.0.0.1:18789/hooks/gmail \ --hook-token OPENCLAW_HOOK_TOKEN \ --include-body \ --max-bytes 20000注意点:
--tokenはプッシュエンドポイントを保護します(x-gog-tokenまたは?token=)。--hook-urlはOpenClawの/hooks/gmailを指します。--include-bodyと--max-bytesは、OpenClawに送信される本文のスニペットを制御します。
推奨事項:openclaw webhooks gmail run を使用すると、これらの一連の流れがラップされ、監視の自動更新も行われます。
ハンドラーの公開(高度・非サポート)
Section titled “ハンドラーの公開(高度・非サポート)”Tailscale以外のトンネルが必要な場合は、手動で接続し、プッシュサブスクリプションでパブリックURLを使用してください(この方法はサポート外であり、ガードレールもありません)。
cloudflared tunnel --url http://127.0.0.1:8788 --no-autoupdate生成されたURLをプッシュエンドポイントとして使用します:
gcloud pubsub subscriptions create gog-gmail-watch-push \ --topic gog-gmail-watch \ --push-endpoint "https://<public-url>/gmail-pubsub?token=<shared>"本番環境では、安定したHTTPSエンドポイントを使用し、Pub/Sub OIDC JWTを設定した上で、以下を実行してください:
gog gmail watch serve --verify-oidc --oidc-email <svc@...>監視対象のインボックスにメッセージを送信してみましょう:
gog gmail send \ --account openclaw@gmail.com \ --to openclaw@gmail.com \ --subject "watch test" \ --body "ping"監視の状態と履歴を確認します:
gog gmail watch status --account openclaw@gmail.comgog gmail history --account openclaw@gmail.com --since <historyId>トラブルシューティング
Section titled “トラブルシューティング”Invalid topicName: プロジェクトの不一致です。トピックがOAuthクライアントと同じプロジェクトにあるか確認してください。User not authorized: トピックにroles/pubsub.publisher権限が不足しています。- メッセージが空:Gmailのプッシュ通知は
historyIdのみを提供します。内容はgog gmail history経由で取得されます。
クリーンアップ
Section titled “クリーンアップ”gog gmail watch stop --account openclaw@gmail.comgcloud pubsub subscriptions delete gog-gmail-watch-pushgcloud pubsub topics delete gog-gmail-watch設定でお困りの際は、AI Setup Assistant を活用してください。
次のステップ
Section titled “次のステップ”OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。