# Migrasi SMS dari Bird Connectivity Platform

Halaman ini memetakan API Connectivity Platform Bird di `rest.messagebird.com`, yang mungkin masih Anda kenal sebagai MessageBird API, ke Bird. Ikuti [panduan migrasi utama](/docs/guides/sms/migrate) secara berurutan dan gunakan pemetaan ini untuk langkah 3, 4, dan 5.

Kedua platform milik Bird, dan API adalah bagian yang berubah. Tiga perbedaan memengaruhi setiap panggilan. Permintaan dikirim ke host regional Anda, `https://us1.platform.bird.com` atau `https://eu1.platform.bird.com`, bukan ke satu host global. Autentikasi menggunakan kunci bearer API (`Authorization: Bearer bk_us1_…`), bukan `Authorization: AccessKey`. Dan pengiriman bersifat asinkron: [`POST /v1/sms/messages`](/docs/api/reference/create-sms-message) mengembalikan `202 Accepted` dengan pesan dalam antrean, sedangkan Connectivity Platform mengembalikan objek pesan dengan status per penerima yang sudah terlampir.

## Serahkan ini ke agen 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.

```text
Help me migrate my SMS integration from Bird Connectivity Platform 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/connectivity-platform.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 Connectivity Platform 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

| Fungsi          | Connectivity Platform      | Bird                                                                   |
| --------------- | -------------------------- | ---------------------------------------------------------------------- |
| Penerima        | `recipients` (maksimal 50) | `to`, satu per permintaan                                              |
| Pengirim        | `originator`               | `from`                                                                 |
| Isi             | `body`                     | `text`                                                                 |
| Intent          | (tidak ada)                | `category`, wajib untuk teks bebas                                     |
| Encoding        | `datacoding`               | dideteksi otomatis                                                     |
| Transliterasi   | (tidak ada)                | `options.smart_encoding` (default `false`)                             |
| Referensi klien | `reference`                | `metadata`, atau `tags` saat Anda memfilter berdasarkan nilai tersebut |
| Laporan status  | `reportUrl`                | webhook workspace yang berlangganan event pengiriman di bawah          |
| Coba ulang aman | (tidak ada)                | header `Idempotency-Key`                                               |
| Penjadwalan     | `scheduledDatetime`        | tidak ada padanan: `scheduled_at` ditolak                              |
| Validitas       | `validity`                 | tidak ada padanan: `validity_period` ditolak                           |
| Pemilihan rute  | `gateway`                  | Bird memilih rute                                                      |
| Kelas pesan     | `mclass`                   | tidak ada padanan                                                      |
| Biner dan flash | `type`, `typeDetails`      | hanya teks                                                             |

Kedua field yang ditolak berstatus [reserved](/docs/guides/sms/sending-sms#reserved-fields) dan menjawab `422 SMSUnsupportedFeature`.

Catatan porting:

- **Array penerima menjadi satu panggilan per penerima.** Panggilan Connectivity Platform dengan 50 penerima menjadi 50 pengiriman, atau satu [batch](/docs/guides/sms/sending-sms#batch-sending) pesan independen. Batch ini bukan fan-out dari satu isi pesan: setiap entri membawa penerima, pengirim, dan teksnya sendiri.
- **`datacoding` tidak memiliki padanan, dan itu disengaja.** Bird mendeteksi encoding dari isi pesan dan melaporkan jumlah segmen pada pesan. Jika Anda menyetel `datacoding: auto` agar pesan tetap dalam GSM-7, perilaku terdekat adalah `options.smart_encoding`, yang menerapkan tabel penggantian terdokumentasi Bird. Ini bukan transliterator umum; karakter yang tidak didukung masih bisa memerlukan encoding Unicode.
- **`reference` dipecah menjadi dua field.** Masukkan identifier internal di `metadata`, yang dikirim kembali pada setiap event webhook, dan gunakan `tags` untuk label kardinalitas rendah yang ingin Anda gunakan untuk memfilter dan memotong analitik.
- **Pesan flash, payload biner, dan konkatenasi UDH tidak dapat diporting.** Jika Anda bergantung pada `mclass` atau `typeDetails` saat ini, sampaikan ke dukungan sebelum Anda merencanakan cutover, bukan sesudahnya.
- **Juga menggunakan Verify API Connectivity Platform?** Porting ini adalah pekerjaan terpisah dengan panduannya sendiri: lihat [Migrasi Verify dari penyedia lain](/docs/guides/verify/migrate).

## Pindahkan opt-out

Connectivity Platform menyerahkan penanganan kata kunci stop kepada Anda, baik Anda membuatnya di Flows maupun di aplikasi Anda sendiri terhadap pesan masuk. Bird menangani tugas itu sendiri: ia mengenali kata kunci stop, start, dan help pada nomor Anda di negara yang didukung, mencatat supresi, dan menerapkannya pada setiap pengiriman. Nonaktifkan handler lama hanya setelah memastikan katalog Bird mencakup perilakunya dan proses preferensi Anda yang lebih luas masih berjalan.

Yang tidak dinonaktifkan adalah daftarnya. Ekspor apa pun yang Anda simpan saat ini, sebagai pasangan nomor pelanggan dan originator yang mereka hentikan, lalu impor melalui [suppression loop](/docs/guides/sms/migrate#4-carry-over-your-opt-out-list) sebelum pengiriman produksi pertama Anda. Jika Anda hanya menyimpan daftar global pelanggan yang opt-out, impor setiap pelanggan sekali per originator yang masih Anda gunakan untuk mengirim.

## Terjemahkan laporan status

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 tidak ada tetap berstatus unknown. Simpan status dan kode mentah penyedia bersama hasil normalisasi Anda.

| Hasil                             | Connectivity Platform | Bird                                   |
| --------------------------------- | --------------------- | -------------------------------------- |
| Diterima oleh API                 | (sinkron)             | `sms.accepted`                         |
| Diserahkan ke operator            | `sent`, `buffered`    | `sms.sent`                             |
| Operator mengonfirmasi pengiriman | `delivered`           | `sms.delivered`                        |
| Pengiriman gagal                  | `delivery_failed`     | `sms.failed`                           |
| Jendela validitas habis           | `expired`             | `sms.expired`                          |
| Permintaan ditolak saat admisi    | error permintaan      | error HTTP; tidak ada pesan atau event |
| Menunggu untuk dikirim            | `scheduled`           | belum ada padanan                      |

Mekanisme pengiriman berubah lebih dari sekadar kosakata:

- **Post JSON bertanda tangan menggantikan callback GET `reportUrl`.** Laporan status datang sebagai permintaan `GET` dengan hasilnya di query string (`status`, `statusReason`, `statusErrorCode`, `mccmnc`, `price[amount]`). Bird mengirimkan event JSON ke endpoint yang didaftarkan workspace Anda melalui `POST`, ditandatangani sesuai [Standard Webhooks](https://www.standardwebhooks.com). Handler-nya perlu ditulis ulang, bukan sekadar mengganti URL.
- **Korelasi tidak lagi bergantung pada `reference`.** Laporan status hanya berguna jika Anda menyetel referensi; event Bird selalu membawa `sms_id`, kedua nomor, serta `metadata` dan `tags` yang Anda kirimkan.
- **Semantik coba ulang berbeda.** Connectivity Platform mencoba ulang laporan gagal hingga 10 kali. Pengiriman Bird bersifat at-least-once dan tidak berurutan, jadi lakukan deduplikasi berdasarkan header `webhook-id` dan urutkan berdasarkan `timestamp` di payload.
- **Rekonsiliasi biaya melalui pemilik pesan dan billing.** Laporan Connectivity Platform membawa `price[amount]` dan `price[currency]`. Baca biaya tercatat pesan dengan [`GET /v1/sms/messages/{id}`](/docs/api/reference/get-sms-message) dan rekonsiliasi tagihan dengan billing. [Stats API](/docs/guides/sms/stats-api) untuk metrik pengiriman, bukan total billing yang otoritatif.

Pesan masuk bekerja dengan cara yang sama: berlangganan `sms.received` sekali untuk workspace, bukan mengarahkan setiap nomor ke URL.

## Cutover

[Tujuan](/docs/guides/sms/migrate#1-enable-your-destination-countries), [pengirim](/docs/guides/sms/migrate#2-set-up-a-sender), dan [ramp trafik](/docs/guides/sms/migrate#6-test-against-simulated-destinations) bersifat independen terhadap penyedia dan dibahas di panduan utama. Hal yang perlu diangkat lebih awal adalah originator Anda: sender ID alfanumerik dibuat ulang dan, jika negara mengharuskannya, didaftarkan ulang di sini, sedangkan nomor yang Anda miliki di Connectivity Platform dipindahkan melalui porting yang diatur oleh dukungan, bukan pengaturan yang tinggal Anda alihkan.

## Langkah selanjutnya

- [Jelajahi Bird SMS](/products/sms): alur kerja produk dan jalur implementasi

- [Mengirim SMS](/docs/guides/sms/sending-sms): payload tujuan porting Anda, secara lengkap
- [Opt-out dan kata kunci](/docs/guides/sms/opt-outs-and-keywords): apa yang dijawab Bird untuk Anda, dan cara mengelola supresi
- [Event SMS](/docs/guides/sms/events): kosakata event yang menjadi tujuan status handler Anda
- [Webhooks & events](/docs/guides/webhooks): pengaturan endpoint dan verifikasi Standard Webhooks

## Related resources

- [Choose a sender for your markets](/explained/sms/which-sms-sender-type-should-i-use) (answer)
- [Check your message segments](/tools/sms-segment-calculator) (tool)
- [Compare SMS providers](/products/sms/compare) (product)
