OTP WhatsApp: Cara Kirim Kode Verifikasi Lewat WhatsApp API (Kirimdev)
Cara kirim OTP via WhatsApp Business API pakai Kirimdev — template authentication, contoh kode SDK, rate limit, dan fallback SMS. Lebih murah dari SMS masking.
Ringkasan singkat:
- OTP WhatsApp dikirim lewat template kategori authentication di WhatsApp Business API — bukan chat manual dan bukan template biasa
- Biasanya lebih murah dibanding SMS masking di Indonesia (SMS masking rata-rata Rp 300–500 per pesan, tarif template WhatsApp jauh di bawahnya untuk volume yang sama)
- Tombol Copy Code bawaan mengurangi kesalahan ketik dan mempercepat verifikasi
- Butuh fallback SMS untuk pengguna yang tidak punya WhatsApp aktif
- Di Kirimdev, biaya platform mulai Rp 25.000/bulan; tarif Meta ditagih langsung ke akun WhatsApp Business Anda tanpa markup
Sebagian besar bisnis di Indonesia masih mengandalkan SMS untuk mengirim kode OTP — padahal SMS mahal, sering delay, dan tingkat keterkirimannya menurun setiap tahun. WhatsApp menawarkan jalur alternatif yang lebih cepat sampai, lebih murah untuk volume besar, dan sudah dipakai hampir seluruh pengguna smartphone di Indonesia.
Artikel ini membahas cara mengirim OTP lewat WhatsApp Business API menggunakan Kirimdev: mulai dari menyiapkan template authentication, contoh kode integrasi, sampai strategi fallback ke SMS bila WhatsApp gagal terkirim.
Apa itu OTP dan kenapa penting?
OTP (One-Time Password) adalah kode verifikasi sekali pakai yang dikirim ke pengguna untuk memastikan identitasnya — biasanya berupa 4–6 digit angka. OTP dipakai di alur login, pendaftaran akun, verifikasi transaksi pembayaran, sampai reset password.
Kode OTP idealnya kadaluwarsa dalam waktu singkat (biasanya 5 menit), sekali pakai, dan dihasilkan secara acak. Kualitas jalur pengirimannya penting — kalau OTP tidak sampai atau sampai terlambat, pengguna gagal login dan bisnis kehilangan konversi.
Kenapa OTP lewat WhatsApp?
Tingkat keterkirimannya tinggi. WhatsApp berjalan di atas data internet, sehingga tidak bergantung pada kualitas sinyal operator seluler. Untuk pengguna yang aktif, pesan biasanya sampai dalam hitungan detik.
Formatnya lebih ramah pengguna. Template authentication di WhatsApp menyertakan tombol Copy Code — pengguna cukup menekan sekali untuk menyalin OTP, tanpa perlu mengetik ulang. Ini menurunkan angka salah input dan mempercepat proses login.
Biayanya lebih rendah untuk volume besar. SMS masking di Indonesia berkisar Rp 300–500 per pesan tergantung operator. Tarif template authentication WhatsApp jauh di bawah itu, ditambah tidak ada markup dari Kirimdev di atas tarif Meta.
Riwayatnya tersimpan rapi. Semua OTP yang terkirim, delivered, dan read tercatat di dashboard Kirimdev, lengkap dengan status per pesan — memudahkan audit dan debugging.
Kapan pakai OTP WhatsApp, kapan tidak
| Skenario | Rekomendasi |
|---|---|
| Login/register aplikasi konsumen di Indonesia | Pakai WhatsApp sebagai jalur utama, SMS sebagai fallback |
| Verifikasi transaksi bernilai tinggi | Pakai WhatsApp, tapi tambahkan lapisan verifikasi lain (biometrik / PIN) |
| Pengguna internal / karyawan | Pertimbangkan authenticator app (TOTP) — lebih aman dari OTP via kanal |
| Pengguna di luar Indonesia | Cek dulu tarif Meta per negara — kadang SMS masih lebih murah |
| Pengguna tanpa smartphone | Jangan pakai WhatsApp — SMS atau panggilan suara adalah pilihan wajib |
Pola paling umum yang kami lihat di Kirimdev: WhatsApp sebagai jalur utama, SMS sebagai fallback otomatis lewat webhook message.status. Kombinasi ini menurunkan biaya rata-rata sambil menjaga cakupan tetap 100%.
Yang perlu Anda siapkan
- Akun WhatsApp Business Account yang sudah tersambung ke Kirimdev. Panduan connect ada di Quickstart atau artikel persiapan sebelum pakai Kirimdev.
- Template authentication yang sudah disetujui Meta. Kategori ini punya batasan format ketat — hanya kode dan tombol Copy Code, tanpa header atau footer bebas. Bila baru pertama kali membuat template, baca dulu panduan variabel template.
- Backend Anda sendiri yang generate kode OTP dan menyimpannya di database dengan masa berlaku (biasanya 5 menit).
Alur pengiriman OTP
User request login/register
↓
Backend Anda generate OTP (misal 6 digit)
↓
Simpan di database (userId, otp, expiredAt)
↓
POST /v1/{PHONE_ID}/messages (template authentication + variable OTP)
↓
User terima WhatsApp dengan tombol Copy Code
↓
User submit OTP → backend verifikasi → login berhasil
Contoh kode: kirim OTP dengan SDK
import { Kirim } from '@kirimdev/sdk'
const kirim = new Kirim({
apiKey: process.env.KIRIM_API_KEY!,
})
const phone = kirim.phoneNumbers(process.env.PHONE_ID!)
async function sendOtp(userPhone: string, otpCode: string) {
const message = await phone.messages.send({
messaging_product: 'whatsapp',
to: userPhone,
type: 'template',
template: {
name: 'otp_authentication',
language: { code: 'id' },
components: [
{
type: 'body',
parameters: [{ type: 'text', text: otpCode }],
},
{
type: 'button',
sub_type: 'url',
index: '0',
parameters: [{ type: 'text', text: otpCode }],
},
],
},
})
return message.id
}
Nama template otp_authentication di contoh di atas mengikuti template yang Anda daftarkan di Meta Business Manager. Sesuaikan dengan nama template Anda sendiri.
Verifikasi status pengiriman
Setelah OTP dikirim, gunakan webhook message.status untuk memantau apakah pesan benar-benar sampai atau gagal. Ini penting supaya Anda bisa fallback ke SMS ketika WhatsApp gagal.
// Handler webhook di backend Anda
app.post('/webhooks/kirimdev', async (req, res) => {
const event = req.body
if (event.type === 'message.status' && event.data.status === 'failed') {
const messageId = event.data.id
const otpRequest = await db.otpRequests.findOne({ waMessageId: messageId })
if (otpRequest) {
await sendOtpViaSms(otpRequest.phone, otpRequest.code)
await db.otpRequests.update(otpRequest.id, { fallback: 'sms' })
}
}
res.sendStatus(200)
})
Dengan pola ini, WhatsApp jadi jalur utama dan SMS jadi cadangan — sehingga biaya rata-rata Anda turun signifikan tanpa mengorbankan cakupan. Detail cara kerja webhook di Kirimdev bisa dibaca di fitur Webhooks.
Rate limit dan best practice
Batasi retry per nomor. OTP idealnya hanya boleh diminta 3 kali dalam 15 menit per nomor. Ini mencegah penyalahgunaan dan menghindari nomor Anda ditandai spam oleh Meta.
Gunakan idempotency key. Kalau backend Anda retry karena timeout, kirim ulang dengan idempotency-key yang sama supaya tidak ada OTP ganda. Kirimdev otomatis menolak request duplikat dalam jendela 24 jam.
Jangan pakai template marketing untuk OTP. Selain lebih mahal, pesan marketing bisa diblokir bila pengguna sudah unsubscribe. Template kategori authentication memiliki jalur pengiriman yang lebih prioritas.
Simpan hash OTP, bukan plainteks. Di database, simpan hasil hash (misalnya bcrypt) dari OTP — bukan angka aslinya. Cocokkan hash saat user submit.
Set expiry pendek. 5 menit sudah cukup untuk sebagian besar kasus. Semakin panjang expiry, semakin besar risiko brute-force.
Biaya: apa yang Anda bayar dan ke siapa
| Komponen | Ditagih oleh | Estimasi |
|---|---|---|
| Langganan platform Kirimdev | Kirimdev | Mulai Rp 25.000/bulan |
| Tarif template authentication | Meta (langsung ke WhatsApp Business Account) | Sesuai tarif Meta |
| Fallback SMS (opsional) | Provider SMS pilihan Anda | Tergantung operator |
Kirimdev tidak menagih ulang biaya Meta. Tagihan Meta muncul langsung di WhatsApp Business Manager Anda, bukan lewat invoice Kirimdev. Perbandingan harga lebih lengkap ada di artikel kenapa Kirimdev lebih murah dari BSP lain.
Langkah pertama
- Daftar gratis dan connect nomor WhatsApp Business Anda
- Buat template kategori authentication di Meta Business Manager dan tunggu approval (biasanya 1–24 jam)
- Generate API key di Settings → API Keys dan install SDK
- Kirim OTP pertama Anda mengikuti contoh kode di atas
- Setup webhook
message.statusuntuk fallback SMS
Punya kasus khusus — misalnya OTP untuk multi-tenant atau volume di atas 100 ribu per hari? Email hello@kirimdev.com, tim kami bantu setup arsitekturnya.
Baca berikutnya: Notifikasi transaksi via WhatsApp · 5 use case WhatsApp Business · Fitur Public API
Pertanyaan yang sering muncul
Berapa biaya kirim OTP via WhatsApp? Meta menagih per template pesan kategori authentication. Tarif ini ditagih langsung ke akun WhatsApp Business Anda, bukan lewat Kirimdev. Biaya platform Kirimdev tetap sesuai paket (mulai Rp 25.000/bulan) tanpa markup per pesan.
Apakah OTP WhatsApp lebih cepat sampai daripada SMS? Umumnya iya, karena WhatsApp berjalan di atas data internet dan tidak melewati jalur operator seluler yang sering terkena delay. Namun WhatsApp mensyaratkan pengguna memiliki aplikasi terpasang, sehingga fallback ke SMS tetap direkomendasikan untuk cakupan penuh.
Apa itu template authentication? Template authentication adalah kategori khusus dari template message Meta yang dirancang untuk kode verifikasi. Formatnya terbatas (hanya kode OTP dan tombol Copy Code) dan tarifnya berbeda dari kategori marketing atau utility.