Gateway
API pemanggilan alat
Gateway OpenClaw mengekspos endpoint HTTP sederhana untuk memanggil satu alat secara langsung. Endpoint ini selalu diaktifkan dan menggunakan autentikasi Gateway serta kebijakan alat. Seperti permukaan yang kompatibel dengan OpenAI /v1/*, autentikasi bearer rahasia-bersama diperlakukan sebagai akses operator tepercaya untuk seluruh gateway.
POST /tools/invoke- Port yang sama dengan Gateway (multipleks WS + HTTP):
http://<gateway-host>:<port>/tools/invoke
Ukuran payload maksimum bawaan adalah 2 MB.
Autentikasi
Menggunakan konfigurasi autentikasi Gateway.
Jalur autentikasi HTTP umum:
- autentikasi rahasia-bersama (
gateway.auth.mode="token"atau"password"):Authorization: Bearer <token-or-password> - autentikasi HTTP tepercaya yang membawa identitas (
gateway.auth.mode="trusted-proxy"): rutekan melalui proxy sadar-identitas yang dikonfigurasi dan biarkan proxy tersebut menyisipkan header identitas yang diperlukan - autentikasi terbuka ingress privat (
gateway.auth.mode="none"): tidak memerlukan header autentikasi
Catatan:
- Ketika
gateway.auth.mode="token", gunakangateway.auth.token(atauOPENCLAW_GATEWAY_TOKEN). - Ketika
gateway.auth.mode="password", gunakangateway.auth.password(atauOPENCLAW_GATEWAY_PASSWORD). - Ketika
gateway.auth.mode="trusted-proxy", permintaan HTTP harus datang dari sumber proxy tepercaya yang dikonfigurasi; proxy local loopback pada host yang sama memerlukangateway.auth.trustedProxy.allowLoopback = truesecara eksplisit. - Jika
gateway.auth.rateLimitdikonfigurasi dan terjadi terlalu banyak kegagalan autentikasi, endpoint mengembalikan429denganRetry-After.
Batas keamanan (penting)
Perlakukan endpoint ini sebagai permukaan akses operator penuh untuk instans gateway.
- Autentikasi bearer HTTP di sini bukan model cakupan per pengguna yang sempit.
- Token/kata sandi Gateway yang valid untuk endpoint ini harus diperlakukan seperti kredensial pemilik/operator.
- Untuk mode autentikasi rahasia-bersama (
tokendanpassword), endpoint mengembalikan default operator penuh yang normal sekalipun pemanggil mengirim headerx-openclaw-scopesyang lebih sempit. - Autentikasi rahasia-bersama juga memperlakukan pemanggilan alat langsung pada endpoint ini sebagai giliran pengirim-pemilik.
- Mode HTTP tepercaya yang membawa identitas (misalnya autentikasi proxy tepercaya atau
gateway.auth.mode="none"pada ingress privat) menghormatix-openclaw-scopessaat ada dan jika tidak ada akan kembali ke set cakupan default operator normal. - Simpan endpoint ini hanya pada loopback/tailnet/ingress privat; jangan ekspos langsung ke internet publik.
Matriks autentikasi:
gateway.auth.mode="token"atau"password"+Authorization: Bearer ...- membuktikan kepemilikan rahasia operator gateway bersama
- mengabaikan
x-openclaw-scopesyang lebih sempit - mengembalikan set cakupan operator default penuh:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - memperlakukan pemanggilan alat langsung pada endpoint ini sebagai giliran pengirim-pemilik
- mode HTTP tepercaya yang membawa identitas (misalnya autentikasi proxy tepercaya, atau
gateway.auth.mode="none"pada ingress privat)- mengautentikasi identitas tepercaya luar atau batas deployment tertentu
- menghormati
x-openclaw-scopesketika header ada - kembali ke set cakupan default operator normal ketika header tidak ada
- hanya kehilangan semantik pemilik ketika pemanggil secara eksplisit mempersempit cakupan dan menghilangkan
operator.admin
Isi permintaan
{
"tool": "sessions_list",
"action": "json",
"args": {},
"sessionKey": "main",
"dryRun": false
}
Kolom:
tool(string, wajib): nama alat yang akan dipanggil.action(string, opsional): dipetakan ke dalam args jika skema alat mendukungactiondan payload args menghilangkannya.args(object, opsional): argumen khusus alat.sessionKey(string, opsional): kunci sesi target. Jika dihilangkan atau"main", Gateway menggunakan kunci sesi utama yang dikonfigurasi (menghormatisession.mainKeydan agen default, atauglobaldalam cakupan global).dryRun(boolean, opsional): dicadangkan untuk penggunaan mendatang; saat ini diabaikan.
Perilaku kebijakan + perutean
Ketersediaan alat difilter melalui rantai kebijakan yang sama dengan yang digunakan oleh agen Gateway:
tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- kebijakan grup (jika kunci sesi dipetakan ke grup atau saluran)
- kebijakan subagen (ketika memanggil dengan kunci sesi subagen)
Jika alat tidak diizinkan oleh kebijakan, endpoint mengembalikan 404.
Catatan batas penting:
- Persetujuan eksekusi adalah pagar pembatas operator, bukan batas otorisasi terpisah untuk endpoint HTTP ini. Jika sebuah alat dapat dijangkau di sini melalui autentikasi Gateway + kebijakan alat,
/tools/invoketidak menambahkan prompt persetujuan per panggilan tambahan. - Jangan bagikan kredensial bearer Gateway dengan pemanggil yang tidak tepercaya. Jika Anda membutuhkan pemisahan lintas batas kepercayaan, jalankan gateway terpisah (dan idealnya pengguna/host OS terpisah).
HTTP Gateway juga menerapkan daftar tolak keras secara bawaan (meskipun kebijakan sesi mengizinkan alat tersebut):
exec- eksekusi perintah langsung (permukaan RCE)spawn- pembuatan proses anak arbitrer (permukaan RCE)shell- eksekusi perintah shell (permukaan RCE)fs_write- mutasi file arbitrer pada hostfs_delete- penghapusan file arbitrer pada hostfs_move- pemindahan/penggantian nama file arbitrer pada hostapply_patch- penerapan patch dapat menulis ulang file arbitrersessions_spawn- orkestrasi sesi; menelurkan agen dari jarak jauh adalah RCEsessions_send- injeksi pesan lintas sesicron- bidang kontrol otomasi persistengateway- bidang kontrol gateway; mencegah rekonfigurasi melalui HTTPnodes- relai perintah node dapat menjangkau system.run pada host yang dipasangkanwhatsapp_login- penyiapan interaktif yang memerlukan pemindaian QR terminal; macet pada HTTP
Anda dapat menyesuaikan daftar tolak ini melalui gateway.tools:
{
gateway: {
tools: {
// Additional tools to block over HTTP /tools/invoke
deny: ["browser"],
// Remove tools from the default deny list
allow: ["gateway"],
},
},
}
Untuk membantu kebijakan grup menyelesaikan konteks, Anda dapat secara opsional menetapkan:
x-openclaw-message-channel: <channel>(contoh:slack,telegram)x-openclaw-account-id: <accountId>(ketika ada beberapa akun)
Respons
200→{ ok: true, result }400→{ ok: false, error: { type, message } }(permintaan tidak valid atau kesalahan input alat)401→ tidak terotorisasi429→ autentikasi dibatasi laju (Retry-Afterditetapkan)404→ alat tidak tersedia (tidak ditemukan atau tidak masuk daftar izin)405→ metode tidak diizinkan500→{ ok: false, error: { type, message } }(kesalahan eksekusi alat tak terduga; pesan disanitasi)
Contoh
curl -sS http://127.0.0.1:18789/tools/invoke \
-H 'Authorization: Bearer secret' \
-H 'Content-Type: application/json' \
-d '{
"tool": "sessions_list",
"action": "json",
"args": {}
}'