Saya Tambahkan AI ke Carbonio Webmail, Ini Ceritanya

Pertanyaannya sederhana, bagaimana kalau pengguna webmail tidak hanya bisa membaca dan mengirim email, tapi juga bisa minta bantuan AI untuk mencari pesan penting, meringkas percakapan, atau menyiapkan balasan?

Dari pertanyaan itu lahirlah proyek yang saya kasih nama Carbonio AI Assistant. Sebuah add-on eksperimental untuk Carbonio Webmail yang dimulai dari sebuah tombol kecil bergambar robot di sidebar.

Target pertama terlihat simpel, tambahkan tombol AI di navigation bar Carbonio, sejajar dengan aplikasi Mail dan Settings. Tapi dari awal saya sudah tahu satu hal yang tidak mau saya lakukan, yaitu menancapkan fitur ini langsung ke dalam source code Carbonio yang asli. Kalau itu dilakukan, setiap kali Carbonio di-upgrade ada risiko perubahan saya tertimpa. Jadi AI Assistant ini dibuat sebagai microfrontend terpisah yang mengikuti mekanisme aplikasi pada Carbonio Shell UI, mirip konsep zimlet. Fiturnya menyatu dengan si user, tapi siklus rilisnya mandiri.

Setelah tombol robot dipilih,user masuk ke halaman dengan tiga area navigation bar utama Carbonio, sidebar untuk daftar percakapan, dan area chat utama. Tampilannya sengaja dibuat familier supaya user tidak perlu belajar dari nol.

Masalah pertama yang muncul adalah soal keamanan API key. Browser tidak boleh berkomunikasi langsung dengan provider AI karena kalau API key disimpan di frontend, siapapun yang buka developer tools bisa melihat dan menyalahgunakannya. Karena itu proyek dibagi dua, AI Assistant UI yang berbasis React dan TypeScript untuk tampilan di browser, dan AI Agent Gateway yang berbasis Node.js sebagai backend kecil yang berjalan di server. Semua komunikasi ke provider AI, penyimpanan API key, dan akses ke email Carbonio lewat gateway ini. Frontend tidak pernah memegang key secara langsung.

Untuk pilihan provider, saya tambahkan preset untuk OpenRouter, OpenAI, Anthropic, DeepSeek, Gemini, dan custom endpoint. Saat user pilih provider yang sudah dikenal, endpoint diisi otomatis oleh sistem. Tinggal masukkan API key dan pilih model. OpenRouter jadi pilihan utama untuk pengujian karena tersedia beberapa model gratis.

Soal penyimpanan history percakapan, prototype awal biasanya pakai localStorage karena cepat dibuat. Tapi untuk aplikasi webmail ini tidak cukup, history hanya tersedia di satu browser, bisa hilang kalau storage dibersihkan, dan tidak bisa dibuka dari perangkat lain. Jadi history dipindahkan ke backend dan disimpan pakai SQLite. Setiap conversation dikaitkan dengan identitas akun Carbonio yang sudah tervalidasi, dan gateway selalu memeriksa kepemilikan sebelum mengembalikan data.

Bagian yang paling menarik adalah koneksi AI dengan email. Gateway menyediakan tool read-only untuk mencari dan membaca email lewat Carbonio SOAP API. Alurnya, pengguna minta AI cari atau ringkas email, gateway validasi sesi Carbonio, agent pilih tool yang sesuai, gateway jalankan query atas nama pengguna, hasilnya dikirim sebagai konteks ke model, dan model menyusun jawaban. Tool tidak menerima kredensial mentah, hanya menggunakan sesi aktif milik pengguna yang sedang login.

Di perjalanan dari prototype lokal ke server Carbonio, ada beberapa masalah yang muncul. Pertama, error Unexpected token '<' yang artinya frontend menerima halaman HTML bukan JSON dari gateway, karena request masuk ke route Nginx yang salah. Perbaikannya bukan di parser, tapi di konfigurasi Nginx supaya route /api/ai/* mengarah ke port gateway dengan benar.

Kedua, HTTP 405 Method Not Allowed yang muncul karena method request antara frontend dan gateway tidak sepakat. Setelah diselaraskan, masalah ini beres.

Ketiga, ada satu momen di mana provider sudah balas dengan status 200 tapi jawaban tidak muncul di UI. Penyebabnya ada di implementasi streaming yang belum stabil. Untuk MVP, response chat diubah jadi JSON biasa dulu. Streaming bisa dikembalikan nanti setelah semua edge case-nya sudah diuji.

Gateway dijalankan sebagai service systemd supaya otomatis nyala saat server boot, bisa restart sendiri kalau crash, dan log-nya bisa dipantau lewat journal. Gateway juga hanya bind ke localhost, jadi akses dari browser harus melewati Nginx Carbonio.

Untuk distribusi, saya buat script yang mengemas semua komponen menjadi satu paket,UI, gateway, konfigurasi Nginx, unit systemd, installer, uninstaller, dan README. Hasilnya file carbonio-ai-assistant-v0.0.1.tar.gz dengan checksum SHA-256. Instalasi cukup extract dan jalankan install.sh.

Versi v0.0.1 ini masih MVP untuk pengujian. Belum siap produksi penuh karena masih perlu audit keamanan, logging yang proper, dan kebijakan privasi terkait data yang dikirim ke provider AI. Tapi fondasi sudah ada, microfrontend, gateway, history server-side, dan integrasi dengan mailbox Carbonio semuanya sudah terhubung.

Kalau ada yang mau mencoba atau berkontribusi, proyeknya ada di github.com/afatyoo/carbonio-ai-assitant.

Pelajaran terbesar dari proyek ini menambahkan AI ke sebuah aplikasi bukan cuma soal memanggil API model. Bagian tersulitnya justru ada di sekeliling model, autentikasi, pengelolaan secret, integrasi dengan sistem lama, penyimpanan history, dan desain tool yang aman. Mulai dari MVP kecil terbukti membantu karena bisa menguji asumsi satu per satu sebelum masalahnya bertumpuk.

Leave a Reply

Your email address will not be published. Required fields are marked *