Webhook WhatsApp: Terima & Teruskan Pesan Masuk Otomatis
Kalau kamu sudah memakai API untuk mengirim pesan lewat endpoint kirim, sebenarnya kamu baru menguasai satu arah percakapan. Pesan mengalir keluar dari sistemmu menuju pelanggan. Tapi percakapan itu dua arah: pelanggan membalas, bertanya, mengonfirmasi, dan balasan mereka tidak akan tiba-tiba muncul di CRM atau spreadsheet-mu. Di sinilah webhook berperan. Webhook adalah mekanisme supaya server memberi tahu sistemmu setiap ada pesan atau event masuk, otomatis, tanpa kamu harus terus bertanya "ada pesan baru nggak?".
Artikel ini membahas sisi terima, kebalikan dari endpoint kirim. Tujuannya sederhana: begitu pelanggan mengetik sesuatu ke nomor WhatsApp-mu, sistemmu langsung tahu dan bisa bertindak. Bisa membalas otomatis, bisa mencatat ke database, bisa memicu alur kerja. Semua tanpa ada orang yang harus memelototi layar HP sepanjang hari.
Apa itu webhook, dan kenapa bukan polling
Ada dua cara sistemmu bisa tahu ada pesan baru. Cara pertama namanya polling: sistemmu bertanya ke server berulang-ulang, misalnya tiap beberapa detik, "ada yang baru? ada yang baru?". Cara ini boros. Sebagian besar pertanyaan itu dijawab "tidak ada", jadi kamu membakar kuota dan sumber daya untuk memeriksa sesuatu yang belum tentu terjadi. Selain itu ada jeda: pesan yang masuk detik ini baru ketahuan pada siklus polling berikutnya.
Webhook membalik logikanya. Kamu tidak bertanya. Kamu cukup memberikan satu alamat (URL) milikmu, lalu diam. Ketika ada pesan masuk, server-lah yang aktif menghubungi alamat itu dan mengirimkan datanya. Analoginya seperti bel rumah: kamu tidak perlu bolak-balik membuka pintu untuk mengecek apakah ada tamu, cukup pasang bel dan tamu yang datang akan memencetnya.
- Polling (tarik berkala): sistemmu yang rutin bertanya ke server. Sederhana dipahami, tapi boros dan ada jeda.
- Webhook (push): server yang mendorong data ke sistemmu tepat saat ada kejadian. Lebih hemat dan lebih dekat ke real-time.
Untuk pesan masuk yang sifatnya tidak bisa diprediksi kapan datangnya, webhook hampir selalu jadi pilihan yang lebih waras.
Buat apa webhook pesan masuk
Setelah sistemmu bisa "mendengar" pesan masuk, banyak hal yang tadinya manual bisa jadi otomatis. Beberapa pemakaian yang paling umum:
- Balas otomatis. Pelanggan mengetik "menu" atau "harga", sistemmu mendeteksi kata kuncinya dan langsung mengirim jawaban. Ini fondasi dari chatbot WhatsApp yang sederhana sekalipun.
- Teruskan ke CRM atau sistem internal. Setiap chat masuk dicatat sebagai lead atau tiket. Kalau kamu memakai CRM WhatsApp, webhook adalah pipa yang mengalirkan percakapan ke sana secara rapi.
- Memicu otomasi. Pesan masuk jadi pemicu alur kerja: kirim notifikasi ke tim, buat entri di spreadsheet, jalankan skenario di tool otomasi seperti n8n.
- Auto-proses balasan. Setelah kamu mengirim konfirmasi transaksi, pelanggan mungkin membalas "sudah bayar" atau "batal". Webhook menangkap balasan itu supaya sistemmu bisa memperbarui status tanpa campur tangan manusia.
Cara webhook bekerja di Jalinara
Di Jalinara, webhook diatur per perangkat. Artinya tiap nomor WhatsApp yang kamu sambungkan bisa punya alamat tujuannya sendiri. Beberapa komponen yang perlu kamu kenali:
webhook_url dan secret
Tiap perangkat bisa diberi sebuah webhook_url, yaitu alamat HTTPS milikmu yang akan dipanggil server saat ada pesan masuk atau event. Bersamaan dengan itu, kamu bisa menetapkan sebuah secret. Fungsi secret ini penting: ia dipakai untuk memastikan request yang tiba di endpoint-mu benar-benar berasal dari Jalinara, bukan dari pihak lain yang kebetulan menebak alamatmu. Perlakukan secret seperti kunci, jangan tempel di kode publik atau repositori terbuka.
Retry webhook
Endpoint bisa sesekali gagal. Server-mu sedang restart, ada gangguan jaringan, atau prosesnya lambat. Karena itu Jalinara punya mekanisme retry webhook (default 3 kali) sehingga satu kegagalan sesaat tidak langsung membuat pesan hilang. Ini alasan penting kenapa endpoint-mu sebaiknya idempoten, yaitu tahan menerima event yang sama lebih dari sekali tanpa menimbulkan efek ganda.
Proteksi anti-SSRF
Karena server yang memanggil URL milik pengguna, ada risiko keamanan yang harus dijaga. Jalinara memvalidasi URL tujuan lebih dulu (proteksi anti-SSRF) sebelum benar-benar memanggilnya, supaya fitur webhook tidak bisa disalahgunakan untuk mengarahkan panggilan ke tujuan yang tidak semestinya. Kalau kamu ingin memahami prinsip di balik ini, ada bahasan terpisah soal keamanan API WhatsApp.
Aksi otomasi
Selain sekadar mengirim event ke alamatmu, otomasi di Jalinara bisa mengambil beberapa jenis aksi ketika ada pesan masuk: memanggil webhook, melakukan forward (meneruskan), mengirim reply_template (balasan template), atau menambahkan add_tag (memberi label). Jadi untuk kasus sederhana, kamu bahkan bisa mengatur balasan atau pelabelan tanpa menulis backend sendiri.
Jujur soal koneksi: jalur WhatsApp Web di Jalinara bukan API resmi dari Meta, dan Jalinara tidak berafiliasi dengan Meta. Jalur ini praktis untuk memulai dan cocok buat UMKM. Untuk kebutuhan skala besar atau kritikal, tersedia juga jalur WhatsApp Cloud API resmi Meta. Pilih sesuai risiko dan kebutuhanmu.
Jangan menebak format payload
Satu hal yang perlu ditegaskan: struktur data (payload JSON) yang dikirim webhook sebaiknya tidak kamu tebak-tebak dari ingatan atau contoh acak di internet. Skema bisa berbeda antar jalur koneksi dan bisa berkembang seiring waktu. Sumber yang benar cuma satu: dashboard dan dokumentasi teknis di halaman developer. Ambil contoh payload sungguhan dari sana, lalu petakan field-nya ke kode-mu. Ini menghemat waktu debugging dan menghindari asumsi yang salah.
Langkah memasang webhook
Secara garis besar, memasang webhook untuk menerima pesan masuk kurang lebih seperti ini:
- Siapkan endpoint HTTPS publik. Buat satu alamat di servermu (misalnya sebuah route
/webhook) yang bisa diakses dari internet dan menerima request masuk. Wajib HTTPS. - Daftarkan webhook_url dan secret di dashboard. Buka pengaturan perangkat di Jalinara, isi
webhook_urldengan alamat endpoint-mu, dan tetapkansecret. - Verifikasi secret di setiap request. Di endpoint-mu, cek bahwa request memang membawa secret atau tanda tangan yang cocok sebelum diproses. Tolak yang tidak valid.
- Proses event pesan masuk. Baca payload sesuai skema di dokumentasi, ambil field yang kamu butuhkan (pengirim, isi pesan, waktu), lalu simpan atau lanjutkan ke logikamu.
- Balas atau teruskan. Dari sini kamu bisa mengirim balasan lewat endpoint kirim, meneruskan data ke CRM, atau memicu otomasi lain sesuai kebutuhan.
- Pantau lewat retry dan log. Amati log endpoint-mu dan perhatikan perilaku retry. Kalau ada event yang gagal berulang, biasanya ada masalah di respons endpoint yang perlu diperbaiki.
Webhook dan endpoint kirim itu saling melengkapi
Gampangnya begini: endpoint kirim adalah mulut sistemmu, webhook adalah telinganya. Keduanya baru jadi percakapan utuh saat digabung. Sistem menerima pesan lewat webhook, memprosesnya, lalu menjawab lewat endpoint kirim. Pola inilah yang membuat WhatsApp bisa dijalankan sebagai gateway untuk layanan pelanggan, notifikasi, sampai otomasi yang lebih kompleks, tanpa harus ada admin yang mengetik balasan satu per satu.
Kalau kamu siap mencoba, buat token gratis lebih dulu, sambungkan satu perangkat, lalu daftarkan webhook-nya sambil membuka dokumentasi developer untuk melihat contoh payload asli. Mulai tanpa perlu kartu kredit, dan biarkan sistemmu mendengar pelanggan secara otomatis sejak pesan pertama masuk.
Poin Penting
- Webhook membuat sistemmu menerima pesan masuk secara otomatis, kebalikan dari endpoint kirim yang mengurus pesan keluar.
- Webhook itu push (server yang memberi tahu saat ada event), bukan polling yang menarik data berkala dan boros.
- Di Jalinara tiap perangkat bisa punya webhook_url plus secret untuk memverifikasi bahwa request benar dari Jalinara.
- Tersedia retry webhook (default 3 kali) dan proteksi anti-SSRF yang memvalidasi URL tujuan sebelum dipanggil server.
- Otomasi bisa beraksi: webhook, forward, reply_template, atau add_tag, sehingga sebagian kasus tidak butuh backend sendiri.
- Jangan menebak skema payload JSON; ambil contoh asli dari dashboard atau dokumentasi /developer.
Pertanyaan yang sering ditanyakan
Apa bedanya webhook dengan endpoint kirim (/send)?
Endpoint kirim mengurus pesan keluar dari sistemmu ke pelanggan. Webhook mengurus arah sebaliknya: server memberi tahu sistemmu saat ada pesan atau event masuk, supaya kamu bisa memproses balasan pelanggan secara otomatis.
Apa itu polling dan kenapa webhook lebih hemat?
Polling berarti sistemmu rutin bertanya ke server apakah ada pesan baru, sehingga banyak permintaan terbuang saat tidak ada apa-apa dan ada jeda deteksi. Webhook membalikkannya: server yang mendorong data begitu ada kejadian, jadi lebih hemat dan lebih dekat ke real-time.
Apa fungsi secret pada webhook Jalinara?
Secret dipakai untuk memverifikasi bahwa request yang masuk ke endpoint-mu benar-benar berasal dari Jalinara, bukan dari pihak lain yang menebak alamatmu. Perlakukan secret seperti kunci dan jangan menaruhnya di kode atau repositori publik.
Bagaimana format payload JSON pesan masuk?
Skema payload bisa berbeda antar jalur koneksi dan dapat berkembang, jadi sebaiknya tidak ditebak. Ambil contoh payload sungguhan dari dashboard atau dokumentasi teknis di halaman /developer, lalu petakan field-nya ke kodemu.
Apakah webhook Jalinara memakai API resmi Meta?
Jalur WhatsApp Web di Jalinara bukan API resmi Meta, dan Jalinara tidak berafiliasi dengan Meta. Jalur ini praktis untuk memulai. Untuk kebutuhan skala besar atau kritikal, tersedia juga jalur WhatsApp Cloud API resmi Meta.
Apa yang terjadi kalau endpoint saya sedang gagal saat ada pesan masuk?
Jalinara punya mekanisme retry webhook (default 3 kali) sehingga kegagalan sesaat tidak langsung membuat event hilang. Karena itu buat endpoint-mu idempoten, yaitu tahan menerima event yang sama lebih dari sekali tanpa efek ganda.