Webhook WhatsApp tidak menerima pesan ketika server gagal menerima, memproses, atau merespons event yang dikirim oleh API. Masalah dapat berasal dari URL webhook, endpoint yang salah, server tidak dapat diakses, konfigurasi webhook, hingga device WhatsApp yang tidak terhubung.
Webhook bekerja dengan mengirim event dari API ke URL yang sudah dikonfigurasi. Ketika pelanggan mengirim pesan, alurnya menjadi:

Pesan WhatsApp
↓
Device WhatsApp
↓
API Whapi
↓
Webhook
↓
Server
Jika salah satu bagian bermasalah, event pesan dapat tidak sampai atau tidak diproses oleh aplikasi.
1. URL Webhook Salah
Penyebab paling dasar adalah URL webhook tidak sesuai dengan endpoint yang tersedia pada server.
Misalnya konfigurasi menggunakan:
https://example.com/webhook/whatsapp
tetapi aplikasi hanya memiliki route:
/webhook
Request akan masuk ke URL yang tidak tersedia dan server dapat mengembalikan 404 Not Found.
Periksa kembali:
- nama domain;
- path endpoint;
- penggunaan HTTPS;
- port;
- trailing slash jika server membedakannya;
- route yang tersedia pada aplikasi.
URL yang digunakan pada konfigurasi webhook harus sama dengan endpoint yang menerima request.
2. Endpoint Tidak Dapat Diakses dari Internet
Webhook dikirim dari server API menuju server aplikasi. Karena itu, endpoint harus dapat diakses dari internet.
URL seperti:
http://localhost:3000/webhook
hanya dapat diakses dari komputer yang menjalankan aplikasi tersebut.
Hal yang sama berlaku untuk alamat private seperti:
192.168.1.10
10.0.0.10
Alamat tersebut tidak dapat digunakan sebagai endpoint webhook publik tanpa konfigurasi jaringan tambahan.
Untuk production, gunakan domain atau URL publik seperti:
https://api.example.com/webhook/whatsapp
3. Route Tidak Menerima HTTP POST
Webhook biasanya mengirim data menggunakan HTTP request tertentu. Jika aplikasi hanya menyediakan route GET, request webhook tidak akan diproses.
Contoh route yang benar menggunakan Express:
app.post('/webhook/whatsapp', (req, res) => {
console.log(req.body);
res.sendStatus(200);
});
Pastikan route yang dibuat sama dengan URL yang dikonfigurasi.
Jika URL:
https://example.com/webhook/whatsapp
maka aplikasi harus memiliki route untuk:
POST /webhook/whatsapp
4. Server Mengembalikan Error
Webhook dapat sampai ke server tetapi gagal diproses karena aplikasi menghasilkan error.
Periksa HTTP status code pada server.
Contoh:
200 OK
menunjukkan request berhasil diproses.
Sedangkan:
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
menunjukkan adanya masalah yang perlu diperiksa.
Untuk mengetahui penyebabnya, periksa log aplikasi dan web server.
Contoh log Express:
app.post('/webhook/whatsapp', (req, res) => {
console.log('Webhook diterima');
console.log(JSON.stringify(req.body, null, 2));
res.sendStatus(200);
});
Jika tulisan Webhook diterima tidak muncul, request kemungkinan belum mencapai route tersebut.
Jika tulisan muncul tetapi aplikasi gagal setelahnya, masalah berada pada proses setelah request diterima.
5. Middleware Tidak Membaca Request Body
Webhook dapat sudah sampai ke aplikasi tetapi payload tidak terbaca karena middleware belum dikonfigurasi.
Pada Express, JSON request dapat dibaca dengan:
const express = require('express');
const app = express();
app.use(express.json());
Kemudian:
app.post('/webhook/whatsapp', (req, res) => {
console.log(req.body);
res.sendStatus(200);
});
Tanpa parser yang sesuai, req.body dapat kosong atau tidak berisi data yang diharapkan.
6. Firewall atau Reverse Proxy Memblokir Request
Server dapat berjalan normal tetapi request dari luar tidak sampai ke aplikasi karena firewall, reverse proxy, atau aturan jaringan.
Contohnya:
API Whapi
↓
Internet
↓
Firewall
↓
Nginx
↓
Application
Jika firewall menutup port yang diperlukan atau Nginx mengarahkan request ke lokasi yang salah, webhook tidak akan sampai ke aplikasi.
Periksa konfigurasi:
- Firewall server
- Nginx atau Apache
- SSL/TLS
- Port aplikasi
- Reverse proxy
- DNS domain
Jika menggunakan Nginx, pastikan request menuju path webhook diteruskan ke aplikasi yang benar.
7. SSL atau HTTPS Bermasalah
Webhook production sebaiknya menggunakan HTTPS.
Contoh:
https://example.com/webhook/whatsapp
Masalah sertifikat SSL dapat menyebabkan request gagal sebelum mencapai aplikasi.
Periksa apakah domain dapat dibuka dengan HTTPS tanpa error sertifikat.
Beberapa masalah yang perlu diperiksa:
- Sertifikat sudah kedaluwarsa.
- Domain tidak sesuai dengan sertifikat.
- Certificate chain bermasalah.
- Konfigurasi TLS pada server tidak valid.
Jika browser sudah menunjukkan peringatan sertifikat ketika membuka endpoint, konfigurasi HTTPS perlu diperbaiki.
8. Device WhatsApp Belum Terhubung
Webhook bergantung pada event yang diterima oleh device WhatsApp.
Jika device tidak terhubung, pesan WhatsApp tidak akan diproses seperti ketika device berada dalam kondisi aktif.
Periksa status device pada dashboard Whapi sebelum melakukan pengujian webhook.
Alurnya:
Device CONNECTED
↓
Pesan WhatsApp masuk
↓
Whapi menerima event
↓
Webhook menerima event
Jika device mengalami disconnect, fokus pemeriksaan harus dimulai dari status device sebelum memeriksa kode webhook.
9. Konfigurasi Webhook Belum Aktif
Endpoint sudah dibuat tetapi URL belum tersimpan atau belum aktif pada konfigurasi webhook.
Periksa kembali konfigurasi webhook pada device atau channel yang digunakan.
Pastikan:
- URL sudah benar;
- konfigurasi sudah disimpan;
- event pesan masuk sudah dipilih jika konfigurasi menyediakan pilihan event;
- device yang diuji adalah device yang menggunakan konfigurasi tersebut.
Jangan menguji nomor atau device yang berbeda dari konfigurasi webhook.
10. Event yang Dibutuhkan Belum Diproses
Webhook dapat menerima beberapa jenis event. Tidak semua event memiliki struktur data yang sama.
Jika aplikasi hanya mencari event pesan masuk tetapi request yang diterima merupakan event lain, aplikasi dapat menganggap webhook tidak bekerja.
Karena itu, tampilkan payload mentah terlebih dahulu:
app.post('/webhook/whatsapp', (req, res) => {
console.log(JSON.stringify(req.body, null, 2));
res.sendStatus(200);
});
Setelah payload terlihat, tentukan field dan event yang memang diperlukan.
Jangan langsung membuat parser berdasarkan asumsi struktur data.
11. Endpoint Mengalami Timeout
Server yang terlalu lama memberikan response dapat menyebabkan request webhook dianggap gagal.
Contoh masalah:
Webhook menerima request
↓
Query database besar
↓
Memanggil beberapa API
↓
Menjalankan proses berat
↓
Response terlalu lama
Untuk webhook, proses penerimaan event sebaiknya dibuat singkat.
Contohnya:
app.post('/webhook/whatsapp', async (req, res) => {
const data = req.body;
res.sendStatus(200);
// Proses lanjutan
});
Proses berat dapat dipindahkan ke queue atau worker agar endpoint tidak menunggu seluruh pekerjaan selesai.
12. Route Menghasilkan 404
Jika log web server menunjukkan:
POST /webhook/whatsapp 404
berarti server menerima request tetapi tidak menemukan route tersebut.
Periksa perbedaan antara URL webhook dan route aplikasi.
Misalnya konfigurasi:
https://example.com/api/webhook/whatsapp
tetapi route aplikasi:
/webhook/whatsapp
Maka request akan masuk ke path yang berbeda.
Jika aplikasi menggunakan prefix /api, pastikan URL webhook juga menggunakannya.
13. API Key atau Konfigurasi Device Bermasalah
Jika webhook sudah benar tetapi event tetap tidak diterima, periksa konfigurasi device dan API yang digunakan.
Pastikan API key yang digunakan mengarah ke device yang benar dan device tersebut masih aktif.
Hindari menguji beberapa device sekaligus ketika mencari penyebab masalah. Gunakan satu device dan satu endpoint terlebih dahulu agar sumber masalah lebih mudah ditemukan.
14. Cara Mengetahui Apakah Request Sudah Sampai
Cara paling cepat adalah menambahkan log pada endpoint sebelum memproses payload.
app.post('/webhook/whatsapp', (req, res) => {
console.log('REQUEST WEBHOOK MASUK');
console.log('Headers:', req.headers);
console.log('Body:', req.body);
res.sendStatus(200);
});
Ada tiga kemungkinan hasil.
Tidak Ada Log
Jika tidak ada log sama sekali, request belum mencapai aplikasi.
Periksa:
URL webhook
↓
DNS
↓
HTTPS
↓
Firewall
↓
Reverse proxy
↓
Route
Log Ada, Body Kosong
Jika request masuk tetapi body tidak terbaca, periksa:
Content-Type
↓
Body parser
↓
Format payload
Log Ada dan Body Berisi Data
Jika payload sudah terlihat, masalah bukan lagi pada koneksi webhook. Periksa kode yang memproses payload setelah diterima.
15. Urutan Troubleshooting yang Tepat
Jangan langsung mengubah kode aplikasi ketika webhook tidak menerima pesan. Periksa dari lapisan paling dasar.
Gunakan urutan berikut:
1. Device WhatsApp CONNECTED?
↓
2. Webhook sudah dikonfigurasi?
↓
3. URL webhook benar?
↓
4. URL dapat diakses dari internet?
↓
5. HTTPS valid?
↓
6. Route menerima POST?
↓
7. Request masuk ke server?
↓
8. Body terbaca?
↓
9. Payload sesuai?
↓
10. Business logic berhasil?
Urutan ini membantu menentukan lokasi masalah tanpa mengubah banyak bagian sekaligus.
Contoh Endpoint untuk Pengujian
Gunakan endpoint sederhana terlebih dahulu sebelum menambahkan database, chatbot, atau proses lain.
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook/whatsapp', (req, res) => {
console.log('Webhook masuk');
console.log(JSON.stringify(req.body, null, 2));
res.status(200).json({
success: true
});
});
app.listen(3000, () => {
console.log('Server berjalan di port 3000');
});
Jika endpoint ini berhasil menerima event, tambahkan proses berikutnya satu per satu.
Contohnya:
Webhook dasar
↓
Validasi payload
↓
Simpan database
↓
Business logic
↓
Chatbot / CRM
Cara ini lebih mudah untuk menemukan bagian yang menyebabkan error.
Kesimpulan
Webhook WhatsApp yang tidak menerima pesan dapat disebabkan oleh masalah pada URL, server, route, konfigurasi webhook, koneksi device, atau kode pemrosesan payload.
Pemeriksaan utama meliputi:
- Pastikan device WhatsApp terhubung.
- Periksa URL webhook.
- Pastikan endpoint dapat diakses dari internet.
- Pastikan route menerima
POST. - Periksa HTTPS dan SSL.
- Periksa firewall dan reverse proxy.
- Pastikan request body dapat dibaca.
- Periksa log server.
- Pastikan endpoint mengembalikan response
2xx. - Pisahkan penerimaan webhook dari proses yang berat.
Jika request bahkan tidak muncul pada log server, fokuskan pemeriksaan pada URL, jaringan, HTTPS, firewall, dan reverse proxy. Jika request sudah masuk tetapi payload tidak terbaca, periksa middleware dan format request. Jika payload sudah tersedia, masalah berada pada proses aplikasi setelah webhook menerima event.


