API Callback
Ikhtisar
Data status pesan akan dikirim balik (callback) ke sistem bisnis perusahaan, sehingga analisis statistik dapat dilakukan berdasarkan informasi tersebut.
Alamat Callback
Perusahaan perlu mengatur alamat callback untuk menerima perubahan status pesan. Saat ini belum tersedia antarmuka web. Silakan hubungi tim teknis Engagelab untuk pengaturan alamat callback.
Verifikasi Validitas Alamat Callback
Saat mengonfigurasi alamat callback di backend Push pada Pengaturan Aplikasi, permintaan POST akan dikirim dengan string acak 8 karakter sebagai parameter request body echostr. Anda perlu mengembalikan nilai echostr pada Response Body, dengan format berikut:
Request Body:
{
"echostr": "12345678"
}
Response Body:
12345678
Mekanisme Keamanan
Digunakan untuk autentikasi klien, opsional.
Untuk memastikan sumber pesan benar-benar dari Engagelab, Anda dapat memilih melakukan autentikasi sumber data POST. Atau, Anda juga bisa langsung mengurai data POST tanpa autentikasi.
Metode autentikasi:
- Konfigurasikan username callback (
username) dan secret callback (secret) di konsol Engagelab untuk alamat callback.
Ambil X-CALLBACK-ID dari header permintaan, contoh:
X-CALLBACK-ID: timestamp=1681991058;nonce=123123123123;username=test;signature=59682d71e2aa2747252e4e62c15f6f241ddecc8ff08999eda7e0c4451207a16b
Penjelasan:
timestamp: waktu callback pesan (format standar)nonce: angka acaksignature: informasi tanda tangan
Metode tanda tangan:
signature=HMAC-SHA256(secret, timestamp+nonce+username)
Mekanisme Respons
Setelah layanan developer menerima callback dari Engagelab, perlu memberikan respons dalam waktu 3 detik sesuai ketentuan berikut:
- Berhasil diterima: Kode status HTTP harus mengembalikan
200atau204, tanpa perlu pesan respons. - Gagal diterima: Kode status HTTP harus mengembalikan
5XXatau4XXbeserta pesan respons. Format:
{
"code": 2002,
"message": "error"
}
| Field | Tipe | Wajib/Opsional | Deskripsi |
|---|---|---|---|
code |
int | Opsional | Kode error |
message |
string | Opsional | Detail error |
Penjelasan Field Callback
Body Pesan
| Nama Field | Tipe | Wajib/Opsional | Deskripsi |
|---|---|---|---|
total |
int | Wajib | Jumlah pesan dalam callback ini |
rows |
array | Wajib | Daftar detail perubahan status pesan, berisi field berikut: |
Field Array rows
| Nama Field | Tipe | Wajib/Opsional | Deskripsi |
|---|---|---|---|
message_id |
string | Wajib | ID unik pesan |
from |
string | Opsional | Pengirim, default adalah appkey |
to |
string | Opsional | ID penerima (misal, registrationID) |
server |
string | Wajib | Nama layanan pesan, nilai: WebPush |
channel |
string | Wajib | Kanal pesan, nilai: EngageLab, Chrome, Firefox, Safari, Edge, Opera, Other |
custom_args |
object | Opsional | Parameter kustom yang dikirim saat pembuatan pesan, dikembalikan apa adanya |
itime |
int | Wajib | Timestamp aktual saat status pesan terjadi, dapat digunakan bersama message_status untuk mendapatkan waktu tiap status pesan |
status |
object | Wajib | Informasi status pesan, berisi field berikut: |
Field Object status
| Nama Field | Tipe | Wajib/Opsional | Deskripsi |
|---|---|---|---|
message_status |
string | Wajib | Status pesan, nilai: target_valid, sent, delivered, click, target_invalid, sent_failed, delivered_failed, no_click |
status_data |
object | Opsional | Data status kustom, berisi field berikut: |
channel_message_id |
string | Opsional | ID pesan dari kanal pihak ketiga |
ntf_msg |
int | Wajib | Tipe pesan, nilai: 1: Notifikasi, 2: Pesan Kustom, 7: Pesan In-App |
platform |
string | Wajib | Platform push, nilai: b: Web |
uid |
int | Wajib | UID penerima push notification |
app_version |
string | Wajib | Versi aplikasi terintegrasi SDK, didapat dari pelaporan SDK |
channel |
string | Wajib | Kanal aplikasi terintegrasi SDK, didapat dari pelaporan SDK |
msg_time |
int | Wajib | Waktu pengiriman pesan, yaitu saat permintaan API berhasil dikirim |
time_zone |
string | Wajib | Zona waktu organisasi |
loss_valid_type |
int | Opsional | Tidak perlu diproses |
plan_user_total |
int | Opsional | Tidak perlu diproses |
callback_type |
int | Opsional | Tidak perlu diproses |
error_code |
int | Opsional | Kode error, hanya jika terjadi kegagalan |
error_detail |
object | Opsional | Detail error, hanya jika terjadi kegagalan, berisi field berikut: |
message |
string | Opsional | Penjelasan detail alasan error, hanya untuk kanal FCM |
loss |
object | Opsional | Informasi kehilangan, berisi field berikut: |
loss_source |
string | Opsional | Sumber kehilangan, nilai: EngageLab, Chrome, Firefox, Safari, Edge, Opera, Other |
loss_step |
int | Opsional | Tahap kehilangan, nilai: 1: Target Rencana → Target Valid, 2: Target Valid → Jumlah Terkirim, 3: Jumlah Terkirim → Jumlah Terkirim ke Penerima, 4: Jumlah Terkirim ke Penerima → Jumlah Klik |
Nilai Status Pesan
| Nilai Status | Arti | Deskripsi |
|---|---|---|
target_valid |
Target Valid | Dianggap valid jika aktif dalam 365 hari terakhir |
sent |
Berhasil Dikirim | Berhasil dikirim ke server |
delivered |
Berhasil Diterima | Diterima berdasarkan callback aktual |
click |
Diklik Pengguna | Diklik oleh pengguna sesuai laporan SDK |
target_invalid |
Target Tidak Valid | Tidak valid berdasarkan tahap kehilangan 1 |
sent_failed |
Gagal Dikirim | Tidak valid berdasarkan tahap kehilangan 2 |
delivered_failed |
Gagal Diterima | Gagal berdasarkan tahap kehilangan 3 |
no_click |
Gagal Klik | Gagal berdasarkan tahap kehilangan 4, hanya untuk pesan in-app |
Konten Callback
Metode callback: POST
Content-Type: application/json
Contoh
Header Permintaan
POST /developer_define_url HTTP/1.1
Content-Type: application/json
Body Permintaan
{
"total": 1,
"rows": [
{
"message_id": "1666165485030094861",
"from": "",
"to": "",
"server": "WebPush",
"channel": "Chrome",
"custom_args": {},
"itime": 1640707579,
"status": {
"message_status": "delivered",
"status_data": {
"channel_message_id": "wamid.123321abcdefed==",
"ntf_msg": 1,
"platform": "a",
"uid": 100,
"app_version": "",
"channel": "",
"msg_time": 1640707579,
"time_zone": "+8",
"loss_valid_type": 0,
"plan_user_total": 0,
"callback_type": 0
},
"error_code": 0,
"error_detail": {
"message": ""
},
"loss": {
"loss_source": "vivo",
"loss_step": 1
}
}
}
]
}
Penjelasan Parameter
| Nilai | Arti |
|---|---|
target_valid |
Target efektif |
sent |
Berhasil dikirim |
delivered |
Berhasil diterima |
click |
Diklik pengguna |
target_invalid |
Target tidak valid |
sent_failed |
Gagal dikirim |
delivered_failed |
Gagal diterima |
Tahap Kehilangan
- Target rencana → Target valid
- Target valid → Terkirim
- Terkirim → Diterima
- Diterima → Klik
Catatan:
1. Klik dan pengiriman pada beberapa kanal bisa terjadi duplikasi, lakukan deduplikasi sendiri jika perlu.
2. Jumlah pengiriman dan tampilan tidak akan diperbarui setelah 5 hari dari pengiriman berhasil.










