Sign inGet Started

Plivo से SMS पर माइग्रेट करें

यह पेज Plivo के Message API, Powerpacks और डिलीवरी कॉलबैक को Bird से मैप करता है। मुख्य माइग्रेशन गाइड के चरण क्रम से पूरे करें और चरण 3, 4 और 5 के लिए इन मैपिंग का उपयोग करें।

सेंड कॉल को बदलना सबसे आसान है। दोनों छोटे अक्षरों वाले फ़ील्ड नामों के साथ JSON लेते हैं, और दोनों 10DLC रजिस्ट्रेशन को अलग होस्ट पर नहीं, बल्कि सेंड के साथ ही रखते हैं। दो चीज़ें बदलती हैं। Plivo का POST https://api.plivo.com/v1/Account/{auth_id}/Message/ HTTP Basic पर Auth ID और Auth Token से प्रमाणीकरण करता है; POST /v1/sms/messages आपके क्षेत्रीय होस्ट पर bearer API कुंजी लेता है, और पाथ में कोई अकाउंट खंड नहीं होता। साथ ही, Plivo Powerpack एक नंबर पूल, स्टिकी सेंडर व्यवहार और ऑप्ट-आउट स्थिति को एक ही ऑब्जेक्ट में जोड़ता है; Bird इन्हें सेंडर, सप्रेशन और कीवर्ड नियमों में बाँटता है, इसलिए Powerpack के रूप में कुछ भी दोबारा बनाने की ज़रूरत नहीं है।

यह अपने एजेंट को सौंपें

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

कोड उदाहरण
Help me migrate my SMS integration from Plivo 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/plivo.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 Plivo 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.

सेंड कॉल मैप करें

यह क्या करता हैPlivoBird
प्राप्तकर्ताdstto (प्रति अनुरोध एक)
प्रेषकsrc या powerpack_uuidfrom
संदेश का मुख्य भागtexttext
चैनल चयनकर्ताtype: sms, mms, whatsappएंडपॉइंट स्वयं; /v1/sms/messages का मतलब SMS है
उद्देश्य(कोई नहीं)category, फ़्री टेक्स्ट पर आवश्यक
डिलीवरी रिपोर्टurl + method, प्रति संदेशएक वर्कस्पेस वेबहुक; केवल JSON POST, नीचे देखें
राउंड-ट्रिप संदर्भआपका अपना स्टोर, UUID के आधार परmetadata: कोई भी JSON, हर इवेंट में वापस भेजा जाता है
फ़िल्टर करने योग्य लेबल(कोई नहीं)tags: {name, value} जोड़े
सुरक्षित रूप से फिर से प्रयास(कोई दस्तावेज़ित नहीं)Idempotency-Key हेडर
मीडियाmedia_urlsकोई समकक्ष नहीं: media_urls अस्वीकार कर दिया जाता है

पोर्टिंग से जुड़े नोट:

  • Powerpack UUID एक सामान्य सेंडर मान बन जाता है। Plivo UUID के पीछे नंबर पूल, स्टिकी सेंडर और लोकल प्रेज़ेंस को तय करता है। Bird सेंडर को सीधे from में लेता है, इसलिए हर भेजने पर उसे चुनें, या टेम्पलेट भेजना इस्तेमाल करें, जो गंतव्य के लिए एक मान्य सेंडर चुनता है और from को अस्वीकार करता है।
  • type का कोई समकक्ष नहीं है, क्योंकि यह जानकारी एंडपॉइंट में ही होती है। Plivo हर अनुरोध में चैनल चुनता है; Bird के SMS, WhatsApp और अन्य चैनल अलग-अलग एंडपॉइंट हैं। जो कोडबेस रनटाइम पर type बदलता है, उसे अलग-अलग एंडपॉइंट पर कॉल में बाँटना होगा।
  • Message API में ऐसा कुछ नहीं है जो category से मेल खाए। हर मैसेज प्रकार के लिए तय करें कि वह transactional, marketing, authentication या service है। खास तौर पर ऑथेंटिकेशन ट्रैफ़िक को मार्केटिंग डिफ़ॉल्ट पर छोड़ने के बजाय उसी रूप में लेबल करें।
  • फिर से प्रयास करने के व्यवहार की अलग से समीक्षा करें। Plivo के भेजने वाले रेफ़रेंस में कोई idempotency कुंजी या डुप्लिकेट रोकने की व्यवस्था दस्तावेज़ित नहीं है, इसलिए वहाँ टाइमआउट होने पर आपको पता नहीं चलता कि मैसेज गया या नहीं। तीन घंटे की रीप्ले विंडो में डुप्लिकेट अनुरोध का जोखिम कम करने के लिए पहले पोर्ट से ही Idempotency-Key हेडर भेजें; यह ठीक एक बार डिलीवरी की गारंटी नहीं है।

ऑप्ट-आउट साथ ले जाएँ

जब कोई गंतव्य ऑप्ट-आउट कीवर्ड के साथ जवाब देता है, तो Plivo की DND सेवा उस Plivo नंबर से उस गंतव्य पर जाने वाले मैसेज रोक देती है। रोका गया मैसेज Plivo त्रुटि कोड 200 के साथ लौटता है। यह Plivo के मैसेज त्रुटि कोड में से एक है, HTTP स्टेटस नहीं, भले ही वह उसके जैसा दिखे। Bird सप्रेशन भी इसी जोड़ी पर काम करता है: एक सेंडर और एक सब्सक्राइबर। इसलिए इम्पोर्ट किए गए दायरे में वे सभी सेंडर और प्रोग्राम शामिल होने चाहिए जो व्यक्ति के अनुरोध में आते हैं।

एक चीज़ का दायरा बढ़ता है, और इसी वजह से इंपोर्ट से पहले गिनती करें। US 10DLC कैंपेन के भीतर Plivo किसी एक नंबर से ऑप्ट-आउट को उस कैंपेन से जुड़े हर नंबर से ऑप्ट-आउट मानता है। Bird जोड़ियाँ स्टोर करता है, इसलिए चार नंबर वाले कैंपेन से ऑप्ट-आउट करने वाला सब्सक्राइबर एक नहीं, चार सप्रेशन बन जाता है। शुरू करने से पहले गिन लें कि आपकी सूची कितनी जोड़ियाँ बनेगी, क्योंकि इसी से तय होता है कि इंपोर्ट दसियों का लूप होगा या हज़ारों का।

सूची निकालने के लिए API कॉल नहीं, बल्कि कंसोल एक्सपोर्ट का इस्तेमाल होता है: Plivo कंसोल में नंबर फ़िल्टर करें, उन्हें चुनें, और Choose Action मेन्यू से Export CSV इस्तेमाल करें। नतीजे को सप्रेशन लूप के ज़रिए इंपोर्ट करें। सप्रेशन पढ़ना और प्रबंधित करना में कमांड दी गई है, और यह भी कि मैन्युअल सप्रेशन ट्रांज़ैक्शनल समेत हर श्रेणी को क्यों रोकता है।

Bird समर्थित stop कीवर्ड को अपने देश-विशिष्ट कैटलॉग के ज़रिए संभालता है। सप्रेस की गई जोड़ी को भेजा गया संदेश प्रवेश पर ही E12077 SMSRecipientSuppressed के साथ अस्वीकार हो जाता है। कैरियर द्वारा रिपोर्ट किया गया ऑप्ट-आउट एक अलग recipient_opted_out डिलीवरी परिणाम है। Plivo त्रुटि कोड 200 की हैंडलिंग को उपयुक्त प्रवेश और डिलीवरी पाथ से बदलें, और किसी भी कस्टम जवाब को कीवर्ड नियमों के रूप में फिर से बनाएँ।

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

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

इस तालिका का इस्तेमाल लाइफ़साइकल की अवधारणाओं की तुलना के लिए करें, इवेंट के नाम यांत्रिक रूप से बदलने के लिए नहीं। Bird रिपोर्ट किए गए स्टेटस और कारण के आधार पर विफलता इवेंट चुनता है। अस्वीकार किया गया API अनुरोध कोई संदेश नहीं बनाता; स्वीकार होने के बाद की अस्वीकृति, जिसमें कैरियर की अस्वीकृति भी शामिल है, sms.rejected दे सकती है। डिलीवरी का प्रमाण न होने पर स्थिति अज्ञात ही रहती है। अपने सामान्यीकृत परिणाम के साथ प्रोवाइडर का मूल स्टेटस और कोड भी सुरक्षित रखें।

परिणामPlivo message_stateBird
API ने संदेश स्वीकार कियाqueuedsms.accepted
कैरियर को सौंपा गयाsentsms.sent
कैरियर ने डिलीवरी की पुष्टि कीdeliveredsms.delivered
कैरियर ने डिलीवरी न होने की सूचना दीundeliveredsms.undelivered
स्थायी विफलताfailedsms.failed
भेजने से पहले अस्वीकार किया गयाrejectedsms.rejected
वैधता अवधि समाप्त हो गई(कोई नहीं)sms.expired

नामों के साथ दो कार्यप्रणालियाँ भी बदलती हैं:

  • हर संदेश के कॉलबैक URL की जगह एंडपॉइंट लेते हैं। Plivo हर भेजने के अनुरोध पर एक url लेता है, इसलिए गंतव्य वही तय करता है जो कॉल लिखता है। Bird उन एंडपॉइंट पर डिलीवर करता है जिन्हें आपका वर्कस्पेस रजिस्टर करता है, और हर एंडपॉइंट अपने चाहे गए इवेंट प्रकारों की सदस्यता लेता है। इसलिए नए उपभोक्ता के लिए हर कॉल साइट बदलने की ज़रूरत नहीं होती, बस एक नई सदस्यता जोड़नी होती है।
  • यदि आपने GET कॉलबैक चुना था, तो उसकी जगह साइन किए गए JSON पोस्ट लेते हैं। Plivo का method डिलीवरी रिपोर्ट के लिए GET या POST चुनता है; Bird हर JSON इवेंट को POST करता है और GET का विकल्प नहीं देता। यदि आपने method=GET सेट किया है, तो आपका हैंडलर परिणाम क्वेरी-स्ट्रिंग पैरामीटर से पढ़ता है। ऐसे हैंडलर को केवल दोबारा रजिस्टर करना काफ़ी नहीं है, उसे फिर से लिखना होगा। Connectivity Platform वाली गाइड में भी यही लागू होता है।
  • तीन हेडर की जगह एक सिग्नेचर योजना लेती है। Plivo कॉलबैक को X-Plivo-Signature-V2, X-Plivo-Signature-Ma-V2 और X-Plivo-Signature-V2-Nonce से साइन करता है। Bird Standard Webhooks के अनुसार साइन किए गए JSON भेजता है, इसलिए वेरिफ़ायर को समायोजित नहीं, पूरी तरह बदलना होगा: उसकी जगह वेबहुक और इवेंट में दी गई विधि अपनाएँ।

एंडपॉइंट को एक बार रजिस्टर करें और उन इवेंट प्रकारों के नाम दें जो आपके हैंडलर को चाहिए। ऊपर दिए गए sms.* इवेंट ही सदस्यता की सूची हैं, और उनकी जगह लेने वाला कोई वाइल्डकार्ड नहीं है। एंडपॉइंट बनाएँ में कमांड दी गई है। पहली कॉल में एक बात सही करनी ज़रूरी है: प्रतिक्रिया जो साइनिंग सीक्रेट केवल एक बार दिखाती है, उसे सहेज लें।

Plivo के संख्यात्मक error_code मानों का कोई एक-से-एक मिलान नहीं है। Bird विफलता को एक मानकीकृत error कोड से रिपोर्ट करता है, जैसे invalid_destination, content_rejected, provider_unavailable या recipient_opted_out; पूरी सूची इवेंट पेज पर है। अपनी अलर्टिंग को इन्हीं कोड से जोड़ें।

कटओवर करें

गंतव्य, प्रेषक और ट्रैफ़िक रैंप किसी प्रदाता पर निर्भर नहीं हैं और मुख्य गाइड में शामिल हैं। कटओवर योजना में Plivo से जुड़े दो काम जोड़ें।

आपका 10DLC ब्रांड और कैंपेन Plivo के ज़रिए The Campaign Registry में पंजीकृत हैं और अपने-आप Bird पंजीकरण नहीं बनते। सशुल्क काम सबमिट करने से पहले लागू माइग्रेशन या पंजीकरण प्रक्रिया की पुष्टि करें। यहाँ क्रम छोटा है। Plivo पहले एक प्रोफ़ाइल पंजीकृत करता है और फिर उसके तहत एक ब्रांड, /v1/Account/{auth_id}/10dlc/ के अंतर्गत; Bird में कोई प्रोफ़ाइल ऑब्जेक्ट नहीं है, इसलिए Plivo प्रोफ़ाइल पर जो व्यावसायिक विवरण रखता है, वे सीधे ब्रांड पर दिए जाते हैं। 10DLC के लिए पंजीकरण करें से शुरू करें: इसमें हर फ़ील्ड का अर्थ, रजिस्ट्री द्वारा मान्य इकाई प्रकार और वह requirements कॉल है जो ब्रांड बनाने से पहले बताती है कि आपको क्या देना है। ब्रांड बनाना ही शुल्क वाला चरण है।

Plivo पर आपके स्वामित्व वाले नंबरों के लिए पोर्ट की ज़रूरत होती है, जिसे सपोर्ट टीम अपने समय के अनुसार व्यवस्थित करती है, आपके समय के अनुसार नहीं। इसे जल्दी शुरू करें, ताकि यह कोड बदलाव के साथ-साथ चलता रहे।

अगले चरण

इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।