Permintaan pengiriman Anda bisa berhasil sebelum ponsel penerima menerima apa pun. Laporan operator yang datang kemudian memberikan hasil tambahan, yang harus ditangani aplikasi Anda secara terpisah dari penerimaan permintaan.
Apa yang disampaikan delivery receipt?
Tanda terima melaporkan keberhasilan pengiriman atau masalah pengiriman dari sudut pandang jaringan.
Hasil pengiriman SMS bisa tiba saat ponsel tergeletak belum dibaca di laci. Tanda terima ini tidak membuktikan bahwa penerima melihat identitas pengirim. Tanda terima ini juga tidak membuktikan bahwa mereka membaca seluruh isi pesan.
Jaringan mengirim tanda terima secara terpisah dari respons terhadap permintaan pengiriman. Jaringan juga dapat menahan sebagian laporan. Referensi tanda terima SMPP mendokumentasikan kontrol ini untuk koneksi operator.
Tanda terima operator mana yang ditampilkan Bird?
Anda menerima event publik untuk hasil pengiriman yang dikenali. Tanda terima yang di-buffer tetap bersifat internal.
Tanda terima yang di-buffer menunjukkan bahwa operator sedang menahan pesan. Bird mencatatnya di log event internal tanpa mengubah status pesan publik. Anda tidak melihat pembaruan di timeline publik maupun webhook Anda.
| Status tanda terima operator | Event Bird |
|---|---|
delivered | sms.delivered |
expired | sms.expired |
rejected | sms.rejected |
delivery_failed dengan alasan yang dapat dipulihkan | sms.undelivered |
delivery_failed dengan alasan permanen atau tidak terpetakan | sms.failed |
buffered | Tidak ada event publik |
Status operator yang tidak dikenali tidak menghasilkan event. Oleh karena itu, tidak adanya pembaruan publik tidak membuktikan bahwa operator tidak mengirim tanda terima.
Mengapa satu status kegagalan menghasilkan event yang berbeda?
Bird menggunakan alasan kegagalan dari operator untuk menentukan apakah masalah yang mendasarinya dapat teratasi.
| Alasan operator | Kode error Bird | Klasifikasi |
|---|---|---|
unavailable_subscriber | unreachable | Dapat dipulihkan |
received_network_error | provider_unavailable | Dapat dipulihkan |
capacity_limit_reached | provider_unavailable | Dapat dipulihkan |
unknown_subscriber | invalid_destination | Permanen |
opted_out | recipient_opted_out | Permanen |
carrier_rejected | sender_unregistered, content_rejected, atau blocked_by_carrier | Permanen |
Kegagalan yang dapat dipulihkan menghasilkan sms.undelivered. Pesan tetap bersifat final: Bird tidak melakukan percobaan ulang secara otomatis. Untuk menjangkau penerima, Anda perlu mengirim ulang setelah masalah yang mendasarinya teratasi.
Kegagalan permanen menghasilkan sms.failed.
SMS pumping adalah penipuan yang membuat produk Anda mengirim pesan berbayar ke nomor yang dikuasai penyerang. Bird melaporkan blocked_by_fraud_protection saat perlindungan penipuan memblokir dugaan pumping.
Alasan yang tidak terpetakan menghasilkan sms.failed dengan kode kesalahan unknown. Hasil ini berarti Bird tidak dapat mengklasifikasikan alasan dari operator. Ini tidak membuktikan secara independen bahwa tujuan tidak dapat dijangkau secara permanen.
Bisakah saya mengatur kapan operator berhenti mencoba?
Anda dapat mengatur batas waktu pengiriman dengan validity_period, dari 60 hingga 172.800 detik (dua hari), yang dihitung sejak Bird menerima pesan.
Bird tidak meneruskan pesan ke operator setelah batas waktu tersebut. Jika rute mendukungnya, Bird meneruskan sisa waktu ke operator sebagai periode validitas pesan. Kode verifikasi yang berlaku sepuluh menit dapat mengaturnya ke 600, sehingga pesan yang belum sampai ke operator dalam sepuluh menit tidak dikirim.
Pesan yang melewati batas waktu sebelum sampai ke operator berakhir dengan rejected atau failed. Bird menghasilkan sms.expired hanya saat operator melaporkan kedaluwarsa.
Hilangkan field ini untuk menggunakan periode validitas profil pesan di messaging_profile_id, atau aturan operator sendiri jika keduanya tidak mengaturnya. Respons pesan melaporkan validity_period yang berlaku.
Bagaimana cara menangani tanda terima di aplikasi saya?
Anda harus melacak hasil pengiriman secara terpisah dari penerimaan permintaan dan dari tindakan apa pun yang dilakukan penerima.
Perlakukan pesan tanpa hasil pengiriman final sebagai tertunda. Baca kode error bersama event kegagalan agar Anda dapat menyelidiki penyebabnya. Simpan kode yang tidak dikenal di log Anda karena set kode error dapat diperluas.
Gunakan event delivered untuk metrik pengiriman. Untuk alur kode verifikasi atau konfirmasi, catat keberhasilan saat penerima menyelesaikan tindakan. Delivery receipt saja tidak dapat memberikan pengukuran tersebut.
Event SMS mendokumentasikan payload event publik dan timeline pesan.
Singkatnya
Pengiriman tidak membuktikan pembacaan.
Tanda terima melaporkan hasil pengiriman di jaringan tanpa mengonfirmasi bahwa seseorang melihat pesan tersebut.
Beberapa tanda terima tidak memiliki event publik.
Bird mencatat tanda terima yang di-buffer secara internal tanpa mengubah status publik, timeline, atau aliran webhook.
Alasan kegagalan menentukan event yang dihasilkan.
Alasan operator yang dapat dipulihkan menghasilkan sms.undelivered; alasan permanen atau yang tidak terpetakan menghasilkan sms.failed.
Alasan yang dapat dipulihkan tidak memicu pengiriman ulang.
Pesan yang tidak terkirim bersifat final, sehingga percobaan berikutnya memerlukan pengiriman terpisah.