सीपीडी लगाना

डीपीए से इंटरैक्ट करते समय, सदस्य की पहचान करने के लिए, GTAF उपयोगकर्ता कुंजी का इस्तेमाल करता है. जिन ऐप्लिकेशन के पास उपयोगकर्ता के ऐक्सेस तक है, उनका MSISDN इसे user_key के तौर पर इस्तेमाल कर सकता है. वहीं दूसरी ओर, ऐसे ऐप्लिकेशन जिनके पास MSISDN का ऐक्सेस नहीं है, उन्हें उपयोगकर्ता के MSISDN का पता लगाए बिना कैरियर प्लान आइडेंटिफ़ायर (सीपीआईडी) बनाना होगा. इसके बाद, हम उस तरीके के बारे में बताते हैं जो सीपीआईडी बनाता है.

CPID कॉल प्रवाह

चित्र 2: सीपीआईडी बनाने के लिए कॉल फ़्लो.

  1. यूरोपीय संघ में Google ऐप्लिकेशन, GTAF से CPID एंडपॉइंट के यूआरएल को पाने के लिए Google-अंदरूनी एपीआई का इस्तेमाल करता है. ऑपरेटर की पहचान क्लाइंट के आईपी पते और सक्रिय सिम कार्ड के MCC+MNC के ज़रिए की जाती है. MVNO के मामले में, Google MVNO तय करने के लिए, SPN और GID1 का इस्तेमाल करेगा
  2. क्लाइंट, सीपीआईडी एंडपॉइंट के लिए एचटीटीपी जीईटी अनुरोध जारी करता है. ऑपरेटर को शायद एचटीटीपीएस से अनुरोध भेजने में मदद मिले.
  3. अनुरोध को पहचानने और उपयोगकर्ता के फ़ोन नंबर को एचटीटीपी हेडर के तौर पर इंजेक्ट करने के लिए, ऑपरेटर MAY अपने डीप पैकेट इंस्पेक्शन फ़ंक्शन का इस्तेमाल कर सकता है.
  4. CPID एंडपॉइंट को अनुरोध मिलता है, CPID बनाता है, और UE को लाइव होने में लगने वाले समय (टीटीएल) के साथ UE को लौटाता है जो यह बताता है कि UE कितनी देर तक इस सीपीआईडी का इस्तेमाल कर सकता है.

अगर पसंदीदा हो, तो ऑपरेटर MAY भी CPID एंडपॉइंट यूआरएल में डोमेन नामों के बजाय आईपी पतों का इस्तेमाल कर सकता है. हो सकता है कि आईपी पते, निजी पते वाले स्पेस में हों, लेकिन Google नेटवर्क, ऑपरेटर के नेटवर्क में पहुंच सके.

इस प्रोसेस में, ऑपरेटर को Google को यह जानकारी देनी होगी:

  1. वह CPID_URL जिससे ऐप्लिकेशन CPID पाने के लिए संपर्क करेंगे. एक CPID_URL ज़रूरी है, लेकिन ऑपरेटर उपलब्धता बढ़ाने के लिए एक से ज़्यादा यूआरएल दे सकता है.
  2. उन आईपी प्रीफ़िक्स की सूची जिनका ऑपरेटर ऑपरेटर है. अगर ऑपरेटर अपने नेटवर्क में MVNO को अलग दिखाने के लिए SPN या GID1 का इस्तेमाल करता है, तो ऑपरेटर यह जानकारी भी देगा. जैसा कि चित्र 2 में दिए गए पहले चरण में दिखाया गया है, Google इस जानकारी का इस्तेमाल क्लाइंट से जुड़े सीपीआईडी एंडपॉइंट का मिलान करने के लिए करेगा.

अनुरोध का फ़ॉर्मैट यह है: GET CPID_URL लेगसी वजहों से, सीपीआईडी एंडपॉइंट को ऐसे अनुरोध के साथ काम करना चाहिए, जैसे कि:

GET CPID_URL?app={app_id}

सीपीआईडी एंडपॉइंट जनरेट करते समय, सीपीआईडी एंडपॉइंट {app_id} यूआरएल पैरामीटर को अनदेखा कर सकता है. हालांकि, यह ज़रूरी है कि पैरामीटर वाला अनुरोध पूरा न हो पाए.

CPID एंडपॉइंट के अनुरोध में Accept-Language हेडर शामिल हो सकता है. अगर हेडर शामिल किया जाता है, तो मोबाइल डेटा प्लान शेयर करने वाले एपीआई का इस्तेमाल करके भेजे जाने वाले डीपीए के ज़रिए भेजे गए मानों को पढ़ने में आसान स्ट्रिंग के तौर पर, सीपीआईडी अनुरोध में दी गई सेटिंग का इस्तेमाल करना होगा.

जब भी क्लाइंट GET CPID_URL का अनुरोध करता है, तो उसे एक नया CPID मिलता है. अगर सीपीआईडी बनाना सफल रहा, तो सीपीआईडी एंडपॉइंट के लिए 200 ठीक रिस्पॉन्स देना ज़रूरी है. रिस्पॉन्स के मुख्य हिस्से में CPIDResponse का इंस्टेंस होना ज़रूरी है.

{
    "cpid": "<CPID_string>",
    "ttlSeconds": 2592000
}

लौटाया गया सीपीआईडी ttlसेकंड के लिए मान्य होना चाहिए, भले ही सदस्य ने अन्य सीपीआईडी का अनुरोध किया हो. Google का सुझाव है कि आप 30 दिनों के लिए TTL (टीटीएल) वैल्यू का इस्तेमाल करें, लेकिन बेहतर उपयोगकर्ता अनुभव के लिए 14 दिनों से कम इस्तेमाल न करें. GTAF, बाद वाले कॉल में, आरएफ़सी2396 के मुताबिक सीपीआईडी को एन्कोड करेगा.

CPID जनरेशन

CPID एंडपॉइंट के लिए CPID बनाने का सुझाया गया तरीका:

CPID_string = Base64(AES(MSISDN + TimeStamp + language, secret))

सीपीआईडी एंडपॉइंट, MSISDN को एक साथ जोड़ता है, जो क्लाइंट की तरफ़ से स्वीकार की गई भाषा के हेडर में भेजी जाने वाली भाषा है. साथ ही, यह हाई रिज़ॉल्यूशन टाइमस्टैंप और secretकी मदद से AES के ज़रिए एन्क्रिप्ट (सुरक्षित) करता है. टाइमस्टैंप को उस समय के हिसाब से होना चाहिए जिस समय CPID खत्म होता है. एन्क्रिप्ट (सुरक्षित) किया गया आउटपुट Base64 कोड में बदला गया है. इसके अलावा, जब यूआरएल में सीपीआईडी का इस्तेमाल किया जाता है, तो इसे Base64 में इस्तेमाल किए गए खास वर्णों (/+=) को हैंडल करने के लिए, यूआरएल-एन्कोड किया जाना ज़रूरी है. खास तौर पर, जब GTAF, डीपीए को कॉल करता है या जब डीपीए, मोबाइल डेटा प्लान एपीआई को कॉल करता है, तो सीपीआईडी को यूआरएल कोड में बदलना ज़रूरी होता है.

किसी खास ऑपरेटर के मामले के हिसाब से, सीपीआईडी एंडपॉइंट लागू करना आम बात नहीं होती. अक्सर मिलने वाली एक खास चुनौती, सीपीआईडी एंडपॉइंट पर MSISDN का ऐक्सेस पाना है. हमें यह जानकर खुशी हो रही है कि आपने ऑनबोर्डिंग ऑपरेटर से क्या सीखा. अगर कोई समस्या आती है, तो हमसे संपर्क करें.

सीपीआईडी स्टोरेज

ऊपर बताए गए तरीके का इस्तेमाल करके बनाए गए सीपीआईडी को डेटाबेस में सेव करने की ज़रूरत नहीं होती. डीपीए को कॉल मैनेज करने के लिए, काम की जानकारी सीपीआईडी से ली जा सकती है.

  1. जब डीपीए को किसी प्लान की स्थिति या ऑफ़र के लिए, GTAF से कॉल मिलता है, तो एमएसआईडीडीएन लिया जा सकता है. इसके लिए, सीपीआईडी को डिक्रिप्ट किया जा सकता है और एमआईएसएसडी के डेटा को निकाला जा सकता है.
  2. सीपीआईडी को इस्तेमाल करने की समयसीमा खत्म होने का समय, सीपीआईडी को डिक्रिप्ट करके खत्म किया जा सकता है. इसके बाद, समयसीमा खत्म होने के टाइमस्टैंप को हटाया जा सकता है.

उपलब्धता और क्षमता से जुड़ी ज़रूरतें

अगर क्लाइंट सीपीआईडी नहीं पा सकते हैं, तो वे मोबाइल डेटा प्लान एपीआई से कोई जानकारी ऐक्सेस नहीं कर सकते. इस वजह से, ऑपरेटर सीपीआईडी एंडपॉइंट की उपलब्धता को पक्का करने के लिए ज़रूरी उपाय करेगा. इन तरीकों में, सीपीआईडी एंडपॉइंट और डीपीआई फ़ंक्शन के कई इंस्टेंस होना, दोनों फ़ंक्शन के लिए फ़िज़िकल तौर पर, साइट, और नेटवर्क रिडंडंसी शामिल हैं. साथ ही, यह पक्का करें कि सिस्टम रिसॉर्स और क्षमता काफ़ी हों. इसके अलावा, सीपीआईडी एंडपॉइंट के साथ-साथ हेडर इंजेक्ट करने वाले डीपीआई फ़ंक्शन के लिए भी काफ़ी क्षमता होनी चाहिए, ताकि वह सीपीआईडी का अनुरोध करने वाले सभी Google क्लाइंट का लोड मैनेज कर सके. सीपीआईडी एंडपॉइंट, ttlSecondsफ़ील्ड में बड़े मानों का इस्तेमाल करके, सीपीआईडी जनरेट करने की फ़्रीक्वेंसी को कम कर सकता है.

गड़बड़ी के मामले

अगर कोई गड़बड़ी होती है, तो सीपीआईडी एंडपॉइंट को रिस्पॉन्स के तौर पर ऐसी एचटीटीपी गड़बड़ी दिखनी चाहिए जो ज़रूरी हो कि उसमें ErrorResponse का इंस्टेंस हो. एक अच्छे गड़बड़ी के मैसेज में ऐसी जानकारी शामिल होगी जो गड़बड़ी की वजह को डीबग करने में मदद कर सकती है. उदाहरण के लिए, अगर सीपीआईडी की समयसीमा खत्म हो गई है और सीपीआईडी जनरेशन और समयसीमा खत्म होने का समय शामिल है, तो हमें यह पुष्टि करने में मदद मिलेगी कि सीपीआईडी एंडपॉइंट ठीक से काम कर रहा है या नहीं.

{
    "errorMessage": "<error message>",
    "cause": "USER_ROAMING"
}

सीपीआईडी एंडपॉइंट को, स्थिति के हिसाब से नीचे दी गई जानकारी देनी चाहिए:

  1. अगर किसी ऐसे उपयोगकर्ता को CPID अनुरोध मिलता है, जो ऑपरेटर नेटवर्क (उदाहरण के लिए, किसी दूसरे ऑपरेटर से जुड़ा हुआ है, लेकिन इस CPID एंडपॉइंट की ओर से नेटवर्क पर रोमिंग में है) से नहीं जुड़ा है या जिसने Google के साथ डेटा प्लान की जानकारी शेयर करने का विकल्प नहीं चुना है, तो CPID एंडपॉइंट को USER_ROAMING, USER_OPT_OUT या INELIGIBLE_FOR_SERVICE के साथ प्रदर्शन स्थिति स्टेटस 403 देना चाहिए
  2. अगर सीपीडी अनुरोध किसी अमान्य फ़ोन नंबर के साथ मिलता है, तो सीपीआईडी एंडपॉइंट को noindex_NUMBER गड़बड़ी की वजह से एचटीटीपी 400 दिखाना चाहिए.
  3. अगर CPID एंडपॉइंट के लिए अनुरोध किसी भी दूसरे तरीके से गलत है, तो CPID एंडपॉइंट को गड़बड़ी 400 के साथ HTTP_400 रिटर्न करना चाहिए.
  4. गड़बड़ी की दूसरी वजहों के लिए, एचटीटीपी गड़बड़ी कोड काम करता है. खास तौर पर, एचटीटीपी 500, सीपीआईडी एंडपॉइंट में किसी भी तरह की अंदरूनी गड़बड़ी होने की वजह से सही हो सकता है.