v1 ইনক্রিমেন্টাল ইনভেন্টরি আপডেট

এই বিভাগটি বর্ণনা করে কিভাবে আপনি Google-এ আপনার ফিডের সময়-সংবেদনশীল আপডেট পাঠাতে পারেন। ইনক্রিমেন্টাল আপডেট এপিআই আপনাকে প্রায় রিয়েল টাইমে আপনার ফিডে সত্তা আপডেট এবং মুছে দিতে দেয়।

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

সেটআপ

ক্রমবর্ধমান আপডেটগুলি বাস্তবায়ন করতে, নিম্নলিখিতগুলি করুন:

  1. একটি প্রকল্প তৈরি করতে একটি প্রকল্প তৈরি করুন এবং সেট আপ করুন- এ বর্ণিত ধাপগুলি অনুসরণ করুন।
  2. একটি পরিষেবা অ্যাকাউন্ট তৈরি করতে একটি পরিষেবা অ্যাকাউন্ট সেট আপ করুন -এ বর্ণিত ধাপগুলি অনুসরণ করুন৷ মনে রাখবেন যে পরিষেবা অ্যাকাউন্টের জন্য একটি "সম্পাদক" ভূমিকা যোগ করার জন্য আপনাকে প্রকল্পের "মালিক" হতে হবে
  3. (ঐচ্ছিক, কিন্তু প্রস্তাবিত) API কল করার সময় OAuth 2.0 ব্যবহার করার সুবিধার্থে আপনার পছন্দের ভাষায় Google ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন। নীচে অন্তর্ভুক্ত কোড নমুনা এই লাইব্রেরি ব্যবহার করে. অন্যথায়, Google API অ্যাক্সেস করতে OAuth 2.0 ব্যবহারে বর্ণিত হিসাবে আপনাকে টোকেন এক্সচেঞ্জ ম্যানুয়ালি পরিচালনা করতে হবে।

শেষবিন্দু

একটি আপডেট সম্পর্কে Google-কে অবহিত করতে, ইনক্রিমেন্টাল আপডেট এপিআই-এ একটি HTTP POST অনুরোধ করুন এবং আপডেট এবং সংযোজনের একটি পেলোড অন্তর্ভুক্ত করুন। আপনি যে ইনভেন্টরি স্কিমা ব্যবহার করেন তা নির্ধারণ করে কোন শেষ পয়েন্টে আপনার অনুরোধ করতে হবে:

v2 ইনভেন্টরি

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID:push

v1 ইনভেন্টরি

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/ENTITY_ID:push

একটি সত্তা অপসারণ করতে, আপনি কোন ইনভেন্টরি স্কিমা ব্যবহার করেন তার সাথে সম্পর্কিত নিম্নলিখিত শেষ পয়েন্টে একটি HTTP DELETE অনুরোধ করুন:

v2 ইনভেন্টরি

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME

v1 ইনভেন্টরি

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME

উপরের অনুরোধগুলিতে, নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

  • PROJECT_ID : একটি প্রকল্প তৈরি করুন এবং সেট আপ করুন- এ আপনি যে প্রকল্পটি তৈরি করেছেন তার সাথে যুক্ত Google ক্লাউড প্রকল্প আইডি।
  • TYPE (শুধুমাত্র v2 ইনভেন্টরি স্কিমা): আপনার ডেটা ফিডে আপনি যে বস্তুটি আপডেট করতে চান তার সত্তার ধরন ( @type সম্পত্তি)।
  • ENTITY_ID : পেলোডে অন্তর্ভুক্ত সত্তার ID। আপনার সত্তা আইডি ইউআরএল এনকোড করা নিশ্চিত করুন।
  • DELETE_TIME (শুধুমাত্র শেষ পয়েন্ট মুছুন): আপনার সিস্টেমে সত্তাটি মুছে ফেলার সময় বোঝাতে ঐচ্ছিক ক্ষেত্র (অনুরোধ প্রাপ্ত হলে ডিফল্ট হয়)। সময়ের মূল্য ভবিষ্যতে হতে হবে না. একটি বর্ধিত কলের মাধ্যমে একটি সত্তা পাঠানোর সময়, সত্তা সংস্করণ একটি মুছে ফেলা কলের ক্ষেত্রে delete_time ক্ষেত্রটিও ব্যবহার করে। এই মানটিকে yyyy-mm-ddTHH:mm:ssZ হিসাবে ফর্ম্যাট করুন৷

উদাহরণস্বরূপ, আপনার কাছে "ডেলিভারি-প্রোভাইডার-আইডি" আইডি সহ একটি প্রকল্প আছে যা v2 ইনভেন্টরি স্কিমা ব্যবহার করে। আপনি "MenuSection" এর একটি রেস্টুরেন্ট সত্তার ধরন এবং "menuSection_122" এর একটি সত্তা আইডি সহ রেস্টুরেন্টে পরিবর্তন করতে চান৷ আপনার ডেটার আপডেটের জন্য শেষ পয়েন্ট নিম্নলিখিত হবে:

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122:push

এই একই সত্তা সরাতে, আপনি এই HTTP মুছুন API কল করতে হবে:

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122?entity.vertical=FOODORDERING

স্যান্ডবক্স অনুরোধ

স্যান্ডবক্স অনুরোধের জন্য, উপরের এন্ডপয়েন্টে নির্দেশিকা অনুসরণ করুন, কিন্তু /v2/sandbox/apps/ /v2/apps/ -এ অনুরোধ করুন। উদাহরণস্বরূপ, v2 ইনভেন্টরি স্কিমার জন্য একটি স্যান্ডবক্স মুছে ফেলার অনুরোধ নিম্নরূপ গঠন করা হয়েছে:

https://actions.googleapis.com/v2/sandbox/apps/PROJECT_ID/entities/TYPE/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME

আপডেট এবং সংযোজন

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

পেলোড

প্রতিটি POST অনুরোধে অবশ্যই JSON পেলোড সহ অনুরোধের পরামিতিগুলি অন্তর্ভুক্ত করতে হবে যাতে ইনভেনটরি স্কিমাতে তালিকাভুক্ত যেকোন সত্তা প্রকারের কাঠামোগত ডেটা থাকে৷

JSON নিম্নলিখিত পার্থক্যগুলির সাথে ব্যাচ ফিডে যেমন দেখাবে তেমনই দেখা উচিত:

  • পেলোড বডি আকারে 5 এমবি এর বেশি হওয়া উচিত নয়। একইভাবে ব্যাচ ফিডের ক্ষেত্রে, আমরা আপনাকে আরও ডেটা ফিট করার স্বার্থে হোয়াইটস্পেসগুলি ফালা করার পরামর্শ দিই।
  • খামটি নিম্নরূপ:
{
  "entity": {
    "data":"ENTITY_DATA",
    "vertical":"FOODORDERING"
  },
  "update_time":"UPDATE_TIMESTAMP"
}

উপরের পেলোডে, নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

  • ENTITY_DATA : JSON বিন্যাসে সত্তা একটি স্ট্রিং হিসাবে ক্রমিক। JSON-LD সত্তাকে data ক্ষেত্রে একটি স্ট্রিং হিসাবে পাস করতে হবে।
  • UPDATE_TIMESTAMP (ঐচ্ছিক): টাইমস্ট্যাম্প যখন আপনার সিস্টেমে সত্তা আপডেট করা হয়েছিল। সময়ের মূল্য ভবিষ্যতে হতে হবে না. Google যখন অনুরোধ পায় তখন ডিফল্ট টাইমস্ট্যাম্প। একটি বর্ধিত অনুরোধের মাধ্যমে একটি সত্তা পাঠানোর সময়, সত্তা সংস্করণ যোগ/আপডেট অনুরোধের ক্ষেত্রে update_time ক্ষেত্রটিও ব্যবহার করে।

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

উদাহরণ 1: একটি রেস্টুরেন্ট আপডেট করা

ধরুন আপনাকে জরুরীভাবে একটি রেস্টুরেন্টের ফোন নম্বর আপডেট করতে হবে। আপনার আপডেটে পুরো রেস্টুরেন্টের জন্য JSON রয়েছে।

নিচের মত দেখতে একটি ব্যাচ ফিড বিবেচনা করুন:

{
  "@type": "Restaurant",
  "@id": "restaurant12345",
  "name": "Some Restaurant",
  "url": "https://www.provider.com/somerestaurant",
  "telephone": "+16501234567",
  "streetAddress": "345 Spear St",
  "addressLocality": "San Francisco",
  "addressRegion": "CA",
  "postalCode": "94105",
  "addressCountry": "US",
  "latitude": 37.472842,
  "longitude": -122.217144
}

তারপর HTTP POST দ্বারা আপনার ক্রমবর্ধমান আপডেট নিম্নরূপ হবে:

POST v2/apps/provider-project/entities/Restaurant/restaurant12345:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "entity": {
    "data": {
      "@type": "Restaurant",
      "@id": "restaurant12345",
      "name": "Some Restaurant",
      "url": "https://www.provider.com/somerestaurant",
      "telephone": "+16501235555",
      "streetAddress": "345 Spear St",
      "addressLocality": "San Francisco",
      "addressRegion": "CA",
      "postalCode": "94105",
      "addressCountry": "US",
      "latitude": 37.472842,
      "longitude": -122.217144
    },
    "vertical": "FOODORDERING"
  }
}

উদাহরণ 2: একটি মেনু আইটেমের মূল্য আপডেট করা

ধরুন আপনাকে একটি মেনু আইটেমের দাম পরিবর্তন করতে হবে। উদাহরণ 1-এর মতো, আপনার আপডেটে অবশ্যই সম্পূর্ণ টপ-লেভেল এন্টিটির (মেনু) জন্য JSON থাকতে হবে এবং ফিডটি v1 ইনভেন্টরি স্কিমা ব্যবহার করে।

নিচের মত দেখতে একটি ব্যাচ ফিড বিবেচনা করুন:

{
  "@type": "MenuItemOffer",
  "@id": "menuitemoffer6680262",
  "sku": "offer-cola",
  "menuItemId": "menuitem896532",
  "price": 3.00,
  "priceCurrency": "USD"
}

তারপর POST এর মাধ্যমে আপনার ক্রমবর্ধমান আপডেটটি নিম্নরূপ হবে:

POST v2/apps/provider-project/entities/MenuItemOffer/menuitemoffer6680262:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "entity": {
    "data": {
      "@type": "MenuItemOffer",
      "@id": "menuitemoffer6680262",
      "sku": "offer-cola",
      "menuItemId": "menuitem896532",
      "price": 1.00,
      "priceCurrency": "USD"
    },
    "vertical": "FOODORDERING"
  }
}

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

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

একটি সত্তা অপসারণ

শীর্ষ-স্তরের সত্তাগুলি সরাতে, আপনি একটি সামান্য পরিবর্তিত এন্ডপয়েন্ট ব্যবহার করুন এবং অনুরোধে HTTP POST-এর পরিবর্তে HTTP DELETE ব্যবহার করুন৷

একটি শীর্ষ-স্তরের সত্তার মধ্যে একটি উপ-সত্তা, যেমন একটি মেনুর মধ্যে একটি মেনু আইটেম সরাতে HTTP DELETE ব্যবহার করবেন না৷ পরিবর্তে, উপ-সত্তা অপসারণকে একটি শীর্ষ-স্তরের সত্তার আপডেট হিসাবে বিবেচনা করুন যেখানে উপ-সত্তা প্রাসঙ্গিক তালিকা বা পরামিতি থেকে সরানো হয়েছে।

উদাহরণ 1: একটি শীর্ষ-স্তরের সত্তা মুছে ফেলা

এমন একটি পরিস্থিতি বিবেচনা করুন যেখানে আপনি v1 ইনভেন্টরি স্কিমা ব্যবহার করে এমন একটি ফিডে একটি রেস্তোরাঁ মুছতে চান। আপনাকে অবশ্যই এর পরিষেবা এবং মেনুগুলি মুছতে হবে৷

"https://www.provider.com/restaurant/menu/nr" আইডি সহ একটি মেনু সত্তার জন্য একটি নমুনা শেষ পয়েন্ট:

DELETE v2/apps/delivery-provider-id/entities/https%3A%2F%2Fwww.provider.com%2Frestaurant%2Fmenu%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com

"https://www.provider.com/restaurant/nr" আইডি সহ একটি রেস্টুরেন্ট সত্তার জন্য একটি নমুনা শেষ পয়েন্ট:

DELETE v2/apps/delivery-provider-id/entities/https%3A%2F%2Fwww.provider.com%2Frestaurant%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com

"https://www.provider.com/restaurant/service/nr" আইডি সহ একটি পরিষেবা সত্তার জন্য একটি নমুনা শেষ পয়েন্ট:

DELETE v2/apps/delivery-provider-id/entities/https%3A%2F%2Fwww.provider.com%2Frestaurant%2Fservice%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com
}

উদাহরণ 2: উপ-সত্তা সরানো হচ্ছে

একটি শীর্ষ-স্তরের সত্তার মধ্যে থেকে একটি উপ-সত্তা সরাতে, আপনি সংশ্লিষ্ট ক্ষেত্র থেকে সরানো উপ-সত্তা সহ শীর্ষ-স্তরের সত্তা পাঠান। নিচের উদাহরণটি অনুমান করে যে ফিডটি v1 ইনভেন্টরি স্কিমা ব্যবহার করে।

উদাহরণস্বরূপ, একটি পরিষেবা এলাকা মুছে ফেলার জন্য, পরিষেবার এলাকাটি পরিষেবার এলাকাটি areaServed তালিকা থেকে সরিয়ে দিয়ে আপডেট করুন।

POST v2/apps/delivery-provider-id/entities/https%3A%2F%2Fwww.provider.com%2Frestaurant%2Fservice%2Fnr:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "entity": {
    // Note: "data" is not serialized as a string in our example for readability.
    "data": {
      "@type": "Service",
      "provider": {
        "@type": "Restaurant",
        "@id": "https://www.provider.com/restaurant/nr"
      },
      "areaServed": [
        {
          "@type": "GeoCircle",
          "geoMidpoint": {
            "@type": "GeoCoordinates",
            "latitude": "42.362757",
            "longitude": "-71.087109"
          },
          "geoRadius": "10000"
        }
        // area2 is removed.
      ]
      ...
    },
    "vertical": "FOODORDERING"
  }
}

API প্রতিক্রিয়া কোড

একটি সফল কলের অর্থ এই নয় যে ফিডটি বৈধ বা সঠিক, শুধুমাত্র API কলটি করা হয়েছিল৷ সফল কলগুলি একটি খালি প্রতিক্রিয়া বডি সহ একটি HTTP প্রতিক্রিয়া কোড 200 পায়:

{}

ব্যর্থতার জন্য, HTTP প্রতিক্রিয়া কোড 200 হবে না এবং প্রতিক্রিয়া বডি নির্দেশ করে কী ভুল হয়েছে৷

উদাহরণস্বরূপ, যদি ব্যবহারকারী খামে "উল্লম্ব" মানটি FAKE_VERTICAL এ সেট করে থাকেন, তাহলে আপনি নীচের বার্তাটি পাবেন:

{
  "error": {
    "code": 400,
    "message": "Invalid value at 'entity.vertical' (TYPE_ENUM), \"FAKE_VERTICAL\"",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "entity.vertical",
            "description": "Invalid value at 'entity.vertical' (TYPE_ENUM), \"FAKE_VERTICAL\""
          }
        ]
      }
    ]
  }
}

কোড নমুনা

কিভাবে বিভিন্ন ভাষায় ইনক্রিমেন্টাল আপডেট API ব্যবহার করতে হয় তার কিছু নমুনা নিচে দেওয়া হল। এই নমুনাগুলি Google Auth লাইব্রেরি ব্যবহার করে এবং v1 ইনভেন্টরি স্কিমা ব্যবহার করে একটি ফিড ধরে নেয়। বিকল্প সমাধানের জন্য, সার্ভার থেকে সার্ভার অ্যাপ্লিকেশনের জন্য OAuth 2.0 ব্যবহার করুন দেখুন।

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

Node.js

এই কোডটি Node.js-এর জন্য Google auth লাইব্রেরি ব্যবহার করে।

const {auth} = require('google-auth-library')
const request = require('request');
// The service account client secret file downloaded from the Google Cloud Console
const serviceAccountJson = require('./service-account.json')
// entity.json is a file that contains the entity data in json format
const entity = require('./entity.json')

const ENTITY_ID = 'restaurant/http://www.provider.com/somerestaurant'
const PROJECT_ID = 'your-project-id'

/**
 * Get the authorization token using a service account.
 */
async function getAuthToken() {
  let client = auth.fromJSON(serviceAccountJson)
  client.scopes = ['https://www.googleapis.com/auth/assistant']
  const tokens = await client.authorize()
  return tokens.access_token;
}

/**
 * Send an incremental update to update or add an entity
 */
async function updateEntity(entityId, entity) {
  const token = await getAuthToken()
  request.post({
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    url: `https://actions.googleapis.com/v2/apps/${PROJECT_ID}/entities/${encodeURIComponent(entityId)}:push`,
    body: {
      entity: {
        data: JSON.stringify(entity),
        vertical: 'FOODORDERING',
      }
    },
    json: true
  },
  (err, res, body) => {
    if (err) { return console.log(err); }
    console.log(`Response: ${JSON.stringify(res)}`)
  })
}

updateEntity(ENTITY_ID, entity)

পাইথন

এই কোডটি পাইথনের জন্য Google auth লাইব্রেরি ব্যবহার করে।

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
import json
import urllib

PROJECT_ID = 'your-project-id'
ENTITY_ID = 'restaurant/http://www.provider.com/somerestaurant'
ENDPOINT = 'https://actions.googleapis.com/v2/apps/%s/entities/%s:push' % (
    PROJECT_ID, urllib.quote(ENTITY_ID, ''))

# service-account.json is the service account client secret file downloaded from the
# Google Cloud Console
credentials = service_account.Credentials.from_service_account_file(
    'service-account.json')

scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/assistant'])

authed_session = AuthorizedSession(scoped_credentials)

# Retrieving the entity
update_file = open("entity.json")  #JSON file containing entity data in json format.
data = update_file.read()

# Populating the entity with wrapper
entity = {}
entity['data'] = data #entity JSON-LD serialized as string
entity['vertical'] = 'FOODORDERING'

request = {}
request['entity'] = entity

response = authed_session.post(ENDPOINT, json=request)

print(response.text) #if successful, will be '{}'

জাভা

এই কোডটি Java এর জন্য Google auth লাইব্রেরি ব্যবহার করে।

private static final String PROJECT_ID = "your-project-id";
private static final String ENTITY_ID = "http://www.provider.com/somerestaurant";

/**
 * Get the authorization token using a service account.
 */
private static String getAuthToken() {
  InputStream serviceAccountFile =
      Example.class.getClassLoader().getResourceAsStream("service-account.json");
  ServiceAccountCredentials.Builder credentialsSimpleBuilder =
      ServiceAccountCredentials.fromStream(serviceAccountFile).toBuilder();
  credentialsSimpleBuilder.setScopes(ImmutableList.of("https://www.googleapis.com/auth/assistant"));
  AccessToken accessToken = credentialsSimpleBuilder.build().refreshAccessToken();
  return accessToken.getTokenValue();
}

/**
 * Send an incremental update to update or add an entity.
 * @param entityId The id of the entity to update.
 * @param entity the json of the entity to be updated.
 */
public void updateEntity(String entityId, JSONObject entity) {
  String authToken = getAuthToken();
  String endpoint = String.format(
      "https://actions.googleapis.com/v2/apps/%s/entities/%s:push",
      PROJECT_ID, URLEncoder.encode(entityId, "UTF-8"));
  JSONObject data = new JSONObject();
  data.put("data", entity.toString());
  data.put("vertical", "FOODORDERING");
  JSONObject jsonBody = new JSONObject();
  jsonBody.put("entity", data);
  // Execute POST request
  executePostRequest(endpoint, authToken, jsonBody);
}

সত্তা সরানো হচ্ছে

Node.js

এই কোডটি Node.js-এর জন্য Google auth লাইব্রেরি ব্যবহার করে।

const {auth} = require('google-auth-library')
const request = require('request');
// The service account client secret file downloaded from the Google Cloud Console
const serviceAccountJson = require('./service-account.json')
// entity.json is a file that contains the entity data in json format
const entity = require('./entity.json')

const ENTITY_ID = 'restaurant/http://www.provider.com/somerestaurant'
const PROJECT_ID = 'your-project-id'

/**
 * Get the authorization token using a service account.
 */
async function getAuthToken() {
  let client = auth.fromJSON(serviceAccountJson)
  client.scopes = ['https://www.googleapis.com/auth/assistant']
  const tokens = await client.authorize()
  return tokens.access_token;
}

/**
 * Send an incremental update to delete an entity
 */
async function deleteEntity(entityId) {
  const token = await getAuthToken()
  request.delete({
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    url: `https://actions.googleapis.com/v2/apps/${PROJECT_ID}/entities/${encodeURIComponent(entityId)}?entity.vertical=FOODORDERING`,
    body: {},
    json: true
  },
  (err, res, body) => {
    if (err) { return console.log(err); }
    console.log(`Response: ${JSON.stringify(res)}`)
  })
}

deleteEntity(ENTITY_ID)

পাইথন

এই কোডটি পাইথনের জন্য Google auth লাইব্রেরি ব্যবহার করে।

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
import json
import urllib

# Service config
PROJECT_ID = 'your-project-id'
ENTITY_ID = 'restaurant/http://www.provider.com/somerestaurant'
DELETE_TIME = '2018-04-07T14:30:00-07:00'
ENDPOINT = 'https://actions.googleapis.com/v2/apps/%s/entities/%s?entity.vertical=FOODORDERING&delete_time=%s' % (
    PROJECT_ID, urllib.quote(ENTITY_ID, ''), urllib.quote(DELETE_TIME, ''))

# service-account.json is the service account client secret file downloaded from the
# Google Cloud Console
credentials = service_account.Credentials.from_service_account_file(
    'service-account.json')

scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/assistant'])

authed_session = AuthorizedSession(scoped_credentials)
response = authed_session.delete(ENDPOINT)

print(response.text) #if successful, will be '{}'

জাভা

এই কোডটি Java এর জন্য Google auth লাইব্রেরি ব্যবহার করে।

private static final String PROJECT_ID = "your-project-id";
private static final String ENTITY_ID = "restaurant/http://www.provider.com/somerestaurant";

/**
 * Get the authorization token using a service account.
 */
private static String getAuthToken() {
  InputStream serviceAccountFile = Example.class.getClassLoader().getResourceAsStream("service-account.json");
  ServiceAccountCredentials.Builder credentialsSimpleBuilder =
      ServiceAccountCredentials.fromStream(serviceAccountFile).toBuilder();
  credentialsSimpleBuilder.setScopes(ImmutableList.of("https://www.googleapis.com/auth/assistant"));
  AccessToken accessToken = credentialsSimpleBuilder.build().refreshAccessToken();
  return accessToken.getTokenValue();
}

/**
 * Send an incremental update to delete an entity.
 * @param entityId The id of the entity to delete.
 */
public void deleteEntity(String entityId) {
  String authToken = getAuthToken();
  String endpoint = String.format(
      "https://actions.googleapis.com/v2/apps/%s/entities/%s?entity.vertical=FOODORDERING",
      PROJECT_ID, URLEncoder.encode(entityId, "UTF-8"));
  // Execute DELETE request
  System.out.println(executeDeleteRequest(endpoint, authToken));
}

কেস ব্যবহার করুন

নিম্নলিখিত ব্যবহারের ক্ষেত্রে ক্রমবর্ধমান আপডেট, সম্পূর্ণ ফিড আপডেট এবং API কলে উচ্চ স্তরের সামগ্রীর উদাহরণ:

দৃশ্যকল্প শীর্ষ-স্তরের সত্তা বর্ণনা এবং প্রভাব
একটি পরিষেবা অক্ষম করা হচ্ছে DisabledService

আপনাকে একটি অপ্রত্যাশিত কারণে একটি পরিষেবা নিষ্ক্রিয় করতে হবে৷

ক্রমবর্ধমান আপডেট: @type পরিবর্তিত DisabledService এ প্রশ্নে থাকা Service সত্তাকে পাঠান, কিন্তু অন্যান্য বৈশিষ্ট্যগুলি একই রাখুন৷

সম্পূর্ণ ফিড: Google দ্বারা পরবর্তী আনার আগে @type DisabledService এ সেট করার জন্য সম্পূর্ণ ফিড থেকে সত্তা আপডেট করতে ভুলবেন না, অন্যথায় সত্তাটি পুনরায় সক্ষম হবে।

নির্দিষ্ট আইটেম আউট অফ স্টক Menu ক্রমবর্ধমান আপডেট: প্রদত্ত MenuItem জন্য 0-এ সেট করা offer.inventoryLevel সহ এনক্যাপসুলেটিং Menu সত্তা পাঠান এবং অন্যান্য সমস্ত ডেটা অপরিবর্তিত।
মেনু আইটেম মূল্য পরিবর্তন Menu ক্রমবর্ধমান আপডেট: প্রদত্ত MenuItem জন্য আপডেট করা মূল্যে সেট করা offer.price সহ এনক্যাপসুলেটিং Menu সত্তা পাঠান, এবং অন্যান্য সমস্ত ডেটা অপরিবর্তিত।

নতুন শীর্ষ-স্তরের সত্তা যোগ করুন

শুধুমাত্র Menu , Restaurant এবং Service ধরনের সত্তার জন্য প্রযোজ্য।

Menu , Restaurant , Service

উদাহরণস্বরূপ, আপনাকে একটি রেস্টুরেন্টে একটি নতুন মেনু যোগ করতে হবে।

ক্রমবর্ধমান আপডেট: নতুন মেনু সত্তা পাঠান, রেস্তোঁরা সত্তার সাথে তার ক্ষেত্র hasMenu সেই অনুযায়ী আপডেট করা হয়েছে।

স্থায়ীভাবে শীর্ষ-স্তরের সত্তা মুছুন

শুধুমাত্র Menu , Restaurant এবং Service ধরনের সত্তার জন্য প্রযোজ্য।

Menu , Restaurant , Service

ক্রমবর্ধমান আপডেট: একটি স্পষ্ট মুছে পাঠান।

সম্পূর্ণ ফিড: Google দ্বারা পরবর্তী আনার আগে সম্পূর্ণ ফিড থেকে সত্তাটিকে সরিয়ে ফেলা নিশ্চিত করুন, অন্যথায় সত্তাটি পুনরায় যুক্ত করা হবে।

একটি নির্দিষ্ট Service একটি নতুন ডেলিভারি এলাকা যোগ করুন Service ক্রমবর্ধমান ফিড: Service সত্তাকে তার সমস্ত ক্ষেত্র অক্ষত রেখে প্রশ্নে পাঠান, যেমন আপনি সাধারণত সম্পূর্ণ ফিডের মধ্যে থাকেন, Service পরিবেশিত areaServed মধ্যে নির্দিষ্ট নতুন ডেলিভারি এলাকা সহ।
Service পৌঁছানোর আনুমানিক সময় ডেলিভারি আপডেট করুন Service ক্রমবর্ধমান ফিড: Service ফিডের মতোই পাঠান, এর hoursAvailable.deliveryHours ব্যতীত।
Service ডেলিভারির দাম আপডেট করুন Service ইনক্রিমেন্টাল ফিড: offers.priceSpecification.price আপডেট সহ সম্পূর্ণ Service পাঠান।
Service ডেলিভারি বা টেকআউটের সময় আপডেট করুন Service ক্রমবর্ধমান ফিড: Service ফিডের মতোই পাঠান, এর hoursAvailable ব্যতীত সেই অনুযায়ী আপডেট করা হয়৷
Service (ন্যূনতম অর্ডারের পরিমাণ পরিবর্তন করুন) Service ক্রমবর্ধমান ফিড: Service.offers.priceSpecification.eligibleTransactionVolume আপডেট সহ সম্পূর্ণ Service পাঠান
MenuItem স্থায়ীভাবে মুছুন Menu ইনক্রিমেন্টাল ফিড: Menu ফিডের মতোই পাঠান, কিন্তু এই MenuItem দিয়ে hasMenuItems তালিকা থেকে সরানো হয়েছে।

ব্যাচের চাকরি এবং ক্রমবর্ধমান আপডেটের জন্য প্রক্রিয়াকরণের সময় SLO

একটি ব্যাচ বা বর্ধিত আপডেটের মাধ্যমে যোগ করা একটি সত্তা 1-2 দিনের মধ্যে প্রক্রিয়া করা হবে। একটি ব্যাচের মাধ্যমে আপডেট করা বা মুছে ফেলা একটি সত্তা 2 ঘন্টার মধ্যে প্রক্রিয়া করা হবে যেখানে একটি বৃদ্ধিমূলক আপডেটের মাধ্যমে আপডেট করা একটি সত্তা 5 মিনিটের মধ্যে প্রক্রিয়া করা হবে। একটি পুরানো সত্তা 7 দিনের মধ্যে মুছে ফেলা হয়।

আপনি হয় Google পাঠাতে পারেন:

  • আপনার ইনভেন্টরি আপ টু ডেট রাখতে প্রতিদিন একাধিক ব্যাচের কাজ, বা
  • আপনার ইনভেন্টরি আপ টু ডেট রাখতে প্রতিদিন একটি ব্যাচের কাজ এবং ইনক্রিমেন্টাল API।