pending_approval, el gateway
retiene la llamada a herramienta y notifica a tu propio sistema de aprobación fuera de
banda. Esa notificación es un POST HTTP firmado — el payload de webhook del firewall —
y esta página documenta su forma exacta para que puedas verificar la firma, enrutar el
evento y publicar tu decisión de vuelta.
Este es el hermano asíncrono del flujo de aprobación dentro de la consola descrito en la
página de Firewall. La ruta de consola
(un revisor hace clic en aprobar/rechazar) no necesita ningún webhook. El webhook es para
cuando quieres que una máquina — tu propio bot de tickets, acción de Slack o
agent-runtime — resuelva la retención. Ambas rutas son first-writer-wins, así que puedes
ejecutarlas en paralelo.
El webhook es una señal de enrutamiento de mejor esfuerzo, no el canal HITL
autoritativo. El propio long-poll del agente sobre
GET /api/v1/firewall/approvals/:id es
el respaldo — si una notificación se pierde o tu endpoint está brevemente caído, la
llamada retenida sigue apareciendo en la consola y se resuelve con normalidad. El webhook
solo deja que una máquina reaccione más rápido de lo que lo haría un humano.1. El payload de webhook del firewall de un vistazo
OrcaRouter hace POST de un sobre JSON a la URL que configures, firmado con un secreto compartido. Aquí hay una entrega completa — cabeceras y cuerpo:X-Orca-Event sin parsear el
cuerpo.
2. Campos del sobre
event — el nombre del evento
event — el nombre del evento
Siempre
firewall.approval.pending para una retención de aprobación. Reflejado en la
cabecera X-Orca-Event para que puedas enrutar antes de parsear el cuerpo.workspace_id — el espacio de trabajo de origen
workspace_id — el espacio de trabajo de origen
El id entero del espacio de trabajo cuya política retuvo la llamada. Útil cuando un
endpoint recibe webhooks de varios espacios de trabajo.
occurred_at — cuándo se creó la retención
occurred_at — cuándo se creó la retención
Timestamp RFC 3339 / UTC (precisión de nanosegundos) de cuándo el gateway encoló la
aprobación. Parseable por cualquier herramienta estándar de eventos.
data — el payload de aprobación
data — el payload de aprobación
El bloque que tu callback necesita para resolver la compuerta. Campos en
§3.
3. El payload data
El bloque data lleva todo lo necesario para enrutar y resolver la retención —
deliberadamente sin argumentos de herramienta. El webhook es una señal de
enrutamiento; el contexto completo de la llamada (herramienta, args, la regla que se
disparó) vive en la pestaña Approvals de la consola y en el log de auditoría, donde está
controlado por acceso.
| Campo | Tipo | Significado |
|---|---|---|
approval_id | string | El id contra el que publicas tu decisión. |
tool_name | string | La herramienta retenida, p. ej. db.export. |
request_id | string | La solicitud de relay que disparó la retención. |
conversation_id | string | El id de conversación / sesión del agente. |
policy_id | int | La política de firewall que coincidió. |
rule_id | int | La regla que devolvió pending_approval. |
4. Verificar la firma
Cada entrega está firmada para que puedas rechazar falsificaciones. La cabecera de firma es:secret es el secreto de webhook de aprobación que estableces en el espacio de
trabajo y raw_body son los bytes exactos del cuerpo de la solicitud. Calcula el
HMAC sobre los bytes en bruto — reserializar el JSON parseado cambiará el espacio en
blanco y romperá la comparación. Verifica en tiempo constante:
5. Configurar el webhook
La URL de destino y el secreto compartido son ajustes del espacio de trabajo — establécelos una vez en la consola (o vía la API de settings; Developer+). No hay implicación de operador ni nada que desplegar.Establece la URL y el secreto
En los ajustes del Firewall, establece tu endpoint HTTPS como la URL de webhook de
aprobación y un secreto compartido fuerte. La URL debe ser
https:// — los destinos
en texto plano se rechazan — y el secreto es de solo escritura (nunca se devuelve al
leer; la respuesta de settings solo reporta si hay uno establecido).Autora una regla pending_approval
Añade una regla del Firewall cuyo veredicto sea
pending_approval (o usa el preset
HITL). Ve Reglas del firewall.Recibe y verifica
Tu endpoint recibe el POST firmado en la siguiente llamada retenida. Verifica la firma
(§4), luego o bien resuelve vía el callback o exponla para un
humano.
Una llamada retenida sigue funcionando sin webhook configurado — simplemente aparece
en la consola para que un humano la resuelva. Y si estableces una URL pero ningún secreto,
el gateway omite el despacho por completo, porque el endpoint de callback solo acepta
solicitudes firmadas: una notificación que no pudieras autenticar de vuelta sería inútil.
6. El callback: resolver la retención
Para aprobar o rechazar por máquina, haz POST de vuelta a::id que recibiste como approval_id, firmado con el mismo secreto
compartido. El cuerpo es una decisión:
| Campo del cuerpo | Requerido | Valores |
|---|---|---|
decision | sí | approved o rejected |
reason | no | Nota de texto libre, registrada en el log de auditoría. |
approved deja pasar el siguiente intento del agente una vez — el agente
reenvía la llamada original con una cabecera de un solo uso
X-OrcaRouter-Firewall-Approval. Una decisión rejected mantiene la llamada bloqueada.
La resolución es idempotente y first-writer-wins. Si un humano ya resolvió la
retención desde la consola — o llega un callback duplicado — el endpoint devuelve
200
con already_resolved: true y la decisión original prevalece. Seguro de reintentar.7. Estados de aprobación
Una llamada retenida se mueve a través de estos estados; tu callback impulsa la transición fuera depending:
| Estado | Significado |
|---|---|
pending | A la espera de una decisión (el estado en el momento del webhook). |
approved | Resuelto — la llamada gobernada puede proceder una vez. |
rejected | Resuelto — la llamada gobernada permanece bloqueada. |
expired | La retención caducó sin una decisión. |
8. Referencias relacionadas
Firewall — flujo HITL
Cómo
pending_approval retiene una llamada y el agente reenvía con la cabecera de
aprobación de un solo uso.Códigos de error
firewall_approval_pending y las otras respuestas HTTP del firewall.Glosario de veredictos
Cada veredicto del firewall, incluyendo
pending_approval.API de Firewall
La referencia completa de rutas de consola + gateway.
