# Migrasi SMS dari Telnyx

Halaman ini memetakan Messages API, messaging profile, dan webhook pengiriman Telnyx ke Bird. Ikuti [panduan migrasi utama](/docs/guides/sms/migrate) secara berurutan dan gunakan pemetaan ini untuk langkah 3, 4, dan 5.

Panggilan pengiriman ini paling mirip dengan milik Bird dibanding provider lain di sini: JSON, bearer key, dan nama field yang sama. `POST https://api.telnyx.com/v2/messages` menerima `from`, `to` dan `text`, begitu pula [`POST /v1/sms/messages`](/docs/api/reference/create-sms-message). Yang tidak ikut berpindah adalah messaging profile. Telnyx menjadikannya unit untuk hampir semuanya: sender pool, URL webhook, cakupan opt-out, dan konfigurasi keyword. Bird memisahkan semua itu ke sender, webhook subscription, dan suppression. Sebagian besar pekerjaan dalam migrasi ini adalah menguraikan objek tersebut.

## Serahkan ini ke agen Anda

Gunakan ringkasan ini di coding agent Anda. Prosesnya dimulai dengan penemuan dan menghasilkan rencana migrasi yang dapat ditinjau sebelum perubahan apa pun di produksi.

```text
Help me migrate my SMS integration from Telnyx 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/telnyx.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 Telnyx 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                    | Telnyx                              | Bird                                                          |
| ------------------------- | ----------------------------------- | ------------------------------------------------------------- |
| Penerima                  | `to`                                | `to` (satu per permintaan)                                    |
| Pengirim                  | `from` atau `messaging_profile_id`  | `from`                                                        |
| Isi                       | `text`                              | `text`                                                        |
| Intent                    | (tidak ada)                         | `category`, wajib untuk teks bebas                            |
| Laporan pengiriman        | URL webhook profil                  | webhook workspace yang berlangganan event pengiriman di bawah |
| Konteks round-trip        | penyimpanan sendiri, berdasarkan ID | `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:

- **ID messaging profile menjadi nilai sender biasa.** Telnyx menentukan number pool dan aturan pengirimannya di balik profil. Bird menerima sender itu sendiri di `from`, jadi pilih per pengiriman, atau gunakan [pengiriman template](/docs/guides/sms/templates), yang memilih sender valid untuk tujuan dan menolak `from`.
- **Tidak ada pada Messages API yang berpadanan dengan `category`.** Tentukan per jenis pesan apakah itu `transactional`, `marketing`, `authentication`, atau `service`. Trafik autentikasi khususnya harus dilabeli demikian, bukan dibiarkan pada default marketing.
- **Tinjau semantik coba lagi secara terpisah.** Referensi pengiriman Telnyx tidak mendokumentasikan idempotency key, sehingga timeout di sana membuat Anda menebak-nebak. Kirim header `Idempotency-Key` sejak porting pertama.

## Pindahkan opt-out

**Ini adalah langkah yang sering mengejutkan, dan angka yang harus dihitung pertama kali adalah berapa banyak suppression yang dihasilkan dari daftar Anda.**

Telnyx mencakupkan opt-out ke seluruh messaging profile: pelanggan yang mengirim `STOP` ke salah satu nomor di profil akan diblokir dari semua nomor pada profil tersebut, dan pengiriman kepada mereka menghasilkan error `40300`, "Blocked due to STOP message". Memisahkan daftar opt-out untuk program yang berbeda dilakukan dengan memisahkan profil.

Bird mencakupkan suppression ke pasangan sender-dan-pelanggan. Jadi satu opt-out Telnyx terhadap profil yang memiliki dua belas nomor menjadi dua belas suppression Bird, dan profil dengan seratus nomor menjadi seratus. Hitung sebelum Anda mengimpor: pengalinya adalah jumlah sender yang Anda pindahkan dari profil tersebut, dan itu menentukan apakah impornya berupa loop ratusan atau puluhan ribu.

Pertahankan pencabutan seluruh profil di semua sender yang relevan. Penyimpanan di tingkat sender bukan izin untuk melanjutkan program dengan nomor lain. Periksa apakah preferensi seluruh workspace adalah representasi yang tepat untuk permintaan aktual orang tersebut.

Impor melalui [loop suppression](/docs/guides/sms/migrate#4-carry-over-your-opt-out-list). [Membaca dan mengelola suppression](/docs/guides/sms/opt-outs-and-keywords#reading-and-managing-suppressions) berisi perintahnya, dan alasan suppression manual memblokir setiap kategori termasuk transaksional.

Buat ulang keyword kustom dan auto-response yang dikonfigurasi melalui `autoresp_configs` sebagai Bird [aturan keyword](/docs/guides/sms/opt-outs-and-keywords#campaign-keywords). Pengiriman ke pasangan yang di-suppress ditolak saat admisi dengan `E12077 SMSRecipientSuppressed`; opt-out downstream adalah hasil pengiriman `recipient_opted_out` yang terpisah. Tangani kedua jalur saat menggantikan error Telnyx `40300`.

Alasan menumpuk, bukan bergabung, dan ini penting begitu trafik mengalir: pasangan yang Anda impor sebagai `manual` yang kemudian mengirim `STOP` mendapat rekaman kedua dengan alasan `keyword_stop`, dan pesan tetap berhenti sampai setiap rekaman untuk pasangan itu berakhir. Melanjutkan pelanggan yang pernah Anda impor berarti menghapus keduanya.

## 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 carrier. Bukti pengiriman yang tidak ada tetap unknown. Simpan status dan kode mentah dari provider bersama hasil yang sudah Anda normalisasi.

| Hasil                            | Telnyx                                | Bird                                   |
| -------------------------------- | ------------------------------------- | -------------------------------------- |
| API menerima pesan               | `queued`                              | `sms.accepted`                         |
| Diserahkan ke carrier            | `sent`, pada `message.sent`           | `sms.sent`                             |
| Carrier mengonfirmasi pengiriman | `delivered`, pada `message.finalized` | `sms.delivered`                        |
| Pengiriman gagal                 | `delivery_failed`                     | `sms.undelivered`                      |
| Kegagalan permanen               | `sending_failed`                      | `sms.failed`                           |
| Permintaan ditolak saat admisi   | error permintaan                      | error HTTP; tidak ada pesan atau event |
| Jendela validitas habis          | (tidak ada)                           | `sms.expired`                          |

**Bentuk event berubah, bukan hanya namanya.** Telnyx mengirim satu webhook `message.finalized` yang membawa status akhir di field `status`, sehingga handler Anda bercabang berdasarkan nilai di dalam satu tipe event. Bird mengirimkan tipe event yang berbeda-beda, dan Anda berlangganan yang Anda inginkan, sehingga percabangan berpindah dari kode Anda ke subscription. Itulah mengapa kolom kiri di atas menyebutkan event dan status bersama, sedangkan kolom kanan hanya menyebutkan event.

Dua mekanika lagi berubah bersama namanya:

- **Subscription menggantikan URL webhook profil.** Telnyx mengirimkan pembaruan pengiriman ke URL pada messaging profile, sehingga tujuannya adalah properti dari profil yang digunakan setiap pesan. Bird mengirimkan ke endpoint yang didaftarkan workspace Anda, masing-masing berlangganan tipe event yang diinginkan, sehingga konsumen kedua adalah subscription kedua, bukan perubahan pada objek bersama.
- **Standard Webhooks menggantikan skema tanda tangan Telnyx.** Bird mengirim JSON yang ditandatangani sesuai [Standard Webhooks](https://www.standardwebhooks.com); ganti verifikasinya dengan resep di [Webhooks & events](/docs/guides/webhooks#verify-signatures).

Daftarkan endpoint sekali, sebutkan tipe event yang diinginkan handler Anda: event `sms.*` di atas adalah daftar yang harus Anda langgani, dan tidak ada wildcard yang menggantikannya. [Buat endpoint](/docs/guides/webhooks#create-an-endpoint) berisi perintahnya dan satu hal yang harus benar pada panggilan pertama, yaitu menyimpan signing secret yang ditampilkan respons hanya sekali.

Bird melaporkan kegagalan dengan kode `error` yang terstandarisasi seperti `invalid_destination`, `content_rejected`, `provider_unavailable`, atau `recipient_opted_out`; daftar lengkapnya ada di [halaman event](/docs/guides/sms/events#failure-events). Petakan alerting Anda ke kode-kode tersebut.

## Cutover

[Tujuan](/docs/guides/sms/migrate#1-enable-your-destination-countries), [sender](/docs/guides/sms/migrate#2-set-up-a-sender), dan [ramp trafik](/docs/guides/sms/migrate#6-test-against-simulated-destinations) bersifat independen dari provider dan dibahas di panduan utama. Dua item khusus Telnyx perlu masuk rencana cutover: brand dan campaign 10DLC Anda terdaftar di The Campaign Registry melalui Telnyx dan tidak otomatis menjadi registrasi Bird. Konfirmasi prosedur migrasi atau registrasi yang berlaku sebelum mengirimkan pekerjaan berbayar. Nomor yang Anda miliki di Telnyx memerlukan port yang diatur oleh dukungan, sesuai jadwal mereka, bukan jadwal Anda.

Untuk persyaratan sisi Bird, mulai dari [Daftar untuk 10DLC](/docs/guides/sms/10dlc): halaman itu membahas arti setiap field, tipe entitas yang dikenali registry, dan panggilan persyaratan yang memberi tahu apa yang harus Anda sediakan sebelum membuat brand, yaitu langkah yang dikenakan biaya.

## Langkah selanjutnya

- [Bandingkan Bird dan Telnyx untuk SMS](/products/sms/compare/bird-vs-telnyx): evaluasi produk dan pertimbangan migrasi

- [Mengirim SMS](/docs/guides/sms/sending-sms): payload yang menjadi tujuan porting Anda, secara lengkap
- [Opt-out dan keyword](/docs/guides/sms/opt-outs-and-keywords): cakupan keyword per negara dan manajemen suppression
- [Event SMS](/docs/guides/sms/events): kosakata event yang menjadi tujuan webhook 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)
