Migrasi SMS dari Infobip
Halaman ini memetakan API SMS Infobip, Blocklist, dan laporan pengiriman ke Bird. Ikuti panduan migrasi utama secara berurutan dan gunakan pemetaan ini untuk langkah 3, 4, dan 5.
Dua perbedaan menyelesaikan sebagian besar pekerjaan. Payload Infobip dirancang untuk kasus massal, sehingga satu pesan ke satu orang berupa array pesan yang masing-masing berisi array tujuan, dengan isi teks dua level ke bawah di content.text; POST /v1/sms/messages menerima from, to, dan text di level teratas. Base URL Infobip Anda bersifat personal per akun, dalam format xxxxx.api.infobip.com, diautentikasi dengan Authorization: App <key>. Bird mengirim dari host regional dengan bearer key, jadi host yang disimpan kode Anda berubah bersamaan dengan bentuk payload.
Serahkan ini ke agen Anda
Gunakan brief ini di coding agent Anda. Brief ini dimulai dengan penemuan dan menghasilkan rencana migrasi yang dapat ditinjau sebelum perubahan apa pun di produksi.
Help me migrate my SMS integration from Infobip to Bird.
1. Inspect this repository's sends, senders, callbacks, schedules, templates, opt-outs and tests. List the traffic and behavior that must survive the migration.
2. Read the Markdown guides at https://bird.com/docs/guides/sms/migrate/infobip.md and https://bird.com/docs/guides/sms/migrate.md. Use an existing authenticated Bird MCP or CLI connection. If neither is available, follow https://bird.com/docs/ai/set-up-your-agent.md. Discover the actual operations; do not invent commands or ask me to paste credentials into chat.
3. Prepare the code changes, sender/destination requirements, consent migration, webhook verification and rollout/rollback plan. Preserve the scope of each customer's preferences, including requests outside SMS replies. Separate API batches from audience broadcasts and preserve any behavior that has no direct endpoint equivalent.
4. Show me the exact affected resources, destinations, test volume and known costs before an action that sends messages, spends money, registers or changes a sender, or moves production traffic. Require explicit human authorization for each paid submission or production change. Name one-off 10DLC registration and resubmission fees before requesting approval. An existing explicit approval for that exact action is sufficient; broad migration approval is not. Simulated SMS destinations are billable and still require authorization.
5. If I am keeping Infobip numbers, prepare the human support port request and obtain authorization to send it. Read bird platform support create --help, then use the available CLI or MCP support operation with the reviewed number list and requirements. Return the ticket ID and follow the reply; support arranges the port on its own schedule, separately from the code cutover.
6. Run local and intercepted tests first. When authorized, perform the agreed bounded integration tests, inspect accepted and final outcomes separately, and report failures or uncertainty. Do not claim a delivery receipt proves reading or that request idempotency guarantees exactly-once delivery.
7. Keep production cutover and retiring the old provider as explicit steps in the approved rollout. Finish with the diff, evidence, unresolved requirements and the next action.Petakan panggilan kirim
Tabel pemetaan ini pendek karena perubahan bentuk-lah yang menjadi pekerjaan utama:
| Fungsi | Infobip | Bird |
|---|---|---|
| Penerima | messages[].destinations[].to | to (satu per permintaan) |
| Pengirim | messages[].sender | from |
| Isi | messages[].content.text | text |
| Intent | (tidak ada) | category, wajib pada teks bebas |
| Laporan pengiriman | webhooks.delivery, per pesan | webhook workspace yang berlangganan event pengiriman di bawah |
| Konteks bolak-balik | webhooks.callbackData | metadata, tetapi lihat catatan ukuran di bawah |
| Pengelompokan kampanye | options.campaignReferenceId | tags, hanya untuk pemfilteran; lihat di bawah |
| Flash | options.flash | tidak ada padanan |
| Validitas | options.validityPeriod | tidak ada padanan: validity_period ditolak |
| Jendela pengiriman | options.deliveryTimeWindow | tidak ada padanan |
| Percobaan ulang yang aman | (tidak ada di generated client mereka) | header Idempotency-Key |
Catatan porting:
- Tiga level menjadi nol. Nesting ini ada untuk membawa banyak pesan dan banyak tujuan dalam satu permintaan. Untuk mengirim satu pesan ke satu orang, Bird menerima tiga field di level teratas, sehingga builder yang menyusun array dihapus, bukan diterjemahkan.
callbackDatalebih besar darimetadata. Infobip menerima hingga 4.000 karakter dan mengembalikannya pada laporan pengiriman.metadatamilik Bird dibatasi 2 KB dalam bentuk serial dan disertakan pada setiap event untuk pesan tersebut, bukan hanya pada event terminal. Echo-nya lebih menguntungkan; batasnya tidak, jadi apa pun yang mendekati batas harus dipangkas menjadi kunci yang dapat Anda cari, bukan dibawa utuh.campaignReferenceIdadalah konteks pelaporan, bukan migrasi kampanye.tagsmilik Bird adalah pasangan{name, value}yang menjadi dimensi kueri, sehingga Anda dapat memilah analitik berdasarkan kampanye seperti sebelumnya. Yang tidak ikut adalah objek kampanye: tag tidak membuat atau mengonfigurasi broadcast. Evaluasi alur kerja kampanye secara terpisah saat memindahkan kampanye audiens.campaignReferenceIdbukan kunci idempotensi. Infobip mendefinisikannya sebagai ID untuk melacak performa kampanye, jadi ia mengelompokkan tetapi tidak mendeduplikasi. Jika Anda mengandalkannya untuk membuat percobaan ulang aman, Anda tidak terlindungi; headerIdempotency-Keyadalah yang melakukannya di sini.- Tidak ada yang berpadanan dengan
category. Opsi pesan Infobip mencakup validitas, jendela pengiriman, flash, dan pengaturan regional, dan tidak satu pun menyatakan mengapa pesan dikirim. Tentukan per tipe pesan apakah itutransactional,marketing,authentication, atauservice. - Dua field opsi tidak punya tempat.
validityPerioddicadangkan dan menjawab422 SMSUnsupportedFeature;deliveryTimeWindowtidak memiliki padanan, sehingga jendela penjadwalan berpindah ke dispatcher Anda sendiri.
Pindahkan opt-out
Infobip menyimpan Blocklist: daftar penerima yang telah memilih keluar dari komunikasi Anda, dikelola melalui API Blocklist atau melalui People di antarmuka web, dengan pengiriman ke siapa pun di dalamnya ditolak. Trigger kata kunci menambahkan secara otomatis, sehingga pelanggan yang mengirim SMS STOP masuk ke sana tanpa aplikasi Anda melakukan apa pun.
Karena itu, ekspor dari Infobip paling mudah di antara semua penyedia dalam rangkaian ini, tetapi jumlah rekamannya bertambah paling banyak. Satu entri Blocklist berarti satu pelanggan untuk seluruh akun; satu supresi Bird berarti satu pasangan pengirim dan pelanggan. Jadi setiap entri menjadi supresi sebanyak jumlah pengirim Anda: Blocklist berisi seribu entri dengan enam pengirim menghasilkan enam ribu rekaman. Hitung pengalinya sebelum mulai, karena angka ini menentukan apakah impor selesai dalam satu menit atau memerlukan batching dan log progres.
Pertahankan cakupan asli Blocklist. Jangan mempersempit pencabutan persetujuan selama migrasi hanya karena model teknis baru dapat menyatakan pasangan yang lebih sempit. Preferensi tingkat workspace dapat mewakili permintaan yang lebih luas; preferensi itu dikelola terpisah dari supresi pengirim. Periksa keduanya saat menentukan kelayakan pengiriman.
Impor melalui alur supresi. Membaca dan mengelola supresi berisi perintahnya, serta alasan supresi manual memblokir setiap kategori, termasuk transaksional.
Setelah migrasi, Bird menjawab sendiri kata kunci stop dari katalognya per negara, sehingga trigger kata kunci yang Anda konfigurasikan tidak perlu dibangun ulang, dan trigger kustom menjadi aturan kata kunci. Alasan bertumpuk, bukan bergabung, sehingga pasangan yang Anda impor sebagai manual yang kemudian mengirim SMS STOP menyimpan dua rekaman, dan pesan tetap dihentikan sampai keduanya berakhir.
Terjemahkan status pengiriman
Gunakan tabel ini untuk membandingkan konsep siklus hidup, bukan untuk mengganti nama event secara mekanis. Bird memilih event kegagalan dari status dan alasan yang dilaporkan. Permintaan API yang ditolak tidak membuat pesan; penolakan setelah penerimaan dapat menghasilkan sms.rejected, termasuk penolakan operator. Jika bukti pengiriman tidak ada, hasilnya tetap tidak diketahui. Simpan status dan kode mentah penyedia di samping hasil yang telah Anda normalkan.
Infobip melaporkan grup status dan nama status pada setiap laporan pengiriman, dan Bird mengeluarkan jenis event:
| Hasil | Grup status Infobip | Bird |
|---|---|---|
| API menerima pesan | PENDING | sms.accepted |
| Diserahkan ke operator | PENDING | sms.sent |
| Operator mengonfirmasi pengiriman | DELIVERED | sms.delivered |
| Operator melaporkan tidak terkirim | UNDELIVERABLE | sms.undelivered |
| Kegagalan permanen | REJECTED | sms.failed |
| Ditolak sebelum dikirim | REJECTED | sms.rejected |
| Jendela validitas habis | EXPIRED | sms.expired |
EXPIRED adalah baris yang perlu dibaca dengan cermat, karena di sisi mereka baris ini mencakup dua hal berbeda dan hanya satu yang ada di sini. Infobip menganggap pesan kedaluwarsa ketika periode validitas platform mereka habis, yang default-nya 48 jam, atau ketika operator mengembalikan expired sebagai status akhir. Bird tidak menetapkan jendela validitas sendiri dan tidak menjalankan timer yang mengakhiri pesan, sehingga sms.expired hanya berasal dari tanda terima pengiriman operator. Bagian yang dilaporkan operator memiliki padanan; bagian timer platform tidak, dan pesan yang seharusnya kedaluwarsa menurut timer mereka tetap dalam proses pengiriman di sini sampai operator memutuskan.
REJECTED sengaja muncul dua kali. Infobip menggunakannya baik untuk pesan yang ditolaknya sendiri maupun untuk pesan yang dikembalikan operator sebagai rejected, yang di Bird menjadi event yang dipilih dari hasil pemrosesan atau operator beserta alasannya; penolakan operator dapat menghasilkan sms.rejected. Status name di dalam group-lah yang membedakan keduanya, sehingga handler yang hanya bercabang berdasarkan group memerlukan name setelah pindah ke sini. PENDING juga mencakup dua baris, karena itulah group tempat pesan berada sejak diterima hingga laporan terminal tiba.
Tiga mekanisme berubah bersama namanya:
- Subscription menggantikan webhook per pesan. Infobip menamai webhook pada setiap pesan, sehingga tujuan dipilih oleh siapa pun yang menulis panggilan, dan tipe konten dipilih bersamanya. Bird mengirimkan JSON ke endpoint yang didaftarkan workspace Anda, masing-masing berlangganan tipe event yang diinginkan, sehingga konsumen kedua adalah subscription kedua, bukan perubahan di setiap call site.
- Anda kehilangan pilihan per pesan, termasuk XML. Infobip memungkinkan pesan memilih JSON atau XML dan melampirkan hingga 4.000 karakter data callback. Bird mengirimkan JSON saja, dan
callbackDatamenjadimetadata, yang disertakan pada setiap event untuk pesan tersebut, bukan hanya pada laporan. - Pull menjadi push. Infobip memungkinkan Anda mengambil laporan dari endpoint reports selain menerimanya. Bird tidak memiliki padanan polling untuk event; berlanggananlah, dan baca status pesan melalui API saat Anda membutuhkannya sesuai permintaan.
Daftarkan endpoint sekali, dengan menyebutkan tipe event yang diinginkan handler Anda: event sms.* di atas adalah daftar yang harus Anda langgani, dan tidak ada wildcard yang menggantikannya. Bird mengirimkan JSON yang ditandatangani sesuai Standard Webhooks; Buat endpoint berisi perintahnya dan satu hal yang harus benar pada panggilan pertama, yaitu menyimpan signing secret yang ditampilkan respons tepat satu kali.
Bird melaporkan kegagalan dengan kode error standar seperti invalid_destination, content_rejected, provider_unavailable, atau recipient_opted_out; daftar lengkapnya ada di halaman event. Petakan alerting Anda ke kode tersebut, bukan ke pasangan group dan name numerik Infobip.
Cutover
Tujuan, pengirim, dan ramp trafik bersifat independen dari penyedia dan dibahas di panduan utama. Tiga item spesifik Infobip perlu masuk dalam rencana cutover.
Host berpindah, dan ini adalah konfigurasi, bukan kode. Base URL Infobip Anda diterbitkan per akun; Bird mengirim dari host regional yang dipilih saat workspace Anda dibuat. Temukan setiap tempat host tersebut diatur sebelum cutover, termasuk environment variable, secrets manager, dan deploy manifest, karena yang terlewat akan gagal saat runtime, bukan saat build.
Brand dan kampanye 10DLC Anda terdaftar di The Campaign Registry melalui API pendaftaran nomor Infobip dan tidak otomatis menjadi registrasi Bird. Konfirmasi prosedur migrasi atau registrasi yang berlaku sebelum mengirimkan pekerjaan berbayar. Mulai dari Daftar untuk 10DLC: halaman ini menjelaskan arti setiap field, tipe entitas yang dikenali registry, dan panggilan requirements yang memberi tahu apa yang harus Anda siapkan sebelum membuat brand, yang merupakan langkah berbayar.
Nomor yang Anda miliki di Infobip memerlukan port yang diatur oleh dukungan, sesuai jadwal mereka, bukan jadwal Anda.
Langkah selanjutnya
-
Bandingkan Bird dan Infobip untuk SMS: evaluasi produk dan pertimbangan migrasi
-
Mengirim SMS: payload tujuan porting Anda, secara lengkap
-
Opt-out dan kata kunci: cakupan kata kunci per negara dan pengelolaan supresi
-
Event SMS: kosakata event tujuan handler laporan Anda berpindah
-
Webhooks & events: pengaturan endpoint dan verifikasi Standard Webhooks
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini.