Panduan Integrasi API Messaging: REST, SMPP, dan Webhook
Panduan integrasi API messaging untuk developer: REST vs SMPP vs webhook, autentikasi, idempotensi, laporan pengiriman, retry, rate limit, dan pengujian.
Oleh OmniChannels.ai Editorial Team · Ditinjau oleh BroadNet Messaging Solutions Team
Integrasi
Jawaban singkat
Gunakan REST API untuk mengirim pesan dari aplikasi, SMPP hanya untuk SMS volume tinggi jika Anda sudah menjalankan infrastruktur kelas telekomunikasi, dan webhook untuk menerima laporan pengiriman (DLR) serta pesan masuk. Autentikasi setiap panggilan, kirim idempotency key pada setiap pengiriman agar retry tidak menggandakan pesan, perlakukan status pengiriman sebagai proses asinkron, lakukan backoff saat menerima error HTTP 429 dan 5xx, dan uji jalur kegagalan di sandbox sebelum masuk produksi.
Di halaman ini
- Antarmuka mana yang sebaiknya dipakai: REST, SMPP, atau webhook?
- Bagaimana cara autentikasinya?
- Bagaimana cara mengirim pesan dengan aman?
- Mengapa idempotensi penting?
- Bagaimana laporan pengiriman (DLR) bekerja?
- Bagaimana menangani retry dan rate limit?
- Bagaimana cara menguji sebelum go-live?
- Contoh kasus: layanan OTP dan notifikasi pesanan
- Apa saja kesalahan integrasi yang umum?
- Bagaimana OmniChannels.ai membantu
Poin penting
- REST cocok untuk sebagian besar integrasi aplikasi; SMPP adalah protokol biner persisten yang dirancang untuk throughput SMS antarsistem messaging.
- Permintaan kirim yang diterima berarti pesan masuk antrean, bukan sudah terkirim; status akhir datang kemudian lewat webhook atau laporan pengiriman (DLR) SMPP.
- HTTP 429 Too Many Requests didefinisikan dalam RFC 6585; klien harus memperlambat permintaan dan mematuhi header Retry-After jika ada.
- Idempotency key memungkinkan Anda mengulang pengiriman yang timeout dengan aman, tanpa mengirim pesan yang sama dua kali ke pelanggan.
- Meta menandatangani webhook WhatsApp Cloud API sehingga penerima dapat memverifikasi bahwa event benar-benar berasal dari Meta.
Panduan ini ditujukan bagi backend developer, solution architect, dan CTO yang mengintegrasikan aplikasi dengan penyedia messaging untuk WhatsApp, SMS, atau email. Panduan ini menjelaskan antarmuka mana yang sebaiknya dipakai, serta cara menangani autentikasi, idempotensi, laporan pengiriman (DLR), retry, rate limit, dan pengujian, lengkap dengan contoh bentuk request dan response. Untuk menyinkronkan percakapan ke CRM, lihat panduan pendamping tentang menghubungkan CRM dengan webhook.
Antarmuka mana yang sebaiknya dipakai: REST, SMPP, atau webhook?
Gunakan REST untuk mengirim, webhook untuk menerima, dan SMPP hanya untuk SMS volume tinggi jika Anda sudah menjalankan SMPP. Ketiganya saling melengkapi, bukan bersaing: sebagian besar integrasi menggabungkan panggilan REST ke luar dengan webhook yang kembali ke aplikasi Anda.
| Aspek | REST API | SMPP | Webhook |
|---|---|---|---|
| Arah | Aplikasi Anda → penyedia | Dua arah dalam satu sesi | Penyedia → aplikasi Anda |
| Transport | HTTPS request/response | Sesi TCP persisten, PDU biner | HTTPS POST ke endpoint Anda |
| Kanal | WhatsApp, SMS, email, dan lainnya | Hanya SMS | Event dari semua kanal |
| Penggunaan umum | Mengirim pesan, mengelola template, memeriksa status | SMS blast (SMS massal) antarsistem messaging | Status pengiriman, pesan masuk |
| Kelebihan | Sederhana, ramah firewall, payload kaya | Throughput, windowing, standar telekomunikasi | Real-time, tanpa polling |
| Yang perlu diwaspadai | Rate limit, timeout | Manajemen sesi, bind, keep-alive | Retry, duplikat, keamanan |
Sesi SMPP (Short Message Peer-to-Peer) dimulai dengan bind (transmitter, receiver, atau transceiver), mengirim pesan dengan submit_sm, menerima laporan pengiriman (DLR) dan SMS masuk lewat deliver_sm, dan tetap aktif dengan enquire_link. SMPP efisien, tetapi secara operasional lebih berat daripada HTTPS.
Bagaimana cara autentikasinya?
Gunakan metode terkuat yang ditawarkan penyedia, jauhkan secret dari kode, dan autentikasi kedua arah.
- Panggilan keluar: API key atau bearer token OAuth 2.0 yang dikirim di header
Authorizationmelalui TLS. Simpan di secrets manager, lalu rotasi secara berkala dan setiap ada pergantian staf. - SMPP: system ID dan password saat bind, umumnya dibatasi pada alamat IP yang masuk allowlist dan, jika didukung, melalui TLS.
- Webhook masuk: verifikasi tanda tangan pada setiap event. Meta menandatangani payload webhook WhatsApp Cloud API dengan tanda tangan HMAC-SHA256 di header
X-Hub-Signature-256, dihitung dengan app secret Anda; penyedia lain biasanya menawarkan skema serupa. Hitung tanda tangan dari raw body sebelum parsing.
Gunakan kredensial terpisah untuk tiap lingkungan agar test key yang bocor tidak dapat mengirim trafik produksi.
Bagaimana cara mengirim pesan dengan aman?
Kirim lewat antrean, sertakan idempotency key, dan perlakukan respons sebagai "diterima" (accepted), bukan "terkirim" (delivered).
Contoh request kirim (ilustrasi)
Bentuk di bawah ini adalah pseudo-JSON sebagai ilustrasi, bukan API milik penyedia tertentu.
POST /v1/messages
Authorization: Bearer <token>
Idempotency-Key: 7f3c9a2e-order-55821-shipped
{
"channel": "whatsapp",
"to": "+9715XXXXXXXX",
"template": {
"name": "order_shipped",
"language": "ar",
"variables": ["Layla", "55821", "15 March"]
},
"client_reference": "order-55821",
"callback_url": "https://api.example.com/webhooks/messaging"
}
Contoh response (ilustrasi)
202 Accepted
{
"message_id": "msg_01HZX...",
"status": "accepted",
"client_reference": "order-55821",
"created_at": "2026-10-09T12:00:00Z"
}
Segera simpan message_id beserta referensi internal Anda. Semua yang terjadi selanjutnya datang secara asinkron.
Mengapa idempotensi penting?
Karena jaringan bisa timeout setelah server sudah memproses permintaan. Jika permintaan kirim Anda timeout lalu Anda mengulangnya tanpa pengaman, pelanggan bisa menerima dua OTP (kode verifikasi) atau dua notifikasi pengiriman. Idempotency key memungkinkan server mengenali retry dan mengembalikan hasil asli.
Aturan yang terbukti efektif:
- Turunkan key dari event bisnis (misalnya ID pesanan ditambah jenis event), bukan dari nilai acak untuk setiap percobaan.
- Gunakan key yang sama untuk setiap retry dari pengiriman yang sama.
- Simpan key cukup lama untuk mencakup jendela retry Anda.
- Jika penyedia tidak mendukung key, lakukan deduplikasi di sisi Anda sebelum mengirim.
Draf header Idempotency-Key dari IETF menstandarkan pola ini untuk API HTTP; implementasi tiap penyedia berbeda-beda, jadi baca dokumentasinya.
Bagaimana laporan pengiriman (DLR) bekerja?
Status pengiriman datang kemudian sebagai event: lewat webhook untuk WhatsApp dan sebagian besar REST API, serta lewat laporan deliver_sm pada SMPP. Arti status berbeda di setiap kanal; panduan kami tentang status pengiriman pesan menjelaskan masing-masing status.
Contoh webhook status (ilustrasi)
POST /webhooks/messaging
X-Signature: sha256=<hmac>
{
"event_id": "evt_9c1...",
"type": "message.status",
"message_id": "msg_01HZX...",
"client_reference": "order-55821",
"status": "delivered",
"timestamp": "2026-10-09T12:00:04Z",
"error": null
}
Tangani event status secara defensif:
- Lakukan deduplikasi berdasarkan
event_id, atau berdasarkan ID pesan ditambah status. - Jangan pernah memundurkan pesan dari read kembali ke delivered ketika event tiba tidak berurutan.
- Balas dengan 2xx secepatnya, lalu proses dari antrean.
- Catat kode error untuk pesan yang gagal, dan tentukan mana yang layak di-retry.
- Antisipasi celah data: sebagian jalur SMS hanya mengembalikan laporan terbatas, dan status dibaca (read) bergantung pada kanal dan pengaturan pengguna.
Bagaimana menangani retry dan rate limit?
Retry hanya untuk yang mungkin berhasil, lakukan exponential backoff dengan jitter, dan patuhi sinyal dari server.
| Respons | Arti | Tindakan |
|---|---|---|
| 2xx | Diterima | Simpan ID, tunggu status |
| 400 / 422 | Permintaan tidak valid (nomor, template, variabel) | Jangan retry; perbaiki data |
| 401 / 403 | Masalah autentikasi atau izin | Jangan retry; kirim alert |
| 409 | Konflik, sering kali idempotency key duplikat | Ambil hasil aslinya |
| 429 | Terlalu banyak permintaan (RFC 6585) | Tunggu Retry-After atau lakukan backoff |
| 5xx / timeout | Error server atau jaringan | Retry dengan idempotency key yang sama dan backoff |
RFC 9110 mendefinisikan header Retry-After, yang dapat berisi detik atau tanggal. Pasang pembatas laju (rate limiter) di sisi klien sebelum pengiriman agar Anda tetap berada di bawah batas yang didokumentasikan penyedia, bukan baru mengetahuinya lewat error. WhatsApp juga memiliki batas dari sisi Meta untuk jumlah pelanggan unik yang dapat Anda kirimi pesan, dijelaskan di batas pesan dan quality rating.
Bagaimana cara menguji sebelum go-live?
Uji jalur kegagalan, bukan hanya skenario yang berjalan mulus.
Checklist pra-produksi
- Kirim setiap template dengan nilai berpanjang sebenarnya, termasuk teks berbahasa Arab.
- Paksa terjadi timeout dan pastikan retry tidak menggandakan pesan.
- Kirim ke nomor tidak valid dan pastikan error ditangani tanpa retry.
- Putar ulang webhook dua kali dan secara tidak berurutan; pastikan hanya ada satu status akhir.
- Kirim webhook dengan tanda tangan yang salah; pastikan ditolak.
- Picu 429 dengan load test ke sandbox, jika diizinkan.
- Rotasi API key dan pastikan tidak ada downtime.
- Periksa bahwa log berisi ID pesan tetapi bukan isi pesan lengkap atau kode OTP.
- Jalankan pilot produksi kecil dengan nomor internal di setiap kanal.
Sandbox jarang mereproduksi perilaku operator dan Meta secara persis, jadi tetap pantau di minggu-minggu pertama produksi.
Contoh kasus: layanan OTP dan notifikasi pesanan
"Qafilah Logistics" (fiktif), perusahaan pengiriman paket di Arab Saudi, mengirim pembaruan pesanan lewat WhatsApp dengan fallback (kanal cadangan) SMS serta OTP autentikasi.
- Arsitektur: event pesanan masuk ke antrean; worker pengirim memanggil REST API dengan idempotency key
shipment-id:event. - Fallback: jika WhatsApp mengembalikan status gagal untuk pengguna non-WhatsApp, worker mengirim SMS dengan key baru,
shipment-id:event:sms. - OTP: kode cepat kedaluwarsa, sehingga pengiriman OTP tidak di-retry setelah jendela kedaluwarsa; pengguna meminta kode baru. Lihat panduan pesan autentikasi OTP.
- Laporan pengiriman: penerima webhook memverifikasi tanda tangan, melakukan deduplikasi event, dan memperbarui tabel status yang tidak pernah mundur.
- Batas: pembatas token bucket membatasi laju kirim per kanal di bawah batas yang didokumentasikan.
Apa saja kesalahan integrasi yang umum?
- Menganggap "accepted" sama dengan "delivered".
- Retry dengan idempotency key baru pada setiap percobaan.
- Melakukan pemrosesan berat di dalam request webhook.
- Melewatkan verifikasi tanda tangan pada webhook.
- Mengulang error validasi 4xx dalam loop.
- Mencatat kode OTP dan isi pesan lengkap di log.
- Memakai kredensial produksi di lingkungan pengujian.
Bagaimana OmniChannels.ai membantu
OmniChannels.ai, didukung oleh BroadNet Technologies, menyediakan REST/JSON API yang terdokumentasi secara publik dengan spesifikasi OpenAPI 3.1 dan TypeScript SDK, mencakup SMS, WhatsApp, RCS, Messenger, Instagram, Telegram, email, dan push, termasuk template autentikasi WhatsApp dengan OTP one-tap, zero-tap, dan copy-code. Webhook melaporkan status pengiriman dalam satu format yang seragam, SMPP 3.4 melalui TLS melayani SMS volume tinggi, dan MCP server menghubungkan agen AI. Laporan pengiriman (DLR) dengan filter dan ekspor CSV membantu Anda merekonsiliasi apa yang dikirim oleh integrasi Anda. Mulailah dengan dokumentasi developer dan quickstart.
Pertanyaan yang sering diajukan
Sebaiknya integrasi dengan penyedia messaging lewat REST atau SMPP?
Pilih REST untuk hampir semua kebutuhan aplikasi: berjalan lewat HTTPS, mudah diamankan, dan mendukung kanal kaya fitur seperti WhatsApp. Pilih SMPP jika Anda mengirim SMS dalam volume besar, sudah mengoperasikan klien SMPP, dan membutuhkan koneksi persisten dengan windowing. SMPP hanya berlaku untuk SMS; WhatsApp, email, dan kanal sosial memakai API HTTP.
Apa itu idempotency key pada API messaging?
Idempotency key adalah nilai unik yang dikirim sistem Anda bersama permintaan agar server dapat mengenali permintaan berulang. Jika panggilan kirim Anda timeout lalu Anda mengulangnya dengan key yang sama, penyedia akan mengembalikan hasil asli dan tidak mengirim pesan kedua. IETF memiliki draf standar untuk header HTTP Idempotency-Key, tetapi setiap penyedia menerapkan key dengan cara berbeda, jadi periksa dokumentasinya.
Mengapa laporan pengiriman kadang datang tidak berurutan?
Event status dihasilkan oleh sistem yang berbeda, seperti operator, Meta, dan penyedia, lalu dikirim melalui jaringan dengan mekanisme retry. Event dibaca (read) bisa tiba sebelum event terkirim (delivered), dan duplikat adalah hal yang wajar. Simpan setiap status beserta timestamp-nya, jangan pernah mengembalikan pesan dari status yang lebih akhir ke status yang lebih awal, dan lakukan deduplikasi berdasarkan ID pesan dan status.
Bagaimana aplikasi saya sebaiknya menangani rate limit?
Baca batas yang didokumentasikan penyedia, masukkan pengiriman keluar ke antrean alih-alih memicunya langsung dari permintaan pengguna, dan gunakan token bucket atau pembatas serupa di sisi Anda. Saat menerima HTTP 429, jeda lalu coba lagi setelah waktu yang tertera di header Retry-After, atau gunakan exponential backoff dengan jitter. Jangan mengulang error validasi 4xx.
Apa saja yang perlu diuji di sandbox messaging?
Uji kegagalan autentikasi, nomor telepon tidak valid, error variabel template, timeout dengan retry idempoten, webhook duplikat dan tidak berurutan, respons rate limit, pesan panjang dan pesan berbahasa Arab, serta verifikasi tanda tangan webhook. Setelah itu jalankan pilot produksi kecil dengan nomor sungguhan, karena sandbox jarang mereproduksi perilaku operator atau Meta secara persis.
Sumber
Lanjut membaca
Panduan lainnyaIntegrasi
Cara Menghubungkan CRM ke Omnichannel Inbox dengan Webhook
Hubungkan CRM ke omnichannel inbox dengan webhook: event yang disinkronkan, idempotensi, retry, pencocokan kontak, privasi data, dan arsitektur referensi.
8 menit baca
Integrasi
Cara Memilih Messaging API: Checklist untuk CTO
Cara memilih messaging API: checklist CTO untuk kanal, kualitas jalur pengiriman, webhook, keamanan, rate limit, retry, SMPP, MCP, kepatuhan, dan harga.
13 menit baca
WhatsApp
Kode Error WhatsApp Cloud API: Arti dan Cara Mengatasinya
Kode error WhatsApp Cloud API yang paling sering muncul, dari 131047 dan 131026 hingga 132001 dan 130429: arti, solusi, dan kapan tidak boleh retry.
8 menit baca
