Infobip से SMS माइग्रेट करें
यह पेज Infobip के SMS API, Blocklist और डिलीवरी रिपोर्ट्स को Bird पर मैप करता है। मुख्य माइग्रेशन गाइड को क्रम से फ़ॉलो करें और स्टेप 3, 4 और 5 के लिए ये मैपिंग्स इस्तेमाल करें।
दो फ़र्क ज़्यादातर काम करते हैं। Infobip का पेलोड बल्क केस के लिए बना है, इसलिए एक व्यक्ति को एक मेसेज भेजना भी मेसेज की एक ऐरे होती है, जिसमें हर एक में डेस्टिनेशन की ऐरे होती है, और शब्द content.text में दो लेवल नीचे होते हैं; POST /v1/sms/messages टॉप लेवल पर from, to और text लेता है। और आपका Infobip base URL प्रति अकाउंट पर्सनलाइज़्ड होता है, xxxxx.api.infobip.com के फ़ॉर्मेट में, Authorization: App <key> से ऑथेंटिकेट किया जाता है। Bird एक रीजनल होस्ट से bearer key के साथ भेजता है, इसलिए आपके कोड में जो होस्ट है वह पेलोड के फ़ॉर्मेट के साथ-साथ बदलता है।
यह अपने एजेंट को दें
इस ब्रीफ़ को अपने कोडिंग एजेंट में इस्तेमाल करें। यह डिस्कवरी से शुरू होता है और किसी भी प्रोडक्शन बदलाव से पहले एक रिव्यू-योग्य माइग्रेशन प्लान तैयार करता है।
कोड उदाहरण
Help me migrate my SMS integration from Infobip 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/infobip.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 Infobip 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 कॉल को मैप करें
रीनेम टेबल छोटी है क्योंकि असली काम शेप बदलना है:
| यह क्या करता है | Infobip | Bird |
|---|---|---|
| प्राप्तकर्ता | messages[].destinations[].to | to (प्रति रिक्वेस्ट एक) |
| भेजने वाला | messages[].sender | from |
| बॉडी | messages[].content.text | text |
| इंटेंट | (कोई नहीं) | category, फ़्री टेक्स्ट पर ज़रूरी |
| डिलीवरी रिपोर्ट | webhooks.delivery, प्रति मेसेज | नीचे दिए गए डिलीवरी इवेंट्स के लिए सब्सक्राइब्ड वर्कस्पेस webhook |
| राउंड-ट्रिप कॉन्टेक्स्ट | webhooks.callbackData | metadata, लेकिन नीचे साइज़ नोट देखें |
| कैम्पेन ग्रुपिंग | options.campaignReferenceId | tags, सिर्फ़ फ़िल्टरिंग के लिए; नीचे देखें |
| Flash | options.flash | कोई समकक्ष नहीं |
| वैलिडिटी | options.validityPeriod | कोई समकक्ष नहीं: validity_period रिजेक्ट होता है |
| डिलीवरी विंडो | options.deliveryTimeWindow | कोई समकक्ष नहीं |
| सुरक्षित रीट्राई | (उनके जनरेटेड क्लाइंट्स में कोई नहीं) | Idempotency-Key हेडर |
पोर्टिंग नोट्स:
- तीन लेवल ख़त्म हो जाते हैं। नेस्टिंग एक रिक्वेस्ट में कई मेसेज और कई डेस्टिनेशन ले जाने के लिए है। एक व्यक्ति को एक मेसेज भेजते समय, Bird तीनों फ़ील्ड टॉप लेवल पर लेता है, इसलिए ऐरे बनाने वाला बिल्डर ट्रांसलेट करने के बजाय डिलीट हो जाता है।
- callbackData, metadata से बड़ा है। Infobip 4,000 कैरेक्टर तक स्वीकार करता है और इसे डिलीवरी रिपोर्ट पर लौटाता है। Bird का metadata सीरियलाइज़्ड 2 KB तक सीमित है और मेसेज के हर इवेंट पर इको होता है, सिर्फ़ टर्मिनल वाले पर नहीं। इको बेहतर डील है; सीमा नहीं, इसलिए लिमिट के पास पहुँचने वाली किसी भी चीज़ को पूरा ले जाने के बजाय एक ऐसी key में ट्रिम करना होगा जिसे आप लुकअप कर सकें।
- campaignReferenceId रिपोर्टिंग कॉन्टेक्स्ट है, कैम्पेन माइग्रेशन नहीं। Bird के tags, {name, value} पेयर हैं जो क्वेरी डाइमेंशन बन जाते हैं, ताकि आप एनालिटिक्स को कैम्पेन के हिसाब से स्लाइस कर सकें जैसा आप करते थे। इनके साथ जो नहीं आता वह कैम्पेन ऑब्जेक्ट है: एक टैग कोई ब्रॉडकास्ट नहीं बनाता या कॉन्फ़िगर नहीं करता। ऑडियंस कैम्पेन माइग्रेट करते समय कैम्पेन वर्कफ़्लो का अलग से मूल्यांकन करें।
- campaignReferenceId एक idempotency key नहीं है। Infobip इसे कैम्पेन की परफ़ॉर्मेंस ट्रैक करने के लिए एक ID के रूप में परिभाषित करता है, इसलिए यह ग्रुप करता है लेकिन डीडुप्लिकेट नहीं करता। अगर आप इस पर फिर से प्रयास करने को सुरक्षित बनाने के लिए निर्भर थे, तो आप सुरक्षित नहीं थे; यहाँ यह काम Idempotency-Key हेडर करता है।
- category का कोई समकक्ष नहीं है। Infobip के मेसेज ऑप्शन वैलिडिटी, डिलीवरी विंडो, flash और रीजनल सेटिंग्स को कवर करते हैं, और इनमें से कोई भी यह डिक्लेयर नहीं करता कि मेसेज क्यों भेजा जा रहा है। प्रति मेसेज टाइप तय करें कि यह transactional, marketing, authentication है, या service।
- दो ऑप्शन फ़ील्ड का कोई ठिकाना नहीं है। validityPeriod रिज़र्व्ड है और 422 SMSUnsupportedFeature का जवाब देता है; deliveryTimeWindow का कोई समकक्ष नहीं है, इसलिए शेड्यूलिंग विंडो आपके अपने डिस्पैचर में चली जाती हैं।
ऑप्ट-आउट माइग्रेट करें
Infobip एक Blocklist रखता है: उन प्राप्तकर्ताओं की सूची जिन्होंने आपके कम्युनिकेशन से ऑप्ट आउट किया है, जो Blocklist API या वेब इंटरफ़ेस में People के ज़रिए मैनेज होती है, और इस पर मौजूद किसी को भी भेजना अस्वीकार कर दिया जाता है। कीवर्ड ट्रिगर्स इसमें अपने आप जोड़ देते हैं, इसलिए STOP टेक्स्ट करने वाला सब्सक्राइबर बिना आपके ऐप्लिकेशन के कुछ किए वहाँ पहुँच जाता है।
यह इस सेट में किसी भी प्रोवाइडर से सबसे आसान एक्सपोर्ट बनाता है, और सबसे बड़ा विस्तार भी। एक Blocklist एंट्री पूरे अकाउंट के लिए एक सब्सक्राइबर है; एक Bird suppression एक सेंडर-और-सब्सक्राइबर पेयर है। इसलिए हर एंट्री उतने suppression बन जाती है जितने आपके सेंडर हैं: एक हज़ार एंट्री वाली Blocklist और छह सेंडर मतलब छह हज़ार रिकॉर्ड। शुरू करने से पहले मल्टीप्लायर निकालें, क्योंकि यह एक मिनट में होने वाले इम्पोर्ट और बैचिंग तथा प्रोग्रेस लॉग वाले इम्पोर्ट के बीच का फ़र्क है।
Blocklist के मूल दायरे को बनाए रखें। माइग्रेशन के दौरान किसी विदड्रॉल को सिर्फ़ इसलिए सीमित न करें कि नया टेक्निकल मॉडल संकरे पेयर व्यक्त कर सकता है। एक वर्कस्पेस-व्यापी प्राथमिकता व्यापक अनुरोध को दर्शा सकती है; यह सेंडर suppression से अलग ओनर है। पात्रता तय करते समय दोनों की दोबारा जाँच करें।
Suppression लूप के ज़रिए इम्पोर्ट करें। Suppression पढ़ना और मैनेज करना में कमांड है, और यह कारण कि मैन्युअल suppression ट्रांज़ैक्शनल सहित हर कैटेगरी को ब्लॉक क्यों करता है।
एक बार यहाँ आने के बाद, Bird प्रति देश अपने कैटलॉग से stop कीवर्ड का जवाब ख़ुद देता है, इसलिए आपके कॉन्फ़िगर किए गए कीवर्ड ट्रिगर्स का कोई समकक्ष दोबारा बनाने के लिए नहीं है, और कोई भी कस्टम वाले कीवर्ड रूल्स बन जाते हैं। कारण स्टैक होते हैं, मर्ज नहीं, इसलिए जिस पेयर को आपने manual के रूप में इम्पोर्ट किया और बाद में उसने STOP टेक्स्ट किया, उसके पास दो रिकॉर्ड होंगे, और जब तक दोनों समाप्त नहीं हो जाते मेसेज रुके रहते हैं।
डिलीवरी स्टेटस ट्रांसलेट करें
इस टेबल का उपयोग लाइफ़साइकल कॉन्सेप्ट्स की तुलना करने के लिए करें, इवेंट्स को मशीनी रूप से रीनेम करने के लिए नहीं। Bird रिपोर्ट किए गए स्टेटस और कारण से फ़ेलियर इवेंट चुनता है। एक रिफ़्यूज़्ड API रिक्वेस्ट कोई मेसेज नहीं बनाती; स्वीकृति के बाद रिजेक्शन sms.rejected उत्पन्न कर सकता है, जिसमें कैरियर रिजेक्शन शामिल है। डिलीवरी का कोई सबूत न होने पर स्टेटस unknown रहता है। अपने नॉर्मलाइज़्ड परिणाम के साथ रॉ प्रोवाइडर स्टेटस और कोड भी रखें।
Infobip हर डिलीवरी रिपोर्ट पर एक status group और status name रिपोर्ट करता है, और Bird एक event type एमिट करता है:
| परिणाम | Infobip status group | Bird |
|---|---|---|
| API ने मेसेज स्वीकार किया | PENDING | sms.accepted |
| कैरियर को सौंपा गया | PENDING | sms.sent |
| कैरियर ने डिलीवरी कन्फ़र्म की | DELIVERED | sms.delivered |
| कैरियर ने नॉन-डिलीवरी रिपोर्ट की | UNDELIVERABLE | sms.undelivered |
| स्थायी विफलता | REJECTED | sms.failed |
| भेजने से पहले अस्वीकार | REJECTED | sms.rejected |
| वैलिडिटी विंडो समाप्त | EXPIRED | sms.expired |
EXPIRED वह पंक्ति है जिसे ध्यान से पढ़ना चाहिए, क्योंकि यह उनकी तरफ़ दो अलग-अलग चीज़ों को कवर करती है और यहाँ उनमें से सिर्फ़ एक मौजूद है। Infobip एक मेसेज को या तो तब एक्सपायर करता है जब उनके प्लेटफ़ॉर्म की वैलिडिटी अवधि समाप्त होती है, जो डिफ़ॉल्ट रूप से 48 घंटे है, या जब ऑपरेटर अंतिम स्टेटस के रूप में expired लौटाता है। Bird अपनी कोई वैलिडिटी विंडो सेट नहीं करता और कोई टाइमर नहीं चलाता जो मेसेज समाप्त करे, इसलिए sms.expired हमेशा कैरियर की डिलीवरी रसीद से ही आता है। ऑपरेटर-रिपोर्टेड हिस्सा मैप होता है; प्लेटफ़ॉर्म-टाइमर हिस्से का कोई समकक्ष नहीं है, और जो मेसेज उनकी क्लॉक पर एक्सपायर हो जाता वह यहाँ तब तक फ़्लाइट में रहता है जब तक कैरियर तय नहीं करता।
REJECTED जानबूझकर दो बार दिखाई देता है। Infobip इसे उस मेसेज के लिए भी इस्तेमाल करता है जिसे उसने ख़ुद रिफ़्यूज़ किया और उसके लिए भी जिसे ऑपरेटर ने rejected लौटाया, जो Bird के प्रोसेसिंग या कैरियर आउटकम और उसके कारण से चुने गए इवेंट हैं; कैरियर रिजेक्शन sms.rejected उत्पन्न कर सकता है। ग्रुप के अंदर का status name ही इन्हें अलग बताता है, इसलिए जो हैंडलर सिर्फ़ ग्रुप पर ब्रांच करता था उसे यहाँ आने पर name की ज़रूरत होगी। PENDING भी दो पंक्तियों को कवर करता है, क्योंकि स्वीकृति से लेकर टर्मिनल रिपोर्ट आने तक मेसेज इसी ग्रुप में रहता है।
नामों के साथ तीन मैकेनिक्स बदलते हैं:
- सब्सक्रिप्शन प्रति-मेसेज webhooks की जगह लेते हैं। Infobip हर मेसेज पर एक webhook नाम करता है, इसलिए डेस्टिनेशन वह चुनता है जो कॉल लिखता है, और कॉन्टेंट टाइप भी उसी के साथ चुना जाता है। Bird आपके वर्कस्पेस द्वारा रजिस्टर किए गए endpoints पर JSON डिलीवर करता है, हर एक उन event types के लिए सब्सक्राइब्ड जो वह चाहता है, इसलिए दूसरा कंज़्यूमर हर कॉल साइट पर बदलाव के बजाय दूसरा सब्सक्रिप्शन है।
- आप प्रति-मेसेज चॉइस खो देते हैं, XML सहित। Infobip मेसेज को JSON या XML चुनने और 4,000 कैरेक्टर तक callback डेटा अटैच करने देता है। Bird सिर्फ़ JSON भेजता है, और callbackData अब metadata बन जाता है, जो सिर्फ़ रिपोर्ट पर नहीं बल्कि उस मेसेज के हर इवेंट पर इको होता है।
- Pull, push बन जाता है। Infobip आपको रिपोर्ट्स को एक reports endpoint से फ़ेच करने और साथ ही रिसीव करने देता है। Bird के पास इवेंट्स के लिए कोई समकक्ष पोल नहीं है; सब्सक्राइब करें, और जब माँग पर चाहिए तो API के ज़रिए मेसेज स्टेट पढ़ें।
Endpoint एक बार रजिस्टर करें, उन event types को नाम दें जो आपका हैंडलर चाहता है: ऊपर दिए गए sms.* इवेंट्स वह सूची हैं जिनके लिए सब्सक्राइब करना है, और कोई वाइल्डकार्ड नहीं है जो उनकी जगह ले। Bird, Standard Webhooks के अनुसार साइन किए गए JSON भेजता है; Endpoint बनाएँ में कमांड है और पहली कॉल पर सही करने वाली एक चीज़ है, जो है signing secret को स्टोर करना जो रिस्पॉन्स सिर्फ़ एक बार दिखाता है।
Bird विफलता की रिपोर्ट एक मानकीकृत error कोड से करता है जैसे invalid_destination, content_rejected, provider_unavailable, या recipient_opted_out; पूरी सूची इवेंट्स पेज पर है। अपनी अलर्टिंग को Infobip के न्यूमेरिक ग्रुप और name पेयर के बजाय इन पर मैप करें।
कटओवर करें
Destinations, senders, और ट्रैफ़िक रैम्प प्रोवाइडर-स्वतंत्र हैं और मुख्य गाइड में कवर हैं। तीन Infobip-विशिष्ट आइटम कटओवर प्लान में आते हैं।
होस्ट बदलता है, और यह कोड नहीं बल्कि कॉन्फ़िगरेशन है। आपका Infobip base URL प्रति अकाउंट जारी किया जाता है; Bird उस रीजनल होस्ट से भेजता है जो आपका वर्कस्पेस बनाते समय चुना गया था। कटओवर से पहले हर उस जगह को खोजें जहाँ वह होस्ट सेट है, जिसमें environment variables, secrets managers और deploy manifests शामिल हैं, क्योंकि एक छूटा हुआ बिल्ड में नहीं बल्कि रनटाइम पर फ़ेल होता है।
आपका 10DLC ब्रांड और कैम्पेन The Campaign Registry के साथ Infobip के नंबर रजिस्ट्रेशन API के ज़रिए रजिस्टर्ड हैं और अपने आप Bird रजिस्ट्रेशन नहीं बनते। पेड काम सबमिट करने से पहले लागू माइग्रेशन या रजिस्ट्रेशन प्रक्रिया की पुष्टि करें। 10DLC के लिए रजिस्टर करें से शुरू करें: इसमें बताया गया है कि हर फ़ील्ड का क्या मतलब है, रजिस्ट्री कौन से entity types पहचानती है, और requirements कॉल जो बताती है कि ब्रांड बनाने से पहले आपको क्या देना है, जो चार्जेबल स्टेप है।
Infobip पर आपके मालिकाना नंबरों को एक पोर्ट की ज़रूरत है जिसे सपोर्ट अरेंज करता है, आपकी नहीं बल्कि अपनी शेड्यूल पर।
अगले कदम
-
SMS के लिए Bird और Infobip की तुलना करें: प्रोडक्ट मूल्यांकन और माइग्रेशन विचार
-
SMS भेजना: वह पेलोड जिस पर आप पोर्ट कर रहे हैं, पूरा
-
ऑप्ट-आउट और कीवर्ड: प्रति देश कीवर्ड कवरेज और suppression प्रबंधन
-
SMS इवेंट्स: वह इवेंट शब्दावली जिस पर आपका रिपोर्ट हैंडलर जाता है
-
Webhooks & events: endpoint सेटअप और Standard Webhooks सत्यापन
संबंधित संसाधन
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।