有効化
hooks.enabled=trueの場合、hooks.tokenは必須です。hooks.pathのデフォルトは/hooksです。
認証
すべてのリクエストにフックトークンを含める必要があります。ヘッダーを使用することを推奨します:Authorization: Bearer <token>(推奨)x-openclaw-token: <token>- クエリ文字列のトークンは拒否されます (
?token=...は400を返します)。
エンドポイント
POST /hooks/wake
ペイロード:
text必須 (文字列): イベントの説明 (例: “New email received”)。modeオプション (now|next-heartbeat): 即座にハートビートをトリガーするか (デフォルトnow)、次の定期チェックまで待つか。
- main セッションにシステムイベントをエンキューします。
mode=nowの場合、即座にハートビートをトリガーします。
POST /hooks/agent
ペイロード:
message必須 (文字列): エージェントが処理するプロンプトまたはメッセージ。nameオプション (文字列): フックの人間が読める名前 (例: “GitHub”)。セッションの要約でプレフィックスとして使用されます。agentIdオプション (文字列): このフックを特定のエージェントにルーティングします。不明な ID はデフォルトエージェントにフォールバックします。設定された場合、フックは解決済みエージェントのワークスペースと設定を使って実行されます。sessionKeyオプション (文字列): エージェントのセッションを識別するために使用されるキー。デフォルトでは、hooks.allowRequestSessionKey=trueでない限り、このフィールドは拒否されます。wakeModeオプション (now|next-heartbeat): 即座にハートビートをトリガーするか (デフォルトnow)、次の定期チェックまで待つか。deliverオプション (ブール値):trueの場合、エージェントの応答はメッセージングチャンネルに送信されます。デフォルトはtrueです。ハートビートの確認のみの応答は自動的にスキップされます。channelオプション (文字列): 配信用のメッセージングチャンネル。次のいずれか:last,whatsapp,telegram,discord,slack,mattermost(プラグイン),signal,imessage,msteams。デフォルトはlastです。toオプション (文字列): チャンネルの受信者識別子 (例: WhatsApp/Signalの電話番号、TelegramのチャットID、Discord/Slack/Mattermost(プラグイン)のチャンネルID、MS Teamsの会話ID)。デフォルトはメインセッションの最後の受信者です。modelオプション (文字列): モデルのオーバーライド (例:anthropic/claude-3-5-sonnetまたはエイリアス)。制限されている場合、許可されたモデルリストに含まれている必要があります。thinkingオプション (文字列): 思考レベルのオーバーライド (例:low,medium,high)。timeoutSecondsオプション (数値): エージェント実行の最大継続時間 (秒)。
- 分離されたエージェントのターン (独自のセッションキー) を実行します。
- 常に main セッションに要約を投稿します。
wakeMode=nowの場合、即座にハートビートをトリガーします。
セッションキーポリシー(breaking change)
/hooks/agent ペイロードの sessionKey オーバーライドはデフォルトで無効になっています。
- 推奨: 固定の
hooks.defaultSessionKeyを設定し、リクエストのオーバーライドをオフのままにします。 - オプション: 必要な場合のみリクエストのオーバーライドを許可し、プレフィックスを制限します。
POST /hooks/<name>(マッピング経由)
カスタムフック名は hooks.mappings を介して解決されます (設定を参照)。マッピングにより、任意のペイロードをオプションのテンプレートやコード変換を使用して wake または agent アクションに変換できます。
マッピングオプション (概要):
hooks.presets: ["gmail"]は組み込みのGmailマッピングを有効にします。hooks.mappingsにより、設定でmatch、action、テンプレートを定義できます。hooks.transformsDir+transform.moduleは、カスタムロジック用の JS / TS モジュールを読み込みます。hooks.transformsDir(設定されている場合) は、OpenClaw設定ディレクトリ (通常は~/.openclaw/hooks/transforms) 下の変換ルート内に留まる必要があります。transform.moduleは、有効な変換ディレクトリ内で解決される必要があります (トラバーサル/エスケープパスは拒否されます)。
match.sourceを使用して、汎用的な取り込みエンドポイントを維持します (ペイロード主導のルーティング)。- TS 変換は、実行時に TS ローダー(例:
bunまたはtsx)または事前コンパイル済みの.jsを必要とします。 - マッピングに
deliver: true+channel/toを設定して、応答をチャットサーフェスにルーティングします (channelのデフォルトはlastで、WhatsAppにフォールバックします)。 agentIdはフックを特定のエージェントにルーティングします。不明なIDはデフォルトエージェントにフォールバックします。hooks.allowedAgentIdsは明示的なagentIdルーティングを制限します。省略する (または*を含める) と任意のエージェントを許可します。[]を設定すると明示的なagentIdルーティングを拒否します。hooks.defaultSessionKeyは、明示的なキーが提供されていない場合のフックエージェント実行のデフォルトセッションを設定します。hooks.allowRequestSessionKeyは、/hooks/agentペイロードがsessionKeyを設定できるかどうかを制御します (デフォルト:false)。hooks.allowedSessionKeyPrefixesは、リクエストペイロードとマッピングからの明示的なsessionKey値をオプションで制限します。allowUnsafeExternalContent: trueは、そのフックの外部コンテンツ安全ラッパーを無効にします (危険; 信頼できる内部ソース用のみ)。openclaw webhooks gmail setupはopenclaw webhooks gmail run用のhooks.gmail設定を書き込みます。 完全なGmail監視フローについては Gmail Pub/Sub を参照してください。
レスポンス
/hooks/wakeの場合は200/hooks/agent(非同期実行の受け入れ) の場合は200- 認証失敗の場合は
401 - 同じクライアントからの度重なる認証失敗の後は
429(Retry-Afterを確認) - 無効なペイロードの場合は
400 - 特大のペイロードの場合は
413
例
別のモデルを使う
エージェントペイロード(またはマッピング)にmodel を追加すると、その実行で使うモデルを上書きできます。
agents.defaults.models を強制する場合、オーバーライドモデルがそこに含まれていることを確認してください。
セキュリティ
- フックエンドポイントは、ループバック、tailnet、または信頼できるリバースプロキシの背後に配置してください。
- 専用のフックトークンを使用してください。ゲートウェイ認証トークンを再利用しないでください。
- 度重なる認証失敗は、ブルートフォース試行を遅らせるためにクライアントアドレスごとにレート制限されます。
- マルチエージェントルーティングを使用する場合、明示的な
agentIdの選択を制限するためにhooks.allowedAgentIdsを設定してください。 - 呼び出し元が選択したセッションが必要な場合を除き、
hooks.allowRequestSessionKey=falseを維持してください。 - リクエスト
sessionKeyを有効にする場合、hooks.allowedSessionKeyPrefixesを制限してください (例:["hook:"])。 - webhook ログに機密性の高い生のペイロードを含めないようにしてください。
- フックペイロードはデフォルトで信頼できないものとして扱われ、安全境界でラップされます。
特定のフックでこれを無効にする必要がある場合は、そのフックのマッピングで
allowUnsafeExternalContent: trueを設定します (危険)。