Approval
Bot bebas membaca, tapi apa pun yang mengirim, membuat, mengubah, atau menghapus di luar Lex menunggu persetujuan manusia. Setiap tool punya kelas risiko:
| Risiko | Contoh | Bawaan |
|---|---|---|
read | Mengambil email, melihat daftar channel | Berjalan sendiri |
write | Mengirim email, membuat issue | Bertanya dulu |
high_impact | Menghapus repository | Selalu bertanya, walaupun kebijakan mengizinkan auto-run |
Admin workspace bisa mengubah aturan bawaan per connector lewat kebijakan: memblokir tool, selalu bertanya, atau membiarkan tool write tertentu berjalan sendiri.
Di dalam chat
Saat run perlu persetujuan, stream mengirim approval.required lalu run.waiting:
{ "approvalId": "apr_1", "callId": "call_9", "toolSlug": "GMAIL_SEND_EMAIL",
"risk": "write", "summary": "Send email to bob@example.com", "expiresAt": "2026-10-22T10:15:00.000Z" }Tampilkan ringkasannya ke pengguna dan kirim keputusannya:
POST /approvals/apr_1/decision
x-lex-client: aplikasi-saya
Content-Type: application/json
{ "decision": "approve" }decision bernilai approve atau reject. Run berlanjut sendiri: tool yang ditolak melaporkan tool.completed dengan status: "rejected", dan bot melanjutkan tanpa tool itu.
GET /approvals/pending menampilkan semua approval yang menunggu pengguna yang sedang login, dari semua bot.
Jaminan
- Hanya peminta yang memutuskan. Pengguna lain mendapat
404 NOT_FOUND. - Terikat pada aksi yang persis sama. Satu approval hanya berlaku untuk satu pemanggilan tool dengan argumen tertentu. Kalau argumennya berubah, approval tidak berlaku lagi.
- Sekali pakai. Setelah dipakai, approval tidak bisa menjalankan aksi itu lagi.
- Kedaluwarsa. Approval yang tidak diputuskan kedaluwarsa pada
expiresAt; tool-nya lalu selesai denganstatus: "expired".
Memanggil tool langsung
POST /integrations/tools/{toolSlug}/execute menjalankan tool di luar chat. Tool write menjawab 409 APPROVAL_REQUIRED dengan details.approvalId; setujui seperti di atas, lalu ulangi request yang sama dengan approvalId tersebut:
{ "arguments": { "to": "bob@example.com", "body": "Halo" }, "approvalId": "apr_1" }