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

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

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

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

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

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

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

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

  1. গুগল ক্লাউড প্ল্যাটফর্ম কনসোল অ্যাক্সেস করুন।
  2. অ্যাকশন সেন্টারে আপনার অ্যাকাউন্টের সাথে একটি গুগল ক্লাউড প্রকল্পও যুক্ত আছে। যদি প্রকল্পটি ইতিমধ্যে নির্বাচিত না থাকে তবে সেটি নির্বাচন করুন।
  3. বাম মেনুতে পরিষেবা অ্যাকাউন্টগুলিতে ক্লিক করুন।
  4. পরিষেবা অ্যাকাউন্ট তৈরি করুন ক্লিক করুন।
  5. পরিষেবা অ্যাকাউন্টের জন্য একটি নাম লিখুন এবং তৈরি করুন ক্লিক করুন।
  6. একটি ভূমিকা নির্বাচন করার জন্য, প্রকল্প > সম্পাদক নির্বাচন করুন।
  7. চালিয়ে যান ক্লিক করুন।
  8. ঐচ্ছিক: পরিষেবা অ্যাকাউন্টে অ্যাক্সেস দিতে ব্যবহারকারীদের যোগ করুন এবং সম্পন্ন ক্লিক করুন।
  9. আপনার তৈরি করা পরিষেবা অ্যাকাউন্টের জন্য আরও > কী তৈরি করুন ক্লিক করুন।
  10. ফর্ম্যাট হিসেবে JSON নির্বাচন করুন এবং Create এ ক্লিক করুন।
  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 : আপনি যে ServiceData সত্তাটি আপডেট করছেন তার প্রোটো বা JSON অনুবাদ।
  • UPDATE_TIMESTAMP : আপনার ব্যাকএন্ড সিস্টেমে কখন সত্তা তৈরি হয়েছিল তার টাইমস্ট্যাম্প অন্তর্ভুক্ত করতে ভুলবেন না। যদি এই ক্ষেত্রটি অন্তর্ভুক্ত না করা হয়, তাহলে এটি Google অনুরোধ গ্রহণের সময় সেট করা হবে। batchPush অনুরোধের মাধ্যমে একটি সত্তা আপডেট করার সময়, সত্তা সংস্করণের জন্য generation_timestamp ক্ষেত্রটি ব্যবহার করা হয়। রিলেশনাল ইনভেন্টরি স্কিমায় সময়ের মানের প্রত্যাশিত বিন্যাস দেখুন।
  • পেলোড বডির আকার ৫ এমবি-র বেশি হওয়া উচিত নয়।
  • আকার কমাতে সাদা স্থান কেটে দিন।
  • একটি batchPush অনুরোধে সর্বাধিক ১,০০০টি আপডেট থাকতে পারে।

উদাহরণ

পৌঁছানোর আগমনের সময় আপডেট করুন

ধরুন আপনার জরুরি ভিত্তিতে একটি ডেলিভারি পরিষেবার 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 এন্ডপয়েন্ট ব্যবহার করুন। প্রতিটি POST অনুরোধে PARTNER_ID প্যারামিটারের সাথে JSON পেলোড অন্তর্ভুক্ত থাকতে হবে যাতে আপনি যে এন্টিটি মুছে ফেলতে চান তার শনাক্তকারী থাকে।

দ্রষ্টব্য: নিশ্চিত করুন যে আপনার দৈনিক ডেটা ফিডে রিয়েল-টাইম আপডেট 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." 
      }
    ]
  }
  • সত্তা-স্তর : পেলোডে থাকা প্রতিটি সত্তা (proto_record) স্কিমার বিপরীতে যাচাই করা হয়। যাচাইকরণের এই পর্যায়ে যেসব সমস্যা দেখা দেয় তা API প্রতিক্রিয়ায় রিপোর্ট করা হয় না। সেগুলি কেবল অ্যাকশন সেন্টারের RTU রিপোর্টিং ড্যাশবোর্ডে রিপোর্ট করা হয়।

দ্রষ্টব্য: ২০০ রেসপন্স কোডের অর্থ এই নয় যে সমস্ত এন্টিটি সফলভাবে ইনজেক্ট করা হয়েছে।

API কোটা

রিয়েল-টাইম API আপডেটের কোটা প্রতি ৬০ সেকেন্ডে ১,৫০০টি অনুরোধের, অর্থাৎ গড়ে প্রতি সেকেন্ডে ২৫টি অনুরোধের। যখন একটি কোটা অতিক্রম করা হয়, তখন Google নিম্নলিখিত ত্রুটি বার্তার সাথে প্রতিক্রিয়া জানায়:

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

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

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

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