Referensi Event Callback
Konfigurasi dan Verifikasi Alamat Callback
Setelah Anda mengonfigurasi alamat callback, EngageLab SMS akan otomatis mengirim satu request HTTP POST ke alamat tersebut untuk memverifikasi ketersediaan endpoint. Layanan Anda harus mengembalikan HTTP status code 200 dalam waktu 3 detik, jika tidak sistem akan menganggap alamat tersebut tidak tersedia.
Catatan:
Untuk memastikan data callback dapat diterima dengan normal, harap tambahkan 119.8.170.74 dan 114.119.180.30 ke whitelist firewall server Anda.
Contoh Request
Misalkan alamat callback Anda adalah https://example.engagelabSMS.callback.com, sistem akan mengirim request berikut:
curl -X POST https://example.engagelabSMS.callback.com -d '{}'
Persyaratan Response
Layanan Anda hanya perlu mengembalikan HTTP status code 200, tanpa perlu mengembalikan konten apa pun. Contoh:
HTTP/1.1 200 OK
Content-Length: 0
Catatan:
Verifikasi alamat callback hanya memeriksa HTTP status code, tidak mengharuskan pengembalian konten payload tertentu. Pastikan endpoint layanan Anda dapat merespons 200 dengan benar dalam waktu 3 detik.
Mekanisme Keamanan Callback
Untuk menjamin keamanan data callback dan kredibilitas sumbernya, EngageLab SMS mendukung berbagai metode verifikasi keamanan.
Verifikasi Username dan Secret Key (opsional)
- Konfigurasi opsional. Jika username diatur, maka secret key juga harus diatur.
- Setelah dikonfigurasi, EngageLab akan menambahkan field
X-CALLBACK-IDpada HTTP Header setiap request callback, dengan format sebagai berikut:
X-CALLBACK-ID: timestamp={timestamp};nonce={nonce};username={username};signature={signature}
- Di mana:
timestamp: timestamp pengiriman callbacknonce: angka acakusername: username yang Anda konfigurasisignature: informasi signature, dihitung dengan cara berikut
Cara Menghitung Signature (Contoh Python)
import hashlib, hmac
def verify(username, secret, timestamp, nonce, signature):
return signature == hmac.new(
key=secret.encode(),
msg=f'{timestamp}{nonce}{username}'.encode(),
digestmod=hashlib.sha256
).hexdigest()
- Sisi server dapat memverifikasi keabsahan request callback dengan cara di atas.
Autentikasi Authorization (opsional)
- Jika endpoint callback Anda memerlukan autentikasi (seperti Basic Auth, Bearer Token, dll.), Anda dapat mengisi informasi Authorization saat konfigurasi.
- EngageLab akan otomatis menyertakan field Authorization tersebut saat melakukan request, sehingga layanan Anda dapat memverifikasi identitas request.
Penjelasan Event Callback
Status Pesan
Status pesan digunakan untuk melacak perubahan status setiap pesan sepanjang siklus hidupnya. Digunakan untuk mengetahui secara real-time progres pesan pada setiap tahap seperti pengiriman, penerimaan, dan verifikasi, sehingga memudahkan analisis statistik, penanganan anomali, dan optimasi pengalaman pengguna.
| Identifier Event | Penjelasan |
|---|---|
| plan | Pesan dijadwalkan untuk dikirim, masuk ke antrian tunggu kirim |
| target_valid | Nomor tujuan valid |
| target_invalid | Nomor tujuan tidak valid |
| sent | Pesan berhasil dikirim |
| sent_failed | Pengiriman pesan gagal |
| delivered | Pesan terkirim ke perangkat pengguna |
| delivered_failed | Pesan telah dikirim, tetapi gagal terkirim ke perangkat pengguna |
Struktur Data Callback
Struktur Luar
{
"total": 1,
"rows": [
{
// Objek ReportLifecycle
}
]
}
| Nama Field | Tipe | Penjelasan |
|---|---|---|
| total | int | Jumlah data yang disertakan dalam callback ini |
| rows | array | Array data status siklus hidup |
Objek ReportLifecycle
| Nama Field | Tipe | Penjelasan |
|---|---|---|
| message_id | string | ID unik pesan |
| to | string | Nomor penerima |
| server | string | Tipe layanan (misalnya SMS) |
| channel | string | Tipe channel |
| itime | int64 | Timestamp callback (detik) |
| custom_args | object | Parameter kustom (dikembalikan jika ada yang dikirim) |
| status | object | Objek detail status |
Objek status
| Nama Field | Tipe | Penjelasan |
|---|---|---|
| message_status | string | Status pesan saat ini (lihat tabel di bawah) |
| status_data | object | Objek data status |
| billing | object | Objek informasi penagihan (dikembalikan jika ada penagihan) |
| error_code | int | Kode error, 0 berarti tidak ada error |
| error_detail | object | Detail error (dikembalikan saat terjadi error) |
Objek status_data
| Nama Field | Tipe | Penjelasan |
|---|---|---|
| msg_time | int64 | Timestamp pembuatan pesan (detik) |
| message_id | string | ID pesan |
| current_send_channel | string | Nama channel pengirim saat ini |
| template_key | string | Key konfigurasi template |
| business_id | string | ID bisnis |
| plan_id | string | ID plan |
Objek billing (dikembalikan jika ada penagihan)
| Nama Field | Tipe | Penjelasan |
|---|---|---|
| cost | float64 | Jumlah biaya |
| currency | string | Mata uang, selalu "USD" |
Umumnya hanya pesan pada tahap sent yang menyertakan informasi penagihan.
Objek error_detail (dikembalikan saat terjadi error)
| Nama Field | Tipe | Penjelasan |
|---|---|---|
| message | string | Deskripsi pesan error |
Contoh: Pesan Berhasil Dikirim
{
"total": 1,
"rows": [
{
"message_id": "123456789",
"to": "+6598765432",
"server": "sms",
"channel": "sms",
"itime": 1701234567,
"custom_args": {
"order_id": "ORDER123",
"user_id": "USER456"
},
"status": {
"message_status": "sent",
"status_data": {
"msg_time": 1701234560,
"message_id": "123456789",
"current_send_channel": "CHANNEL_A",
"template_key": "verify_code",
"business_id": "1001",
"plan_id": "7198765432109876543"
},
"billing": {
"cost": 0.005,
"currency": "USD"
},
"error_code": 0
}
}
]
}
Contoh: Pengiriman Pesan Gagal
{
"total": 1,
"rows": [
{
"message_id": "123456790",
"to": "+6598765433",
"server": "sms",
"channel": "sms",
"itime": 1701234568,
"status": {
"message_status": "sent_fail",
"status_data": {
"msg_time": 1701234561,
"message_id": "123456790",
"current_send_channel": "CHANNEL_B",
"template_key": "verify_code",
"business_id": "1001",
"plan_id": "7198765432109876543"
},
"error_code": 4001,
"error_detail": {
"message": "Invalid phone number"
}
}
}
]
}
Notifikasi Pesan
Notifikasi pesan mengacu pada event bisnis tingkat sistem atau peringatan (alert). Digunakan untuk mengingatkan pihak bisnis agar memperhatikan informasi penting seperti status operasi layanan, saldo, dan peninjauan template, sehingga memudahkan penanganan tepat waktu dan peringatan dini risiko.
| Identifier Event | Penjelasan |
|---|---|
| template_audit_result | Notifikasi hasil peninjauan template |
Respons Pesan
Respons pesan terutama mengacu pada event respons callback saat berinteraksi dengan pengguna atau sistem eksternal.
| Identifier Event | Penjelasan |
|---|---|
| uplink_message | Konten pesan uplink yang dibalas pengguna melalui SMS dan cara lainnya |
Contoh
{
"total": 1,
"rows": [
{
"server": "SMS",
"itime": 1741083306,
"message_id": "0",
"business_id": "0",
"response": {
"event": "uplink_message",
"response_data": {
"message_sid": "SM1234567890",
"account_sid": "AC1234567890",
"from": "+1234567890",
"to": "+0987654321",
"body": "Hello, it's time to struggle!"
}
}
}
]
}
Event Sistem
Event sistem mencakup tindakan operasional terkait akun, template, panggilan API, dan lainnya. Memudahkan pemantauan, audit, dan pemrosesan otomatis atas operasi penting seperti login akun, perubahan secret key, dan panggilan API.
| Identifier Event | Penjelasan |
|---|---|
| account_login | Notifikasi operasi terkait login akun |
| key_manage | Notifikasi operasi terkait perubahan dan pengelolaan secret key |
| template_manage | Notifikasi operasi penambahan, perubahan, penghapusan template |
| api_call | Notifikasi operasi terkait panggilan endpoint API |
Struktur Data Callback
Struktur Luar
{
"total": 1,
"rows": [
{
// Objek event sistem
}
]
}
| Field | Tipe | Penjelasan |
|---|---|---|
| total | int64 | Total event yang disertakan dalam callback ini |
| rows | array | Array objek event sistem |
Objek Event Sistem
| Field | Tipe | Penjelasan |
|---|---|---|
| server | string | Selalu "SMS" |
| itime | int64 | Timestamp terjadinya event (detik) |
| system_event | object | Konten event sistem |
Objek system_event
| Field | Tipe | Penjelasan |
|---|---|---|
| event | string | Tipe event |
| data | object | Data event |
Objek data
| Field | Tipe | Penjelasan |
|---|---|---|
| business_id | string | ID bisnis |
| org_id | string | ID organisasi |
| operator | object | Informasi operator |
Objek operator
| Field | Tipe | Penjelasan |
|---|---|---|
| string | Email operator (jika ada) | |
| api_key | string | API Key (jika ada) |
| ip_address | string | IP operasi |
Struktur Request
{
"total": 1,
"rows": [
{
"server": "SMS",
"itime": 1694012345,
"system_event": {
"event": "account_login",
"data": {
"business_id": "123",
"org_id": "org-abc",
"operator": {
"email": "foo@example.com",
"api_key": "api-xxxx",
"ip_address": "1.2.3.4"
},
"account_login": {
"action": "login_success"
}
}
}
}
]
}
Event Login Akun
| Field | Tipe | Penjelasan |
|---|---|---|
| action | string | Login berhasil/login gagal/logout |
| fail_reason | string | Alasan kegagalan login, hanya dikembalikan saat login_failed |
Contoh
{
"event": "account_login",
"data": {
"business_id": "123",
"org_id": "org-abc",
"operator": {
"email": "foo@example.com",
"ip_address": "1.2.3.4"
},
"account_login": {
"action": "login_success"
}
}
}
Event Pengelolaan Template
| Field | Tipe | Penjelasan |
|---|---|---|
| action | string | Buat template/perbarui template/hapus template |
| template_id | string | ID template |
| template_name | string | Nama template |
Contoh
{
"event": "template_manage",
"data": {
"business_id": "123",
"org_id": "org-abc",
"operator": {
"email": "foo@example.com",
"ip_address": "1.2.3.4"
},
"template_manage": {
"action": "update template",
"template_id": "tmpl-456",
"template_name": "Verification Code"
}
}
}
Event Pengelolaan Secret Key
| Field | Tipe | Penjelasan |
|---|---|---|
| action | string | Buat secret key/perbarui secret key/hapus secret key/lihat secret key |
| api_key | string | API Key |
| description | string | Deskripsi (opsional) |
Contoh
{
"event": "key_manage",
"data": {
"business_id": "123",
"org_id": "org-abc",
"operator": {
"email": "foo@example.com",
"ip_address": "1.2.3.4"
},
"key_manage": {
"action": "create",
"api_key": "apikey-789",
"description": "Buat secret key"
}
}
}
Event Panggilan API
| Field | Tipe | Penjelasan |
|---|---|---|
| api_path | string | Path endpoint |
| method | string | Metode HTTP |
Contoh
{
"event": "api_call",
"data": {
"business_id": "123",
"org_id": "org-abc",
"operator": {
"api_key": "apikey-789",
"ip_address": "1.2.3.4"
},
"api_call": {
"api_path": "/api/v1/messages/send",
"method": "POST"
}
}
}










