pending_approval 判定を返すと、ゲートウェイはツール呼び出しを
保留し、あなた自身の承認システムに帯域外で通知します。その通知は署名付きの HTTP
POST — ファイアウォール webhook ペイロード — であり、このページはその正確な形状を
ドキュメント化しているため、署名を検証し、イベントをルーティングし、決定をポストバック
できます。
これは、ファイアウォールページで説明されて
いるコンソール内承認フローの非同期の兄弟です。コンソールパス(レビュアーが承認/拒否を
クリックする)は webhook をまったく必要としません。webhook は、保留を解決するために
マシン — あなた自身のチケットボット、Slack アクション、エージェントランタイム — を
使いたいときのためのものです。両方のパスはファーストライタウィンなので、並行して
実行できます。
webhook はベストエフォートのルーティングシグナルであり、権威ある HITL チャネルでは
ありません。エージェント自身の
GET /api/v1/firewall/approvals/:id
へのロングポールがバックストップです — 通知がドロップされたり、エンドポイントが
一時的にダウンしても、保留された呼び出しは依然としてコンソールに表示され、通常通り
解決されます。webhook は、マシンが人間より速く反応できるようにするだけです。1. ファイアウォール webhook ペイロード一覧
OrcaRouter は、あなたが設定した URL に JSON エンベロープを POST し、共有シークレットで 署名します。完全な配信 — ヘッダーとボディ — は次のとおりです:X-Orca-Event から多くのイベントタイプを
ルーティングできます。
2. エンベロープフィールド
event — イベント名
event — イベント名
承認保留では常に
firewall.approval.pending。X-Orca-Event ヘッダーにミラー
されるため、ボディをパースする前にルーティングできます。workspace_id — 発信元のワークスペース
workspace_id — 発信元のワークスペース
呼び出しを保留したポリシーを持つワークスペースの整数 id。ひとつのエンドポイントが
複数のワークスペースから webhook を受信するときに便利です。
occurred_at — 保留が作成された時刻
occurred_at — 保留が作成された時刻
ゲートウェイが承認をエンキューした時刻の RFC 3339 / UTC タイムスタンプ(ナノ秒
精度)。標準的なイベントツールでパース可能です。
data — 承認ペイロード
data — 承認ペイロード
コールバックがゲートを解決するために必要なブロック。フィールドは
§3に。
3. data ペイロード
data ブロックは、保留をルーティングして解決するために必要なすべて — 意図的に
ツール引数なし — を運びます。webhook はルーティングシグナルです;完全な呼び出し
コンテキスト(ツール、引数、発火したルール)は、アクセス制御されているコンソールの
Approvals タブと監査ログに存在します。
| フィールド | 型 | 意味 |
|---|---|---|
approval_id | string | あなたが決定をポストする id。 |
tool_name | string | 保留されたツール、例:db.export。 |
request_id | string | 保留をトリガーしたリレーリクエスト。 |
conversation_id | string | エージェントの会話 / セッション id。 |
policy_id | int | マッチしたファイアウォールポリシー。 |
rule_id | int | pending_approval を返したルール。 |
4. 署名の検証
すべての配信は、偽造を拒否できるよう署名されています。署名ヘッダーは次のとおりです:secret はワークスペースに設定した承認 webhook シークレットであり、raw_body は
リクエストボディの正確なバイトです。生のバイトに対して HMAC を計算してください —
パースされた JSON を再シリアライズすると空白が変わり、比較が壊れます。定数時間で
検証してください:
5. webhook の設定
宛先 URL と共有シークレットはワークスペース設定です — コンソール(または設定 API; Developer+)で一度設定します。オペレーターの関与はなく、デプロイするものも ありません。URL とシークレットを設定する
ファイアウォール設定で、HTTPS エンドポイントを承認 webhook URL として、そして強い
共有シークレットを設定します。URL は
https:// でなければならず — 平文の宛先は
拒否されます — シークレットは書き込み専用です(読み取り時には決して返されません;
設定レスポンスはシークレットが設定されているかどうかだけを報告します)。pending_approval ルールをオーサリングする
判定が
pending_approval のファイアウォールルールを追加します(または HITL
プリセットを使用します)。ファイアウォールルールを
参照してください。受信して検証する
あなたのエンドポイントは、次の保留された呼び出しで署名付きの POST を受信します。
署名を検証し(§4)、それからコールバック経由で解決
するか、人間のために表面化します。
保留された呼び出しは、webhook をまったく設定していなくても機能します — 単に人間が
解決するためにコンソールに表示されるだけです。そして URL を設定したがシークレットを
設定しなかった場合、ゲートウェイはディスパッチを完全にスキップします。なぜなら
コールバックエンドポイントは署名付きリクエストのみを受け付けるからです:認証できない
通知は無用になります。
6. コールバック:保留を解決する
マシンで承認または拒否するには、次にポストバックします:approval_id として受け取ったのと同じ :id を、同じ共有シークレットで署名します。
ボディは決定です:
| ボディフィールド | 必須 | 値 |
|---|---|---|
decision | はい | approved または rejected |
reason | いいえ | 自由記述ノート、監査ログに記録されます。 |
approved の決定は、エージェントの次の試行を一度だけ通します — エージェントは単回使用の
X-OrcaRouter-Firewall-Approval ヘッダーとともに元の呼び出しを再送信します。rejected
の決定は、呼び出しをブロックしたままにします。
解決は冪等かつファーストライタウィンです。人間がすでにコンソールから保留を解決
していた場合 — あるいは重複したコールバックが到着した場合 — エンドポイントは
already_resolved: true とともに 200 を返し、元の決定が有効なままです。リトライ
しても安全です。7. 承認状態
保留された呼び出しは、これらの状態を経て移行します;あなたのコールバックがpending
からの遷移を駆動します:
| 状態 | 意味 |
|---|---|
pending | 決定待ち(webhook 時点の状態)。 |
approved | 解決済み — ゲートされた呼び出しは一度だけ進められます。 |
rejected | 解決済み — ゲートされた呼び出しはブロックされたままです。 |
expired | 保留が決定なしで期限切れになりました。 |
8. 関連リファレンス
ファイアウォール — HITL フロー
pending_approval がどう呼び出しを保留し、エージェントが単回使用の承認ヘッダーで
どう再送信するか。エラーコード
firewall_approval_pending とその他のファイアウォール HTTP レスポンス。判定用語集
pending_approval を含む、すべてのファイアウォール判定。ファイアウォール API
完全なコンソール + ゲートウェイルートリファレンス。
