GTAF, DPA से कम्यूनिकेट करते समय किसी सदस्य की पहचान करने के लिए, उपयोगकर्ता की कुंजी का इस्तेमाल करता है. जिन ऐप्लिकेशन के पास उपयोगकर्ता के एमएसआईएसडीएन का ऐक्सेस होता है वे इसे user_key के तौर पर इस्तेमाल कर सकते हैं. दूसरी ओर, जिन ऐप्लिकेशन के पास MSISDN का ऐक्सेस नहीं है उन्हें उपयोगकर्ता के MSISDN का पता लगाए बिना, कैरियर प्लान आइडेंटिफ़ायर (सीपीआईडी) सेट अप करना होगा. यहां हम उस तरीके के बारे में बताते हैं जिससे सीपीआईडी सेट किया जाता है.
सीपीआईडी कॉल फ़्लो
दूसरी इमेज: सीपीआईडी सेट अप करने के लिए कॉल फ़्लो.
- यूरोपीय संघ में मौजूद Google ऐप्लिकेशन, Google के इंटरनल एपीआई का इस्तेमाल करके, GTAF से CPID एंडपॉइंट का यूआरएल वापस पाता है. ऑपरेटर की पहचान, क्लाइंट के सार्वजनिक आईपी पते और चालू सिम कार्ड के MCC+MNC का इस्तेमाल करके की जाती है. एमवीएनओ के मामले में, Google एसपीएन और GID1 का इस्तेमाल करके यह पता लगाएगा कि एमवीएनओ कौन है
- क्लाइंट, CPID एंडपॉइंट को एचटीटीपी GET अनुरोध भेजता है. ऑपरेटर, एचटीटीपीएस पर अनुरोध भेजने की सुविधा दे सकता है.
- ऑपरेटर, अनुरोध की पहचान करने के लिए डीप पैकेट इंस्पेक्शन फ़ंक्शन का इस्तेमाल कर सकता है. साथ ही, उपयोगकर्ता के फ़ोन नंबर को अनुरोध में एचटीटीपी हेडर के तौर पर शामिल कर सकता है.
- सीपीआईडी एंडपॉइंट को अनुरोध मिलता है, वह सीपीआईडी बनाता है, और सीपीआईडी को यूई को वापस भेजता है. इसमें टाइम टू लिव (टीटीएल) होता है. इससे पता चलता है कि यूई इस सीपीआईडी का इस्तेमाल कब तक कर सकता है.
अगर ऑपरेटर चाहे, तो सीपीआईडी एंडपॉइंट यूआरएल में डोमेन नेम के बजाय आईपी पतों का इस्तेमाल भी कर सकता है. आईपी पते, निजी पते की जगह में हो सकते हैं. हालांकि, Google क्लाइंट को ऑपरेटर के नेटवर्क में इन पतों तक पहुंचना होगा.
ऑपरेटर को, शामिल होने की प्रोसेस के तहत Google को यह जानकारी देनी होगी:
- CPID_URL, वह यूआरएल है जिस पर ऐप्लिकेशन, सीपीआईडी पाने के लिए संपर्क करेंगे. एक CPID_URL ज़रूरी है. हालांकि, ऑपरेटर उपलब्धता बढ़ाने के लिए कई यूआरएल दे सकता है.
- ऑपरेटर के मालिकाना हक वाले आईपी प्रीफ़िक्स की सूची. साथ ही, मोबाइल कंट्री कोड (एमसीसी) और मोबाइल नेटवर्क कोड (एमएनसी) की सूची, जिन्हें ऑपरेटर दिए गए CPID_URLs से मैप करना चाहता है. अगर ऑपरेटर अपने नेटवर्क में MVNO को अलग-अलग करने के लिए SPN या GID1 का इस्तेमाल करता है, तो ऑपरेटर को यह जानकारी भी देनी होगी. Google इस जानकारी का इस्तेमाल करके, क्लाइंट को सीपीआईडी के सही एंडपॉइंट से मैच करेगा. जैसा कि इमेज 2 के पहले चरण में दिखाया गया है.
अनुरोध का फ़ॉर्मैट यह है:
GET CPID_URL
लेगसी सिस्टम के साथ काम करने के लिए, सीपीआईडी एंडपॉइंट को इस तरह के अनुरोध को स्वीकार करना चाहिए:
GET CPID_URL?app={app_id}
सीपीआईडी जनरेट करते समय, सीपीआईडी एंडपॉइंट {app_id}
यूआरएल पैरामीटर को अनदेखा कर सकता है. हालांकि, इसमें पैरामीटर वाले अनुरोध को हैंडल करने की सुविधा होनी चाहिए.
सीपीआईडी एंडपॉइंट के अनुरोध में Accept-Language
हेडर शामिल किया जा सकता है. अगर हेडर शामिल किया गया है, तो डीपीए को Mobile Data Plan Sharing API का इस्तेमाल करके भेजे जाने वाले अपडेट में, लोगों के पढ़ने लायक स्ट्रिंग का इस्तेमाल करना होगा. इसके लिए, सीपीआईडी अनुरोध में दी गई सेटिंग का इस्तेमाल करना होगा.
जब भी क्लाइंट, GET CPID_URL अनुरोध जारी करता है, तो उसे नया CPID मिलना चाहिए. अगर CPID बन जाता है, तो CPID एंडपॉइंट को 200 OK रिस्पॉन्स देना होगा. जवाब के मुख्य हिस्से में, CPIDResponse का एक इंस्टेंस होना ज़रूरी है.
{
"cpid": "<CPID_string>",
"ttlSeconds": 2592000
}
जवाब में मिला CPID, ttlSeconds सेकंड के लिए मान्य होना चाहिए. भले ही, सदस्य ने बाद में अन्य CPID का अनुरोध किया हो. Google का सुझाव है कि सबसे अच्छे उपयोगकर्ता अनुभव के लिए, टीटीएल की वैल्यू 30 दिन होनी चाहिए. हालांकि, यह 14 दिन से कम नहीं होनी चाहिए. GTAF, DPA को किए जाने वाले अगले सभी कॉल में, RFC2396 के हिसाब से CPID को एन्कोड करेगा.
सीपीआईडी जनरेट करना
सीपीआईडी एंडपॉइंट के लिए, सीपीआईडी बनाने का सुझाया गया तरीका यह है:
CPID_string = Base64(AES(MSISDN + TimeStamp + language, secret))
सीपीआईडी एंडपॉइंट, एमएसआईएसडीएन, Accept-Language हेडर में क्लाइंट की भेजी गई भाषा, और हाई रिज़ॉल्यूशन वाले टाइमस्टैंप को जोड़ता है. इसके बाद, secret
की का इस्तेमाल करके, AES के ज़रिए इसे एन्क्रिप्ट (सुरक्षित) करता है. टाइमस्टैंप, उस समय के हिसाब से होना चाहिए जब सीपीआईडी खत्म होता है. एन्क्रिप्ट (सुरक्षित) किए गए आउटपुट को Base64 कोड में बदला जाता है. इसके अलावा, जब यूआरएल में CPID का इस्तेमाल किया जाता है, तो इसे यूआरएल के लिए कोड में बदलना ज़रूरी है. ऐसा इसलिए, ताकि Base64 में इस्तेमाल किए गए खास वर्णों (/+=) को हैंडल किया जा सके. खास तौर पर, जब GTAF, DPA को कॉल करता है या जब DPA, Mobile Data Plan Sharing API को कॉल करता है, तब CPID को यूआरएल के तौर पर एन्कोड किया जाना चाहिए.
किसी ऑपरेटर की स्थिति के आधार पर, CPID एंडपॉइंट को लागू करना मुश्किल हो सकता है. सीपीआईडी एंडपॉइंट पर एमएसआईएसडीएन का ऐक्सेस पाने में अक्सर समस्या आती है. हमें ऑपरेटरों को शामिल करने के दौरान मिले सबक शेयर करने में खुशी हो रही है. अगर आपको कोई समस्या आती है, तो कृपया हमसे संपर्क करें.
CPID स्टोरेज
ऊपर बताए गए तरीके का इस्तेमाल करके जनरेट किए गए सीपीआईडी को डेटाबेस में सेव करने की ज़रूरत नहीं होती. डीपीए को कॉल हैंडल करने के लिए ज़रूरी जानकारी, सीपीआईडी से मिल सकती है.
- जब डीपीए को प्लान की स्थिति या ऑफ़र के बारे में जानने के लिए, GTAF से कॉल मिलता है, तो CPID को डिक्रिप्ट करके और MSISDN को निकालकर, MSISDN का पता लगाया जा सकता है.
- सीपीआईडी के खत्म होने का समय पता करने के लिए, सीपीआईडी को डिक्रिप्ट करें. इसके बाद, खत्म होने का टाइमस्टैंप निकालें.
उपलब्धता और क्षमता से जुड़ी ज़रूरी शर्तें
अगर क्लाइंट को सीपीआईडी नहीं मिलता है, तो वे Mobile Data Plan API से कोई भी जानकारी ऐक्सेस नहीं कर सकते. इस वजह से, ऑपरेटर को यह पक्का करने के लिए ज़रूरी कदम उठाने होंगे कि सीपीआईडी एंडपॉइंट उपलब्ध हो. इन उपायों में, सीपीआईडी एंडपॉइंट और डीपीआई फ़ंक्शन के कई इंस्टेंस शामिल हैं. साथ ही, दोनों फ़ंक्शन के लिए फ़िज़िकल, साइट, और नेटवर्क रिडंडेंसी शामिल है. यह भी पक्का करना ज़रूरी है कि सिस्टम के संसाधन और क्षमताएं ज़रूरत के हिसाब से हों. इसके अलावा, सीपीआईडी एंडपॉइंट के साथ-साथ, हेडर को इंजेक्ट करने वाले डीपीआई फ़ंक्शन में इतनी क्षमता होनी चाहिए कि वह सीपीआईडी का अनुरोध करने वाले सभी Google क्लाइंट के लोड को मैनेज कर सके. सीपीआईडी एंडपॉइंट, ttlSeconds
फ़ील्ड में बड़ी वैल्यू का इस्तेमाल कर सकता है, ताकि सीपीआईडी जनरेट करने की फ़्रीक्वेंसी कम हो जाए.
गड़बड़ी के मामले
अगर कोई गड़बड़ी होती है, तो सीपीआईडी एंडपॉइंट को एचटीटीपी गड़बड़ी का जवाब देना होगा. साथ ही, जवाब के मुख्य हिस्से में ErrorResponse का एक इंस्टेंस शामिल करना होगा. गड़बड़ी के मैसेज में ऐसी जानकारी शामिल होनी चाहिए जिससे गड़बड़ी की वजह का पता लगाने में मदद मिल सके. उदाहरण के लिए, अगर सीपीआईडी की समयसीमा खत्म हो गई है, तो सीपीआईडी जनरेट होने और उसकी समयसीमा खत्म होने का समय शामिल करने से, हमें यह पुष्टि करने में मदद मिलेगी कि सीपीआईडी एंडपॉइंट, डिज़ाइन के मुताबिक काम कर रहा है.
{
"errorMessage": "<error message>",
"cause": "USER_ROAMING"
}
सीपीआईडी एंडपॉइंट को, स्थिति के हिसाब से यह जानकारी देनी होगी:
- अगर किसी ऐसे उपयोगकर्ता के लिए सीपीआईडी अनुरोध मिलता है जो ऑपरेटर नेटवर्क से नहीं है (जैसे, किसी दूसरे ऑपरेटर का उपयोगकर्ता, लेकिन इस सीपीआईडी एंडपॉइंट से सेवा पाने वाले नेटवर्क पर रोमिंग कर रहा है) या जिसने Google के साथ डेटा प्लान की जानकारी शेयर करने का विकल्प नहीं चुना है, तो सीपीआईडी एंडपॉइंट को एचटीटीपी स्टेटस कोड 403 दिखाना होगा. साथ ही, वजह के तौर पर USER_ROAMING, USER_OPT_OUT या INELIGIBLE_FOR_SERVICE दिखाना होगा.
- अगर किसी सीपीआईडी अनुरोध में अमान्य फ़ोन नंबर दिया गया है, तो सीपीआईडी एंडपॉइंट को INVALID_NUMBER गड़बड़ी की वजह के साथ HTTP 400 कोड भेजना होगा.
- अगर सीपीआईडी एंडपॉइंट को भेजा गया अनुरोध किसी और तरीके से गलत है, तो सीपीआईडी एंडपॉइंट को एचटीटीपी 400 का जवाब देना होगा. साथ ही, वजह के तौर पर ERROR_CAUSE_UNSPECIFIED बताना होगा.
- गड़बड़ी की अन्य वजहों के लिए, एचटीटीपी गड़बड़ी का कोई भी कोड इस्तेमाल किया जा सकता है. खास तौर पर, CPID एंडपॉइंट पर किसी भी तरह की तकनीकी गड़बड़ी के लिए, HTTP 500 गड़बड़ी की वजह सही होती है.