Memicu OpenClaw dari Gmail
Topik Pub/Sub, hook Gateway, dan agen mail_reader yang memperlakukan setiap pesan sebagai data tak tepercaya
Anda ingin asisten bereaksi saat email masuk: faktur baru, permintaan dukungan, pemberitahuan deployment yang gagal. Cara penyambungan yang paling jelas, yaitu mengarahkan Gmail ke agen yang sudah biasa Anda ajak chat, memberi siapa pun yang tahu alamat Anda satu giliran pada agen yang memegang shell, file, dan browser Anda. Jalur Gmail di OpenClaw ada untuk menghindari hal itu, dan jalur ini adalah rangkaian komponen, bukan satu sakelar.
Bagaimana pesan Gmail sampai ke agen
- Google Pub/Sub adalah transport-nya. Gmail watch pada sebuah label memublikasikan event kotak masuk ke sebuah topik, Pub/Sub mendorongnya ke proses gog gmail watch serve, dan watcher itu meneruskan data email ke hook HTTP Gateway. Proses ini tidak pernah memuat handler HOOK.md internal: ini adalah hook eksternal masuk, bukan sistem event di dalam proses.
- Prasyaratnya spesifik: gcloud CLI, gog yang sudah diotorisasi untuk akun Gmail yang dipantau, hook yang diaktifkan di OpenClaw, endpoint push HTTPS yang benar-benar dapat dijangkau Pub/Sub (Tailscale Funnel dalam penyiapan yang direkomendasikan), dan backend sandbox yang berfungsi, yang image-nya Anda build sebelum eksekusi pertama jika Anda tetap memakai backend Docker default.
- Gateway memulai dan memperbarui watcher itu sendiri begitu hook diaktifkan dan akun Gmail disetel, dengan variabel lingkungan untuk menonaktifkannya. Jalankan tepat satu: proses serve kedua atau perintah run manual pada listener yang sama menyebabkan konflik bind, dan listener yang sudah berjalan bukan bukti bahwa watch sudah terdaftar.
- Satu batch yang didorong menjadi satu eksekusi agen per email, karena mapping menyebar ke seluruh array messages, dengan batas 200 item. Jalur Gmail mendapat batas ukuran body request yang lebih besar, yang diturunkan dari batas byte per pesan dan dibatasi maksimal 32 MiB, dan satu halaman history upstream menghitung record history, bukan email, sehingga tumpukan email yang tertunda tetap dapat mencapai batas.
Sesi per pesan dari preset Gmail bawaan memisahkan konteks percakapan; sesi itu tidak membatasi alat atau ruang kerja agen target.
Sesi per pesan bukan batas izin
Preset memberi setiap pesan kunci sesinya sendiri, sehingga email kedua tidak dapat membaca percakapan email pertama. Itu adalah isolasi konteks, dan hanya itu. Jika tidak ada mapping yang menyetel ID agen, preset akan mengarah ke agen default Anda, yang berarti email dari orang asing diringkas oleh agen yang memiliki ruang kerja dan alat Anda. Mapping kustom yang cocok dengan path gmail dijalankan sebelum preset, dan di situlah Anda menyebut nama pembaca, sementara daftar ID agen yang diizinkan pada hook mencegah endpoint itu memilih agen lain. Mengarahkan Gmail ke agen yang lebih mumpuni diperbolehkan, tetapi dokumentasi meminta Anda memperlakukannya sebagai keputusan keamanan: wrapping aktif, berjalan di sandbox, tidak ada yang diberikan melebihi kebutuhan alur kerja.
Agen mail_reader
- Pembaca adalah entri kedua di daftar agen dengan ruang kerja dan modelnya sendiri, serta sandbox yang disetel ke mode all, scope session, dan tanpa akses ruang kerja. Karena itu, setiap email mendapat sandbox baru yang tidak dapat menjangkau ruang kerja agen host, dan eksekusinya memang sekali pakai sejak dirancang.
- Kebijakan alatnya adalah profil minimal dengan satu alat yang diizinkan, session_status, ditambah daftar deny eksplisit yang mencakup grup filesystem, runtime, dan web, serta alat browser, cron, gateway, dan nodes. Daftar izin per agen itu adalah penjepit mutlak, sehingga tambahan also-allow global tidak dapat bocor ke pembaca, dan deny eksplisit membuat batas yang dimaksud tetap dapat diaudit.
- Menambahkan pembaca mengubah daftar agen menjadi armada eksplisit, sehingga setiap saluran yang masih dimiliki agen utama Anda memerlukan binding sendiri, satu per saluran, karena tidak ada wildcard lintas saluran. Menampilkan daftar agen beserta binding-nya sebelum restart adalah pemeriksaan yang menangkap saluran tanpa pemilik, dan pengiriman dimatikan, sehingga hasil eksekusi dicatat di log alih-alih diumumkan.
Satu aturan sering menjebak orang: kebijakan alat hanya bisa menyempit saat lapisan global, penyedia, agen, dan sandbox digabungkan, sehingga daftar izin pembaca tidak dapat memulihkan session_status jika lapisan sebelumnya telah menghapusnya, dan kumpulan alat efektif yang kosong akan membatalkan eksekusi sebelum model melihat email. Buktikan pembaca sebelum menghubungkan email: autentikasi penyedianya, lakukan probe model dengan pembaca dipilih, lalu kirim giliran satu baris dan wajibkan jawaban yang persis kembali, satu-satunya pemeriksaan yang menguji model, runtime, sandbox, dan kebijakan alat sekaligus. Penjelasan sandboxing OpenClaw membahas isolasi yang diandalkan pembaca ini, dan armada multi-agen OpenClaw menjelaskan aturan daftar agen dan binding yang baru saja Anda ubah.
Dua token, penyiapan gcloud, dan uji batas
Perintah penyiapan Gmail menulis blok transport, mengaktifkan preset, mempertahankan mapping terbatas yang sudah Anda terapkan lebih dulu, dan secara default memakai Tailscale Funnel untuk endpoint push; mode serve hanya untuk tailnet dan bukan target Pub/Sub yang dapat dijangkau publik, jadi URL yang dikelola secara eksternal dimasukkan dengan tunnel dimatikan dan endpoint diberikan secara eksplisit. Dua token menjaga dua lompatan: push token mengautentikasi Pub/Sub ke watcher, hook token mengautentikasi watcher ke OpenClaw melalui header, dan token di query string ditolak, jadi URL push yang membawa token itu bukan templat untuk memanggil path hook sendiri. Output penyiapan dapat mencetak kedua token, jadi sensor dulu sebelum dibagikan. Rute manualnya singkat: pilih proyek yang memiliki klien OAuth gog, aktifkan API Gmail dan Pub/Sub, buat topiknya, berikan peran publisher kepada akun layanan push Gmail, lalu mulai watch terhadap topik itu, yang tidak mendaftarkan push subscription dan tidak memulai listener apa pun. Lalu uji. Kirimi diri Anda sendiri instruksi yang tidak berbahaya dari akun lain (dokumentasi menyarankan untuk menyuruh agen mengikuti sebuah tautan dan menjalankan sebuah perintah), lalu baca eksekusinya. Keberhasilan watcher mengonfirmasi transport, 200 dari hook dengan ID eksekusi mencatat penerimaan, dan setiap upaya navigasi tautan, penulisan file, perintah shell, tindakan browser, atau pendaftaran MCP berarti pemeriksaan batas gagal. Injeksi prompt OpenClaw adalah model ancaman di balik semua ini, dan pemicu email IMAP adalah pola pembaca yang sama di luar Google.
Di Diali
Diali meng-hosting OpenClaw sebagai layanan terkelola, dan setiap pelanggan menjalankan asistennya sendiri, bukan sekadar kursi di asisten bersama. Konfigurasi runtime dihasilkan dari pengaturan dasbor Anda dan ditulis ulang pada setiap rilis, sementara sesi, memori, dan file ruang kerja disimpan di volume persisten, dengan snapshot harian dan pemulihan sekali klik yang tersedia melalui add-on Cadangan (sudah termasuk di Max). Endpoint push yang dapat dijangkau publik adalah bagian yang perlu diatur bersama kami, karena ingress di depan asisten Anda adalah milik kami. OpenClaw yang di-hosting di Diali menjelaskan asisten yang di-hosting, dan harga Diali mencantumkan apa saja yang termasuk dalam setiap paket.
- Preset memisahkan konteks, tidak pernah izin.
- Dua token, dua lompatan, tanpa substitusi.
- 200 dari hook berarti penerimaan, bukan ringkasan.
Berhenti membaca, buat agen Anda sendiri
Siapkan agen, pilih saluran, dan biarkan ia bekerja di dalam aplikasi yang sudah selalu Anda buka.
