Studi kasus
Cierra
Agen penjualan AI untuk penjual di WhatsApp
Cierra menjawab chat pembeli di nomor WhatsApp milik penjual sendiri, menawar dalam batas diskon yang ditetapkan penjual, dan menyimpan pesanan sebagai draf untuk dikonfirmasi penjual. Halaman ini membahas bagaimana Cierra dibangun dan alasannya.
- Peran saya
- API Go, gateway WhatsApp, layanan AI, dan infrastruktur
- Tim
- Dua engineer. Dasbor web sebagian besar oleh Dimas Danang Aji
- Status
- MVP sudah dibangun, pendaftaran pilot dibuka. Rilis layanan WhatsApp dan AI ke produksi masih menunggu
- Stack
- Go, Python, gRPC, PostgreSQL + pgvector, Redis Streams, Next.js, Docker, Terraform

Masalahnya
Balasan yang lambat membuat penjual kehilangan pembeli
- Penjual kehilangan pembeli karena balasan yang lambat.
- Mereka mengulang negosiasi yang sama sepanjang hari.
- Pesanan hilang di tengah chat.
Agen berbicara dengan pelanggan sungguhan atas nama penjual. Jadi bagian tersulitnya bukan menghasilkan balasan, tetapi memastikan agen tidak pernah menjanjikan sesuatu yang tidak diizinkan penjual.
Arsitektur
Layanan kecil, dengan satu antrean di antaranya
- PembeliWhatsApp
- GatewayGo, whatsmeow
- AntreanRedis Streams
- Worker APIGo
- Layanan AIPython, gRPC
- LLMQwen, API kompatibel OpenAI
- PostgreSQL 16 + pgvectorSumber kebenaran dan pencarian katalog
- DasborNext.js lewat REST dan SSE
- ObservabilityOpenTelemetry, Prometheus, Grafana, Loki
Arahkan kursor ke diagram untuk melihat aliran data dari kiri ke kanan.
Tiga aturan batas
- 01API adalah satu-satunya layanan yang menghadap internet. Gateway, layanan AI, database, dan Redis hanya bisa dijangkau di dalam jaringan privat.
- 02Gateway tidak pernah berbicara langsung ke LLM. Semuanya lewat antrean.
- 03Setiap query database membawa konteks tenant, dan lapisan repository menolak query tanpa konteks itu.
Satu pesan
Apa yang terjadi ketika pembeli minta diskon
Pembeli menulis: “Ada warna merah? Bisa diskon?”
Gateway menerimanya, membuang duplikat berdasarkan id pesan WhatsApp, menyimpannya, lalu mendorongnya ke stream masuk.
Sebuah worker memuat konteks: penjual, pelanggan, riwayat chat, dan playbook penjualan milik penjual.
Layanan AI memeriksa kata kunci eskalasi, mencari di katalog milik penjual itu sendiri, membuat balasan terstruktur, menjalankan pengamannya, dan beralih ke model kedua bila perlu.
Jika ada pesanan terdeteksi, draf pesanan dibuat dan pemilik diberi tahu. Jika chat butuh manusia, chat beralih ke mode ambil alih.
Balasan dialirkan kembali, dirakit menjadi satu pesan, lalu masuk ke stream keluar.
Gateway mengirimnya dengan pembatasan laju dan jeda singkat antar pesan.
Keputusan
Pilihan yang membentuk sistem, dan alasannya
Go untuk gateway WhatsApp
whatsmeow adalah satu-satunya library WhatsApp multi-device kelas produksi, dan ditulis dengan Go. Itu menentukan bahasa di jantung sistem. Bahasa ketiga tanpa kebutuhan yang jelas ditolak.
Layanan Python terpisah untuk AI, lewat gRPC
Pipeline percakapan adalah fungsi Python biasa: retrieve, generate, guard, fallback. Satu-satunya kontrak antar layanan adalah protobuf kecil, dibekukan sejak awal dan hanya diubah secara backward-compatible.
Aturan bisnis ada di kode, bukan hanya di prompt
Batas diskon, klaim palsu “pesananmu sudah dicatat”, dan validasi pesanan diperiksa di layanan AI. Item dan harga diperiksa ulang di API terhadap katalog milik penjual, sehingga kesalahan model tidak bisa membuat pesanan yang salah.
Tanpa framework agen
Framework berbasis graph sempat dipertimbangkan lalu ditinggalkan. Satu giliran percakapan adalah alur lurus dengan satu cabang, yaitu model fallback, dan riwayat chat sudah ada di tabel messages. Fungsi biasa lebih mudah diuji.
Redis Streams sekarang, Kafka nanti
Streams menyediakan consumer group dan dead-letter queue. Kafka ditunda sampai trafik bertahan di sekitar seribu pesan per menit.
Isolasi tenant di lapisan aplikasi
Sebuah middleware menyuntikkan business id dan repository menolak query tanpa id itu. Ini menggantikan row-level security dari setup database hosting sebelumnya.
Docker Compose sebelum Kubernetes
Satu server, dideskripsikan dengan Terraform. Pemicu tertulis untuk pindah ke Kubernetes adalah lebih dari empat layanan, lebih dari satu server, atau tim lebih dari tiga orang.
Kualitas dan operasional
Cara menjaganya tetap jujur
- 23 file tes Go dan 5 file tes Python, ditambah rangkaian evaluasi untuk agen penjualan.
- CI menjalankan lint, tes, dan build image di setiap perubahan. Deploy dilakukan manual dari branch main, lewat self-hosted runner di server produksi, dengan image dibangun lokal dan tanpa registry eksternal.
- Perubahan infrastruktur lewat pull request Terraform, bukan lewat konsol cloud.
- Penyedia LLM diisolasi di modulnya sendiri, sehingga mengganti model atau vendor adalah perubahan yang terbatas.
- Keputusan arsitektur dituliskan, dan perubahannya masuk lewat pull request pada dokumen arsitektur.
Posisi saat ini
Sudah dibangun, pekerjaan menuju peluncuran masih ada
Berdasarkan audit repositori per 13 Oktober 2026.
Selesai
- Fondasi, API inti dengan auth, dan migrasi data
- Gateway WhatsApp
- Layanan AI, kode lengkap
- Dasbor web terhubung ke API baru
Sebelum peluncuran
- Deploy gateway dan layanan AI ke produksi
- Uji end-to-end dengan dua HP nyata, mengukur biaya token dan waktu sampai balasan pertama
- Alerting, runbook, dan restore drill
- Load test
Setelah MVP
- Follow-up otomatis
- Transkripsi pesan suara
- Inbox real-time
- Konektor TikTok Shop, jika persetujuan partner turun
Merekrut untuk tim yang terbiasa merilis?
Email paling cocok untuk membahas peran dan detail proyek. Untuk pertanyaan singkat, WhatsApp juga boleh.