Inbound WhatsApp Authentication vs SMS OTP Tradisional
Bandingkan biaya, keamanan, dan UX inbound WhatsApp authentication dengan SMS OTP, lalu uji signed webhook LessOTP tanpa biaya.

Mengapa SMS OTP menambah biaya dan friksi?
SMS OTP mengharuskan aplikasi mengirim kode, menunggu delivery provider, lalu meminta pengguna menyalin kode tersebut kembali. Biaya muncul pada setiap pengiriman, termasuk pesan yang terlambat atau tidak pernah selesai diverifikasi.
Inbound authentication membalik alurnya: pengguna membuka WhatsApp dan mengirim /START code ke nomor resmi LessOTP. Aplikasi menerima hasil melalui webhook yang ditandatangani, dan kredit hanya dipotong saat verifikasi production sukses.
Perbandingan alur
| Aspek | SMS OTP | Inbound WhatsApp |
|---|---|---|
| Arah pesan | Platform → pengguna | Pengguna → platform |
| Input pengguna | Salin dan ketik OTP | Kirim pesan yang sudah terisi |
| Billing LessOTP | Tidak berlaku | Hanya verifikasi production sukses |
| Hasil ke aplikasi | Cek kode via endpoint | Webhook HMAC + idempotency key |
Coba request staging tanpa biaya
Buat App dengan mode staging, generate API key, lalu jalankan request berikut. Staging menggunakan verification engine dan client webhook yang sama, tetapi tidak mengirim pesan WhatsApp riil dan tidak memotong kredit.
curl -X POST https://lessotp.com/api/v1/staging/auth/request \
-H "Authorization: Bearer YOUR_STAGING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel": "whatsapp"
}'Response yang diharapkan:
{
"status": "success",
"data": {
"request_id": "req_8f7d6c5b4a",
"unique_code": "A7X92",
"channel": "whatsapp",
"wa_link": "https://wa.me/628999999999?text=/START+A7X92",
"expires_in": 180,
"mode": "frictionless"
}
}Setelah request dibuat, buka Dashboard → Simulator dan jalankan synthetic inbound. Webhook URL App Anda akan menerima payload seperti ini:
{
"event": "verification.success",
"channel": "whatsapp",
"request_id": "req_8f7d6c5b4a",
"phone_number": "6281234567890",
"timestamp": "2026-08-24T10:00:00Z"
}Verifikasi signature dan delivery duplikat
Hitung HMAC SHA-256 dari raw request body menggunakan signing secret App. Bandingkan secara constant-time, lalu simpan header Idempotency-Key agar retry tidak memproses login dua kali.
import { createHmac, timingSafeEqual } from "node:crypto";
function verifyLessOTPWebhook(rawBody: string, signature: string, secret: string) {
const expected = createHmac("sha256", secret).update(rawBody).digest("hex");
const received = Buffer.from(signature, "hex");
const expectedBuffer = Buffer.from(expected, "hex");
return received.length === expectedBuffer.length &&
timingSafeEqual(received, expectedBuffer);
}
// Simpan Idempotency-Key dan abaikan delivery yang sudah pernah diproses.Lihat kontrak payload, retry, dan error code lengkap di dokumentasi API LessOTP.
Lihat signed webhook dalam kurang dari 5 menit
Masuk dengan phone-first authentication, buat Staging App, lalu jalankan Simulator. Tidak ada pesan provider riil dan tidak ada debit kredit.
Mulai uji staging