Migrasi SMS dari Plivo
Halaman ini memetakan Message API, Powerpack, dan callback pengiriman Plivo ke Bird. Ikuti panduan migrasi utama secara berurutan dan gunakan pemetaan ini untuk langkah 3, 4, dan 5.
Pengiriman adalah bagian yang mudah. Keduanya menerima JSON dengan nama field huruf kecil, dan keduanya menyimpan registrasi 10DLC di samping pengiriman, bukan di host terpisah. Dua hal berubah. POST https://api.plivo.com/v1/Account/{auth_id}/Message/ Plivo mengautentikasi dengan Auth ID dan Auth Token melalui HTTP Basic; POST /v1/sms/messages menerima kunci bearer API terhadap host regional Anda, tanpa segmen akun di path. Dan Powerpack Plivo menggabungkan number pool, perilaku sticky sender, dan status opt-out ke dalam satu objek; Bird memisahkannya menjadi sender, supresi, dan aturan keyword, sehingga tidak ada yang perlu dibuat ulang sebagai Powerpack.
Serahkan ini ke agent Anda
Gunakan ringkasan ini di coding agent Anda. Proses 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 Plivo 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/plivo.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 Plivo 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 pengiriman
| Fungsi | Plivo | Bird |
|---|---|---|
| Penerima | dst | to (satu per permintaan) |
| Pengirim | src atau powerpack_uuid | from |
| Isi pesan | text | text |
| Pemilih channel | type: sms, mms, whatsapp | endpoint itu sendiri; /v1/sms/messages adalah SMS |
| Intent | (tidak ada) | category, wajib pada teks bebas |
| Laporan pengiriman | url + method, per pesan | webhook workspace; hanya JSON POST, lihat di bawah |
| Konteks bolak-balik | penyimpanan Anda sendiri, dikunci berdasarkan UUID | metadata: JSON arbitrer, dikembalikan di setiap event |
| Label yang dapat difilter | (tidak ada) | tags: pasangan {name, value} |
| Coba lagi yang aman | (tidak didokumentasikan) | header Idempotency-Key |
| Media | media_urls | tidak ada padanan: media_urls ditolak |
Catatan porting:
- UUID Powerpack menjadi nilai sender biasa. Plivo menyelesaikan number pool, sticky sender, dan kehadiran lokal di balik UUID. Bird menerima sender itu sendiri di from, jadi pilih per pengiriman, atau gunakan template send, yang memilih sender yang valid untuk tujuan dan menolak from.
- type tidak memiliki padanan karena endpoint sudah membawanya. Plivo memilih channel per permintaan; SMS, WhatsApp Bird, dan channel lainnya adalah endpoint terpisah. Codebase yang mengganti type saat runtime dipecah menjadi panggilan ke endpoint yang berbeda.
- Tidak ada yang di Message API bersesuaian dengan category. Tentukan per jenis pesan apakah itu transactional, marketing, authentication, atau service. Lalu lintas autentikasi khususnya harus dilabeli demikian, bukan dibiarkan di default marketing.
- Tinjau semantik coba lagi secara terpisah. Referensi pengiriman Plivo tidak mendokumentasikan kunci idempotensi atau mekanisme deduplikasi, sehingga timeout di sana membuat Anda menebak. Kirim header Idempotency-Key sejak port pertama untuk mengurangi risiko permintaan duplikat dalam jendela replay tiga jam; ini bukan jaminan pengiriman exactly-once.
Pindahkan opt-out
Layanan DND Plivo memblokir pesan keluar dari satu nomor Plivo ke satu tujuan begitu tujuan tersebut membalas dengan keyword opt-out. Pengiriman yang diblokir dikembalikan dengan tanda Plivo kode error 200, yang merupakan salah satu kode error pesan mereka dan bukan status HTTP, meskipun tampilannya mirip. Pasangan itu juga cara kerja supresi Bird: satu pengirim dan satu subscriber, sehingga cakupan impor harus mencakup setiap pengirim dan program yang termasuk dalam permintaan orang tersebut.
Satu hal yang meluas, dan inilah alasan untuk menghitung sebelum Anda mengimpor. Di dalam kampanye US 10DLC, Plivo memperlakukan opt-out dari satu nomor mana pun sebagai opt-out dari setiap nomor yang terhubung ke kampanye tersebut. Bird menyimpan pasangan, sehingga subscriber yang opt-out dari kampanye empat nomor menjadi empat supresi, bukan satu. Hitung berapa pasangan yang dihasilkan dari daftar Anda sebelum memulai, karena itu menentukan apakah impor berupa loop puluhan atau ribuan.
Mengambil daftar keluar adalah ekspor konsol, bukan panggilan API: filter nomor di konsol Plivo, pilih, dan gunakan Export CSV dari menu Choose Action. Impor hasilnya melalui loop supresi. Membaca dan mengelola supresi berisi perintahnya, dan alasan supresi manual memblokir setiap kategori termasuk transaksional.
Bird menangani keyword stop yang didukung melalui katalog per negaranya. Pengiriman ke pasangan yang disupresi ditolak saat admisi dengan E12077 SMSRecipientSuppressed. Opt-out yang dilaporkan operator adalah hasil pengiriman recipient_opted_out yang terpisah. Ganti penanganan kode error Plivo 200 dengan jalur admisi dan pengiriman yang sesuai, dan buat ulang respons kustom sebagai aturan keyword.
Ini penting lagi nanti, setelah lalu lintas mengalir. Alasan bertumpuk, bukan bergabung: pasangan yang Anda impor sebagai manual yang kemudian mengirim SMS STOP mendapat catatan kedua dengan alasan keyword_stop, dan pesan tetap dihentikan sampai setiap catatan untuk pasangan itu berakhir. Jadi memulihkan subscriber yang pernah Anda impor berarti menghapus keduanya, dan pemulihan yang hanya menghapus catatan keyword terlihat berhasil tetapi tidak mengubah apa pun.
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 tidak diketahui. Pertahankan status dan kode mentah dari provider di samping hasil yang dinormalisasi.
| Hasil | Plivo message_state | Bird |
|---|---|---|
| API menerima pesan | queued | sms.accepted |
| Diserahkan ke operator | sent | sms.sent |
| Operator mengonfirmasi pengiriman | delivered | sms.delivered |
| Operator melaporkan non-pengiriman | undelivered | sms.undelivered |
| Kegagalan permanen | failed | sms.failed |
| Ditolak sebelum pengiriman | rejected | sms.rejected |
| Jendela validitas habis | (tidak ada) | sms.expired |
Dua mekanika berubah bersama namanya:
- Endpoint menggantikan URL callback per pesan. Plivo menerima url di setiap pengiriman, sehingga tujuan ditentukan oleh siapa pun yang menulis panggilan tersebut. Bird mengirim ke endpoint yang didaftarkan workspace Anda, masing-masing berlangganan tipe event yang diinginkan, sehingga konsumen baru adalah langganan baru, bukan perubahan di setiap titik panggilan.
- Post JSON bertanda tangan menggantikan callback GET, jika itu yang Anda pilih. method Plivo memilih GET atau POST untuk laporan pengiriman; Bird mengirim POST event JSON dan tidak menawarkan GET. Jika Anda menyetel method=GET, handler Anda membaca hasilnya dari parameter query string, dan handler itu perlu ditulis ulang, bukan hanya didaftarkan ulang. Hal yang sama berlaku satu panduan berikutnya, di jalur Connectivity Platform.
- Satu skema tanda tangan menggantikan tiga header. Plivo menandatangani callback dengan X-Plivo-Signature-V2, X-Plivo-Signature-Ma-V2, dan X-Plivo-Signature-V2-Nonce. Bird mengirim JSON yang ditandatangani sesuai Standard Webhooks, sehingga verifier diganti, bukan disesuaikan: tukar dengan resep di Webhooks & events.
Daftarkan endpoint sekali, sebutkan tipe event yang diinginkan handler Anda: event sms.* di atas adalah daftar yang perlu dilanggani, dan tidak ada wildcard yang menggantikannya. Buat endpoint berisi perintahnya dan satu hal yang harus benar pada panggilan pertama, yaitu menyimpan signing secret yang ditampilkan respons tepat satu kali.
Nilai numerik error_code Plivo tidak memiliki peta satu-ke-satu. 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-kode tersebut.
Cutover
Tujuan, pengirim, dan ramp lalu lintas bersifat independen dari provider dan dibahas di panduan utama. Dua item khusus Plivo harus masuk dalam rencana cutover.
Brand dan kampanye 10DLC Anda terdaftar di The Campaign Registry melalui Plivo dan tidak otomatis menjadi registrasi Bird. Konfirmasi prosedur migrasi atau registrasi yang berlaku sebelum mengirimkan pekerjaan berbayar. Rantainya lebih pendek di sini. Plivo mendaftarkan profil terlebih dahulu lalu brand terhadapnya, di bawah /v1/Account/{auth_id}/10dlc/; Bird tidak memiliki objek profil, sehingga detail bisnis yang disimpan Plivo di profil diisi langsung pada brand itu sendiri. Mulai dari Daftar untuk 10DLC: halaman itu menjelaskan arti setiap field, tipe entitas yang dikenali registry, dan panggilan requirements yang memberi tahu apa yang harus Anda sediakan sebelum membuat brand, yang merupakan langkah berbayar.
Nomor yang Anda miliki di Plivo membutuhkan port yang diatur oleh dukungan, sesuai jadwal mereka, bukan Anda. Mulai lebih awal agar prosesnya berjalan bersamaan dengan perubahan kode.
Langkah selanjutnya
-
Bandingkan Bird dan Plivo untuk SMS: evaluasi produk dan pertimbangan migrasi
-
Mengirim SMS: payload tujuan porting Anda, secara lengkap
-
Opt-out dan keyword: cakupan keyword per negara dan manajemen supresi
-
Event SMS: kosakata event yang menjadi tujuan perpindahan callback handler Anda
-
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.