রিয়েল টাইম আপডেট

রিয়েল-টাইম আপডেট

RTUগুলি প্রাথমিকভাবে এমন আপডেটগুলির জন্য উদ্দিষ্ট যেগুলি আপনি পূর্বাভাস করতে পারেন না, যেমন জরুরি বন্ধ, বা মেটাডেটা যা পর্যায়ক্রমে পরিবর্তিত হয় (যেমন ETAs)। আপনার পরিবর্তন অবিলম্বে প্রতিফলিত করার প্রয়োজন না হলে, আপনি পরিবর্তে ব্যাচ ফিড ইনজেশন ব্যবহার করতে পারেন। রিয়েল-টাইম আপডেটগুলি পাঁচ মিনিটের বেশি নয় প্রক্রিয়া করা হয়।

Google ক্লাউড প্ল্যাটফর্ম সেটআপ

  1. একটি GCP প্রকল্প সেটআপ করুন। RTU API অ্যাক্সেস করার জন্য একটি GCP প্রকল্প প্রয়োজন।
    • সম্পাদককে খাদ্য-support@google.com অ্যাক্সেসের অনুমতি দিন
    • আপনার Google POC-কে GCP প্রোজেক্ট নম্বর জানান। রিয়েল-টাইম আপডেটগুলি কাজ করার জন্য আপনার GCP প্রোজেক্টকে অবশ্যই আপনার অ্যাকশন সেন্টার অ্যাকাউন্টের সাথে যুক্ত থাকতে হবে।
    • মানচিত্র বুকিং API সক্ষম করুন:
      • GCP-এ APIs & Services > Library- এ যান।
      • "গুগল ম্যাপ বুকিং API" অনুসন্ধান করুন।
        Google মানচিত্র বুকিং APIs সনাক্ত করুন
      • স্যান্ডবক্স ইন্সট্যান্স খুঁজুন ("Google Maps বুকিং API (Dev)") এবং Enable এ ক্লিক করুন
      • প্রোডাকশন ইনস্ট্যান্স খুঁজুন ("Google Maps বুকিং API") এবং Enable এ ক্লিক করুন
        Google Maps বুকিং API সক্ষম করুন৷
      • আপনার GCP প্রকল্পে সম্পাদকের ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন৷ আরও বিশদ বিবরণের জন্য, পরিষেবা অ্যাকাউন্ট সেটআপ দেখুন।
      • আপনি যে পরিবেশে রিয়েল-টাইম আপডেটে কাজ করছেন সেখানে ব্যাচ ফিড আপলোড করার বিষয়টি নিশ্চিত করুন।
      • API প্রমাণীকরণের জন্য আমরা আপনার পছন্দের ভাষায় Google ক্লায়েন্ট লাইব্রেরি ইনস্টল করার পরামর্শ দিই। OAuth সুযোগ হিসেবে "https://www.googleapis.com/auth/mapsbooking" ব্যবহার করুন। নীচে অন্তর্ভুক্ত কোড নমুনা এই লাইব্রেরি ব্যবহার করে. অন্যথায়, Google API অ্যাক্সেস করতে OAuth 2.0 ব্যবহারে বর্ণিত হিসাবে আপনাকে টোকেন এক্সচেঞ্জ ম্যানুয়ালি পরিচালনা করতে হবে।

পরিষেবা অ্যাকাউন্ট সেটআপ

রিয়েল-টাইম আপডেট API-এর মতো Google API-এ প্রমাণীকৃত HTTPS অনুরোধ করতে আপনার একটি পরিষেবা অ্যাকাউন্টের প্রয়োজন।

একটি পরিষেবা অ্যাকাউন্ট সেট আপ করতে, নিম্নলিখিতগুলি করুন:

  1. Google ক্লাউড প্ল্যাটফর্ম কনসোল অ্যাক্সেস করুন।
  2. অ্যাকশন সেন্টারে আপনার অ্যাকাউন্টের সাথে একটি Google ক্লাউড প্রকল্পও যুক্ত আছে। সেই প্রকল্পটি নির্বাচন করুন, যদি এটি ইতিমধ্যে নির্বাচিত না হয়।
  3. বাম মেনুতে পরিষেবা অ্যাকাউন্টে ক্লিক করুন।
  4. সার্ভিস অ্যাকাউন্ট তৈরি করুন ক্লিক করুন।
  5. পরিষেবা অ্যাকাউন্টের জন্য একটি নাম লিখুন এবং তৈরি করুন ক্লিক করুন।
  6. একটি ভূমিকা নির্বাচন করার জন্য, প্রকল্প > সম্পাদক নির্বাচন করুন।
  7. অবিরত ক্লিক করুন.
  8. ঐচ্ছিক: পরিষেবা অ্যাকাউন্টে অ্যাক্সেস দেওয়ার জন্য ব্যবহারকারীদের যোগ করুন এবং সম্পন্ন ক্লিক করুন।
  9. আপনি এইমাত্র যে পরিষেবা অ্যাকাউন্টটি তৈরি করেছেন তার জন্য আরও ক্লিক করুন > কী তৈরি করুন
  10. বিন্যাস হিসাবে JSON নির্বাচন করুন এবং তৈরি করুন ক্লিক করুন।
  11. আপনার নতুন পাবলিক/প্রাইভেট কী পেয়ার তৈরি হওয়ার পরে, এটি আপনার মেশিনে ডাউনলোড করুন।

API এর সাথে কাজ করা

রিয়েল-টাইম আপডেট API দুই ধরনের অপারেশন সমর্থন করে: আপডেট এবং মুছুন। রিয়েল-টাইম আপডেট API এর মাধ্যমে নতুন সত্তা যোগ করা সমর্থিত নয়। আপনি যদি একক API অনুরোধে একাধিক আপডেট অন্তর্ভুক্ত করেন তবে রিয়েল-টাইম আপডেটগুলি ব্যাচ করা যেতে পারে। আপনি একটি একক API কলে 1,000টি আপডেট ব্যাচ করতে পারেন৷ আমরা ফ্রিকোয়েন্সি-ভিত্তিক পদ্ধতির পরিবর্তে RTU এর মাধ্যমে আপডেট পাঠাতে একটি ট্রিগার-ভিত্তিক পদ্ধতি ব্যবহার করার পরামর্শ দিই (অর্থাৎ আপনার সিস্টেমে ডেটা পরিবর্তনের পরে Google-এ একটি রিয়েল-টাইম আপডেট ট্রিগার করে) (যেমন প্রতি X মিনিটে পরিবর্তনের জন্য আপনার সিস্টেম স্ক্যান করে) সম্ভব.

রিয়েল-টাইম আপডেট API স্যান্ডবক্স এবং উৎপাদন পরিবেশ উভয় ক্ষেত্রেই কাজ করে। স্যান্ডবক্স এনভায়রনমেন্ট এন্ড-টু-এন্ড ব্যবহারকারীদের কাছে দৃশ্যমান বিষয়বস্তু আপডেট করার জন্য API অনুরোধ এবং উৎপাদন পরিবেশ পরীক্ষা করতে ব্যবহৃত হয়।

  • স্যান্ডবক্স - partnerdev-mapsbooking.googleapis.com
  • উৎপাদন - mapsbooking.googleapis.com

শেষবিন্দু

রিয়েল-টাইম আপডেট API ইনভেন্টরি আপডেটের জন্য আগত অনুরোধগুলি পরিচালনা করার জন্য দুটি শেষ পয়েন্ট প্রকাশ করে:

  • আপডেট - /v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
  • মুছুন - /v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete

PARTNER_ID প্যারামিটারটি অ্যাকাউন্ট এবং ব্যবহারকারী পৃষ্ঠার অ্যাকশন সেন্টারে পাওয়া যাবে, যেমনটি নীচের স্ক্রিনশটে দেখানো হয়েছে।

পার্টনার পোর্টালে পার্টনার আইডি

উপরের স্ক্রিনশট থেকে উদাহরণ হিসাবে PARTNER_ID-এর মান হিসাবে 10000001 নিলে, স্যান্ডবক্স এবং উত্পাদনে API অনুরোধ পাঠানোর সম্পূর্ণ URLগুলি নীচের উদাহরণগুলির মতো দেখাবে৷

স্যান্ডবক্স আপডেট

https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush

স্যান্ডবক্স মুছে ফেলুন

https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete

উত্পাদন আপডেট

https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush

উৎপাদন মুছে ফেলুন

https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete

সত্তা আপডেট করা হচ্ছে

আপনার ইনভেন্টরিতে সত্তা আপডেট করতে, একটি HTTP POST অনুরোধে আপডেট এন্ডপয়েন্ট ব্যবহার করুন। প্রতিটি POST অনুরোধে অবশ্যই 10000001 প্যারামিটার সহ একটি JSON পেলোড অন্তর্ভুক্ত করতে হবে যাতে আপনি আপডেট করতে চান এমন সত্তা রয়েছে৷

দ্রষ্টব্য: নিশ্চিত করুন যে আপনার দৈনিক ডেটা ফিডে রিয়েল-টাইম আপডেট API এর মাধ্যমে জমা দেওয়া যেকোনো পরিবর্তন রয়েছে। অন্যথায়, আপনার ডেটা পুরানো বা বাসি হতে পারে।

আপডেট অনুরোধ পেলোড

অনুরোধের মূল অংশটি রেকর্ডের একটি তালিকা সহ একটি JSON অবজেক্ট। প্রতিটি রেকর্ড আপডেট করা একটি সত্তার সাথে মিলে যায়। এটি proto_record ক্ষেত্র এবং generation_timestamp নিয়ে গঠিত যা সত্তা আপডেটের সময় নির্দেশ করে:

  {
    "records": [
      {
        "proto_record":"ServiceData PROTO",
        "generation_timestamp":"UPDATE_TIMESTAMP"
      }
    ]
  }
  • ServiceData PROTO : আপনি যে সার্ভিসডেটা সত্তা আপডেট করছেন তার প্রোটো বা JSON অনুবাদ।
  • UPDATE_TIMESTAMP : আপনার ব্যাকএন্ড সিস্টেমে সত্তাটি কখন তৈরি হয়েছিল তার টাইমস্ট্যাম্প অন্তর্ভুক্ত করা নিশ্চিত করুন৷ যদি এই ক্ষেত্রটি অন্তর্ভুক্ত না করা হয়, Google অনুরোধটি গ্রহণ করার সময় এটি সেট করা হবে৷ batchPush অনুরোধের মাধ্যমে একটি সত্তা আপডেট করার সময়, generation_timestamp ক্ষেত্রটি সত্তা সংস্করণের জন্য ব্যবহার করা হয়। রিলেশনাল ইনভেন্টরি স্কিমায় সময়ের মানের প্রত্যাশিত বিন্যাস দেখুন।
  • পেলোড বডির সাইজ 5 MB এর বেশি হওয়া উচিত নয়৷
  • সাইজ কমাতে হোয়াইটস্পেস স্ট্রিপ করুন।
  • একটি batchPush অনুরোধে 1,000টি পর্যন্ত আপডেট থাকতে পারে৷

উদাহরণ

একটি ETA আপডেট করুন

ধরুন আপনাকে জরুরিভাবে 30-60 থেকে 60-90 মিনিটের মধ্যে একটি ডেলিভারি পরিষেবার ETA আপডেট করতে হবে। আপনার আপডেটে অবশ্যই পুরো পরিষেবা সত্তার জন্য JSON থাকতে হবে।

নিম্নলিখিত হিসাবে দেখায় একটি পরিষেবা সত্তা বিবেচনা করুন:

{
	"service": {
		"service_id": "service/entity002",
		"service_type": "DELIVERY",
		"parent_entity_id": "entity002",
		"lead_time": {
			"min_lead_time_duration": "600s",
			"max_lead_time_duration": "1800s"
		},
		"action_link_id": "delivery_link/entity002"
	}
}

HTTP POST দ্বারা আপনার রিয়েল-টাইম আপডেটগুলি নিম্নরূপ (রিকোয়েস্ট বডিগুলি পঠনযোগ্যতার জন্য বেশ প্রিন্ট করা হয়েছে):

POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
Host: mapsbooking.googleapis.com
Content-Type: application/json
{
  "records": [{
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "service" : {
        "service_id" : "23456/delivery",
        "service_type" : "DELIVERY",
        "parent_entity_id" : "23456",
        "disabled" : "false",
        "action_link_id": "delivery_link/entity002",
        "lead_time" : {
          "min_lead_time_duration" : {
            "seconds": "3600"
          },
          "max_lead_time_duration" : {
            "seconds": "5400"
          }
        }
      }
    },
    "generation_timestamp": "2023-09-13T17:11:10.750Z"
  }]
}

একাধিক সত্তা আপডেট করুন

একটি একক API কলে একাধিক রেস্তোরাঁর সত্তা আপডেট করতে, অনুরোধের অংশের proto_record ক্ষেত্রে একাধিক রেকর্ড অন্তর্ভুক্ত করুন৷

POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
Host: mapsbooking.googleapis.com
Content-Type: application/json
{
  "records": [{
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "service" : {
        "service_id" : "23456/delivery",
        "service_type" : "DELIVERY",
        "parent_entity_id" : "23456",
        "disabled" : "false",
        "action_link_id": "delivery_link/entity002",
        "lead_time" : {
          "min_lead_time_duration" : {
            "seconds": "1800"
          },
          "max_lead_time_duration" : {
            "seconds": "3600"
          }
        }
      }
    },
    "generation_timestamp": "2023-09-13T17:11:10.750Z"
  },
  {
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "fee" : {
        "fee_id" : "12345/delivery_fee",
        "fee_type" : "DELIVERY",
        "fixed_amount" : {
          "currency_code" : "USD",
          "units" : "10",
          "nanos" : "0"
        },
        "service_ids": ["service/entity002"]
      }
    },
    "generation_timestamp" : "2023-09-13T17:11:10.750Z"
  }]
}

সত্তা মুছুন

আপনার ইনভেন্টরি থেকে সত্তা মুছে ফেলতে, একটি HTTP POST অনুরোধে DELETE endpoint ব্যবহার করুন। প্রতিটি POST অনুরোধে অবশ্যই JSON পেলোডের সাথে PARTNER_ID প্যারামিটার অন্তর্ভুক্ত করতে হবে যাতে আপনি যে সত্তাটি মুছতে চান তার শনাক্তকারী রয়েছে৷

দ্রষ্টব্য: নিশ্চিত করুন যে আপনার দৈনিক ডেটা ফিডে রিয়েল-টাইম আপডেট API এর মাধ্যমে জমা দেওয়া যেকোনো পরিবর্তন রয়েছে। অন্যথায়, দৈনিক ব্যাচ ইনজেশন আপনার রিয়েল-টাইম পরিবর্তনগুলিকে ওভাররাইট করবে।

POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete
Host: mapsbooking.googleapis.com
Content-Type: application/json
{
  "records": [{
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "service" : {
        "service_id" : "23456/delivery"
      }
    },
    "delete_time": "2023-09-13T17:11:10.750Z"
  },
  {
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "fee" : {
        "fee_id" : "12345/delivery_fee"
     }
  },
  "delete_time" : "2023-09-13T17:11:10.750Z"
  }]
}

সত্তা যোগ করা হচ্ছে

নতুন সত্তা যোগ করার জন্য রিয়েল-টাইম আপডেট ব্যবহার করবেন না কারণ এর ফলে ডেটার অসঙ্গতি হতে পারে। পরিবর্তে, ব্যাচ ফিড ব্যবহার করুন.

বৈধতা এবং API প্রতিক্রিয়া কোড

রিয়েল-টাইম আপডেট API কলগুলিতে দুটি ধরণের বৈধতা সম্পাদিত হয়:

  • অনুরোধ-স্তর - এই যাচাইকরণগুলি পরীক্ষা করে যে পেলোড স্কিমা অনুসরণ করে এবং প্রতিটি proto_record একটি id এবং type ক্ষেত্র রয়েছে। এই চেকগুলি সিঙ্ক্রোনাস এবং ফলাফলগুলি API প্রতিক্রিয়া বডিতে ফেরত দেওয়া হয়৷ একটি প্রতিক্রিয়া কোড 200 এবং একটি খালি JSON বডি {} মানে এই বৈধতাগুলি পাস হয়ে গেছে এবং সেই অনুরোধে থাকা সংস্থাগুলি প্রক্রিয়াকরণের জন্য সারিবদ্ধ ছিল৷ একটি নন-200 রেসপন্স কোডের অর্থ হল এই এক বা একাধিক বৈধতা ব্যর্থ হয়েছে এবং সম্পূর্ণ অনুরোধ প্রত্যাখ্যান করা হয়েছে (পেলোডের সমস্ত সত্তা সহ)। উদাহরণস্বরূপ, যদি একটি proto_record একটি @type অনুপস্থিত হয়, নিম্নলিখিত ত্রুটি প্রতিক্রিয়া ফিরে আসে:
  {
      "error": {
        "code": 400,
    "message": "Record:{...}",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "[ORIGINAL ERROR] generic::invalid_argument: Failed to parse one or more rtu records. Record:... The entity type could not be extracted from the entity value." 
      }
    ]
  }
  • সত্তা-স্তর : পেলোডে প্রতিটি সত্তা (প্রোটো_রেকর্ড) স্কিমার বিপরীতে যাচাই করা হয়। বৈধকরণের এই পর্যায়ে যে সমস্যার সম্মুখীন হয়েছে সেগুলি API প্রতিক্রিয়াতে রিপোর্ট করা হয় না। এগুলি শুধুমাত্র অ্যাকশন সেন্টারের RTU রিপোর্টিং ড্যাশবোর্ডে রিপোর্ট করা হয়।

দ্রষ্টব্য: একটি 200 প্রতিক্রিয়া কোডের অর্থ এই নয় যে সমস্ত সত্তা সফলভাবে গ্রহণ করা হয়েছে৷

API কোটা

রিয়েল-টাইম API আপডেটে প্রতি 60 সেকেন্ডে 1,500টি অনুরোধের কোটা বা গড়ে প্রতি সেকেন্ডে 25টি অনুরোধ থাকে। যখন একটি কোটা অতিক্রম করা হয়, Google নিম্নলিখিত ত্রুটি বার্তার সাথে প্রতিক্রিয়া জানায়:

{
  "error": {
    "code": 429,
    "message": "Insufficient tokens for quota ...",
    "status": "RESOURCE_EXHAUSTED",
    "details": [...]
  }
}

এটি পরিচালনা করতে, এটি সফল না হওয়া পর্যন্ত দ্রুতগতিতে বড় বিরতিতে কলটি আবার চেষ্টা করুন। আপনি যদি নিয়মিত কোটা শেষ করেন, তাহলে একটি API অনুরোধে আরও সত্তা অন্তর্ভুক্ত করার কথা বিবেচনা করুন। আপনি একটি API কলে 1,000টি পর্যন্ত সত্তা অন্তর্ভুক্ত করতে পারেন৷

প্রসেসিং টাইম রিয়েল-টাইম আপডেট

একটি রিয়েল-টাইম আপডেটের মাধ্যমে আপডেট করা একটি সত্তা 5 মিনিটের মধ্যে প্রক্রিয়া করা হয়।