ルートを設定する
plugins.entries.webhooks.config 配下に設定します。
secret は、プレーン文字列または SecretRef({ source: "env" | "file" | "exec", provider: "default", id: "..." })を受け付けます。
SecretRef は、Gateway の起動時の設定スナップショット内で解決されます。あるルートの
secret を解決できない場合も Gateway は実行を継続し、そのルート自体は登録されたまま
非稼働状態になります。リクエストには一般的な認証失敗(401)が返されます。
その他のルートは引き続き利用できます。SecretRef のソースを修正し、Gateway を再読み込みまたは
再起動して新しいスナップショットを有効にします。SecretRef の値が公開リクエストパスで
解決されることはありません。
セキュリティモデル
各ルートは、設定されたsessionKey の TaskFlow 権限で動作します。そのセッションが
所有する任意の TaskFlow を検査および変更できます。TaskFlow へのアクセスは
常に api.runtime.tasks.managedFlows.bindSession(...) を経由するため、
ルートがバインド先のセッション外で動作することはありません。影響範囲を抑えるには:
- ルートごとに強力で一意な secret を使用します。
- インラインの平文 secret より SecretRef を優先します。
- ワークフローに適合する最小範囲のセッションにルートをバインドします。
- 必要な Webhook パスだけを公開します。
POST のみ)と
Content-Type: application/json のチェック、固定ウィンドウ方式のレート制限(パスとクライアント IP の
キーごとに 60 秒間で 120 リクエスト、追跡するキーは最大 4,096 個)、
処理中リクエストの制限(キーごとに同時 8 リクエスト、追跡するキーは最大
4,096 個)、共有 secret による認証、256 KB/
15 秒の JSON ボディ読み取りです。前段のチェックに失敗したリクエストが
後段に到達することはありません。
リクエスト形式
Content-Type: application/json を指定し、Authorization: Bearer <secret> または x-openclaw-webhook-secret: <secret> のいずれかを使用して
POST リクエストを送信します。
サポートされるアクション
変更アクション(
set_waiting、resume_flow、finish_flow、fail_flow、
request_cancel)では、楽観的並行性制御のために flowId と expectedRevision が
必要です。古いリビジョンには 409 revision_conflict が返されます。
create_flow
run_task
許可される runtime の値:subagent、acp。startedAt、lastEventAt、
progressSummary は、status が "running" の場合にのみ有効です。それ以外の
ステータスとともに送信すると 400 invalid_request が返されます。
レスポンスの形式
sessionKey が漏洩することはありません。code の値には not_found、
not_managed、revision_conflict、persist_failed、cancel_requested、
cancel_pending、terminal、invalid_request、request_rejected、および
変更が上記の名前付きコードで扱われていない理由により拒否された場合の
アクション固有のフォールバックコード(mutation_rejected、create_rejected、
task_not_created、cancel_rejected)が含まれます。
関連項目
- Hooks - 内部のイベント駆動型フックと、この HTTP ベースの TaskFlow ブリッジとの比較
- Gateway Webhook(
hooks.*設定) - 独立した汎用 Gateway HTTP エンドポイント機能。この Plugin のルートとは異なります - Plugin ランタイム SDK
- CLI Webhook