Pengiriman OTP
Endpoint ini membuat kode verifikasi melalui platform EngageLab, dan mengirimkannya sesuai strategi channel yang ditentukan dalam template.
Jika Anda ingin membuat kode verifikasi sendiri tanpa melalui platform EngageLab, Anda dapat memanggil endpoint Pengiriman OTP Kustom EngageLab.
Endpoint
POST https://otp.api.engagelab.cc/v1/messages
Autentikasi
Lihat Autentikasi untuk memahami cara melakukan autentikasi API.
Contoh request
Header request
POST /v1/messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Body request
{
"to": "+6591234567",
"template":{
"id":"test-template-1",
"language": "default",
"params": {
"key1": "value1",
"key2": "value2"
}
}
}
Parameter request
Objek request dinyatakan dalam format JSON, sehingga header request perlu menyertakan Content-Type: application/json.
| Parameter | Tipe | Opsi | Keterangan |
|---|---|---|---|
| to | String | Wajib | Target pengiriman, nomor ponsel atau alamat email, +6598765432, support@engagelab.com |
| end_user_ip | String | Opsional | Alamat IP pengguna akhir. Digunakan saat perlu membatasi batas permintaan dari alamat IP yang sama dalam dimensi waktu yang berbeda, mis.: 10.3.5.7 |
| channel | String | Opsional | Menentukan channel pengiriman pertama. Nilai: sms/voice/zalo/viber. Jika tidak dikirim, routing mengikuti send_channel_strategy template. |
| template | JSON Object | Wajib | Informasi template, parameter tingkat kedua di dalamnya lihat di bawah |
| |_ id | String | Wajib | ID template |
| |_ language | String | Opsional | Bahasa template, mendukung beberapa bahasa berikut: default bahasa default zh_CN Mandarin Sederhana zh_HK Mandarin Tradisional en Inggris ja Jepang th Thai es Spanyol jika tidak diisi maka default adalah default (bahasa default) |
| |_ params | JSON Object | Opsional | Nilai dari Key variabel template kustom |
| Jika Anda mendefinisikan variabel saat membuat template, isikan nilainya di sini; jika tidak diisi, maka akan dikirim langsung sebagai Key variabel, seperti {{var}} |
Penjelasan tentang params
- Untuk field preset template seperti from_id, jika nilai field params tidak diteruskan, maka saat pengiriman pesan akan digunakan from_id preset template;
- Jika nilai field params diteruskan, seperti
params:{"from_id":"12345"}, maka saat pengiriman pesan, from_id template akan diganti menjadi 12345; - Selain itu, untuk field variabel kustom dalam konten template saat pembuatan template, nilainya juga diisi melalui params, misalnya konten template
Hi {{name}}, your verify code is {{code}}, maka perlu mengisi parameterparams:{"name":"Bob"} - Variabel khusus channel Email: Untuk channel Email, mendukung penimpaan dinamis subjek email (
subject), nama pengirim (from_name), email pengirim (from_mail), dan lainnya melaluiparams. Untuk penggunaan lanjutan yang lebih detail, lihat Buat Template - Penggunaan lanjutan variabel template Email.
Parameter respons
Respons sukses
| Field | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| message_id | String | Wajib | ID pesan, mengidentifikasi secara unik suatu pesan |
| send_channel | String | Wajib | Menunjukkan channel pengiriman saat ini, nilainya whatsapp/sms/email/voice/zalo/viber |
{
"message_id": "1725407449772531712",
"send_channel": "sms"
}
Perhatikan, nilai**send_channel**yang dikembalikan tidak mewakili channel akhir yang sampai ke pengguna, melainkan hanya mewakili channel yang digunakan pada tahap saat ini; jika strategi template mengonfigurasi channel WhatsApp dan pengirimannya gagal lalu otomatis dikirim ulang melalui channel SMS, maka respons endpoint akan mengembalikan nilai whatsapp, dan setelah beberapa waktu ketika kegagalan terdeteksi, sistem akan menggunakan channel SMS untuk mengirim
Respons gagal
Status code HTTP adalah 4xx atau 5xx, body respons berisi field sebagai berikut:
| Field | Tipe | Opsi | Deskripsi |
|---|---|---|---|
| code | int | Wajib | Kode error, lihat penjelasan kode error |
| message | String | Wajib | Detail error |
{
"code": 5001,
"message": "sms send fail"
}
Kode error
Tabel berikut hanya menjelaskan error yang dikembalikan API ini pada tahap autentikasi, validasi sebelum pengiriman, dan pengiriman sinkron. Kegagalan pengiriman asinkron setelah diterima penyedia tidak dikembalikan oleh API ini; dapatkan melalui kueri status pesan atau callback.
Pemanggil harus menggunakan code untuk menentukan jenis error. Gunakan message untuk menampilkan alasan spesifik atau untuk troubleshooting; jangan mengandalkan teks message yang tetap untuk logika bisnis.
| Kode error | http code | Keterangan |
|---|---|---|
| 1000 | 500 | Error internal |
| 2001 | 401 | Autentikasi gagal, tidak menyertakan token yang benar |
| 2002 | 401 | Autentikasi gagal, token telah kedaluwarsa atau dinonaktifkan |
| 2003 | 403 | IP ini tidak diizinkan mengirim pesan. |
| 2004 | 403 | Tidak memiliki izin untuk memanggil API ini |
| 3001 | 400 | Format parameter request tidak valid, harap periksa apakah konten JSON sesuai dengan format parameter |
| 3002 | 400 | Parameter request salah, harap periksa apakah parameter request memenuhi persyaratan |
| 3003 | 400 | Parameter request salah, validasi bisnis terkait gagal, lihat detail pada deskripsi error di field message |
| 3004 | 400 | Melebihi batas frekuensi, untuk template dan target pengguna yang sama, tidak dapat mengirim ulang dalam masa berlaku kode verifikasi |
| 3005 | 400 | Saldo tersedia akun tidak mencukupi |
| 3013 | 400 | Template belum disetujui atau saat ini tidak tersedia |
| 4001 | 400 | Resource terkait tidak ada, seperti penggunaan template yang tidak ada saat mengirim pesan template |
| 5001 | 400 | Pengiriman gagal (umum/lainnya) |
| 5011 | 400 | Format nomor ponsel tidak valid |
| 5012 | 400 | Target tidak dapat dijangkau |
| 5013 | 400 | Nomor masuk daftar hitam (blacklist) |
| 5014 | 400 | Konten tidak sesuai ketentuan |
| 5015 | 400 | Pesan diblokir/ditolak |
| 5016 | 400 | Error internal pengiriman |
| 5017 | 400 | Tidak memiliki izin pengiriman ke wilayah Tiongkok |
| 5018 | 400 | Ponsel bermasalah (mati/nonaktif) |
| 5019 | 400 | Pengguna telah berhenti berlangganan |
| 5020 | 400 | Nomor tidak terdaftar/nomor kosong |
| 6001 | 429 | Frekuensi pengiriman untuk nomor ponsel yang sama melebihi batas; jendela batas dapat berupa menit, jam, atau hari kalender |
| 6002 | 429 | Frekuensi pengiriman untuk IP pengguna akhir yang sama melebihi batas; jendela batas dapat berupa menit atau jam; hanya diperiksa jika permintaan menyertakan end_user_ip |
| 6003 | 429 | Volume pengiriman harian atau bulanan global aplikasi mencapai batas |
| 6006 | 403 | Pengiriman tidak diizinkan untuk negara atau wilayah saat ini |
| 6007 | 403 | Layanan pengiriman kode verifikasi SMS ditangguhkan; dapat berlaku untuk semua negara/wilayah atau negara/wilayah saat ini |
| 6008 | 429 | Volume pengiriman harian atau bulanan untuk negara atau wilayah saat ini mencapai batas |
Catatan error batasan laju dan volume pengiriman
3004adalah kontrol frekuensi pengiriman OTP template; jendela batas mengikuti konfigurasi template dan mungkin tidak sama dengan masa berlaku kode verifikasi.6001dan6002adalah kontrol frekuensi keamanan pada dimensi nomor atau IP pengguna akhir.6003dan6008menunjukkan permintaan ini memicu batas volume pengiriman; setelah mencapai batas dan memasuki status ditangguhkan, permintaan berikutnya mungkin mengembalikan6007.- Saat menerima HTTP 429, jangan segera mencoba ulang secara terus-menerus; coba lagi nanti, dan jika terus muncul, hubungi administrator atau dukungan teknis.
5011hingga5019hanya mencakup kegagalan yang dapat dikenali pada tahap pengiriman sinkron. Status seperti nomor kosong, ponsel mati, atau penolakan operator setelah diterima penyedia masih dapat dikembalikan melalui status pesan asinkron atau callback.










