Kirim OTP via API REST: Contoh Integrasi dan Best Practice

Tim Redaksi BroadcastSMS3 menit baca

Panduan teknis mengirim OTP lewat REST API: payload single & bulk, antrean prioritas HIGH, cek status DLR, webhook, dan pola retry yang benar di sisi aplikasi.

Kirim OTP via API REST: Contoh Integrasi dan Best Practice

OTP adalah use case paling menuntut dari sebuah SMS gateway: harus cepat, andal, dan statusnya bisa dipercaya. Artikel ini merangkum cara mengirim OTP via API REST di BroadcastSMS beserta best practice integrasinya.

Endpoint Utama

Semua request diautentikasi dengan header X-API-Key (generate dari dashboard):

curl -X POST https://<BASE_URL_API>/api/v1/sms/send \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sk-xxxxxxxx" \
  -d '{
    "destination_number": "6281234567890",
    "message": "Kode OTP Anda: 4821. Jangan bagikan ke siapa pun.",
    "priority": "HIGH"
  }'

Poin penting dari payload di atas:

  • priority: "HIGH" memasukkan pesan ke antrean prioritas tinggi (RabbitMQ) — diproses sebelum campaign massal yang menumpuk di jalur LOW. Untuk OTP, selalu pakai HIGH.
  • Response berisi message_id yang dipakai untuk cek status.
  • Format nomor tujuan memakai prefix negara (62…).

Mode Bulk untuk Notifikasi Massal

Endpoint yang sama mendukung mode bulk — cocok untuk notifikasi bukan OTP (mis. pengingat jatuh tempo):

{
  "messages": [
    { "destination_number": "6281111111111", "message": "Tagihan Anda jatuh tempo besok.", "priority": "LOW" },
    { "destination_number": "6282222222222", "message": "Tagihan Anda jatuh tempo besok.", "priority": "LOW" }
  ]
}

Cek Status Pengiriman (DLR)

curl https://<BASE_URL_API>/api/v1/sms/status/<message_id> \
  -H "X-API-Key: sk-xxxxxxxx"

Status berkembang dari pendingsent/delivered/failed sesuai laporan operator (DLR). Untuk aplikasi production, jangan andalkan polling saja — pakai webhook.

Webhook Status

Daftarkan URL webhook di dashboard; server akan POST status setiap perubahan. Kalau endpoint Anda sedang down, server mencoba ulang otomatis hingga 3x — tapi tetap buat handler Anda idempoten (aman dipanggil dua kali untuk message_id yang sama).

Best Practice OTP di Sisi Aplikasi

  1. Jangan blokir UI menunggu DLR. Kirim OTP, langsung tampilkan form verifikasi; status delivery pantau di belakang.
  2. Timeout & retry yang sopan. Beri jeda minimal 30–60 detik sebelum user minta kirim ulang; batas 3–5 percobaan per nomor per jam.
  3. Hindari race condition — simpan hash OTP + timestamp di DB, bukan plaintext, dan invalidate setelah sukses verifikasi.
  4. Pantau rasio kegagalan per operator. Kalau satu operator mendadak tinggi failure-nya, cek kesehatan SIM/node untuk network group tersebut di dashboard.
  5. Rate limit di level bisnis Anda. Blacklist otomatis menolak nomor bermasalah (HTTP 403) — tambahkan juga guard sendiri anti abuse (mis. satu nomor maksimal N OTP/hari).

Uji Sebelum Production

  • Kirim ke nomor uji Anda sendiri dan verifikasi timeline statusnya.
  • Uji jalur gagal: matikan node, kirim OTP, pastikan retry 3x berjalan lalu status failed + saldo refund masuk.
  • Uji webhook dengan endpoint penerima dummy (mis. webhook.site) untuk memastikan payload sesuai ekspektasi.

Penutup

OTP via API pada dasarnya soal disiplin: antrean prioritas yang benar, penanganan status yang idempoten, dan fallback yang jelas saat gagal. Dokumentasi endpoint lengkap (termasuk nodes, SIM, dan blacklist management) ada di dokumentasi API kami.

Baca Juga