Fundamentals
Arsitektur Gateway
Ikhtisar
-
Satu Gateway berumur panjang mengelola semua sarana perpesanan (WhatsApp melalui Baileys, Telegram melalui grammY, Slack, Discord, Signal, iMessage, WebChat).
-
Klien bidang kontrol (aplikasi macOS, CLI, UI web, otomatisasi) terhubung ke Gateway melalui WebSocket pada host pengikatan yang dikonfigurasi (bawaan
127.0.0.1:18789). -
Node (macOS/iOS/Android/headless) juga terhubung melalui WebSocket, tetapi mendeklarasikan
role: nodedengan kapabilitas/perintah eksplisit. -
Satu Gateway per host; Gateway adalah satu-satunya tempat yang membuka sesi WhatsApp.
-
Host kanvas disajikan oleh server HTTP Gateway pada:
/__openclaw__/canvas/(HTML/CSS/JS yang dapat diedit agen)/__openclaw__/a2ui/(host A2UI)
Host ini menggunakan porta yang sama dengan Gateway (bawaan
18789).
Komponen dan alur
Gateway (daemon)
- Memelihara koneksi penyedia.
- Menyediakan API WS bertipe (permintaan, respons, peristiwa dorong-server).
- Memvalidasi bingkai masuk terhadap JSON Schema.
- Memancarkan peristiwa seperti
agent,chat,presence,health,heartbeat,cron.
Klien (aplikasi Mac / CLI / admin web)
- Satu koneksi WS per klien.
- Mengirim permintaan (
health,status,send,agent,system-presence). - Berlangganan peristiwa (
tick,agent,presence,shutdown).
Node (macOS / iOS / Android / headless)
- Terhubung ke server WS yang sama dengan
role: node. - Menyediakan identitas perangkat dalam
connect; pemasangan berbasis perangkat (perannode) dan persetujuan disimpan dalam penyimpanan pemasangan perangkat. - Menyediakan perintah seperti
canvas.*,camera.*,screen.record,location.get.
Detail protokol: Protokol Gateway
WebChat
- UI statis yang menggunakan API WS Gateway untuk riwayat percakapan dan pengiriman.
- Dalam penyiapan jarak jauh, terhubung melalui terowongan SSH/Tailscale yang sama seperti klien lainnya.
Siklus hidup koneksi (klien tunggal)
sequenceDiagram
participant Client
participant Gateway
Client->>Gateway: req:connect
Gateway-->>Client: res (ok)
Note right of Gateway: atau kesalahan res + tutup
Note left of Client: payload=hello-ok<br>snapshot: presence + health
Gateway-->>Client: event:presence
Gateway-->>Client: event:tick
Client->>Gateway: req:agent
Gateway-->>Client: res:agent<br>ack {runId, status:"accepted"}
Gateway-->>Client: event:agent<br>(streaming)
Gateway-->>Client: res:agent<br>final {runId, status, summary}Protokol komunikasi (ringkasan)
- Transpor: WebSocket, bingkai teks dengan muatan JSON.
- Bingkai pertama harus berupa
connect. - Setelah jabat tangan:
- Permintaan:
{type:"req", id, method, params}→{type:"res", id, ok, payload|error} - Peristiwa:
{type:"event", event, payload, seq?, stateVersion?}
- Permintaan:
hello-ok.features.methods/eventsadalah metadata penemuan, bukan hasil pembuatan yang memuat setiap rute pembantu yang dapat dipanggil.- Autentikasi rahasia bersama menggunakan
connect.params.auth.tokenatauconnect.params.auth.password, bergantung pada mode autentikasi Gateway yang dikonfigurasi. - Mode yang membawa identitas seperti Tailscale Serve
(
gateway.auth.allowTailscale: true) ataugateway.auth.mode: "trusted-proxy"non-loopback memenuhi autentikasi dari header permintaan alih-alihconnect.params.auth.*. gateway.auth.mode: "none"untuk akses masuk privat menonaktifkan autentikasi rahasia bersama sepenuhnya; jangan gunakan mode tersebut pada akses masuk publik/tidak tepercaya.- Kunci idempotensi diwajibkan untuk metode yang menimbulkan efek samping (
send,agent) agar dapat dicoba ulang dengan aman; server menyimpan singgahan deduplikasi berumur pendek. - Node harus menyertakan
role: "node"beserta kapabilitas/perintah/izin dalamconnect.
Pemasangan dan kepercayaan lokal
- Semua klien WS (operator + Node) menyertakan identitas perangkat saat
connect. - ID perangkat baru memerlukan persetujuan pemasangan; Gateway menerbitkan token perangkat untuk koneksi berikutnya.
- Koneksi local loopback langsung dapat disetujui secara otomatis agar pengalaman pengguna pada host yang sama tetap lancar.
- OpenClaw juga memiliki jalur koneksi mandiri sempit yang bersifat lokal untuk backend/kontainer bagi alur pembantu rahasia bersama tepercaya.
- Koneksi tailnet dan LAN, termasuk pengikatan tailnet pada host yang sama, tetap memerlukan persetujuan pemasangan eksplisit.
- Semua koneksi harus menandatangani nonce
connect.challenge. Muatan tanda tanganv3juga mengikatplatformdandeviceFamily; Gateway mengunci metadata yang dipasangkan saat koneksi ulang dan mewajibkan pemasangan perbaikan untuk perubahan metadata. - Koneksi nonlokal tetap memerlukan persetujuan eksplisit.
- Autentikasi Gateway (
gateway.auth.*) tetap berlaku untuk semua koneksi, baik lokal maupun jarak jauh.
Detail: Protokol Gateway, Pemasangan, Keamanan.
Pengetikan protokol dan pembuatan kode
- Skema TypeBox mendefinisikan protokol.
- JSON Schema dihasilkan dari skema tersebut.
- Model Swift dihasilkan dari JSON Schema.
Akses jarak jauh
-
Disarankan: Tailscale atau VPN.
-
Alternatif: terowongan SSH
bash ssh -N -L 18789:127.0.0.1:18789 user@gateway-host -
Jabat tangan + token autentikasi yang sama berlaku melalui terowongan.
-
TLS + penyematan opsional dapat diaktifkan untuk WS dalam penyiapan jarak jauh.
Ringkasan operasional
- Mulai:
openclaw gateway(latar depan, log ke stdout). - Kesehatan:
healthmelalui WS (juga disertakan dalamhello-ok). - Supervisi: launchd/systemd untuk mulai ulang otomatis.
Invarian
- Tepat satu Gateway mengendalikan satu sesi Baileys per host.
- Jabat tangan wajib; bingkai pertama yang bukan JSON atau bukan
connectakan menyebabkan penutupan paksa. - Peristiwa tidak diputar ulang; klien harus menyegarkan ketika terdapat celah.
Terkait
- Perulangan Agen — siklus eksekusi agen secara mendetail
- Protokol Gateway — kontrak protokol WebSocket
- Antrean — antrean perintah dan konkurensi
- Keamanan — model kepercayaan dan penguatan