Integrasi WhatsApp Meta Cloud API & Webhook
Platform mengintegrasikan WhatsApp Business Platform Cloud API resmi dari Meta (bukan otomatisasi WhatsApp Web scraping/unofficial) untuk menjamin keandalan pengiriman pesan dan kepatuhan terhadap kebijakan Meta.
1. Arsitektur Komunikasi Metaโ
2. Parameter Kredensial yang Dibutuhkanโ
Untuk menghubungkan akun WhatsApp Business organisasi, sistem membutuhkan:
- WhatsApp Business Account ID (
WABA ID): ID unik akun WABA di Business Manager Meta. - Phone Number ID: ID unik nomor telepon yang terdaftar pada Cloud API (bukan nomor telepon fisik).
- Permanent Access Token: Token pengguna sistem (System User Token) dengan scope izin:
whatsapp_business_messagingwhatsapp_business_management
- Graph API Version: Versi Meta Graph API yang digunakan (default:
v23.0).
3. Keamanan & Enkripsi Kredensialโ
- Enkripsi AES-GCM: Token akses permanen dienkripsi menggunakan algoritma
AES-256-GCMsebelum disimpan ke kolom database PostgreSQL. - Kunci Enkripsi Terpisah: Kunci enkripsi (
DB_ENCRYPTION_KEYdanDB_HMAC_KEY) dikelola melalui environment variables dan tidak pernah di-hardcode di kode sumber. - Penyembunyian Data Rahasia: Token yang telah tersimpan tidak pernah dikembalikan ke antarmuka frontend/API response (selalu dimasking).
4. Konfigurasi Endpoint Webhook Metaโ
Untuk menerima pembaruan status pesan (SENT, DELIVERED, READ, FAILED):
URL Webhook Publikโ
https://api.codeverta.com/api/integrations/whatsapp/webhook
Verifikasi Webhook Handshake (GET)โ
Meta akan memverifikasi endpoint dengan mengirimkan parameter query:
hub.mode=subscribehub.verify_token=<WHATSAPP_WEBHOOK_VERIFY_TOKEN>hub.challenge=<challenge_code>
Backend memvalidasi kesesuaian hub.verify_token dengan environment lokal dan mengembalikan hub.challenge dengan status HTTP 200 OK.
Validasi Keamanan Signature Webhook (POST)โ
Setiap payload event webhook yang dikirimkan oleh Meta menyertakan header:
X-Hub-Signature-256: sha256=<hmac_hash>
Backend menghitung HMAC-SHA256 dari seluruh raw request body menggunakan WHATSAPP_APP_SECRET. Request akan ditolak dengan kode 401 Unauthorized jika signature tidak cocok.