Lewati ke konten
OmniChannels.ai

Alat gratis

Decoder laporan pengiriman SMS (DLR)

Tempel satu delivery receipt SMPP atau sekaligus satu batch. Lihat arti setiap field, berapa lama pengiriman berlangsung, status webhook yang sesuai, dan pesan apa yang disampaikan oleh error command_status SMPP.

Gratis · tanpa pendaftaran · berjalan di browser Anda

Tempel teks short_message dari satu atau beberapa deliver_sm receipt, satu per baris. command_status tunggal seperti 0x00000058 juga bisa didekode.

Receipt yang didekode

Receipt: 4 · Tingkat pengiriman: 25%

Receipt
4
Tingkat pengiriman
25%
DELIVRD ÷ receipt dengan stat yang dikenali
Latensi median
1 j 7 mnt
Perlu perhatian
0

Berdasarkan stat

  • DELIVRD1
  • ACCEPTD1
  • UNDELIV1
  • EXPIRED1

Berdasarkan status webhook terdekat

  • SENT1
  • DELIVERED1
  • FAILED2
  1. Baris 1stat:DELIVRDStatus webhook terdekat: DELIVEREDFinal

    Terkirim ke perangkat.

    Pemetaan indikatif ke status ternormalisasi pada API kami.

    ID pesan
    2610101200457381
    Sesuai dengan message_id yang dikembalikan di submit_sm_resp.
    sub (terkirim ke SMSC)
    001
    Jumlah pesan yang awalnya dikirim, biasanya 001.
    dlvrd (terkirim ke perangkat)
    001
    Jumlah pesan yang terkirim, biasanya 001 atau 000. Banyak SMSC mengisinya secara longgar, jadi andalkan stat.
    Tanggal submit
    10 Okt 2026, 12.00.05261010120005
    Jam SMSC. Receipt tidak membawa zona waktu (biasanya UTC).
    Tanggal selesai
    10 Okt 2026, 12.00.09261010120009
    Jam SMSC. Receipt tidak membawa zona waktu (biasanya UTC).
    Latensi pengiriman
    4 dtk
    err
    000
    Tidak ada error.
    text
    Your code is 482913
    20 karakter pertama dari pesan asli, sering terpotong atau kosong.
  2. Baris 2stat:UNDELIVStatus webhook terdekat: FAILEDFinal

    Tidak dapat dikirim: nomor tidak valid atau tidak aktif, pelanggan diblokir, atau gangguan jaringan.

    Pemetaan indikatif ke status ternormalisasi pada API kami.

    ID pesan
    2610101200457382
    Sesuai dengan message_id yang dikembalikan di submit_sm_resp.
    sub (terkirim ke SMSC)
    001
    Jumlah pesan yang awalnya dikirim, biasanya 001.
    dlvrd (terkirim ke perangkat)
    000
    Jumlah pesan yang terkirim, biasanya 001 atau 000. Banyak SMSC mengisinya secara longgar, jadi andalkan stat.
    Tanggal submit
    10 Okt 2026, 12.002610101200
    Jam SMSC. Receipt tidak membawa zona waktu (biasanya UTC).
    Tanggal selesai
    10 Okt 2026, 14.152610101415
    Jam SMSC. Receipt tidak membawa zona waktu (biasanya UTC).
    Latensi pengiriman
    2 j 15 mnt
    err
    001
    Nilai err selain nol bersifat khusus untuk SMSC atau jaringan (sering diturunkan dari penyebab jaringan GSM). Periksa daftar error dari provider Anda.
    text
    Your order has shipp
    20 karakter pertama dari pesan asli, sering terpotong atau kosong.
  3. Baris 3stat:expiredStatus webhook terdekat: FAILEDFinal

    Masa berlaku berakhir sebelum perangkat dapat dijangkau (sering karena ponsel mati atau di luar jangkauan).

    Pemetaan indikatif ke status ternormalisasi pada API kami.

    ID pesan
    2610101200457383
    Sesuai dengan message_id yang dikembalikan di submit_sm_resp.
    sub (terkirim ke SMSC)
    001
    Jumlah pesan yang awalnya dikirim, biasanya 001.
    dlvrd (terkirim ke perangkat)
    000
    Jumlah pesan yang terkirim, biasanya 001 atau 000. Banyak SMSC mengisinya secara longgar, jadi andalkan stat.
    Tanggal submit
    10 Okt 2026, 12.012610101201
    Jam SMSC. Receipt tidak membawa zona waktu (biasanya UTC).
    Tanggal selesai
    11 Okt 2026, 00.012610110001
    Jam SMSC. Receipt tidak membawa zona waktu (biasanya UTC).
    Latensi pengiriman
    12 j
    err
    000
    Tidak ada error.
    text
    Flash sale ends toni
    20 karakter pertama dari pesan asli, sering terpotong atau kosong.
  4. Baris 4stat:ACCEPTDStatus webhook terdekat: SENTPerantara

    Diterima oleh jaringan. Biasanya receipt final menyusul.SMPP v3.4 secara formal mendefinisikan ACCEPTD sebagai pesan yang dibaca secara manual oleh customer service atas nama pelanggan, tetapi sebagian besar SMSC dan agregator mengirimnya sebagai receipt perantara “diterima oleh jaringan”.

    Pemetaan indikatif ke status ternormalisasi pada API kami.

    ID pesan
    2610101200457384
    Sesuai dengan message_id yang dikembalikan di submit_sm_resp.
    sub (terkirim ke SMSC)
    001
    Jumlah pesan yang awalnya dikirim, biasanya 001.
    dlvrd (terkirim ke perangkat)
    000
    Jumlah pesan yang terkirim, biasanya 001 atau 000. Banyak SMSC mengisinya secara longgar, jadi andalkan stat.
    Tanggal submit
    10 Okt 2026, 12.022610101202
    Jam SMSC. Receipt tidak membawa zona waktu (biasanya UTC).
    Tanggal selesai
    10 Okt 2026, 12.022610101202
    Jam SMSC. Receipt tidak membawa zona waktu (biasanya UTC).
    Latensi pengiriman
    0 dtk
    err
    000
    Tidak ada error.
    text
    —
    20 karakter pertama dari pesan asli, sering terpotong atau kosong.
  5. Baris 5 · command_status0x00000058ESME_RTHROTTLEDSementara

    Throttling error (ESME has exceeded allowed message limits)

    Coba lagi nanti dengan exponential backoff, jangan pernah dalam loop yang rapat.

Kode command_status SMPP v3.4

48 kode

KodeNamaArti (spesifikasi)Tindakan
0x00000000ESME_ROKNo errorBerhasil
0x00000001ESME_RINVMSGLENMessage length is invalidPerbaiki permintaan
0x00000002ESME_RINVCMDLENCommand length is invalidPerbaiki permintaan
0x00000003ESME_RINVCMDIDInvalid command IDPerbaiki permintaan
0x00000004ESME_RINVBNDSTSIncorrect bind status for given commandBind atau sesi
0x00000005ESME_RALYBNDESME already in bound stateBind atau sesi
0x00000006ESME_RINVPRTFLGInvalid priority flagPerbaiki permintaan
0x00000007ESME_RINVREGDLVFLGInvalid registered delivery flagPerbaiki permintaan
0x00000008ESME_RSYSERRSystem errorSementara
0x0000000AESME_RINVSRCADRInvalid source addressPerbaiki permintaan
0x0000000BESME_RINVDSTADRInvalid destination addressPerbaiki permintaan
0x0000000CESME_RINVMSGIDMessage ID is invalidPerbaiki permintaan
0x0000000DESME_RBINDFAILBind failedBind atau sesi
0x0000000EESME_RINVPASWDInvalid passwordBind atau sesi
0x0000000FESME_RINVSYSIDInvalid system IDBind atau sesi
0x00000011ESME_RCANCELFAILcancel_sm failedPerbaiki permintaan
0x00000013ESME_RREPLACEFAILreplace_sm failedPerbaiki permintaan
0x00000014ESME_RMSGQFULMessage queue fullSementara
0x00000015ESME_RINVSERTYPInvalid service typePerbaiki permintaan
0x00000033ESME_RINVNUMDESTSInvalid number of destinationsPerbaiki permintaan
0x00000034ESME_RINVDLNAMEInvalid distribution list namePerbaiki permintaan
0x00000040ESME_RINVDESTFLAGDestination flag is invalid (submit_multi)Perbaiki permintaan
0x00000042ESME_RINVSUBREPInvalid 'submit with replace' request (submit_sm with replace_if_present_flag set)Perbaiki permintaan
0x00000043ESME_RINVESMCLASSInvalid esm_class field dataPerbaiki permintaan
0x00000044ESME_RCNTSUBDLCannot submit to distribution listPerbaiki permintaan
0x00000045ESME_RSUBMITFAILsubmit_sm or submit_multi failedSementara
0x00000048ESME_RINVSRCTONInvalid source address TONPerbaiki permintaan
0x00000049ESME_RINVSRCNPIInvalid source address NPIPerbaiki permintaan
0x00000050ESME_RINVDSTTONInvalid destination address TONPerbaiki permintaan
0x00000051ESME_RINVDSTNPIInvalid destination address NPIPerbaiki permintaan
0x00000053ESME_RINVSYSTYPInvalid system_type fieldBind atau sesi
0x00000054ESME_RINVREPFLAGInvalid replace_if_present flagPerbaiki permintaan
0x00000055ESME_RINVNUMMSGSInvalid number of messagesPerbaiki permintaan
0x00000058ESME_RTHROTTLEDThrottling error (ESME has exceeded allowed message limits)Sementara
0x00000061ESME_RINVSCHEDInvalid scheduled delivery timePerbaiki permintaan
0x00000062ESME_RINVEXPIRYInvalid message validity period (expiry time)Perbaiki permintaan
0x00000063ESME_RINVDFTMSGIDPredefined message invalid or not foundPerbaiki permintaan
0x00000064ESME_RX_T_APPNESME receiver temporary app error codeSementara
0x00000065ESME_RX_P_APPNESME receiver permanent app error codePerbaiki permintaan
0x00000066ESME_RX_R_APPNESME receiver reject message error codePerbaiki permintaan
0x00000067ESME_RQUERYFAILquery_sm request failedSementara
0x000000C0ESME_RINVOPTPARSTREAMError in the optional part of the PDU bodyPerbaiki permintaan
0x000000C1ESME_ROPTPARNOTALLWDOptional parameter not allowedPerbaiki permintaan
0x000000C2ESME_RINVPARLENInvalid parameter lengthPerbaiki permintaan
0x000000C3ESME_RMISSINGOPTPARAMExpected optional parameter missingPerbaiki permintaan
0x000000C4ESME_RINVOPTPARAMVALInvalid optional parameter valuePerbaiki permintaan
0x000000FEESME_RDELIVERYFAILUREDelivery failure (used for data_sm_resp)Sementara
0x000000FFESME_RUNKNOWNERRUnknown errorSementara

Deskripsi mengikuti spesifikasi SMPP v3.4, bagian 5.1.3.

Tidak ingin mengurai receipt sendiri? SMS API kami mengirim status pengiriman ternormalisasi ke webhook Anda, dan bind SMPP tersedia untuk volume tinggi. Dokumentasi webhookPanduan SMPPSMS API untuk bisnis

Data yang Anda ketik di sini tidak dikirim ke server kami.

Jawaban singkat

Laporan pengiriman (DLR) SMPP adalah tanda terima yang dikirim balik oleh SMSC dalam PDU deliver_sm setelah Anda mengirim SMS. Teksnya mengikuti pola id, sub, dlvrd, submit date, done date, stat, err, dan text. Field stat berisi hasil pengiriman: DELIVRD berarti terkirim ke handset; UNDELIV, EXPIRED, DELETED, dan REJECTD adalah kegagalan final; ENROUTE dan ACCEPTD bersifat sementara. Format tanggalnya YYMMDDhhmm, kadang disertai detik.

Cara men-decode delivery receipt SMS

  1. 1

    Salin teks receipt

    Ambil short_message dari PDU deliver_sm di klien SMPP atau log SMSC Anda, misalnya id:… sub:001 dlvrd:001 … stat:DELIVRD err:000. Awalan log akan diabaikan.

  2. 2

    Tempel satu receipt per baris

    Tempel satu receipt atau ratusan sekaligus. Anda juga bisa menempel nilai command_status seperti 0x00000058 atau ESME_RTHROTTLED pada barisnya sendiri.

  3. 3

    Baca field yang sudah di-decode

    Setiap receipt menampilkan arti status, apakah status itu final, status webhook terdekat, tanggal yang mudah dibaca, latensi pengiriman, serta peringatan untuk field yang hilang atau tidak konsisten.

  4. 4

    Periksa ringkasan batch

    Lihat jumlah per stat dan per status webhook, tingkat pengiriman, dan median latensi, lalu salin semuanya sebagai JSON untuk tiket atau test fixture.

Anatomi delivery receipt SMPP

Saat Anda mengirim SMS dengan registered_delivery diatur ke 1, SMSC nantinya mengirim PDU deliver_sm kembali melalui bind receiver atau transceiver. Bit 0x04 pada esm_class menandainya sebagai delivery receipt, bukan pesan masuk, dan short_message-nya berisi receipt dalam bentuk teks. Lampiran B spesifikasi SMPP v3.4 memberikan format ini sebagai contoh, dan hampir semua SMSC mengikutinya: id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:E text:….

Karena Lampiran B hanya contoh dan bukan aturan yang ketat, receipt di lapangan bervariasi: key huruf kecil, spasi tambahan, submit_date dengan garis bawah, tanggal 12 digit dengan detik, atau text yang hilang. Decoder ini menerima semua variasi tersebut dan memberi tahu Anda field mana yang tidak ada.

  • id: ID pesan yang dikembalikan SMSC dalam submit_sm_resp. Gunakan untuk mencocokkan receipt dengan pesan Anda. Contoh di spesifikasi menunjukkan 10 karakter, tetapi banyak SMSC memakai ID yang lebih panjang, kadang dalam format hex.
  • sub dan dlvrd: jumlah pesan yang awalnya dikirim dan yang terkirim, dalam 3 digit. Field ini terutama relevan untuk distribution list; untuk satu SMS biasanya bernilai 001 dan 001 (atau 000).
  • submit date dan done date: waktu pesan dikirim dan waktu pesan mencapai status akhirnya, menurut jam SMSC.
  • stat: status akhir atau status sementara, berupa kode 7 huruf seperti DELIVRD.
  • err: kode error 3 karakter, spesifik untuk jaringan atau SMSC; 000 berarti tidak ada error.
  • text: 20 karakter pertama dari pesan asli, sering terpotong atau kosong.
  • TLV opsional dapat mengulang data ini dalam bentuk yang lebih rapi: receipted_message_id (0x001E), message_state (0x0427), dan network_error_code (0x0423).

Kode stat DLR dan artinya

SMPP v3.4 mendefinisikan delapan status pesan. ENROUTE dan ACCEPTD bersifat sementara; sisanya final. API kami menormalkan setiap kanal ke enam status webhook (SUBMITTED, SENT, DELIVERED, READ, FAILED, REJECTED), dan decoder menampilkan padanan terdekat untuk setiap nilai stat. Anggap pemetaan ini sebagai indikasi: aturan pastinya untuk akun Anda dikonfirmasi saat onboarding (aktivasi akun).

  • DELIVRD (message_state 2): terkirim ke handset. Status webhook terdekat: DELIVERED.
  • ACCEPTD (6): secara formal berarti 'dibaca secara manual atas nama pelanggan oleh layanan pelanggan', tetapi sebagian besar SMSC mengirimnya sebagai receipt sementara 'diterima oleh jaringan'. Terdekat: SENT.
  • ENROUTE (1): masih dalam perjalanan, misalnya antre untuk dicoba ulang. Terdekat: SENT.
  • UNDELIV (5): tidak dapat dikirim, misalnya karena nomor tidak valid atau tidak aktif. Terdekat: FAILED.
  • EXPIRED (3): masa berlaku pesan habis sebelum handset dapat dijangkau, sering karena handset mati atau di luar jangkauan sinyal. Terdekat: FAILED.
  • DELETED (4): dihapus sebelum terkirim, misalnya melalui cancel_sm. Terdekat: FAILED.
  • REJECTD (8): ditolak oleh jaringan atau firewall, misalnya karena Sender ID belum terdaftar atau konten diblokir. Terdekat: REJECTED.
  • UNKNOWN (7): SMSC tidak memiliki status akhir. Anggap sebagai belum terkonfirmasi, bukan kegagalan yang terbukti.

Kode err: mengapa tidak ada daftar universal

Field err lebarnya tiga karakter dan spesifikasi SMPP tidak mendefinisikan nilainya. 000 selalu berarti tidak ada error, tetapi nilai selain nol berasal dari vendor SMSC, operator, atau agregator di antaranya. Sebagian SMSC meneruskan penyebab error GSM MAP (misalnya, MAP error 1 berarti unknown subscriber dan 27 berarti absent subscriber), sementara yang lain memetakan semuanya ke tabel milik mereka sendiri.

Jika receipt membawa TLV network_error_code (0x0423), TLV ini lebih andal: oktet pertamanya menunjukkan jenis jaringan (3 berarti GSM) dan dua oktet berikutnya berisi kode error. Receipt DELIVRD dengan err selain nol itu tidak konsisten dan perlu ditanyakan ke provider Anda; decoder akan menandainya.

command_status error versus delivery receipt

SMPP melaporkan masalah pada dua momen. command_status dalam submit_sm_resp tiba dalam hitungan milidetik dan menyatakan apakah SMSC menerima permintaan Anda; 0x00000000 (ESME_ROK) berarti diterima, bukan terkirim. Delivery receipt tiba beberapa detik hingga beberapa hari kemudian dan membawa hasil akhirnya.

Nilai command_status didefinisikan di bagian 5.1.3 SMPP v3.4. Yang paling umum di produksi adalah 0x00000058 ESME_RTHROTTLED (Anda melampaui jumlah pesan per detik yang disepakati: perlambat dan coba lagi dengan exponential backoff), 0x00000014 ESME_RMSGQFUL (antrean penuh: kurangi kecepatan), 0x0000000A dan 0x0000000B (alamat pengirim atau tujuan tidak valid), serta 0x0000000D atau 0x0000000E (bind gagal atau password salah). Nilai 0x00000400 sampai 0x000004FF dicadangkan untuk error spesifik vendor SMSC, jadi tanyakan hal itu kepada provider Anda.

Tanggal, zona waktu, dan latensi pengiriman

Tanggal pada receipt memakai format YYMMDDhhmm, dan banyak SMSC menambahkan detik (YYMMDDhhmmss). Receipt tidak membawa zona waktu: waktunya mengikuti jam SMSC, biasanya UTC. Decoder menampilkan tanggal persis seperti yang tertulis dan menghitung latensi sebagai done date dikurangi submit date, yang tidak terpengaruh zona waktu selama keduanya berasal dari jam yang sama.

Latensi adalah sinyal kualitas yang berguna. Trafik OTP yang sehat ke handset yang dapat dijangkau biasanya selesai dalam hitungan detik. Latensi panjang yang diikuti EXPIRED menunjukkan handset yang mati atau sedang roaming, dan done date yang lebih awal dari submit date berarti kedua jam tidak sinkron. Tanggal tingkat menit tidak dapat mengukur latensi di bawah satu menit, jadi pilih SMSC yang mengirim detik.

Menangani receipt secara andal di produksi

Balas setiap deliver_sm dengan deliver_sm_resp, bahkan jika pemrosesan Anda gagal. Jika tidak, SMSC akan mengirim ulang dan dapat membatasi (throttle) bind Anda. Simpan receipt mentah, lalu proses secara asinkron dan idempoten berdasarkan ID pesan, karena receipt bisa tiba dua kali atau tidak berurutan: ENROUTE yang terlambat tidak boleh menimpa DELIVRD.

Jika Anda tidak ingin mem-parsing receipt sama sekali, REST SMS API kami menyampaikan informasi yang sama sebagai status webhook yang sudah dinormalkan, dan receipt yang terlewat dapat dikirim ulang dengan POST /sms/resendDlr. Bind SMPP melalui TLS tersedia untuk pengirim bervolume tinggi dan reseller.

Pertanyaan seputar laporan pengiriman

Apa arti stat:DELIVRD dalam laporan pengiriman SMS?

DELIVRD adalah status pesan SMPP 'delivered': SMSC memiliki konfirmasi bahwa pesan sudah sampai di handset penerima. Ini tidak berarti pesan dibuka atau dibaca; SMS biasa tidak memiliki tanda baca. Di webhook kami, status ini sesuai dengan DELIVERED.

Apa perbedaan antara UNDELIV, EXPIRED, dan REJECTD?

UNDELIV berarti jaringan tidak dapat mengirim pesan, misalnya karena nomor tidak valid atau tidak aktif. EXPIRED berarti upaya pengiriman berlanjut hingga masa berlaku habis, biasanya karena ponsel mati atau di luar jangkauan sinyal. REJECTD berarti jaringan atau firewall menolak pesan, misalnya karena Sender ID belum terdaftar atau konten diblokir.

Apa arti ACCEPTD dalam DLR SMPP?

Dalam spesifikasi SMPP v3.4, ACCEPTD berarti pesan dibaca secara manual atas nama pelanggan oleh layanan pelanggan. Dalam praktiknya, sebagian besar SMSC dan agregator memakainya sebagai receipt sementara yang berarti jaringan menerima pesan, lalu receipt DELIVRD final atau receipt kegagalan menyusul.

Apa itu error SMPP 0x00000058?

0x00000058 adalah ESME_RTHROTTLED: Anda mengirim lebih banyak pesan per detik daripada yang diizinkan bind Anda. Sifatnya sementara. Kurangi kecepatan pengiriman, jaga jumlah PDU submit_sm yang belum dibalas pada batas yang wajar, dan kirim ulang pesan yang ditolak dengan exponential backoff, bukan langsung saat itu juga.

Apa arti err:000, dan di mana saya bisa menemukan kode err lainnya?

err:000 berarti tidak ada error. Nilai err selain nol tidak didefinisikan oleh spesifikasi SMPP; nilai tersebut berasal dari vendor SMSC, operator, atau agregator, dan sebagian meneruskan penyebab error GSM MAP. Minta tabel error dari provider Anda, dan periksa TLV network_error_code jika ada.

Format tanggal apa yang dipakai delivery receipt SMPP?

submit date dan done date memakai YYMMDDhhmm, misalnya 2610101201 untuk 10 Oktober 2026 pukul 12.01. Banyak SMSC menambahkan detik (YYMMDDhhmmss). Zona waktu tidak disertakan; waktunya mengikuti jam SMSC, biasanya UTC.

Mengapa saya tidak menerima laporan pengiriman?

Penyebab yang umum adalah registered_delivery tidak diatur ke 1 di submit_sm, penggunaan bind transmitter saja tanpa bind receiver, jaringan tujuan yang tidak mengembalikan receipt, atau klien Anda tidak membalas deliver_sm. Beberapa jalur hanya mengembalikan receipt sementara. Untuk trafik REST, periksa endpoint webhook Anda dan kirim ulang receipt dengan /sms/resendDlr.

Apakah teks receipt saya dikirim ke mana pun saat saya memakai alat ini?

Tidak. Decoder berjalan sepenuhnya di browser Anda. Tidak ada yang Anda tempel, termasuk ID pesan atau teks pesan, yang dikirim ke server kami.

Alat gratis lainnya