pending_approval, gateway giữ cuộc gọi tool lại
và thông báo cho hệ thống phê duyệt của riêng bạn out-of-band. Thông báo đó là một HTTP POST
đã ký — payload webhook firewall — và trang này tài liệu hóa hình dạng chính xác của
nó để bạn có thể xác minh chữ ký, định tuyến event, và post quyết định của bạn trở lại.
Đây là người anh em bất đồng bộ của luồng phê duyệt trong-console được mô tả trên trang
Firewall. Đường console (một người duyệt
nhấp approve/reject) không cần webhook nào cả. Webhook là để khi bạn muốn một cỗ máy —
ticketing bot, Slack action, hoặc agent-runtime của riêng bạn — giải quyết lần giữ. Cả hai
đường đều first-writer-wins, nên bạn có thể chạy chúng song song.
Webhook là một tín hiệu định tuyến best-effort, không phải kênh HITL có thẩm quyền.
Long-poll của chính agent trên
GET /api/v1/firewall/approvals/:id
là phương án dự phòng — nếu một thông báo bị rớt hoặc endpoint của bạn tạm thời ngừng, cuộc
gọi đã giữ vẫn nổi lên trong console và giải quyết bình thường. Webhook chỉ cho phép một cỗ
máy phản ứng nhanh hơn con người.1. Payload webhook firewall trong nháy mắt
OrcaRouter POST một JSON envelope tới URL bạn cấu hình, ký bằng một shared secret. Đây là một lần gửi hoàn chỉnh — header và body:X-Orca-Event mà không cần parse body.
2. Các trường của envelope
event — tên event
event — tên event
Luôn là
firewall.approval.pending cho một lần giữ phê duyệt. Được phản chiếu trong
header X-Orca-Event để bạn có thể định tuyến trước khi parse body.workspace_id — workspace gốc
workspace_id — workspace gốc
Id số nguyên của workspace mà chính sách của nó giữ cuộc gọi. Hữu ích khi một endpoint
nhận webhook từ nhiều workspace.
occurred_at — khi nào lần giữ được tạo
occurred_at — khi nào lần giữ được tạo
Timestamp RFC 3339 / UTC (độ chính xác nanosecond) cho thời điểm gateway xếp hàng lần
phê duyệt. Parse được bởi bất kỳ công cụ event tiêu chuẩn nào.
data — payload phê duyệt
data — payload phê duyệt
Khối mà callback của bạn cần để giải quyết cổng. Các trường ở §3.
3. Payload data
Khối data mang theo mọi thứ cần để định tuyến và giải quyết lần giữ — có chủ đích không
có argument tool. Webhook là một tín hiệu định tuyến; ngữ cảnh cuộc gọi đầy đủ (tool,
args, quy tắc đã kích hoạt) sống trong tab Approvals của console và audit log, nơi nó được
kiểm soát truy cập.
| Trường | Kiểu | Ý nghĩa |
|---|---|---|
approval_id | string | Id bạn post quyết định của mình đối với nó. |
tool_name | string | Tool đã giữ, vd: db.export. |
request_id | string | Request relay đã kích hoạt lần giữ. |
conversation_id | string | Id cuộc trò chuyện / phiên của agent. |
policy_id | int | Chính sách firewall đã khớp. |
rule_id | int | Quy tắc đã trả về pending_approval. |
4. Xác minh chữ ký
Mọi lần gửi đều được ký để bạn có thể từ chối các giả mạo. Header chữ ký là:secret là approval-webhook secret bạn đặt trên workspace và raw_body là đúng
các byte của body request. Tính HMAC trên các byte thô — re-serialize JSON đã parse sẽ
thay đổi whitespace và phá vỡ phép so sánh. Xác minh trong thời gian hằng số:
5. Cấu hình webhook
URL đích và shared secret là các settings của workspace — đặt chúng một lần trong console (hoặc qua settings API; Developer+). Không có sự tham gia của operator và không có gì để triển khai.Đặt URL và secret
Trong settings Firewall, đặt endpoint HTTPS của bạn làm URL webhook phê duyệt và một
shared secret mạnh. URL phải là
https:// — các đích plaintext bị từ chối — và secret
là chỉ-ghi (nó không bao giờ được trả về khi đọc; phản hồi settings chỉ báo cáo liệu một
cái có được đặt hay không).Soạn một quy tắc pending_approval
Thêm một quy tắc Firewall mà verdict của nó là
pending_approval (hoặc dùng preset
HITL). Xem Quy tắc firewall.Nhận và xác minh
Endpoint của bạn nhận POST đã ký ở lần giữ tiếp theo. Xác minh chữ ký
(§4), rồi hoặc giải quyết qua callback hoặc làm nổi nó lên
cho một con người.
Một cuộc gọi đã giữ vẫn hoạt động với không webhook nào được cấu hình — nó chỉ hiện ra
trong console để một con người giải quyết. Và nếu bạn đặt một URL nhưng không có secret,
gateway bỏ qua hoàn toàn việc dispatch, vì endpoint callback chỉ chấp nhận các request đã
ký: một thông báo mà bạn không thể xác thực trở lại sẽ vô dụng.
6. Callback: giải quyết lần giữ
Để approve hoặc reject bằng cỗ máy, POST lại tới::id bạn nhận được dưới dạng approval_id, ký bằng cùng shared secret. Body là
một quyết định:
| Trường body | Bắt buộc | Giá trị |
|---|---|---|
decision | có | approved hoặc rejected |
reason | không | Ghi chú văn bản tự do, ghi vào audit log. |
approved cho lần thử tiếp theo của agent đi qua một lần — agent gửi lại
cuộc gọi gốc với một header dùng một lần X-OrcaRouter-Firewall-Approval. Một quyết định
rejected giữ cuộc gọi bị chặn.
Việc giải quyết là idempotent và first-writer-wins. Nếu một con người đã giải quyết lần
giữ từ console — hoặc một callback trùng lặp đến — endpoint trả về
200 với
already_resolved: true và quyết định gốc vẫn giữ nguyên. An toàn để retry.7. Các trạng thái phê duyệt
Một cuộc gọi đã giữ di chuyển qua các trạng thái này; callback của bạn điều khiển chuyển đổi ra khỏipending:
| Trạng thái | Ý nghĩa |
|---|---|
pending | Đang chờ một quyết định (trạng thái lúc webhook). |
approved | Đã giải quyết — cuộc gọi bị cổng có thể tiến hành một lần. |
rejected | Đã giải quyết — cuộc gọi bị cổng vẫn bị chặn. |
expired | Lần giữ hết hạn mà không có quyết định. |
8. Tham chiếu liên quan
Firewall — luồng HITL
Cách
pending_approval giữ một cuộc gọi và agent gửi lại với header phê duyệt dùng một
lần.Mã lỗi
firewall_approval_pending và các phản hồi HTTP firewall khác.Bảng thuật ngữ verdict
Mọi verdict firewall, bao gồm
pending_approval.Firewall API
Tham chiếu route console + gateway đầy đủ.
