pending_approval, il gateway
mette in attesa la chiamata a tool e notifica il tuo sistema di approvazione fuori banda.
Quella notifica è un POST HTTP firmato — il payload di webhook del firewall — e
questa pagina documenta la sua forma esatta così puoi verificare la firma, instradare
l’evento e inviare la tua decisione.
Questo è il fratello asincrono del flusso di approvazione in-console descritto nella
pagina Firewall. Il percorso di console
(un revisore clicca approva/rifiuta) non richiede alcun webhook. Il webhook serve a
quando vuoi che una macchina — il tuo bot di ticketing, un’azione Slack o l’agent
runtime — risolva l’hold. Entrambi i percorsi sono first-writer-wins, quindi puoi
eseguirli fianco a fianco.
Il webhook è un segnale di routing best-effort, non il canale HITL autoritativo. Il
long-poll dell’agent stesso su
GET /api/v1/firewall/approvals/:id è la rete
di sicurezza — se una notifica viene persa o il tuo endpoint è brevemente down, la
chiamata held emerge comunque nella console e si risolve normalmente. Il webhook
permette solo a una macchina di reagire più velocemente di quanto farebbe un umano.1. Il payload di webhook del firewall in sintesi
OrcaRouter invia in POST un envelope JSON all’URL che configuri, firmato con un segreto condiviso. Ecco una consegna completa — header e corpo:X-Orca-Event senza fare
parsing del corpo.
2. Campi dell’envelope
event — il nome dell'evento
event — il nome dell'evento
Sempre
firewall.approval.pending per un hold di approvazione. Replicato nell’header
X-Orca-Event così puoi instradare prima di fare parsing del corpo.workspace_id — il workspace di origine
workspace_id — il workspace di origine
L’id intero del workspace la cui policy ha messo la chiamata in attesa. Utile quando
un endpoint riceve webhook da più workspace.
occurred_at — quando l'hold è stato creato
occurred_at — quando l'hold è stato creato
Timestamp RFC 3339 / UTC (precisione al nanosecondo) di quando il gateway ha accodato
l’approvazione. Parsabile da qualsiasi tooling di eventi standard.
data — il payload di approvazione
data — il payload di approvazione
Il blocco di cui il tuo callback ha bisogno per risolvere il gate. Campi in
§3.
3. Il payload data
Il blocco data porta tutto ciò che serve per instradare e risolvere l’hold —
deliberatamente nessun argomento del tool. Il webhook è un segnale di routing; il
contesto completo della chiamata (tool, args, la regola che è scattata) vive nella tab
Approvals della console e nell’audit log, dove è soggetto a controllo d’accesso.
| Campo | Tipo | Significato |
|---|---|---|
approval_id | string | L’id contro cui invii la tua decisione. |
tool_name | string | Il tool in attesa, es. db.export. |
request_id | string | La richiesta di relay che ha innescato l’hold. |
conversation_id | string | L’id di conversazione / sessione dell’agent. |
policy_id | int | La policy del firewall che ha corrisposto. |
rule_id | int | La regola che ha restituito pending_approval. |
4. Verificare la firma
Ogni consegna è firmata così puoi rifiutare le contraffazioni. L’header della firma è:secret è il segreto del webhook di approvazione che imposti sul workspace e
raw_body sono i byte esatti del corpo della richiesta. Calcola l’HMAC sui byte
grezzi — ri-serializzare il JSON parsato cambierà gli spazi bianchi e romperà il
confronto. Verifica in tempo costante:
5. Configurare il webhook
L’URL di destinazione e il segreto condiviso sono impostazioni del workspace — impostali una volta nella console (o tramite l’API delle impostazioni; Developer+). Non c’è coinvolgimento di un operatore e nulla da fare deploy.Imposta l'URL e il segreto
Nelle impostazioni del Firewall, imposta il tuo endpoint HTTPS come URL del webhook
di approvazione e un segreto condiviso robusto. L’URL deve essere
https:// — le
destinazioni in plaintext sono rifiutate — e il segreto è write-only (non viene mai
restituito in lettura; la risposta delle impostazioni riporta solo se uno è
impostato).Crea una regola pending_approval
Aggiungi una regola del Firewall il cui verdetto è
pending_approval (o usa il
preset HITL). Vedi Regole del firewall.Ricevi e verifica
Il tuo endpoint riceve il POST firmato alla successiva chiamata held. Verifica la
firma (§4), poi o risolvi tramite il callback o falla
emergere per un umano.
Una chiamata held funziona comunque con nessun webhook configurato — si limita a
comparire nella console perché un umano la risolva. E se imposti un URL ma nessun
segreto, il gateway salta del tutto il dispatch, perché l’endpoint di callback accetta
solo richieste firmate: una notifica che non potresti autenticare al ritorno sarebbe
inutile.
6. Il callback: risolvere l’hold
Per approvare o rifiutare via macchina, invia in POST a::id che hai ricevuto come approval_id, firmato con lo stesso segreto
condiviso. Il corpo è una decisione:
| Campo del corpo | Obbligatorio | Valori |
|---|---|---|
decision | sì | approved o rejected |
reason | no | Nota in testo libero, registrata nell’audit log. |
approved lascia passare il tentativo successivo dell’agent una volta —
l’agent ri-invia la chiamata originale con un header monouso
X-OrcaRouter-Firewall-Approval. Una decisione rejected mantiene la chiamata
bloccata.
La risoluzione è idempotente e first-writer-wins. Se un umano ha già risolto l’hold
dalla console — o arriva un callback duplicato — l’endpoint restituisce
200 con
already_resolved: true e la decisione originale resta valida. Sicuro da ritentare.7. Stati di approvazione
Una chiamata held attraversa questi stati; il tuo callback guida la transizione fuori dapending:
| Stato | Significato |
|---|---|
pending | In attesa di una decisione (lo stato al momento del webhook). |
approved | Risolto — la chiamata gated può procedere una volta. |
rejected | Risolto — la chiamata gated resta bloccata. |
expired | L’hold è scaduto senza una decisione. |
8. Riferimenti correlati
Firewall — flusso HITL
Come
pending_approval mette in attesa una chiamata e l’agent ri-invia con l’header
di approvazione monouso.Codici di errore
firewall_approval_pending e le altre risposte HTTP del firewall.Glossario dei verdetti
Ogni verdetto del firewall, incluso
pending_approval.API Firewall
Il riferimento completo delle rotte di console + gateway.
