SMS को किसी अन्य प्रदाता से माइग्रेट करें
प्रोडक्शन SMS को किसी अन्य प्रदाता से Bird पर ले जाने के लिए इस गाइड का उपयोग करें। दो चीज़ें यहाँ पहले सेंड को रोकती हैं जिन्हें आपका मौजूदा प्रदाता अलग तरीके से हैंडल करता है, इसलिए वे कोड से पहले आती हैं: वे देश जहाँ आप भेजते हैं, और वह सेंडर जिससे आप भेजते हैं। उसके बाद, सेंड कॉल पोर्ट करें, अपनी ऑप्ट-आउट सूची ट्रांसफ़र करें, डिलीवरी रिपोर्ट को वेबहुक पर रीपॉइंट करें, और वास्तविक ट्रैफ़िक ले जाने से पहले सिम्युलेटेड डेस्टिनेशन के विरुद्ध टेस्ट करें।
माइग्रेशन चेकलिस्ट:
- अपने डेस्टिनेशन देश सक्षम करें
- सेंडर सेट अप करें
- POST /v1/sms/messages पर सेंड कॉल मैप करें
- अपनी ऑप्ट-आउट सूची ट्रांसफ़र करें
- डिलीवरी रिपोर्ट को वेबहुक पर स्विच करें
- कटओवर से पहले सिम्युलेटेड डेस्टिनेशन के विरुद्ध टेस्ट करें
स्टेप 3, 4, और 5 इस पर निर्भर करते हैं कि आप किस प्रदाता को छोड़ रहे हैं। आपकी प्रदाता गाइड में फ़ील्ड-दर-फ़ील्ड पेलोड मैपिंग, स्टेटस और इवेंट ट्रांसलेशन, और अपनी ऑप्ट-आउट सूची कहाँ से निकालें यह सब मौजूद है।
स्टेप 1 और 2 से शुरू करें। SMS माइग्रेशन में सेंडर रजिस्ट्रेशन सबसे लंबा काम है: कैरियर और रजिस्ट्री रिव्यू कोड बदलाव से भी अधिक समय ले सकता है। कटओवर तारीख़ तय करने से पहले दोनों का दायरा आँकें।
1. अपने डेस्टिनेशन देश सक्षम करें
आपके वर्कस्पेस में एक default-deny डेस्टिनेशन allowlist है जो शुरू में केवल आपके संगठन के होम कंट्री को सक्षम रखती है। कहीं और भेजने पर Bird द्वारा सेंडर रिज़ॉल्व करने से पहले ही 422 SMSDestinationNotEnabled लौटता है, इसलिए आपने जो इंटीग्रेशन सही-सही पोर्ट किया है वह भी पहले अंतरराष्ट्रीय संदेश पर तब तक विफल रहेगा जब तक आप उस देश को खोलें नहीं।
आज आप जिन देशों में भेजते हैं उन सभी को SMS > Destinations के अंतर्गत सक्षम करें। सूची याददाश्त के बजाय अपने मौजूदा प्रदाता के मैसेज लॉग से लें: कटओवर के दिन भूला हुआ कोई भी देश एक मूक अंतराल होगा, और जो देश आप सक्षम करें पर कभी उपयोग न करें वह अनावश्यक जोखिम है। Default deny SMS पंपिंग से होने वाले नुकसान को भी सीमित करता है, जहाँ प्रीमियम रेंज पर फ़र्ज़ी ट्रैफ़िक आपको बिल किया जाता है।
2. सेंडर सेट अप करें
फ़्री-टेक्स्ट सेंड पर, from वह सेंडर है जो आपका प्राप्तकर्ता देखता है, और यह तीन रूपों में से एक लेता है: एक अल्फ़ान्यूमेरिक सेंडर ID, E.164 में एक फ़ोन नंबर जो आपके वर्कस्पेस का है, या एक शॉर्ट कोड। कौन से रूप काम करते हैं यह डेस्टिनेशन देश पर निर्भर करता है, और जो सेंडर वहाँ वैध नहीं है उसे कारण बताते हुए 422 के साथ अस्वीकार किया जाता है। SMS भेजना में प्रति रूप नियम दिए हैं।
प्रत्येक कैसे प्राप्त करें:
- अल्फ़ान्यूमेरिक सेंडर ID आप स्वयं SMS > Senders के अंतर्गत बनाते हैं। जहाँ डेस्टिनेशन देश को सेंडर ID रजिस्टर करना अनिवार्य है, वहाँ रजिस्ट्रेशन सबमिट करें और ट्रैफ़िक रूट करने से पहले अप्रूवल की प्रतीक्षा करें।
- लोकल लॉन्ग कोड पर US बिज़नेस ट्रैफ़िक के लिए लागू 10DLC ब्रांड और कैम्पेन आवश्यक है, जो SMS > 10DLC के अंतर्गत सेट अप होता है, जबकि टोल-फ़्री नंबर और डेडिकेटेड शॉर्ट कोड के अपने सत्यापन या आवेदन कार्यक्रम हैं। US अल्फ़ान्यूमेरिक सेंडर ID स्वीकार ही नहीं करता, इसलिए एक यूरोपीय सेंडर ID जो बाकी हर जगह काम करती है उसका कोई US समकक्ष नहीं है।
- नंबर Numbers वर्कफ़्लो के ज़रिए मिलते हैं, जहाँ उपलब्धता और कोई भी मैनेज्ड प्रोविज़निंग टाइप और डेस्टिनेशन पर निर्भर करती है। सही रास्ते के लिए SMS numbers देखें; अल्फ़ान्यूमेरिक सेंडर जोड़ने से कोई नंबर प्राप्त नहीं होता।
- अपने मौजूदा नंबर रखना सेल्फ़-सर्व नहीं है: Bird में कोई पोर्ट-इन फ़्लो नहीं है जिसे आप डैशबोर्ड से चला सकें। अगर आपके सब्सक्राइबर आज आपके नंबरों पर रिप्लाई करते हैं, तो कटओवर तारीख़ शेड्यूल करने से पहले सपोर्ट के साथ पोर्ट उठाएँ, और पोर्ट तथा कोड बदलाव को अलग-अलग इवेंट के रूप में प्लान करें।
सिस्टम-टेम्प्लेट सेंड एक अलग रिक्वेस्ट फ़ॉर्म का उपयोग करता है। इसे भी लागू डेस्टिनेशन और प्राप्तकर्ता अनुमति चाहिए। यह बॉडी, कैटेगरी और सेंडर प्रदान करता है, इसलिए from इसके साथ स्वीकार नहीं किया जाता और Bird डेस्टिनेशन के लिए वैध सेंडर चुनता है।
3. सेंड कॉल मैप करें
सिंगल-सेंड एंडपॉइंट POST /v1/sms/messages है। to, from, text, और category के साथ एक JSON पेलोड बनाएँ, और सफल कॉल sms_-प्रीफ़िक्स्ड मैसेज ID के साथ 202 Accepted लौटाती है। डिलीवरी रिस्पॉन्स के बाद होती है और वेबहुक इवेंट तथा रीड एंडपॉइंट के ज़रिए आप तक पहुँचती है। पूरा पेलोड SMS भेजना में है; आपके मौजूदा पेलोड से फ़ील्ड-दर-फ़ील्ड मैपिंग आपकी प्रदाता गाइड में है।
कोड पोर्ट करने से पहले, इन अंतरों का ध्यान रखें:
- प्रति रिक्वेस्ट एक प्राप्तकर्ता। Bird में कोई recipients array नहीं है। अगर आपका मौजूदा प्रदाता एक कॉल से कई नंबरों पर भेजता है, तो यहाँ वह प्रति प्राप्तकर्ता एक कॉल बनेगी, या एक रिक्वेस्ट में स्वतंत्र संदेशों का एक बैच बनेगा।
- फ़्री टेक्स्ट पर category आवश्यक है, और यह transactional, marketing, authentication, या service है। अधिकांश प्रदाता कैम्पेन या सेंडर से इंटेंट इन्फ़र करते हैं; यहाँ आप इसे प्रति संदेश घोषित करते हैं, और जहाँ डेस्टिनेशन देश सेंडर रजिस्टर करना अनिवार्य करता है, वह रजिस्ट्रेशन एक कैटेगरी के लिए अप्रूव होता है और उसके बाहर का सेंड 422 SenderCategoryNotPermitted के साथ अस्वीकार किया जाता है। ध्यान दें कि सेंडर का active स्टेटस आपको यह पहले से नहीं बता सकता, क्योंकि यह किसी कैटेगरी के संदर्भ के बिना रिपोर्ट होता है; इसके बजाय प्रति-देश आवश्यकताएँ पढ़ें। पोर्ट करते समय इसे सही रखें, सब कुछ एक ही वैल्यू पर डिफ़ॉल्ट न करें।
- बॉडी सेगमेंट में सीमित है, और Bird ट्रंकेट नहीं करता। लंबी बॉडी 422 के साथ अस्वीकार की जाती है। नॉन-GSM-7 कैरेक्टर एक सेगमेंट में समाने वाली सामग्री को आधे से भी कम कर देते हैं, इसलिए अगर आपका मौजूदा प्रदाता कर्ली कोट्स और डैश को चुपचाप ट्रांसलिटरेट करता था, तो जिन सेगमेंट काउंट के आप आदी हैं उन्हें बनाए रखने के लिए options.smart_encoding सेट करें। यह डिफ़ॉल्ट रूप से बंद है क्योंकि यह आपकी कंपोज़ की गई बॉडी को बदलता है।
- फ़िल्टर डाइमेंशन के लिए tags और कॉन्टेक्स्ट के लिए metadata का उपयोग करें। टैग {name, value} पेयर हैं जिन पर आप एनालिटिक्स फ़िल्टर और स्लाइस कर सकते हैं; मेटाडेटा मनमाना JSON है जिसे Bird स्टोर करता है, रीड पर लौटाता है, और हर वेबहुक इवेंट पर इको करता है। आपके पुराने प्रदाता पर एक सिंगल क्लाइंट रेफ़रेंस फ़ील्ड आमतौर पर metadata पर मैप होती है।
- इंडिविजुअल-सेंड शेड्यूलिंग और आउटबाउंड MMS के लिए अलग योजना चाहिए। scheduled_at, media_urls, validity_period, और प्रति-प्राप्तकर्ता personalization रिज़र्व्ड फ़ील्ड हैं, जो 422 SMSUnsupportedFeature के साथ अस्वीकार किए जाते हैं। आपके इंटीग्रेशन के ये हिस्से बाकी के साथ नहीं चलते: शेड्यूल्ड सेंड अपनी क्यू में रखें और इच्छित सबमिशन समय पर सेंड एंडपॉइंट कॉल करें। ऑडियंस कैम्पेन के लिए, Broadcasts का अलग से मूल्यांकन करें; ब्रॉडकास्ट कोई एंडपॉइंट फ़ील्ड रीनेम नहीं है।
- सीमित पुनः प्रयासों के लिए Idempotency-Key का उपयोग करें। प्रति लॉजिकल मैसेज एक यूनीक key भेजें और तीन घंटे की रीप्ले विंडो के भीतर समान रिक्वेस्ट के पुनः प्रयासों के लिए इसे दोबारा उपयोग करें। रीप्ले डुप्लिकेट रिक्वेस्ट कम करते हैं लेकिन exactly-once डिलीवरी गारंटी नहीं हैं। देखें Idempotency।
4. अपनी ऑप्ट-आउट सूची ट्रांसफ़र करें
पहले प्रोडक्शन सेंड से पहले अपने ऑप्ट-आउट इम्पोर्ट करें। जिस व्यक्ति ने आपके पुराने प्रदाता को रुकने के लिए कहा था उसे संदेश भेजना वह अनुपालन विफलता है जो माइग्रेशन को बिगाड़ती है, और न कैरियर को, न रेगुलेटर को इसकी परवाह है कि किस वेंडर ने रिकॉर्ड खोया।
एक Bird सप्रेशन सेंडर-और-सब्सक्राइबर पेयर को कवर करता है, जो आपके पुराने प्रदाता के सर्विस, प्रोफ़ाइल या अकाउंट-लेवल ब्लॉक से संकीर्ण हो सकता है। व्यक्ति की वास्तविक सहमति वापसी को हर प्रासंगिक सेंडर और प्रोग्राम में सुरक्षित रखें। प्रत्येक पेयर POST /v1/sms/suppressions से जोड़ें:
कोड उदाहरण
while IFS=, read -r destination originator; do
curl -s -X POST https://us1.platform.bird.com/v1/sms/suppressions \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"destination\": \"$destination\", \"originator\": \"$originator\"}"
done < opt-outs.csvयही इम्पोर्ट CLI से bird sms suppressions add --destination +15550001234 --originator +15557654321 के रूप में चलता है।
इम्पोर्ट के बारे में दो बातें जानें:
- सेंडर-विशिष्ट सप्रेशन के लिए दोनों सिरे आवश्यक हैं। वर्कस्पेस-व्यापी ऑप्ट-आउट अलग preference owner से संबंधित है। कॉल idempotent है: 201 एक नया सप्रेशन रिकॉर्ड करता है, 200 पहले से मौजूद मैन्युअल सप्रेशन लौटाता है, इसलिए आंशिक इम्पोर्ट को दोबारा चलाना सुरक्षित है।
- इम्पोर्ट किए गए पेयर को reason: manual मिलता है, जो ट्रांज़ैक्शनल सहित हर कैटेगरी को ब्लॉक करता है। यह उस सप्रेशन से सख़्त है जो Bird किसी stop कीवर्ड से स्वयं रिकॉर्ड करता है। अगर किसी सब्सक्राइबर ने केवल मार्केटिंग से ऑप्ट-आउट किया था, तो सोच-समझकर तय करें कि उस पेयर को इम्पोर्ट करना है या नहीं।
कोड रिटायर करने से पहले मौजूदा कीवर्ड और प्रेफ़रेंस व्यवहार की समीक्षा करें। Bird समर्थित कीवर्ड का उत्तर देता है और जहाँ इसका कंट्री कैटलॉग लागू होता है वहाँ सप्रेशन रिकॉर्ड करता है। असमर्थित अनुरोधों, व्यापक प्रेफ़रेंस और अन्य कॉन्टैक्ट चैनलों की हैंडलिंग बनाए रखें। कस्टम कैम्पेन कीवर्ड और रिप्लाई Keyword rules का उपयोग करते हैं। कवरेज और दायरे के लिए ऑप्ट-आउट और कीवर्ड देखें।
5. डिलीवरी रिपोर्ट को वेबहुक पर स्विच करें
POST /v1/webhooks के साथ एक एंडपॉइंट रजिस्टर करें और उसे इवेंट टाइप की एक स्पष्ट सूची में सब्सक्राइब करें। यह वह स्ट्रक्चरल बदलाव है जो अधिकांश प्रदाताओं में ज़रूरी होता है: प्रति मैसेज या प्रति नंबर कॉलबैक URL के बजाय, आपके वर्कस्पेस में एंडपॉइंट हैं, और प्रत्येक एंडपॉइंट उन इवेंट को सब्सक्राइब करता है जो वह चाहता है।
Bird के इवेंट नाम resource.action का अनुसरण करते हैं। सामान्य पथ sms.accepted, फिर sms.sent, फिर sms.delivered है, जबकि sms.undelivered, sms.failed, sms.expired, और sms.rejected शेष को कवर करते हैं, और sms.received आपके नंबरों पर रिप्लाई लाता है। आपके मौजूदा प्रदाता की स्टेटस शब्दावली से ट्रांसलेशन आपकी प्रदाता गाइड में है, और प्रति-इवेंट पेलोड SMS events में हैं।
कोरिलेशन आसानी से पोर्ट होता है। हर इवेंट sms_id, workspace_id, to, और from ले जाता है, और सेंड से tags और metadata इको करता है, इसलिए आपका हैंडलर मैसेज लुकअप किए बिना सीधे इवेंट से आपके अपने आइडेंटिफ़ायर पढ़ता है।
हैंडलर के साथ पोर्ट करने योग्य दो मैकेनिक्स:
- डिलीवरी Standard Webhooks के अनुसार साइन की जाती हैं, webhook-id, webhook-timestamp, और webhook-signature हेडर के साथ {id}.{timestamp}.{raw body} पर HMAC-SHA256 का उपयोग करके। जो प्रदाता अपनी स्कीम से साइन करते हैं उनके लिए सत्यापन बदलना होगा; रेसिपी Webhooks & events में है।
- डिलीवरी at-least-once और अनक्रमित है। webhook-id पर डीडुप्लिकेट करें और पेलोड timestamp के अनुसार सॉर्ट करें, आगमन क्रम के अनुसार कभी नहीं।
इनबाउंड मैसेज उसी मॉडल का अनुसरण करते हैं। प्रति नंबर इनबाउंड URL कॉन्फ़िगर करने के बजाय वर्कस्पेस के लिए sms.received को एक बार सब्सक्राइब करें, और याद रखें कि Bird सप्रेशन रिकॉर्ड करने के बाद भी stop कीवर्ड से मैच हुई रिप्लाई के लिए sms.received एमिट करता है।
6. सिम्युलेटेड डेस्टिनेशन के विरुद्ध टेस्ट करें
Bird टेस्ट डेस्टिनेशन के एक सेट के लिए डिलीवरी आउटकम सिंथेसाइज़ करता है, ताकि आप बिना हैंडसेट के वास्तविक API रिस्पॉन्स और वास्तविक साइन्ड डिलीवरी के विरुद्ध अपने पोर्ट किए सेंड पाथ और वेबहुक हैंडलर को एक्सरसाइज़ कर सकें। ये वही नंबर हैं जिनका उपयोग कई प्रदाता टेस्ट क्रेडेंशियल के लिए करते हैं, और इनमें से किसी को भेजा गया मैसेज कभी कैरियर तक नहीं पहुँचता।
| डेस्टिनेशन | आपका इंटीग्रेशन क्या देखता है |
|---|---|
| +15005550001 | सबमिशन पर invalid_destination के साथ अस्वीकार |
| +15005550002 | sms.sent, फिर unreachable के साथ sms.undelivered |
| +15005550003 | sms.sent, फिर provider_unavailable के साथ sms.failed |
| +15005550004 | sms.sent, फिर blocked_by_carrier के साथ sms.failed |
| +15005550006 | sms.sent, फिर sms.delivered |
| +15005550009 | sms.sent, फिर recipient_opted_out के साथ sms.failed |
तीन शर्तें लागू होती हैं, और पहली दो नए वर्कस्पेस पर लोगों को फँसा देती हैं:
- ये US नंबर हैं, इसलिए Destinations के अंतर्गत United States सक्षम होना चाहिए, और from US के लिए वैध सेंडर होना चाहिए। अल्फ़ान्यूमेरिक सेंडर ID वहाँ अस्वीकार की जाती है।
- सिम्युलेटेड सेंड बिल किया जाता है डेस्टिनेशन की सामान्य दर पर। कुछ भी हैंडसेट तक नहीं पहुँचता, लेकिन वॉलेट चार्ज वास्तविक है, इसलिए अपने स्मोक टेस्ट का आकार उसी अनुसार रखें।
- आउटकम केवल डेस्टिनेशन से आता है। कोई अलग टेस्ट क्रेडेंशियल नहीं है, और कोई टेस्ट मोड बंद करने को नहीं है।
एक व्यावहारिक स्मोक टेस्ट +15005550006 को भेजता है और सत्यापित करता है कि आपका हैंडलर sms.accepted से sms.sent से sms.delivered तक चलता है; +15005550002 और +15005550009 को भेजता है और सत्यापित करता है कि आपकी विफलता और ऑप्ट-आउट हैंडलिंग सही error कोड पर फ़ायर होती है; और एक वास्तविक मैसेज अपने नियंत्रण वाले हैंडसेट पर भेजता है ताकि पुष्टि हो कि सेंडर और बॉडी अपेक्षित रूप में रेंडर होते हैं।
फिर एक साथ सब के बजाय ट्रैफ़िक के हिस्से के अनुसार कटओवर करें। प्रोडक्शन सेंड का एक छोटा प्रतिशत Bird पर ले जाएँ, उन्हीं रूटों के लिए आपके पुराने प्रदाता ने जो रिपोर्ट किया उसके मुक़ाबले डिलीवरी दरों और एरर कोड के लिए SMS log और metrics देखें, और जैसे-जैसे नंबर टिकें हिस्सा बढ़ाएँ। पहले पूरे बिलिंग पीरियड तक सही दिखने तक पुराना इंटीग्रेशन डिप्लॉय करने योग्य रखें।
किसी विशिष्ट प्रदाता से माइग्रेट करना
- Twilio: form-encoded PascalCase से JSON, Messaging Services से सेंडर, StatusCallback से सब्सक्राइब्ड वेबहुक
- Plivo: src और dst से from और to, Powerpacks से सेंडर, DND पेयर से सप्रेशन
- Telnyx: Bird के सबसे नज़दीकी सेंड, मैसेजिंग प्रोफ़ाइल से सेंडर और सब्सक्रिप्शन अलग किए, प्रोफ़ाइल-वाइड ऑप्ट-आउट से पेयर
- Bandwidth: दो होस्ट से एक, applicationId कॉलबैक से वर्कस्पेस वेबहुक, और एक ऑप्ट-आउट सूची जो आपका अपना एप्लिकेशन पहले से रखता है
- Sinch: बैच से सिंगल सेंड, body से text, ग्रुप मेंबरशिप सप्रेशन के रूप में पुनर्निर्मित
- Infobip: एक तीन-स्तरीय पेलोड फ़्लैट किया गया, प्रति-अकाउंट बेस URL से रीजनल होस्ट, एक Blocklist पेयर में विस्तारित
- Bird Connectivity Platform: rest.messagebird.com API, originator और recipients से from और to, reportUrl GET कॉलबैक से साइन्ड वेबहुक
अगले कदम
-
SMS प्रदाताओं की तुलना करें: प्रोडक्ट वर्कफ़्लो और माइग्रेशन विचारों का मूल्यांकन करें
-
SMS भेजना: पूरा सेंड पेलोड, सेंडर, सेगमेंट, और async 202 मॉडल
-
ऑप्ट-आउट और कीवर्ड: Bird आपके लिए क्या उत्तर देता है, और सप्रेशन कैसे प्रबंधित करें
-
SMS events: इवेंट शब्दावली और प्रति-इवेंट पेलोड
-
Webhooks & events: एंडपॉइंट सेटअप, सिग्नेचर सत्यापन, पुनः प्रयास और रीप्ले
संबंधित संसाधन
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।