ডেটা প্ল্যান এজেন্ট API, ডেটা প্ল্যান এজেন্ট API

প্রেরণা

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

প্রমাণীকরণ

GTAF কল করার আগে, DPA অবশ্যই GTAF প্রমাণীকরণ করবে। অপারেটর অনবোর্ডিং প্রক্রিয়ার অংশ হিসাবে, আমরা DPA SSL শংসাপত্রের বৈধতা পরীক্ষা করব। আমরা বর্তমানে পারস্পরিক প্রমাণীকরণের জন্য OAuth2 ব্যবহার প্রয়োজন।

API বর্ণনা

GTAF ব্যবহারকারী কী ব্যবহার করে, যা অপারেটরের ডিপিএ জিজ্ঞাসা করার সময় অপারেটরের একজন গ্রাহককে সনাক্ত করে। যখন GTAF MSISDN-এ অ্যাক্সেস আছে এমন অ্যাপ্লিকেশনগুলির হয়ে DPA-কে জিজ্ঞাসা করছে, GTAF MSISDN ব্যবহার করতে পারে। উচ্চ স্তরে, প্রস্তাবিত ডেটা প্ল্যান এজেন্ট API নিম্নলিখিত উপাদানগুলি নিয়ে গঠিত:

  1. ব্যবহারকারীর ডেটা প্ল্যান স্ট্যাটাস জিজ্ঞাসা করার প্রক্রিয়া।
  2. ব্যবহারকারীর জন্য ডেটা প্ল্যান অফারগুলির জন্য DPA জিজ্ঞাসা করার প্রক্রিয়া৷
  3. ব্যবহারকারীর ডেটা প্ল্যানে পরিবর্তন করার প্রক্রিয়া (যেমন, একটি নতুন প্ল্যান কেনা)।
  4. একজন ব্যবহারকারী একটি নির্দিষ্ট ডেটা প্ল্যান কেনার যোগ্য কিনা তা যাচাই করার প্রক্রিয়া।
  5. DPA-এর সাথে MSISDN নিবন্ধন করার জন্য GTAF-এর ব্যবস্থা।
  6. DPA সুস্থ অবস্থায় আছে কিনা তা যাচাই করার জন্য GTAF-এর ব্যবস্থা।

এই নথির বাকি অংশ এই API উপাদানগুলির প্রতিটির উপর বিস্তারিত বর্ণনা করে। স্পষ্টভাবে উল্লেখ না করা পর্যন্ত, সমস্ত যোগাযোগ অবশ্যই HTTPS এর মাধ্যমে ঘটতে হবে (একটি বৈধ DPA SSL শংসাপত্র সহ)। সমর্থিত প্রকৃত বৈশিষ্ট্যগুলির উপর নির্ভর করে, একজন অপারেটর এই API উপাদানগুলির সমস্ত বা একটি উপসেট বাস্তবায়ন করতে বেছে নিতে পারে।

ডেটা প্ল্যান স্ট্যাটাস জিজ্ঞাসা করা হচ্ছে

GTAF-DPA ইন্টারঅ্যাকশন

GTAF-DPA Interaction

চিত্র 4. ব্যবহারকারীর ডেটা প্ল্যানের তথ্য অনুরোধ এবং গ্রহণ করার জন্য কল প্রবাহ।

চিত্র 4 ব্যবহারকারীর ডেটা প্ল্যান স্ট্যাটাস এবং অন্যান্য ডেটা প্ল্যান তথ্য সম্পর্কে একটি ক্লায়েন্ট অনুসন্ধানের সাথে যুক্ত কল প্রবাহকে চিত্রিত করে। এই কল ফ্লো UE-তে ক্লায়েন্ট দ্বারা ট্রিগার করা API কলগুলির জন্য ভাগ করা হয়।

  1. ক্লায়েন্ট একটি ব্যক্তিগত Google API কল করে ডেটা প্ল্যান স্ট্যাটাস এবং/অথবা অন্যান্য তথ্যের অনুরোধ করে। ক্লায়েন্ট জিটিএএফ-এর কাছে অনুরোধে ব্যবহারকারী কী অন্তর্ভুক্ত করে।
  2. GTAF ব্যবহারকারী কী এবং একটি ক্লায়েন্ট শনাক্তকারী ব্যবহার করে অপারেটরের DPA জিজ্ঞাসা করতে। সমর্থিত ক্লায়েন্ট শনাক্তকারী হল মোবাইলডেটাপ্ল্যান এবং ইউটিউব । যখন DPA এই ক্লায়েন্ট আইডেন্টিফায়ারগুলির মধ্যে একটির সাথে একটি কল পায়, তখন এটি অবশ্যই ক্লায়েন্টের দ্বারা ব্যবহার করা যেতে পারে এমন পরিকল্পনার তথ্য সহ সাড়া দিতে হবে।
  3. GTAF ক্লায়েন্টকে অনুরোধ করা তথ্য ফেরত দেয় এবং DPA দ্বারা নির্দিষ্ট মেয়াদ শেষ না হওয়া পর্যন্ত প্ল্যান তথ্য GTAF দ্বারা ক্যাশ করা হয়।

চিত্র 4-এর ধাপ 1 এবং 3 হল ব্যক্তিগত Google API এবং তাই আর বর্ণনা করা হয়নি৷ ধাপ 2 এর পরে বর্ণিত একটি সর্বজনীন API। GTAF থেকে এই API কলগুলি পরিবেশন করার সময় DPA কে অবশ্যই Cache-Control: no-cache HTTP হেডারকে সম্মান করতে হবে।

পরিকল্পনা অবস্থা

প্ল্যান স্ট্যাটাস পেতে GTAF নিম্নলিখিত HTTP অনুরোধ জারি করে:

GET DPA_URL/{userKey}/planStatus?key_type={CPID,MSISDN}&client_id=CLIENT_ID

যে ক্লায়েন্টের পক্ষে GTAF DPA এর সাথে যোগাযোগ করছে তাকে CLIENT_ID ব্যবহার করে চিহ্নিত করা হয়েছে। Google ক্লায়েন্ট এবং ক্যারিয়ারের মধ্যে চুক্তির উপর নির্ভর করে DPA GTAF-এর প্রতিক্রিয়া কাস্টমাইজ করতে পারে। প্রতিক্রিয়ার বিন্যাস হল একটি JSON অবজেক্ট যা একটি PlanStatus প্রতিনিধিত্ব করে।

{
  "plans": [{
    "planName": "ACME1",
    "planId": "1",
    "planCategory": "PREPAID",
    "expirationTime": "2017-01-29T01:00:03.14159Z", // req.
    "planModules": [{
      "moduleName": "Giga Plan", // req.
      "trafficCategories": ["GENERIC"],
      "expirationTime": "2017-01-29T01:00:03.14159Z", // req.
      "overUsagePolicy": "BLOCKED",
      "maxRateKbps": "1500",
      "description": "1GB for a month", // req.
      "coarseBalanceLevel": "HIGH_QUOTA"
    }]
  }],
  "languageCode": "en-US", // req.
  "expireTime": "2018-06-14T08:41:27-07:00", // req.
  "updateTime": "2018-06-07T07:41:22-07:00", // req.
  "title": "Prepaid Plan"
  "planInfoPerClient": {
    "youtube": {
      "rateLimitedStreaming": {
        "maxMediaRateKbps": 256
      }
    }
  }
}

অনুরোধে একটি Accept-Language শিরোনাম অন্তর্ভুক্ত থাকবে যে ভাষাটি নির্দেশ করে যেটি মানুষের পাঠযোগ্য স্ট্রিংগুলি (যেমন, পরিকল্পনার বিবরণ) থাকা উচিত৷

পোস্ট-পেইড প্ল্যানের জন্য, expirationTime সময় অবশ্যই প্ল্যানের পুনরাবৃত্তির তারিখ হতে হবে (অর্থাৎ, যখন ডেটা ব্যালেন্স রিফ্রেশ/রিলোড হয়)।

প্রতিটি প্ল্যান মডিউলে একাধিক প্ল্যান মডিউল ট্রাফিক ক্যাটাগরি ( PMTCs) থাকতে পারে যেখানে একাধিক অ্যাপের মধ্যে একটি প্ল্যান মডিউল শেয়ার করা হয়েছে (যেমন, গেম এবং মিউজিকের জন্য 500 MB)। নিম্নলিখিত PMTCগুলি পূর্ব-সংজ্ঞায়িত করা হয়েছে: GENERIC, VIDEO, VIDEO_BROWSING, VIDEO_OFFLINE, MUSIC, GAMING, SOCIAL and MESSAGING. এটা প্রত্যাশিত যে অপারেটররা ট্রাফিক বিভাগের সেট এবং তাদের শব্দার্থবিদ্যার সেটে একমত হতে পৃথক Google টিমের সাথে যোগাযোগ করবে যা বিভিন্ন Google অ্যাপ্লিকেশনের জন্য প্রাসঙ্গিক।

পরিকল্পনা অফার জিজ্ঞাসা

অপারেটর থেকে প্ল্যান অফার পেতে GTAF নিম্নলিখিত HTTP অনুরোধ জারি করে:

GET DPA_URL/{userKey}/planOffer?key_type={CPID,MSISDN}&client_id=CLIENT_ID&context={purchaseContext}

যে ক্লায়েন্টের পক্ষে GTAF DPA এর সাথে যোগাযোগ করছে তাকে CLIENT_ID ব্যবহার করে চিহ্নিত করা হয়েছে। Google ক্লায়েন্ট এবং ক্যারিয়ারের মধ্যে চুক্তির উপর নির্ভর করে DPA GTAF-এর প্রতিক্রিয়া কাস্টমাইজ করতে পারে। ঐচ্ছিক প্রসঙ্গ প্যারামিটারটি আবেদনের প্রেক্ষাপট প্রদান করে যেখানে অনুরোধ করা হয়েছে। সাধারণত এটি একটি স্ট্রিং যা অ্যাপ্লিকেশনটি GTAF এর মাধ্যমে অপারেটরের কাছে যায়।

প্রতিক্রিয়া বডিতে একটি প্ল্যানঅফারের একটি উদাহরণ রয়েছে।

{
    "offers": [
      {
        "planName": "ACME Red", // req.
        "planId": "turbulent1", // req.
        "planDescription": "Unlimited Videos for 30 days.", // req.
        "promoMessage": "Binge watch videos.",
        "languageCode": "en_US", // req.
        "overusagePolicy": "BLOCKED",
        "cost": { // req.
          "currencyCode": "INR",
          "units": "300",
          "nanos": 0
        },
        "duration": "2592000s",
        "offerContext": "YouTube",
        "trafficCategories": ["VIDEO"],
        "quotaBytes": "9223372036850"
      }
    ],
    "expireTime": "2019-03-04T00:06:07Z" // req.
}

offers অ্যারেতে ডেটা প্ল্যান(গুলি) এর ক্রম ব্যবহারকারীদের কাছে ডেটা প্ল্যান(গুলি) উপস্থাপিত করার ক্রম নির্ধারণ করতে পারে৷ আরও, যদি UI বা অন্যান্য সীমাবদ্ধতার কারণে অ্যাপ্লিকেশনটি শুধুমাত্র x প্ল্যান উপস্থাপন করতে পারে এবং প্রতিক্রিয়াটিতে y > x প্ল্যান থাকে শুধুমাত্র প্রথম x প্ল্যান উপস্থাপন করা হবে। GTAF শুধুমাত্র 10টি প্ল্যান শেয়ার করে যদি অফারগুলির জন্য আবেদন করা মোবাইল ডেটা প্ল্যান UI হয় যা Google Play পরিষেবাগুলির অংশ৷ এটি Google Play পরিষেবার ব্যবহারকারীদের জন্য ভাল ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করার জন্য।

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

অনুরোধে একটি Accept-Language শিরোনাম অন্তর্ভুক্ত থাকবে যে ভাষাটি নির্দেশ করে যেটি মানুষের পাঠযোগ্য স্ট্রিংগুলি (যেমন, পরিকল্পনার বিবরণ) থাকা উচিত৷

ডেটা ক্রয়

ক্রয় পরিকল্পনা API সংজ্ঞায়িত করে কিভাবে GTAF DPA এর মাধ্যমে প্ল্যান ক্রয় করতে পারে। GTAF DPA-তে একটি ডেটা প্ল্যান কেনার জন্য লেনদেন শুরু করে। অনুরোধের মধ্যে একটি অনন্য লেনদেন শনাক্তকারী (ট্রানজ্যাকশনআইডি) অন্তর্ভুক্ত থাকবে যাতে অনুরোধগুলি ট্রেস করা যায় এবং ডুপ্লিকেট লেনদেন সম্পাদন এড়ানো যায়। DPA অবশ্যই সফল/ব্যর্থতার প্রতিক্রিয়া সহ প্রতিক্রিয়া জানাবে।

লেনদেনের অনুরোধ

একবার এটি একটি ক্লায়েন্টের কাছ থেকে একটি অনুরোধ গ্রহণ করলে, GTAF DPA-কে একটি POST অনুরোধ জারি করে। অনুরোধের URL হল:

POST DPA_URL/{userKey}/purchasePlan?key_type={CPID,MSISDN}&client_id=CLIENT_ID

যেখানে userKey হয় একটি CPID বা MSISDN । অনুরোধের মূল অংশটি TransactionRequest এর একটি উদাহরণ যা নিম্নলিখিত ক্ষেত্রগুলিকে অন্তর্ভুক্ত করে:

{
  "planId": string,         // Id of plan to be purchased. Copied from
                            // offers.planId field returned from a
                            // Upsell Offer request,
                            // if available. (req.).
  "transactionId": string,  // Unique request identifier (req.)
  "offerContext": string,   // Copied from from the
                            // offers.offerContext, if available.
                            // (opt.)
  "callbackUrl": string     // URL that the DPA can call back with response once
                            // it has handled the request.
}

লেনদেন প্রতিক্রিয়া

ডিপিএ ত্রুটির ক্ষেত্রে সাধারণ ত্রুটির কারণগুলি ফিরিয়ে দেবে৷ উপরন্তু, নিম্নলিখিত ত্রুটি কোড ব্যর্থ লেনদেন ফলাফল প্রতিনিধিত্ব করে:

  • ডিপিএ একটি 400 খারাপ অনুরোধের ত্রুটি কোড ফেরত দেয় যা জিটিএএফকে নির্দেশ করে যে কেনা প্ল্যান আইডিটি অবৈধ।
  • ডিপিএ একটি 402 পেমেন্টের প্রয়োজনীয় ত্রুটি কোড জিটিএএফকে নির্দেশ করে যে ব্যবহারকারীর ক্রয় সম্পূর্ণ করার জন্য পর্যাপ্ত ব্যালেন্স নেই।
  • DPA একটি 409 CONFLICT এরর কোড GTAF কে ইঙ্গিত করে যে ক্রয় করা পরিকল্পনাটি ব্যবহারকারীর বর্তমান পণ্যের মিশ্রণের সাথে সামঞ্জস্যপূর্ণ নয়। উদাহরণস্বরূপ, যদি অপারেটর ডেটা প্ল্যান নীতি পোস্টপেইড এবং প্রিপেইড প্ল্যানগুলিকে মিশ্রিত করার অনুমতি দেয় না, তাহলে পোস্টপেইড ব্যবহারকারীর জন্য একটি প্রিপেইড প্ল্যান কেনার চেষ্টা করা একটি 409 দ্বন্দ্ব ত্রুটির দিকে নিয়ে যাবে৷
  • DPA একটি 403 FORBIDDEN ত্রুটি কোড ফেরত দেয় যা GTAF কে নির্দেশ করে যে বর্তমান লেনদেনটি পূর্বে জারি করা লেনদেনের নকল। DPA এর প্রতিক্রিয়াতে নিম্নলিখিত ত্রুটির কারণগুলি ফেরত দেওয়া উচিত:
    • যদি পূর্ববর্তী লেনদেন ব্যর্থ হয়, ত্রুটির কারণ ব্যর্থতার কারণ নির্দেশ করে।
    • পূর্ববর্তী লেনদেন সফল হলে, DUPLICATE_TRANSACTION।
    • যদি পূর্ববর্তী লেনদেনটি এখনও সারিতে থাকে, REQUEST_QUEUED৷

DPA শুধুমাত্র সফলভাবে সম্পাদিত লেনদেন বা সারিবদ্ধ লেনদেনের জন্য 200-ওকে প্রতিক্রিয়া তৈরি করবে। সারিবদ্ধ লেনদেনের ক্ষেত্রে DPA শুধুমাত্র লেনদেনের স্থিতি পূরণ করবে এবং প্রতিক্রিয়ার অন্যান্য ক্ষেত্রগুলি খালি রাখবে। সারিবদ্ধ লেনদেন পরিচালনা করা হলে DPA অবশ্যই একটি প্রতিক্রিয়া সহ GTAF কে কল করতে হবে। প্রতিক্রিয়ার মূল অংশটি লেনদেন প্রতিক্রিয়ার একটি উদাহরণ যার মধ্যে নিম্নলিখিত বিবরণ রয়েছে:

{
  "transactionStatus": "SUCCESS",

  "purchase": {
    "planId": string,               // copied from request. (req.)
    "transactionId": string,        // copied from request. (req.)
    "transactionMessage": string,   // status message. (opt.)
    "confirmationCode": string,     // DPA-generated confirmation code
                                    // for successful transaction. (opt.)
    "planActivationTime" : string,  // Time when plan will be activated,
                                    // in timestamp format. (opt.)
  },

  // walletInfo is populated with the balance left in the user's account.
  "walletBalance": {
    "currencyCode": string,       // 3-letter currency code defined in ISO 4217.
    "units": string,              // Whole units of the currency amount.
    "nanos": number               // Number of nano units of the amount.
  }
}

প্ল্যান অ্যাক্টিভেশনটাইম অনুপস্থিত থাকলে, planActivationTime অনুমান করবে যে প্ল্যানটি সক্রিয় করা হয়েছে।

GTAF ব্যবহারকারীর সম্মতি অগ্রাধিকার ক্যারিয়ারে পাস করার জন্য নিম্নলিখিত অনুরোধ জারি করতে পারে।

POST DPA_URL/{userKey}/consent?key_type={CPID,MSISDN}&client_id=CLIENT_ID

যেখানে userKey হয় একটি CPID বা MSISDN । অনুরোধের মূল অংশটি SetConsentStatusRequest এর একটি উদাহরণ।

সফল হলে, প্রতিক্রিয়া বডি খালি হওয়া উচিত।

যোগ্যতা

একজন ব্যবহারকারী একটি প্ল্যান কেনার যোগ্য কিনা তা পরীক্ষা করার জন্য GTAF নিম্নলিখিত যোগ্যতার অনুরোধ জারি করতে পারে।

GET DPA/{userKey}/Eligibility/{planId}?key_type={CPID,MSISDN}

মনে রাখবেন planId হল প্ল্যানের অনন্য শনাক্তকারী যা ব্যবহারকারীর পক্ষ থেকে প্ল্যান কেনার জন্য ব্যবহার করা যেতে পারে ( ডেটা ক্রয় দেখুন)। যদি planId নির্দিষ্ট করা না থাকে তবে ডিপিএ অবশ্যই সেই ব্যবহারকারীর দ্বারা ক্রয়যোগ্য সমস্ত প্ল্যান ফেরত দেবে।

ডিপিএ ত্রুটির ক্ষেত্রে সাধারণ ত্রুটির কারণগুলি ফিরিয়ে দেবে৷ উপরন্তু, DPA নিম্নলিখিত ত্রুটির ক্ষেত্রে একটি ত্রুটি প্রদান করবে:

  • DPA একটি 400 BAD REQUEST এরর কোড ফেরত দেয় যা GTAF কে নির্দেশ করে যে planId অবৈধ।
  • DPA একটি 409 CONFLICT ত্রুটি কোড প্রদান করে যা নির্দেশ করে যে planId ব্যবহারকারীর ডেটা প্ল্যানের সাথে সামঞ্জস্যপূর্ণ নয়।

অন্যথায়, DPA একটি 200-ওকে প্রতিক্রিয়া প্রদান করবে। একটি সফল যোগ্যতার প্রতিক্রিয়ার বিন্যাস হল:

{
  "eligiblePlans":
  [
   {
    "planId": string,   // Plan identifier. Can be used to
                        // refer to the plan during
                        // offers, etc. (req.)
   }
  ]
}

যখন অনুরোধে একটি planId অন্তর্ভুক্ত থাকে তখন প্রতিক্রিয়া শুধুমাত্র সেই পরিকল্পনাটি অন্তর্ভুক্ত করে। অন্যথায়, ব্যবহারকারীর কেনার যোগ্য সমস্ত পরিকল্পনা তালিকায় অন্তর্ভুক্ত রয়েছে। যে ক্ষেত্রে planId খালি থাকে এবং ডিপিএ যোগ্য প্ল্যানের তালিকা ফেরত দেওয়া সমর্থন করে না সেখানে অবশ্যই একটি 400 খারাপ অনুরোধ ত্রুটি ফেরত দিতে হবে।

MSISDN রেজিস্ট্রেশন এন্ডপয়েন্ট

MSISDN-এ অ্যাক্সেস আছে এমন অ্যাপ্লিকেশনগুলিকে পরিবেশন করতে, GTAF MSISDN-কে DPA-এর সাথে নিবন্ধন করবে। GTAF MSISDN নিবন্ধন করে তখনই যখন Google মোবাইল ডেটা প্ল্যান শেয়ারিং API দ্বারা পরিবেশিত অ্যাপ্লিকেশন থাকে, যেখানে DPA Google API ব্যবহার করে GTAF-কে তথ্য পাঠায়। MSISDN নিবন্ধন করতে, GTAF DPA-এর কাছে একটি পোস্ট অনুরোধ করবে:

DPA_URL/রেজিস্টার পোস্ট করুন

অনুরোধের মূল অংশটি RegistrationRequest এর একটি উদাহরণ হবে।

{
  "msisdn": "<msisdn_string>"
}

যদি MSISDN-এর নিবন্ধন সফল হয়, তাহলে DPA অবশ্যই RegistrationResponse সহ একটি 200 ওকে প্রতিক্রিয়া প্রদান করবে। JSON এর বিন্যাস হল:

{
  // msisdn that was registered.
  "msisdn": "<msisdn_string>",
  // time after which DPA will not send updates to GTAF.
  "expirationTime": string
}

মেয়াদ শেষ না হওয়া পর্যন্ত DPA-কে ব্যবহারকারীর ডেটা প্ল্যানের আপডেট GTAF-কে পাঠাতে হবে।

যদি একটি ত্রুটি ঘটে, একটি ত্রুটির প্রতিক্রিয়া ফেরত দেওয়া উচিত:

{
    "error": "<error message>",
    "cause": enum(ErrorCause)
}

বিভিন্ন ত্রুটির অবস্থার জন্য সম্ভাব্য কারণ মান এবং HTTP স্ট্যাটাস কোডের সম্পূর্ণ তালিকা এখানে উপলব্ধ। বিশেষ করে, যদি এমন কোনো ব্যবহারকারীর জন্য MSISDN রেজিস্ট্রেশনের অনুরোধ গৃহীত হয় যিনি রোমিং করছেন বা যিনি Google-এর সাথে ডেটা প্ল্যানের তথ্য ভাগ করা বেছে নেননি, DPA অবশ্যই HTTP স্ট্যাটাস কোড 403 ফেরত দেবে।

পর্যবেক্ষণ API

কিছু ব্যবহারের ক্ষেত্রে DPA নিরীক্ষণ এবং DPA ব্যর্থতা সনাক্ত করার জন্য GTAF প্রয়োজন। এই ব্যবহারের ক্ষেত্রে, আমরা একটি পর্যবেক্ষণ API সংজ্ঞায়িত করেছি।

API সংজ্ঞা

নিরীক্ষণ API নিম্নলিখিত URL এ HTTP GET অনুরোধের মাধ্যমে উপলব্ধ হওয়া উচিত:

DPA_URL/dpaStatus

যদি DPA এবং এর সমস্ত ব্যাকএন্ড সঠিকভাবে কাজ করে, তাহলে DPA-কে HTTP স্ট্যাটাস কোড 200 এবং একটি রেসপন্স বডি দিয়ে এই প্রশ্নের উত্তর দিতে হবে যাতে DpaStatus- এর উদাহরণ রয়েছে।

{
    "status": enum(DpaStatusEnum),
    "message": "<optional human-readable status description>"
}

যদি DPA বা এর কোনো ব্যাকএন্ড সঠিকভাবে কাজ না করে, তাহলে এটিকে HTTP স্ট্যাটাস কোড 500 এবং একটি রেসপন্স বডি দিয়ে সাড়া দেওয়া উচিত যাতে DpaStatus- এর উদাহরণ রয়েছে।

ডিপিএ আচরণ

যখন একটি ব্যর্থতা শনাক্ত করা হয়, তখন DPA-কে অবশ্যই সমস্ত dpaStatus কোয়েরির জন্য "অপ্রাপ্য" স্থিতি ফেরত দিতে হবে। উপরন্তু, এটি দীর্ঘ ক্যাশে পিরিয়ড সহ ডেটা প্ল্যান তথ্য পাঠানো বন্ধ করতে হবে। এটি দুটি উপায়ের একটিতে দীর্ঘ ক্যাশে পিরিয়ড সহ প্রতিক্রিয়া পাঠানো বন্ধ করতে পারে:

  1. সংক্ষিপ্ত ক্যাশে মেয়াদ শেষ হওয়ার সময় সেট করা শুরু করুন।
  2. সম্পূর্ণরূপে ডেটা প্ল্যান তথ্য পাঠানো বন্ধ করুন।

GTAF আচরণ

GTAF পর্যায়ক্রমে dpaStatus পোল করবে। যখন এটি একটি DPA ব্যর্থতা সনাক্ত করে ("অপ্রাপ্য" প্রতিক্রিয়ার উপর ভিত্তি করে), এটি অপারেটরের জন্য এর ক্যাশে সাফ করবে।

ত্রুটি মামলা

একটি ত্রুটির ক্ষেত্রে, DPA নিম্নলিখিতগুলির একটির সাথে সম্পর্কিত একটি HTTP স্ট্যাটাস কোড ফেরত দেবে বলে আশা করা হচ্ছে:

  • ব্যবহারকারী বর্তমানে রোমিং করছেন এবং এই ব্যবহারকারীর জন্য DPA ক্যোয়ারী অক্ষম করা হয়েছে৷ DPA একটি 403 ত্রুটি প্রদান করে।
  • DPA একটি 404 NOT_FOUND এরর কোড ফেরত দেয় যা GTAF কে নির্দেশ করে যে ব্যবহারকারী কীটি অবৈধ (যেমন, বিদ্যমান ব্যবহারকারী কী )।
  • DPA একটি 410 GONE ত্রুটি কোড প্রদান করে যা GTAF কে নির্দেশ করে যে key_type = CPID এবং CPID মেয়াদ শেষ হলে ক্লায়েন্টকে একটি নতুন ব্যবহারকারী কী পেতে হবে।
  • DPA একটি 501 NOT_IMPLEMENTED ত্রুটি কোড প্রদান করে যা নির্দেশ করে যে এটি এই কলটিকে সমর্থন করে না।
  • আপাতত এই সেবা বন্ধ আছে. ডিপিএ একটি 503 পরিষেবা অনুপলব্ধ রিটার্ন করে রিট্রাই-আফটার শিরোলেখটি নির্দেশ করে যে কখন একটি নতুন অনুরোধের চেষ্টা করা যেতে পারে।
  • অন্য সব অনির্দিষ্ট ত্রুটির জন্য DPA একটি 500 অভ্যন্তরীণ সার্ভার ত্রুটি ত্রুটি কোড প্রদান করে।
  • DPA একটি 429 TOO_MANY_REQUESTS ত্রুটি রিটার্ন করে রিট্রাই-আফটার হেডারের সাথে যা ইঙ্গিত করে যে GTAF DPA কে অনেক বেশি অনুরোধ করছে।
  • DPA একটি 409 CONFLICT ত্রুটি প্রদান করে যা নির্দেশ করে যে DPA-এর বর্তমান অবস্থার সাথে দ্বন্দ্বের কারণে অনুরোধটি সম্পূর্ণ করা যাবে না।

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

{
  "error": string,
  "cause": enum(ErrorCause)
}

বর্তমানে সংজ্ঞায়িত cause মানগুলি ErrorCause API রেফারেন্সের অংশ হিসাবে তালিকাভুক্ত করা হয়েছে।

অন্যথায়, DPA একটি 200 ঠিক আছে। আমরা নোট করি যে এই cause মানগুলি সমস্ত প্রতিক্রিয়ার জন্য ব্যবহৃত হয়।

আন্তর্জাতিকীকরণ

ডিপিএ-র কাছে জিটিএএফ অনুরোধগুলির মধ্যে একটি গ্রহণ-ভাষা শিরোনাম রয়েছে যা নির্দেশ করে যে ভাষাটি মানুষের পঠনযোগ্য স্ট্রিংগুলি (যেমন, পরিকল্পনার বিবরণ) থাকা উচিত৷ আরও, ডিপিএ প্রতিক্রিয়াগুলি (প্ল্যানস্ট্যাটাস, প্ল্যানঅফার) একটি প্রয়োজনীয় ভাষাকোড ক্ষেত্র অন্তর্ভুক্ত করে যার মান হল BCP-47 প্রতিক্রিয়ার ভাষা কোড (যেমন, "en-US")।

DPA ব্যবহারকারীর অনুরোধ করা ভাষা সমর্থন না করলে, এটি একটি ডিফল্ট ভাষা ব্যবহার করতে পারে এবং তার পছন্দ নির্দেশ করার জন্য ভাষাকোড ক্ষেত্র ব্যবহার করতে পারে।