CPID প্রতিষ্ঠা করা

DPA এর সাথে যোগাযোগ করার সময় GTAF একজন গ্রাহককে সনাক্ত করতে ব্যবহারকারী কী ব্যবহার করে। ব্যবহারকারীর MSISDN-এ অ্যাক্সেস রয়েছে এমন অ্যাপ্লিকেশনগুলি এটিকে user_key হিসাবে ব্যবহার করতে পারে। অন্যদিকে, যে অ্যাপ্লিকেশনগুলির MSISDN-এ অ্যাক্সেস নেই, তাদের ব্যবহারকারীর MSISDN আবিষ্কার না করে একটি ক্যারিয়ার প্ল্যান শনাক্তকারী (CPID) স্থাপন করতে হবে। নিম্নলিখিতটিতে, আমরা একটি CPID প্রতিষ্ঠা করে এমন প্রক্রিয়া বর্ণনা করি।

CPID কল ফ্লো

চিত্র 2: CPID প্রতিষ্ঠার জন্য কল প্রবাহ।

  1. UE-তে একটি Google অ্যাপ্লিকেশন GTAF থেকে CPID শেষ পয়েন্টের URL পুনরুদ্ধার করতে একটি Google-অভ্যন্তরীণ API ব্যবহার করে। ক্লায়েন্টের সর্বজনীন আইপি ঠিকানা এবং সক্রিয় সিম কার্ডের MCC+MNC ব্যবহার করে অপারেটরকে চিহ্নিত করা হয়। MVNO-এর ক্ষেত্রে, Google MVNO নির্ধারণ করতে SPN এবং GID1 ব্যবহার করবে
  2. ক্লায়েন্ট CPID এন্ডপয়েন্টে একটি HTTP GET অনুরোধ জারি করে। অপারেটর HTTPS এর মাধ্যমে অনুরোধ পাঠানো সমর্থন করতে পারে৷
  3. অপারেটর তাদের ডিপ প্যাকেট পরিদর্শন ফাংশন নিয়োগ করতে পারে অনুরোধটি সনাক্ত করতে এবং ব্যবহারকারীর ফোন নম্বরটি একটি HTTP শিরোনাম হিসাবে অনুরোধে ইনজেকশন করতে।
  4. CPID এন্ডপয়েন্ট অনুরোধটি গ্রহণ করে, CPID তৈরি করে, এবং UE-এ CPID ফেরত দেয় যেখানে UE কতক্ষণ এই CPID ব্যবহার করতে পারে তা নির্দেশ করে।

অপারেটর CPID এন্ডপয়েন্ট URL-এ ডোমেন নামের পরিবর্তে IP ঠিকানা ব্যবহার করতে পারে যদি এটি পছন্দনীয় হয়। IP ঠিকানাগুলি ব্যক্তিগত ঠিকানার জায়গায় থাকতে পারে তবে সেগুলিকে অপারেটরদের নেটওয়ার্কের মধ্যে থাকা Google ক্লায়েন্টদের কাছে পৌঁছাতে হবে৷

অনবোর্ডিং প্রক্রিয়ার অংশ হিসেবে অপারেটর Google-কে নিম্নলিখিত তথ্য প্রদান করবে:

  1. CPID_URL যেটি অ্যাপ্লিকেশনগুলি CPID অর্জন করতে যোগাযোগ করবে৷ একটি CPID_URL বাধ্যতামূলক কিন্তু অপারেটর উপলব্ধতা বাড়াতে একাধিক URL প্রদান করতে পারে৷
  2. অপারেটরের মালিকানাধীন IP উপসর্গের তালিকা এবং মোবাইল কান্ট্রি কোড (MCC) এবং মোবাইল নেটওয়ার্ক কোড (MNC) যা অপারেটর প্রদত্ত CPID_URL-এ ম্যাপ করতে চায়৷ যদি অপারেটর তাদের নেটওয়ার্কে MVNO গুলিকে আলাদা করতে SPN বা GID1 ব্যবহার করে, তাহলে অপারেটর এই তথ্যও প্রদান করবে৷ Google এই তথ্য ব্যবহার করবে ক্লায়েন্টদের সংশ্লিষ্ট CPID এন্ডপয়েন্টের সাথে মেলাতে, যেমন চিত্র 2-এর ধাপ 1-এ দেখানো হয়েছে।

অনুরোধের বিন্যাস হল: GET CPID_URL লিগ্যাসি কারণে, CPID এন্ডপয়েন্ট নিম্নলিখিত মত একটি অনুরোধ সমর্থন করতে সক্ষম হওয়া উচিত:

GET CPID_URL?app={app_id}

CPID তৈরি করার সময় CPID এন্ডপয়েন্ট {app_id} URL প্যারামিটার উপেক্ষা করতে পারে। কিন্তু, এটি অবশ্যই একটি অনুরোধ পরিচালনা করতে সক্ষম হবে যাতে প্যারামিটার রয়েছে।

CPID এন্ডপয়েন্টের অনুরোধে Accept-Language header অন্তর্ভুক্ত থাকতে পারে। যদি শিরোনামটি অন্তর্ভুক্ত করা হয় তবে DPA মোবাইল ডেটা প্ল্যান শেয়ারিং API ব্যবহার করে যে আপডেটগুলি পাঠায় তাতে মানব পাঠযোগ্য স্ট্রিংগুলি অবশ্যই CPID অনুরোধে প্রদত্ত সেটিংস ব্যবহার করতে হবে।

প্রতিবার ক্লায়েন্ট একটি GET CPID_URL অনুরোধ জারি করলে, এটি অবশ্যই একটি নতুন CPID গ্রহণ করবে৷ যদি CPID তৈরি করা সফল হয়, তাহলে CPID এন্ডপয়েন্ট অবশ্যই 200 OK প্রতিক্রিয়া প্রদান করবে। রেসপন্স বডিতে অবশ্যই CPIDresponse এর একটি উদাহরণ থাকতে হবে।

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

প্রত্যাবর্তিত CPID অবশ্যই ttlSeconds সেকেন্ডের জন্য বৈধ হতে হবে এমনকি যদি একজন গ্রাহক পরে অন্য CPID-এর অনুরোধ করে থাকেন। Google সর্বোত্তম ব্যবহারকারীর অভিজ্ঞতার জন্য 30 দিনের একটি TTL মান ব্যবহার করার পরামর্শ দেয় তবে 14 দিনের কম নয়৷ DPA-তে পরবর্তী কলগুলিতে GTAF RFC2396 প্রতি CPID এনকোড করবে।

CPID প্রজন্ম

একটি CPID তৈরি করার জন্য CPID এন্ডপয়েন্টের জন্য প্রস্তাবিত উপায় হল:

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

CPID এন্ডপয়েন্ট MSISDN, Accept-Language হেডারে ক্লায়েন্ট কর্তৃক প্রেরিত ভাষা এবং একটি উচ্চ রেজোলিউশন টাইমস্ট্যাম্পকে সংযুক্ত করে এবং secret কী ব্যবহার করে AES এর মাধ্যমে এনক্রিপ্ট করে। টাইমস্ট্যাম্প CPID মেয়াদ শেষ হওয়ার সময়ের সাথে সঙ্গতিপূর্ণ হওয়া উচিত। এনক্রিপ্ট করা আউটপুট হল Base64 এনকোড করা। উপরন্তু, যখন একটি URL-এ CPID ব্যবহার করা হয়, তখন বেস64-এ ব্যবহৃত বিশেষ অক্ষর (/+=) পরিচালনা করার জন্য এটি অবশ্যই URL-এনকোডেড হতে হবে। বিশেষ করে যখন GTAF DPA কল করে বা যখন DPA মোবাইল ডেটা প্ল্যান শেয়ারিং API কল করে, তখন CPID অবশ্যই URL-এনকোডেড হতে হবে।

একটি নির্দিষ্ট অপারেটরের পরিস্থিতির উপর নির্ভর করে, CPID শেষ পয়েন্ট বাস্তবায়ন করা অ-তুচ্ছ হতে পারে। একটি বিশেষ চ্যালেঞ্জ যা প্রায়শই সম্মুখীন হয় তা হল CPID এন্ডপয়েন্টে MSISDN-এ অ্যাক্সেস পাওয়া। আমরা অনবোর্ডিং অপারেটরদের শেখা পাঠগুলি ভাগ করে নিতে পেরে আনন্দিত। আপনি কোন চ্যালেঞ্জ সম্মুখীন হলে আমাদের সাথে যোগাযোগ করুন.

CPID স্টোরেজ

উপরে বর্ণিত প্রক্রিয়া ব্যবহার করে তৈরি একটি CPID একটি ডাটাবেসে সংরক্ষণ করতে হবে না। DPA-তে কল পরিচালনার জন্য প্রাসঙ্গিক তথ্য CPID থেকে নেওয়া যেতে পারে।

  1. যখন DPA একটি প্ল্যান স্ট্যাটাস বা অফারগুলির জন্য GTAF থেকে একটি কল পায়, তখন CPID ডিক্রিপ্ট করে এবং MSISDN বের করে MSISDN প্রাপ্ত করা যেতে পারে।
  2. CPID-এর মেয়াদ শেষ হওয়ার সময় CPID ডিক্রিপ্ট করে এবং তারপর মেয়াদ শেষ হওয়ার টাইমস্ট্যাম্প এক্সট্রা করে বের করা যেতে পারে।

প্রাপ্যতা এবং ক্ষমতা প্রয়োজনীয়তা

যদি ক্লায়েন্টরা একটি CPID পুনরুদ্ধার করতে না পারে তবে তারা মোবাইল ডেটা প্ল্যান API থেকে কোনো তথ্য অ্যাক্সেস করতে পারবে না। এই কারণে, অপারেটর CPID এন্ডপয়েন্টের প্রাপ্যতা নিশ্চিত করার জন্য প্রয়োজনীয় ব্যবস্থা গ্রহণ করবে। এই ধরনের ব্যবস্থাগুলির মধ্যে রয়েছে CPID এন্ডপয়েন্ট এবং DPI ফাংশনের একাধিক দৃষ্টান্ত থাকা এবং উভয় ফাংশনের জন্য শারীরিক, সাইট এবং নেটওয়ার্ক রিডানডেন্সি থাকা, এবং নিশ্চিত করা যে সিস্টেম সংস্থান এবং ক্ষমতা পর্যাপ্ত। অধিকন্তু, CPID এন্ডপয়েন্ট এবং সেই সাথে DPI ফাংশন যা হেডার ইনজেক্ট করে তার অবশ্যই CPID-এর অনুরোধ করা সমস্ত Google ক্লায়েন্টদের লোড পরিচালনা করার জন্য পর্যাপ্ত ক্ষমতা থাকতে হবে। CPID এন্ডপয়েন্ট ttlSeconds ক্ষেত্রে বৃহত্তর মান ব্যবহার করতে পারে যাতে এটি CPID তৈরি করে ফ্রিকোয়েন্সি কমাতে পারে।

ত্রুটি মামলা

যদি একটি ত্রুটি ঘটে, CPID এন্ডপয়েন্ট অবশ্যই একটি প্রতিক্রিয়া বডি সহ একটি HTTP ত্রুটি প্রদান করবে যাতে অবশ্যই ErrorResponse এর একটি উদাহরণ থাকতে হবে। একটি ভাল ত্রুটি বার্তায় এমন তথ্য অন্তর্ভুক্ত থাকবে যা ত্রুটির কারণ ডিবাগ করতে সাহায্য করতে পারে। উদাহরণ স্বরূপ, CPID জেনারেশন এবং মেয়াদ শেষ হওয়ার সময় সহ মেয়াদোত্তীর্ণ CPID-এর ক্ষেত্রে, CPID এন্ডপয়েন্ট ডিজাইন অনুযায়ী কাজ করছে কিনা তা নিশ্চিত করতে আমাদের সাহায্য করবে।

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

পরিস্থিতির উপর নির্ভর করে CPID এন্ডপয়েন্টকে অবশ্যই নিম্নলিখিতগুলি ফেরত দিতে হবে:

  1. অপারেটর নেটওয়ার্কের অন্তর্গত নয় এমন একজন ব্যবহারকারীর জন্য যদি একটি CPID অনুরোধ গৃহীত হয় (যেমন, অন্য অপারেটরের একজন ব্যবহারকারী কিন্তু এই CPID এন্ডপয়েন্ট দ্বারা পরিবেশিত নেটওয়ার্কে রোমিং) অথবা যিনি Google-এর সাথে ডেটা প্ল্যানের তথ্য ভাগ করে নেওয়ার সিদ্ধান্ত নেননি, CPID এন্ডপয়েন্টকে অবশ্যই HTTP স্ট্যাটাস কোড 403 প্রদান করতে হবে যার কারণ হিসেবে USER_ROAMING, USER_OPT_OUT বা INELIGIBLE_FOR_SERVICE।
  2. যদি একটি CPID অনুরোধ একটি অবৈধ ফোন নম্বর সহ গৃহীত হয়, তাহলে CPID শেষ পয়েন্ট অবশ্যই INVALID_NUMBER ত্রুটির কারণ সহ HTTP 400 ফেরত দেবে৷
  3. যদি CPID এন্ডপয়েন্টের অনুরোধ অন্য কোনো উপায়ে বিকৃত হয়, তাহলে CPID এন্ডপয়েন্টকে HTTP 400 ফেরত দিতে হবে কারণ হিসেবে ERROR_CAUSE_UNSPECIFIED।
  4. অন্যান্য ত্রুটির কারণে, যেকোনো সামঞ্জস্যপূর্ণ HTTP ত্রুটি কোড গ্রহণযোগ্য। বিশেষ করে, CPID এন্ডপয়েন্টে যেকোনো অভ্যন্তরীণ ব্যর্থতার জন্য HTTP 500 একটি উপযুক্ত ত্রুটির কারণ।