ルートを設定する
plugins.entries.webhooks.config 配下に設定します。
| フィールド | 必須 | デフォルト | 備考 |
|---|---|---|---|
enabled | no | true | |
path | no | /plugins/webhooks/<routeId> | ルート間で一意である必要があります。 |
sessionKey | yes | - | バインドされた TaskFlows を所有するセッション。 |
secret | yes | - | プレーン文字列または SecretRef(下記)。 |
controllerId | no | webhooks/<routeId> | デフォルトの create_flow コントローラーとして使用されます。 |
description | no | - | オペレーター向けメモのみ。 |
secret はプレーン文字列または SecretRef を受け付けます: { source: "env" | "file" | "exec", provider: "default", id: "..." }。
設定されたすべてのルートは、その secret が現在解決できるかどうかに関係なく起動時に登録されます。解決できない secret によってルートが無効化またはスキップされることはありません。そのルートへのリクエストは、secret が解決できるようになるまで認証に失敗します(401)。SecretRef の値はリクエストごとに再解決されるため、基になる secret(環境変数、ファイル、または exec の出力)をローテーションしても Gateway の再起動なしに反映されます。
セキュリティモデル
各ルートは、設定されたsessionKey の TaskFlow 権限で動作します。つまり、そのセッションが所有する任意の TaskFlow を検査および変更できます。TaskFlow へのアクセスは常に api.runtime.tasks.managedFlows.bindSession(...) を経由するため、ルートがバインドされたセッションの外で動作することはありません。影響範囲を限定するには:
- ルートごとに強力で一意の secret を使用します。
- インラインの平文 secret よりも SecretRef を優先します。
- ワークフローに合う最も狭いセッションにルートをバインドします。
- 必要な特定の Webhook パスだけを公開します。
POST のみ)と Content-Type: application/json のチェック、次に固定ウィンドウのレート制限(path+client-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 リクエストを送信します。
サポートされるアクション
| アクション | 目的 |
|---|---|
create_flow | ルートのセッション用にマネージド TaskFlow を作成します。 |
get_flow | id で 1 つの TaskFlow を取得します。 |
list_flows | ルートのセッションの TaskFlows を一覧表示します。 |
find_latest_flow | 直近に更新された TaskFlow を取得します。 |
resolve_flow | 不透明トークンで TaskFlow を解決します。 |
get_task_summary | TaskFlow のタスク概要を取得します。 |
set_waiting | 任意の state/wait データ付きで TaskFlow を待機中にします。 |
resume_flow | 待機中またはブロック中の TaskFlow を再開します。 |
finish_flow | TaskFlow を完了としてマークします。 |
fail_flow | TaskFlow を失敗としてマークします。 |
request_cancel | 協調的キャンセルをリクエストします。 |
cancel_flow | TaskFlow をキャンセルします(子がまだアクティブな場合は 202 を返すことがあります)。 |
run_task | 既存の TaskFlow 内にマネージド子タスクを作成します。 |
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" の場合にのみ有効です。他の status と一緒に送信すると 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 - 内部イベント駆動 hooks と、この HTTP ベースの TaskFlow ブリッジの違い
- Gateway webhooks(
hooks.*config) - 別個の汎用 Gateway HTTP エンドポイント機能。この Plugin のルートとは同じではありません - Plugin runtime SDK
- CLI webhooks