Endpoint Callback Status Siklus Hidup
Dokumen ini menjelaskan struktur data dan keterangan field endpoint callback status siklus hidup pesan. Sistem akan melakukan callback informasi status ke URL yang dikonfigurasi pelanggan melalui HTTP POST ketika status pesan berubah.
Cara callback
- Metode request:
POST - Content-Type:
application/json - Respons sukses: status code HTTP 200 atau 204
- Percobaan ulang saat gagal: Jika pelanggan tidak mengembalikan status code sukses, sistem akan otomatis melakukan percobaan ulang
Struktur data
1. Struktur lapisan luar (ReportLifecycles)
{
"total": 1,
"rows": [
{
// Array objek ReportLifecycle
}
]
}
| Field | Tipe | Keterangan | Selalu dikembalikan |
|---|---|---|---|
total |
int64 | Jumlah total record | Ya |
rows |
array | Array data status siklus hidup | Ya |
2. Objek ReportLifecycle
Struktur setiap elemen dalam array rows adalah sebagai berikut:
| Field | Tipe | Keterangan | Selalu dikembalikan |
|---|---|---|---|
message_id |
string | ID pesan | Ya |
to |
string | Nomor penerima | Ya |
server |
string | Tipe layanan | Ya |
channel |
string | Tipe channel | Ya |
itime |
int64 | Timestamp callback (detik) | Ya |
custom_args |
map[string]any | Parameter kustom (parameter yang diteruskan saat pengiriman) | Tidak |
status |
object | Objek detail status | Tidak |
3. Objek Status
Objek informasi detail status:
| Field | Tipe | Keterangan | Selalu dikembalikan |
|---|---|---|---|
message_status |
string | Status pesan, seperti: sent, sent_fail, delivered, delivered_fail, verified, dll. |
Ya |
status_data |
object | Objek data status, lihat di bawah | Ya |
billing |
object | Objek informasi penagihan, lihat di bawah | Tidak |
error_code |
int | Kode error, 0 berarti tidak ada error | Ya |
error_detail |
object | Objek detail error, lihat di bawah | Tidak |
kwai_extra |
object | Informasi ekstensi khusus Kuaishou, lihat di bawah | Tidak |
Catatan: Field berikut digunakan untuk statistik internal dan tidak akan dikirim melalui callback ke pelanggan:
- field analisis statistik internalanalysis
4. Objek StatusData
Data dasar terkait status:
| Field | Tipe | Keterangan | Selalu dikembalikan |
|---|---|---|---|
msg_time |
int64 | Timestamp pembuatan pesan (detik) | Ya |
message_id |
string | ID pesan | Ya |
current_send_channel |
string | Nama channel pengiriman saat ini | Ya |
template_key |
string | Key konfigurasi template | Ya |
business_id |
string | ID bisnis | Ya |
Catatan: Field berikut merupakan informasi sensitif atau field internal, telah difilter dan tidak akan dikirim melalui callback ke pelanggan:
- konten pesan (informasi sensitif)message_content- jumlah segmen pesan (field internal)parts- tipe pesan (field internal)msg_type- tipe protokol (field internal)protocol_type- ID pemasok (informasi sensitif)supplier_ids
5. Objek Billing
Informasi penagihan (hanya dikembalikan jika ada data penagihan):
| Field | Tipe | Keterangan | Selalu dikembalikan |
|---|---|---|---|
cost |
float64 | Jumlah biaya (4 angka desimal) | Ya |
currency |
string | Mata uang, selalu "USD" | Ya |
Catatan: Field berikut merupakan field penagihan internal dan tidak akan dikirim melalui callback ke pelanggan:
- field penagihan internal (satuan sepersepuluh ribu)cost10000- biaya pengirim (satuan sepersepuluh ribu)sender_cost10000
6. Objek ErrorDetail
Detail error (hanya dikembalikan saat terjadi error):
| Field | Tipe | Keterangan | Selalu dikembalikan |
|---|---|---|---|
message |
string | Deskripsi pesan error | Ya |
channel_code |
string | Kode error asli yang dikembalikan channel | Ya |
channel_message |
string | Pesan error asli yang dikembalikan channel | Ya |
7. Objek KwaiExtra
Informasi ekstensi khusus pelanggan Kuaishou (hanya dikembalikan pada status terkirim dan untuk pelanggan Kuaishou):
| Field | Tipe | Keterangan | Selalu dikembalikan |
|---|---|---|---|
delivered_time |
int64 | Timestamp penerimaan (milidetik) | Ya |
parts |
int | Jumlah segmen penagihan | Ya |
duration |
int64 | Durasi panggilan (detik), field ini hanya ada pada pesan voice | Tidak |
Penjelasan status pesan
Nilai status pesan yang umum:
| Nilai status | Keterangan |
|---|---|
sent |
Telah dikirim ke channel |
sent_fail |
Pengiriman gagal |
delivered |
Telah terkirim ke perangkat pengguna |
delivered_fail |
Penerimaan gagal |
verified |
Pengguna telah terverifikasi (misalnya kode OTP telah digunakan) |
Contoh callback
Contoh 1: pesan berhasil terkirim
{
"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": "delivered",
"status_data": {
"msg_time": 1701234560,
"message_id": "123456789",
"current_send_channel": "CHANNEL_A",
"template_key": "verify_code",
"business_id": "1001"
},
"billing": {
"cost": 0.005,
"currency": "USD"
},
"error_code": 0
}
}
]
}
Contoh 2: 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"
},
"error_code": 4001,
"error_detail": {
"message": "Invalid phone number",
"channel_code": "INVALID_NUMBER",
"channel_message": "The phone number format is invalid"
}
}
}
]
}
Contoh 3: penerimaan pesan gagal (dengan informasi penagihan)
{
"total": 1,
"rows": [
{
"message_id": "123456791",
"to": "+6598765434",
"server": "sms",
"channel": "sms",
"itime": 1701234570,
"custom_args": {
"campaign": "new_year_promo"
},
"status": {
"message_status": "delivered_fail",
"status_data": {
"msg_time": 1701234562,
"message_id": "123456791",
"current_send_channel": "CHANNEL_C",
"template_key": "marketing",
"business_id": "1001"
},
"billing": {
"cost": 0.0045,
"currency": "USD"
},
"error_code": 5002,
"error_detail": {
"message": "Phone number unreachable",
"channel_code": "UNREACHABLE",
"channel_message": "Subscriber absent"
}
}
}
]
}
Contoh 4: penerimaan pesan voice pelanggan Kuaishou
{
"total": 1,
"rows": [
{
"message_id": "123456792",
"to": "+6598765435",
"server": "voice",
"channel": "voice",
"itime": 1701234575,
"status": {
"message_status": "delivered",
"status_data": {
"msg_time": 1701234565,
"message_id": "123456792",
"current_send_channel": "VOICE_CHANNEL_A",
"template_key": "voice_verify",
"business_id": "2001"
},
"billing": {
"cost": 0.012,
"currency": "USD"
},
"error_code": 0,
"kwai_extra": {
"delivered_time": 1701234575000,
"parts": 1,
"duration": 45
}
}
}
]
}
Hal yang perlu diperhatikan
Aturan pengembalian field
- Semua field yang ditandai
omitemptytidak akan muncul dalam JSON yang dikembalikan jika nilainya kosong atau bernilai nol - Informasi sensitif dan field internal telah difilter atau dikosongkan sebelum callback
- Semua field yang ditandai
Keamanan
- Konten pesan (
message_content) tidak akan dikirim melalui callback ke pelanggan - Informasi sensitif seperti ID pemasok (
supplier_ids) telah difilter - Field penagihan internal (
cost10000,sender_cost10000) tidak akan dikirim melalui callback
- Konten pesan (
Persyaratan penerimaan
- Endpoint callback pelanggan harus mengembalikan respons dalam 5 detik
- Harus mengembalikan status code HTTP 200 atau 204 untuk menandakan penerimaan berhasil
- Jika mengembalikan status code lain atau timeout, sistem akan melakukan percobaan ulang otomatis
Mekanisme percobaan ulang
- Setelah callback gagal akan dilakukan percobaan ulang otomatis
- Interval percobaan ulang meningkat secara bertahap
- Selama percobaan ulang data disimpan di Redis
Penjelasan timestamp
itime: timestamp terjadinya callback, dalam satuan detikmsg_time: timestamp pembuatan pesan, dalam satuan detikdelivered_time: field khusus Kuaishou, timestamp penerimaan, dalam satuan milidetik
Parameter kustom
- Field
custom_argsakan mengembalikan apa adanya parameter kustom yang diteruskan saat pengiriman pesan - Jika tidak ada parameter kustom yang diteruskan saat pengiriman, field ini tidak akan muncul dalam data callback
- Field
Referensi kode error
Penjelasan kode error yang umum (untuk kode error spesifik silakan lihat dokumen kode error):
| Kode error | Keterangan |
|---|---|
| 0 | Tidak ada error, operasi sukses |
| 4001 | Format nomor salah |
| 4002 | Nomor tidak ada |
| 5001 | Channel menolak |
| 5002 | Pengguna tidak dapat dijangkau |
| 6001 | Timeout jaringan |
Penjelasan kode error yang lebih detail silakan lihat dokumen kode error terpisah.
Catatan perubahan
- 2024-01: Versi awal
- Menambahkan field
kwai_extrauntuk mendukung pelanggan Kuaishou - Memfilter field informasi sensitif, meningkatkan keamanan










