Sign inGet Started

Migrasi SMS dari Sinch

Halaman ini memetakan SMS API, grup, dan laporan pengiriman Sinch ke Bird. Ikuti panduan migrasi utama secara berurutan dan gunakan pemetaan ini untuk langkah 3, 4, dan 5.
Dua perbedaan struktural menentukan bentuk migrasi ini, dan keduanya lebih mahal daripada sekadar mengganti nama field. Sinch mendasarkan pengiriman pada service plan di URL path dan mengirim batch, sehingga satu pesan ke satu orang tetap berupa array; POST /v1/sms/messages Bird menerima satu penerima di host regional Anda dengan bearer key dan tanpa segmen plan. Selain itu, registrasi AS yang tidak bisa Anda lewati berada di host berbeda dari pengiriman, dengan keluarga kredensial berbeda, sehingga codebase yang menghubungi Sinch untuk keduanya menjangkau dua tempat.

Serahkan ini ke agent Anda

Gunakan brief ini di coding agent Anda. Brief ini dimulai dengan discovery dan menghasilkan rencana migrasi yang bisa direview sebelum perubahan apa pun di production.
Contoh kode
Help me migrate my SMS integration from Sinch 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/sinch.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 Sinch 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

FungsiSinchBird
Penerimato (array, atau group ID)to (satu per request)
Pengirimfromfrom
Bodybodytext
Routing akunservice plan, di URL pathbearer key; tanpa segmen path
Intent(tidak ada)category, wajib untuk free text
Pelaporan pengirimandelivery_report + callback_url, per batchwebhook workspace; tanpa kontrol per pengiriman
Korelasiclient_referencemetadata, dikembalikan di setiap event
Label yang bisa difilter(tidak ada)pasangan tags: {name, value}
Retry yang aman(tidak terdokumentasi)header Idempotency-Key
Flashflash_messagetidak ada padanan
Catatan migrasi:
  • Pilih single send, batch, atau broadcast secara sengaja. to adalah array di Sinch dan satu nomor di sini, jadi gunakan single send atau endpoint batch untuk hingga 100 pesan independen. Kampanye ke audiens masuk ke alur broadcast. Batch yang merujuk grup perlu keanggotaannya diselesaikan terlebih dahulu; lihat bagian opt-out, karena itu masalah yang sama.
  • body menjadi text. Ini satu-satunya penggantian nama yang menyentuh setiap call site.
  • client_reference bukan idempotency key. Sinch mendefinisikannya sebagai identifier yang ditambahkan ke laporan pengiriman batch, jadi ia mengorelasi tetapi tidak mendeduplikasi. Jika Anda mengandalkannya untuk membuat retry aman, Anda tidak terlindungi; Idempotency-Key yang melakukan itu di sini.
  • Tidak ada padanan untuk category. Tentukan per tipe pesan apakah itu transactional, marketing, authentication, atau service.

Migrasikan opt-out

Sinch mencatat siapa yang ikut, dan Bird perlu tahu siapa yang keluar. Inversi itulah pekerjaannya.
Sinch mengelola penerima sebagai grup, dan grup dapat ter-update otomatis dari keyword trigger, sehingga subscriber yang mengirim STOP dihapus dari grup dan subscriber yang mengirim SUBSCRIBE ditambahkan. Opt-out karena itu dikodekan sebagai ketidakhadiran dari daftar, bukan kehadiran di dalamnya, dan ketidakhadiran tidak bisa diekspor: nomor yang tidak ada di grup mungkin sudah opt-out, mungkin tidak pernah bergabung, atau mungkin dihapus oleh impor enam bulan lalu.
Jadi rekonstruksi, jangan ekspor. Log pesan masuk Anda sendiri adalah sumber yang andal, karena sebagian opt-out dimulai sebagai pesan masuk, sementara yang lain datang melalui support, formulir, atau saluran preferensi lain, dan pesan-pesan tersebut tetap ada apa pun yang dikatakan keanggotaan grup sekarang. Jika Anda menyimpan flag unsubscribe sendiri di samping grup, flag itu adalah bukti yang lebih baik daripada keanggotaan. Masukkan daftar hasil rekonstruksi ke suppression loop, dan tunjukkan daftar tersebut kepada pemilik akun sebelum mengimpornya: entri yang salah di sini diam-diam menghentikan pesan yang ingin Anda kirim.
Suppression Bird adalah satu pasangan pengirim-dan-subscriber, jadi subscriber yang Anda hentikan di tiga pengirim berarti tiga record. Membaca dan mengelola suppression memuat perintahnya, dan alasan mengapa suppression manual memblokir setiap kategori termasuk transaksional.
Setelah Anda sampai di sini, Bird menjawab stop keyword sendiri dari katalognya per negara, sehingga perilaku auto-update grup tidak memiliki padanan yang perlu dibangun ulang: subscriber yang mengirim STOP menghasilkan suppression tanpa aplikasi Anda melakukan apa pun. Alasan ditumpuk, bukan digabung, sehingga pasangan yang Anda impor sebagai manual yang kemudian mengirim STOP menyimpan dua record, dan pesan tetap terhenti sampai keduanya berakhir.

Terjemahkan status pengiriman

Gunakan tabel ini untuk membandingkan konsep lifecycle, bukan untuk mengganti nama event secara mekanis. Bird memilih failure event dari status dan alasan yang dilaporkan. Request API yang ditolak tidak membuat pesan; penolakan setelah penerimaan dapat menghasilkan sms.rejected, termasuk penolakan operator. Bukti pengiriman yang tidak ada tetap berstatus unknown. Simpan status dan kode mentah dari provider di samping outcome yang Anda normalkan.
Referensi delivery-report Sinch mencakup queued, dispatched, delivered, dan beberapa status kegagalan akhir yang berbeda. Simpan kode dan status level penerima saat menerjemahkan pelaporan Anda.
Konsep SinchKeputusan integrasi Bird
Queued / DispatchedLacak penerimaan dan pengiriman ke operator secara terpisah dengan sms.accepted dan sms.sent.
DeliveredCatat outcome jaringan melalui sms.delivered; ini tidak membuktikan pesan dibaca.
Failed / Rejected / DeletedPeriksa alasan yang dilaporkan. Failure event Bird tidak dipilih dengan substitusi nama saja.
Aborted / Expired / CancelledSimpan penyebab dan tahapannya. API individual-send Bird tidak memiliki scheduling atau validity timer untuk membuat ulang kontrol ini.
UnknownBiarkan outcome-nya tidak pasti; jangan menghitung tanda terima yang tidak bisa diinterpretasi sebagai pengiriman berhasil.
sms.expired Bird mengikuti laporan kedaluwarsa dari operator. Tinjau perilaku kedaluwarsa dan pembatalan Anda yang sudah ada secara terpisah dari event tersebut, alih-alih memetakan setiap timeout ke sana.
Perlu diketahui juga bahwa status antara hanya dilaporkan ketika batch meminta pelaporan per_recipient, yang merupakan bagian dari apa yang berubah di bawah.
Anda kehilangan kontrol pengiriman per pesan untuk pelaporan pengiriman, dan ini perlu dikatakan secara gamblang. Batch Sinch memilih granularitas laporannya sendiri dan dapat meng-override callback URL service plan untuk pengiriman itu saja. Bird tidak memiliki keduanya: pelaporan adalah subscription workspace, setiap event yang di-subscribe dikirimkan, dan tidak ada override per pesan. Jika Anda menggunakan delivery_report untuk meredam kampanye yang banyak traffic-nya, pemfilteran itu berpindah ke handler Anda. Jika Anda mengarahkan laporan satu kampanye ke endpoint berbeda, itu menjadi satu endpoint ditambah percabangan, atau subscription kedua.
Daftarkan endpoint sekali, sebutkan tipe event yang diinginkan handler Anda: event sms.* di atas adalah daftar yang perlu di-subscribe, dan tidak ada wildcard yang menggantikannya. Bird mengirim JSON yang ditandatangani sesuai Standard Webhooks; Buat endpoint memuat perintahnya dan satu hal yang harus benar di panggilan pertama, yaitu menyimpan signing secret yang ditampilkan response tepat satu kali.
Bird melaporkan kegagalan dengan kode error terstandarisasi seperti invalid_destination, content_rejected, provider_unavailable, atau recipient_opted_out; daftar lengkapnya ada di halaman event.

Cutover

Destinasi, pengirim, dan ramp traffic bersifat independen dari provider dan dibahas di panduan utama. Dua item khusus Sinch perlu masuk ke rencana cutover.
Brand dan campaign 10DLC Anda terdaftar di The Campaign Registry melalui Sinch dan tidak otomatis menjadi registrasi Bird. Konfirmasi prosedur migrasi atau registrasi yang berlaku sebelum mengirimkan pekerjaan berbayar. Di sinilah integrasi menjadi lebih sederhana. Di Sinch, API registrasi berada di host terpisah dari pengiriman dan menggunakan project credentials, bukan token service plan, dan dokumentasi Sinch sendiri menyatakan HTTP Basic di sana ditujukan hanya untuk pengujian dan sangat dibatasi lajunya, sehingga integrasi production membangun alur token OAuth untuk itu. Di Bird, /v1/sms/10dlc/* berada di samping /v1/sms/messages di bawah satu base URL dan satu key, sehingga lifecycle token tersebut dipensiunkan, bukan di-port. Mulai dari Register for 10DLC, yang menjelaskan arti setiap field dan panggilan requirements yang memberi tahu Anda apa yang perlu disiapkan sebelum membuat brand, yang merupakan langkah berbayar.
Nomor yang Anda miliki di Sinch memerlukan port yang diatur oleh support, dengan jadwal mereka, bukan jadwal Anda.

Langkah selanjutnya

Sumber daya terkait

Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.