Ketika Provider WhatsApp Tim Sales Bermasalah, Saya Coba Bangun Sendiri

Cerita ini dimulai dari masalah yang cukup bikin pusing. Tim sales sedang pakai platform WhatsApp dari provider tertentu, dan suatu hari sistem itu mulai bermasalah. Pesan tidak masuk, notifikasi delay, dan yang paling parah beberapa history conversation hilang. Tidak bisa diandalkan untuk operasional yang bergantung pada komunikasi real-time dengan pelanggan.

Dari situ saya mulai cari alternatif. Salah satu opsi yang muncul adalah solusi berbayar lain yang fungsinya mirip, tapi setelah lihat-lihat harganya dan fitur yang ditawarkan, rasanya tidak worth it untuk ganti provider tapi masalah yang sama bisa muncul lagi.

Akhirnya ketemu dua nama yang terus muncul di berbagai forum dan thread: Evolution API dan Chatwoot. Keduanya open-source, bisa self-hosted, dan ketika dikombinasikan bisa jadi pengganti platform WhatsApp CRM berbayar yang cukup solid. Evolution API bertugas sebagai jembatan ke WhatsApp lewat protokol Baileys, sementara Chatwoot menjadi UI-nya tempat tim bisa baca dan balas pesan.

Setup dimulai dari nol di server Ubuntu. Langkah pertama install Docker karena kedua service ini jalan di atas container. Chatwoot di-deploy duluan karena Evolution API nantinya perlu tahu alamat database Chatwoot untuk proses import history.

Chatwoot setup-nya relatif straightforward. Buat folder, tulis file .env, buat docker-compose.yaml, prepare database, lalu start. Yang perlu diperhatikan adalah setting SAFE_FETCH_ALLOW_PRIVATE_NETWORK=true karena server ini jalan di jaringan internal dan tanpa setting itu beberapa request bisa diblok.

Setelah Chatwoot jalan di port 3000, lanjut ke Evolution API. Di sinilah mulai muncul beberapa gotcha yang tidak langsung kelihatan dari dokumentasi.

Masalah pertama soal Redis. Evolution API punya Redis sendiri, tapi karena container-nya ikut bergabung ke network Chatwoot supaya bisa berkomunikasi, hostname redis jadi bentrok dengan Redis milik Chatwoot. Akibatnya Evolution nyasar ke Redis Chatwoot yang ada password-nya dan muncul error NOAUTH Authentication required. Solusinya adalah beri alias eksplisit di docker-compose Evolution supaya Redis-nya dipanggil lewat nama evolution_redis, bukan redis.

Masalah kedua soal import history. Ada satu environment variable yang kalau tidak diset, Evolution akan pakai default host host untuk koneksi ke database Chatwoot, dan itu menyebabkan error getaddrinfo EAI_AGAIN host. Variabelnya adalah CHATWOOT_IMPORT_DATABASE_CONNECTION_URI, yang harus diisi dengan connection string lengkap ke PostgreSQL Chatwoot pakai nama container, bukan IP.

Setelah dua masalah itu beres, lanjut buat instance WhatsApp di Evolution. Instance ini yang nantinya akan di-scan QR-nya lewat WhatsApp Linked Devices. Sebelum scan, setting syncFullHistory: true harus diaktifkan dulu di instance tersebut karena ini yang menentukan apakah history lama ikut ditarik atau tidak.

Integrasi Evolution ke Chatwoot dilakukan lewat satu API call yang cukup panjang parameternya, salah satunya yang penting adalah URL Chatwoot harus pakai nama container internal, bukan IP server. Ini berpengaruh ke webhook yang nanti dibuat otomatis di database Chatwoot.

Setelah semua setting benar, WhatsApp di-scan ulang dan proses sync history dimulai. Bisa dipantau dari log Evolution dengan keyword messaging-history, dan kalau prosesnya berjalan normal akan muncul log progress dalam persen sampai angka 100. Setelah itu Evolution mulai import ke Chatwoot.

Satu hal lagi yang sempat jadi masalah adalah pesan yang terkirim di WhatsApp tapi statusnya failed di Chatwoot. Setelah dicek, penyebabnya adalah timeout webhook Chatwoot yang default-nya hanya 5 detik. Saat kirim attachment atau media, Evolution butuh waktu lebih dari itu untuk proses download dan upload ke WhatsApp, dan Chatwoot sudah keburu timeout duluan. Solusinya naikkan WEBHOOK_TIMEOUT di Chatwoot ke 60 detik lewat Rails runner, lalu restart service.

Hasilnya setelah semuanya jalan, history yang masuk ke Chatwoot cukup banyak. Dari yang sebelumnya hanya beberapa conversation karena setup belum sempurna, setelah manual import via database bisa masuk puluhan conversation dengan ribuan pesan termasuk dari grup WhatsApp.

Kalau ditanya apakah prosesnya mudah, jawabannya tidak sepenuhnya. Ada beberapa bagian yang butuh debug dan cukup teliti soal nama container, hostname, dan urutan setup. Tapi hasilnya worth it karena sekarang sistemnya jalan di infrastruktur sendiri, tidak bergantung pada provider eksternal, dan history percakapan tersimpan di database yang bisa diakses kapanpun.

Dan yang paling penting, tim sales bisa kembali kerja tanpa gangguan.

Leave a Reply

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