# Telnyx से SMS माइग्रेट करें

यह पेज Telnyx के Messages API, messaging profiles, और delivery webhooks को Bird पर मैप करता है। [मुख्य माइग्रेशन गाइड](/docs/guides/sms/migrate) को क्रम से फ़ॉलो करें और इन मैपिंग्स का उपयोग स्टेप 3, 4, और 5 के लिए करें।

Send कॉल यहाँ किसी भी प्रोवाइडर में Bird के सबसे करीब है: JSON, एक bearer key, और वही फ़ील्ड नाम। `POST https://api.telnyx.com/v2/messages` में `from`, `to` और `text` होते हैं, और [`POST /v1/sms/messages`](/docs/api/reference/create-sms-message) में भी। जो चीज़ नहीं आती वह messaging profile है। Telnyx इसे लगभग हर चीज़ की इकाई बनाता है: sender pool, webhook URL, opt-out scope, और keyword कॉन्फ़िगरेशन। Bird इन्हें senders, webhook subscriptions और suppressions में बाँटता है। इस माइग्रेशन का अधिकांश काम उस ऑब्जेक्ट को अलग करना है।

## अपने एजेंट को यह दें

इस ब्रीफ़ का उपयोग अपने कोडिंग एजेंट में करें। यह discovery से शुरू होता है और किसी भी प्रोडक्शन बदलाव से पहले एक समीक्षा-योग्य माइग्रेशन प्लान तैयार करता है।

```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.
```

## Send कॉल को मैप करें

| क्या करता है            | Telnyx                           | Bird                                                             |
| ----------------------- | -------------------------------- | ---------------------------------------------------------------- |
| प्राप्तकर्ता            | `to`                             | `to` (प्रति अनुरोध एक)                                           |
| प्रेषक                  | `from` या `messaging_profile_id` | `from`                                                           |
| बॉडी                    | `text`                           | `text`                                                           |
| इंटेंट                  | (कोई नहीं)                       | `category`, फ़्री टेक्स्ट पर आवश्यक                              |
| डिलीवरी रिपोर्ट         | प्रोफ़ाइल का webhook URL         | नीचे दिए गए delivery events से सब्सक्राइब्ड एक वर्कस्पेस webhook |
| राउंड-ट्रिप कॉन्टेक्स्ट | आपका अपना स्टोर, ID से कीड       | `metadata`: मनमाना JSON, हर event पर echo होता है                |
| फ़िल्टर-योग्य लेबल      | (कोई नहीं)                       | `tags`: `{name, value}` जोड़ियाँ                                 |
| सुरक्षित फिर से प्रयास  | (कोई दस्तावेज़ नहीं)             | `Idempotency-Key` हेडर                                           |
| मीडिया                  | `media_urls`                     | कोई समकक्ष नहीं: `media_urls` अस्वीकृत होता है                   |

पोर्टिंग नोट्स:

- **एक messaging profile ID एक सामान्य sender वैल्यू बन जाती है।** Telnyx नंबर पूल और उसके भेजने के नियमों को प्रोफ़ाइल के पीछे रिज़ॉल्व करता है। Bird में sender स्वयं `from` में लिया जाता है, तो इसे प्रति send चुनें, या [template send](/docs/guides/sms/templates) का उपयोग करें, जो गंतव्य के लिए एक वैध sender चुनता है और `from` को अस्वीकार करता है।
- **Messages API पर `category` का कोई समकक्ष नहीं है।** प्रति संदेश प्रकार तय करें कि वह `transactional`, `marketing`, `authentication`, या `service` है। विशेष रूप से authentication ट्रैफ़िक को marketing default में छोड़ने के बजाय उसी रूप में लेबल करना चाहिए।
- **फिर से प्रयास की सिमैंटिक्स को अलग से समीक्षा करें।** Telnyx के send रेफ़रेंस में कोई idempotency key दस्तावेज़ित नहीं है, इसलिए वहाँ timeout होने पर आप अनुमान लगाते रह जाते हैं। पहले पोर्ट से ही `Idempotency-Key` हेडर भेजें।

## Opt-outs को आगे लाएँ

**यह वह स्टेप है जो लोगों को चौंकाता है, और सबसे पहले यह पता लगाना है कि आपकी सूची कितने suppressions बनती है।**

Telnyx एक opt-out को पूरे messaging profile पर scope करता है: कोई subscriber जो किसी प्रोफ़ाइल के किसी भी एक नंबर पर `STOP` टेक्स्ट करता है, उस प्रोफ़ाइल के हर नंबर से ब्लॉक हो जाता है, और उसे भेजने पर error `40300`, "Blocked due to STOP message" मिलता है। अलग-अलग प्रोग्रामों के लिए अलग opt-out सूचियाँ रखना अलग प्रोफ़ाइल रखकर किया जाता है।

Bird एक suppression को sender-और-subscriber जोड़ी पर scope करता है। इसलिए बारह नंबरों वाली प्रोफ़ाइल के एक Telnyx opt-out से बारह Bird suppressions बनते हैं, और सौ नंबरों वाली प्रोफ़ाइल से सौ। इम्पोर्ट करने से पहले गिनें: गुणक उस प्रोफ़ाइल से आप जितने senders ला रहे हैं उनकी संख्या है, और यह तय करता है कि इम्पोर्ट सैकड़ों का लूप होगा या दसियों हज़ार का।

प्रोफ़ाइल-व्यापी वापसी को सभी संबंधित senders पर बनाए रखें। Sender-स्तर का स्टोरेज किसी अन्य नंबर से प्रोग्राम फिर से शुरू करने की अनुमति नहीं है। जाँचें कि वर्कस्पेस-व्यापी प्राथमिकता व्यक्ति के वास्तविक अनुरोध का उचित प्रतिनिधित्व है या नहीं।

[Suppression loop](/docs/guides/sms/migrate#4-carry-over-your-opt-out-list) के ज़रिए इम्पोर्ट करें। [Suppressions पढ़ना और प्रबंधित करना](/docs/guides/sms/opt-outs-and-keywords#reading-and-managing-suppressions) में कमांड है, और यह कारण कि manual suppression transactional सहित हर कैटेगरी को ब्लॉक करता है।

`autoresp_configs` के ज़रिए कॉन्फ़िगर किए गए कस्टम कीवर्ड और auto-responses को Bird [keyword rules](/docs/guides/sms/opt-outs-and-keywords#campaign-keywords) के रूप में फिर से बनाएँ। एक suppressed जोड़ी को भेजना admission पर `E12077 SMSRecipientSuppressed` के साथ अस्वीकृत होता है; एक downstream opt-out अलग `recipient_opted_out` delivery result है। Telnyx error `40300` को बदलते समय दोनों पथ हैंडल करें।

कारण मर्ज होने के बजाय स्टैक होते हैं, जो ट्रैफ़िक शुरू होने के बाद मायने रखता है: जिस जोड़ी को आपने `manual` के रूप में इम्पोर्ट किया, अगर वह `STOP` टेक्स्ट करती है तो `keyword_stop` कारण के साथ एक दूसरा रिकॉर्ड बनता है, और संदेश तब तक रुके रहते हैं जब तक उस जोड़ी का हर रिकॉर्ड समाप्त नहीं हो जाता। एक बार इम्पोर्ट किए गए subscriber को फिर से शुरू करने का मतलब दोनों को हटाना है।

## डिलीवरी स्टेटस का अनुवाद करें

इस तालिका का उपयोग lifecycle अवधारणाओं की तुलना के लिए करें, events का यांत्रिक रूप से नाम बदलने के लिए नहीं। Bird रिपोर्ट किए गए status और reason से failure event चुनता है। एक अस्वीकृत API अनुरोध कोई संदेश नहीं बनाता; स्वीकृति के बाद अस्वीकृति `sms.rejected` उत्पन्न कर सकती है, जिसमें carrier अस्वीकृति भी शामिल है। गायब delivery साक्ष्य unknown रहता है। अपने normalized outcome के साथ raw provider status और code को सुरक्षित रखें।

| परिणाम                         | Telnyx                              | Bird                                |
| ------------------------------ | ----------------------------------- | ----------------------------------- |
| API ने संदेश स्वीकार किया      | `queued`                            | `sms.accepted`                      |
| कैरियर को सौंपा गया            | `sent`, `message.sent` पर           | `sms.sent`                          |
| कैरियर ने डिलीवरी की पुष्टि की | `delivered`, `message.finalized` पर | `sms.delivered`                     |
| डिलीवरी विफल                   | `delivery_failed`                   | `sms.undelivered`                   |
| स्थायी विफलता                  | `sending_failed`                    | `sms.failed`                        |
| अनुरोध admission पर अस्वीकृत   | request error                       | HTTP error; कोई संदेश या event नहीं |
| वैधता विंडो समाप्त             | (कोई नहीं)                          | `sms.expired`                       |

**Event का आकार बदलता है, सिर्फ़ शब्द नहीं।** Telnyx एक `message.finalized` webhook भेजता है जिसमें terminal state एक `status` फ़ील्ड में होता है, तो आपका handler एक ही event type के अंदर एक वैल्यू पर branch करता है। Bird इसके बजाय अलग-अलग event types emit करता है, और आप जो चाहें उनको subscribe करते हैं, तो branch आपके कोड से निकलकर subscription में चला जाता है। इसलिए ऊपर बायाँ कॉलम event और status दोनों का नाम देता है और दायाँ कॉलम सिर्फ़ event का।

नामों के साथ दो और मैकेनिक्स बदलते हैं:

- **Subscriptions प्रोफ़ाइल के webhook URL की जगह लेते हैं।** Telnyx delivery अपडेट messaging profile पर मौजूद URL पर पोस्ट करता है, इसलिए गंतव्य उस प्रोफ़ाइल की प्रॉपर्टी है जिसके ज़रिए हर संदेश भेजा गया था। Bird आपके वर्कस्पेस द्वारा रजिस्टर किए गए endpoints पर डिलीवर करता है, प्रत्येक अपनी पसंद के event types से subscribed, तो दूसरा consumer एक दूसरा subscription है, न कि एक shared object में बदलाव।
- **Standard Webhooks, Telnyx की signature स्कीम की जगह लेता है।** Bird, JSON को [Standard Webhooks](https://www.standardwebhooks.com) के अनुसार signed भेजता है; सत्यापन को [Webhooks & events](/docs/guides/webhooks#verify-signatures) में दी गई विधि से बदलें।

Endpoint एक बार रजिस्टर करें, उन event types का नाम देकर जो आपका handler चाहता है: ऊपर दिए गए `sms.*` events वह सूची हैं जिन्हें subscribe करना है, और उनकी जगह लेने वाला कोई wildcard नहीं है। [Endpoint बनाएँ](/docs/guides/webhooks#create-an-endpoint) में कमांड है और पहली कॉल में एक चीज़ सही करनी है, वह है signing secret को स्टोर करना जो response सिर्फ़ एक बार दिखाता है।

Bird एक विफलता को मानकीकृत `error` कोड जैसे `invalid_destination`, `content_rejected`, `provider_unavailable`, या `recipient_opted_out` के साथ रिपोर्ट करता है; पूरी सूची [events पेज](/docs/guides/sms/events#failure-events) पर है। अपनी अलर्टिंग को इन पर मैप करें।

## कटओवर

[Destinations](/docs/guides/sms/migrate#1-enable-your-destination-countries), [senders](/docs/guides/sms/migrate#2-set-up-a-sender), और [ट्रैफ़िक रैंप](/docs/guides/sms/migrate#6-test-against-simulated-destinations) प्रोवाइडर-स्वतंत्र हैं और मुख्य गाइड में शामिल हैं। दो Telnyx-विशिष्ट आइटम कटओवर प्लान में शामिल होने चाहिए: आपका 10DLC brand और campaign, Telnyx के ज़रिए The Campaign Registry में रजिस्टर हैं और स्वचालित रूप से Bird registrations नहीं बनते। भुगतान कार्य सबमिट करने से पहले लागू माइग्रेशन या रजिस्ट्रेशन प्रक्रिया की पुष्टि करें। Telnyx पर आपके नंबरों को एक पोर्ट की ज़रूरत होती है जो support व्यवस्थित करता है, आपके नहीं बल्कि उसके अपने शेड्यूल पर।

Bird-साइड आवश्यकताओं के लिए, [10DLC के लिए रजिस्टर करें](/docs/guides/sms/10dlc) से शुरू करें: इसमें बताया गया है कि हर फ़ील्ड का क्या मतलब है, registry किन entity types को पहचानती है, और वह requirements कॉल जो बताती है कि brand बनाने से पहले आपको क्या देना है, यानी वह स्टेप जिस पर शुल्क लगता है।

## अगले कदम

- [SMS के लिए Bird और Telnyx की तुलना करें](/products/sms/compare/bird-vs-telnyx): उत्पाद मूल्यांकन और माइग्रेशन विचार

- [SMS भेजना](/docs/guides/sms/sending-sms): वह पेलोड जिस पर आप पोर्ट कर रहे हैं, पूर्ण रूप में
- [Opt-outs और keywords](/docs/guides/sms/opt-outs-and-keywords): प्रति देश keyword कवरेज और suppression प्रबंधन
- [SMS events](/docs/guides/sms/events): वह event शब्दावली जिस पर आपका webhook handler जाता है
- [Webhooks & events](/docs/guides/webhooks): endpoint सेटअप और 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)
