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.
Contoh kode
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 support-tickets 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 |
| Coba 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.
- callbackData lebih besar dari metadata. Infobip menerima hingga 4.000 karakter dan mengembalikannya pada laporan pengiriman. metadata milik 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.
- campaignReferenceId adalah konteks pelaporan, bukan migrasi kampanye. tags milik Bird adalah pasangan {name, value} yang menjadi dimensi kueri, sehingga Anda dapat memotong 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.
- campaignReferenceId bukan 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; header Idempotency-Key adalah 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 itu transactional, marketing, authentication, atau service.
- Dua field opsi tidak punya tempat. validityPeriod dicadangkan dan menjawab 422 SMSUnsupportedFeature; deliveryTimeWindow tidak 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.
Ini menjadikan ekspor paling mudah dari semua penyedia di set ini, dan ekspansinya paling besar. Satu entri Blocklist adalah satu pelanggan untuk seluruh akun; satu suppression Bird adalah satu pasangan pengirim-dan-pelanggan. Jadi setiap entri menjadi sebanyak suppression sesuai jumlah pengirim Anda: Blocklist seribu entri dan enam pengirim menghasilkan enam ribu rekaman. Hitung pengalinya sebelum Anda mulai, karena ini adalah perbedaan antara impor yang memakan waktu satu menit dan impor yang membutuhkan batching serta log progres.
Pertahankan cakupan asli Blocklist. Jangan mempersempit pencabutan selama migrasi hanya karena model teknis baru dapat mengekspresikan pasangan yang lebih sempit. Preferensi seluruh workspace dapat mewakili permintaan yang lebih luas; pemiliknya terpisah dari suppression pengirim. Periksa ulang keduanya saat menentukan kelayakan.
Impor melalui suppression loop. Membaca dan mengelola suppression berisi perintahnya, dan alasan mengapa suppression manual memblokir setiap kategori termasuk transaksional.
Setelah Anda di sini, Bird menjawab kata kunci stop sendiri dari katalognya per negara, sehingga trigger kata kunci yang Anda konfigurasikan tidak memiliki padanan untuk dibangun ulang, dan yang 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. Bukti pengiriman yang hilang tetap unknown. Simpan status dan kode mentah penyedia di samping hasil yang telah Anda normalkan.
Infobip melaporkan status group dan status name pada setiap laporan pengiriman, dan Bird mengeluarkan event type:
| Hasil | Infobip status group | 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 mencakup dua hal berbeda di sisi mereka dan hanya satu yang ada di sini. Infobip mengekspirasi pesan baik 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 datang dari tanda terima pengiriman operator. Bagian yang dilaporkan operator terpetakan; bagian timer platform tidak memiliki padanan, dan pesan yang seharusnya kedaluwarsa di jam mereka tetap dalam penerbangan di sini sampai operator memutuskan.
REJECTED muncul dua kali dengan sengaja. Infobip menggunakannya baik untuk pesan yang ditolak sendiri maupun untuk pesan yang dikembalikan operator sebagai rejected, yang merupakan event Bird yang dipilih dari hasil pemrosesan atau operator beserta alasannya; penolakan operator dapat menghasilkan sms.rejected. Status name di dalam group-lah yang membedakannya, sehingga handler yang bercabang hanya berdasarkan group memerlukan name begitu berada di sini. PENDING juga mencakup dua baris, karena ini adalah group tempat pesan berada sejak penerimaan 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 callbackData menjadi metadata, yang disertakan pada setiap event untuk pesan tersebut, bukan hanya pada laporan.
- Pull menjadi push. Infobip memungkinkan Anda mengambil laporan dari endpoint reports maupun menerimanya. Bird tidak memiliki padanan poll untuk event; berlangganan, dan baca status pesan melalui API saat Anda membutuhkannya secara on-demand.
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 manajemen suppression
-
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. Sumber daya tersedia dalam bahasa Inggris.