v1 इंक्रीमेंटल इन्वेंट्री अपडेट

इस सेक्शन में बताया गया है कि समय के हिसाब से अपने फ़ीड के अपडेट कैसे भेजे जा सकते हैं Google. इंक्रीमेंटल अपडेट एपीआई की मदद से, अपनी इन्वेंट्री को अपडेट किया जा सकता है और उसे मिटाया जा सकता है करीब रीयल टाइम में फ़ीड देता है.

यह सुविधा मुख्य रूप से उन अपडेट के लिए है जिनका अनुमान नहीं लगाया जा सकता, जैसे, आपातकालीन स्थिति में बंद होने की जानकारी. एक नियम के रूप में, इंक्रीमेंटल अपडेट एपीआई एक ऐसा बदलाव होना चाहिए जो इससे ज़्यादा समय में लाइव नहीं होना चाहिए एक हफ़्ता. अगर आपको अपने बदलाव को तुरंत दिखाने की ज़रूरत नहीं है, तो एक बैच अपडेट का इस्तेमाल करें. इंक्रीमेंटल अपडेट, पांच से ज़्यादा दिनों में प्रोसेस नहीं किए जाते मिनट.

सेटअप

इंक्रीमेंटल अपडेट लागू करने के लिए, ये काम करें:

  1. प्रोजेक्ट बनाना और सेट अप करना में दिया गया तरीका अपनाकर, प्रोजेक्ट बनाएं.
  2. सेवा खाता सेट अप करना लेख में दिया गया तरीका अपनाएं सेवा खाता बनाने के लिए. ध्यान दें कि आपके पास "मालिक" होना ज़रूरी है का तरीका "Editor" जोड़ने के लिए प्रोजेक्ट सेवा खाते की भूमिका
  3. (ज़रूरी नहीं, लेकिन हमारा सुझाव है) Google क्लाइंट लाइब्रेरी इंस्टॉल करें को कॉल करते समय OAuth 2.0 के उपयोग की सुविधा देने के लिए अपनी पसंद की भाषा में एपीआई. नीचे दिए गए कोड सैंपल, इन लाइब्रेरी का इस्तेमाल करते हैं. नहीं तो, आपको जैसा कि Google API ऐक्सेस करने के लिए OAuth 2.0 का इस्तेमाल करना में बताया गया है, टोकन एक्सचेंज को मैन्युअल तरीके से मैनेज करना होगा.

एंडपॉइंट

Google को किसी अपडेट की सूचना देने के लिए, इंक्रीमेंटल सेटिंग अपडेट एपीआई और इसमें अपडेट और जोड़े गए आइटम का पेलोड शामिल होना चाहिए. आपके इस्तेमाल किए जाने वाले इन्वेंट्री स्कीमा से यह तय होता है कि किस एंडपॉइंट से आपका अनुरोध किया जाए:

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

किसी इकाई को हटाने के लिए, नीचे दिए गए एंडपॉइंट पर एचटीटीपी से डेटा मिटाने का अनुरोध करें: से संबंधित है कि आप किस इन्वेंट्री स्कीमा का इस्तेमाल करते हैं:

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 Cloud प्रोजेक्ट आईडी प्रोजेक्ट बनाना और सेट अप करना में बनाया गया.
  • TYPE (सिर्फ़ v2 इन्वेंट्री स्कीमा): इकाई का टाइप (@type प्रॉपर्टी) आपके डेटा फ़ीड में मौजूद उस ऑब्जेक्ट का साइज़ अपडेट करें जिसे आपको अपडेट करना है.
  • ENTITY_ID: पेलोड में शामिल इकाई का आईडी. पक्का करें कि यूआरएल, आपकी इकाई के आईडी को कोड में बदल देता है.
  • DELETE_TIME (सिर्फ़ एंडपॉइंट को मिटाएं): यह जानकारी देने के लिए वैकल्पिक फ़ील्ड आपके सिस्टम से इकाई को मिटाए जाने का समय (डिफ़ॉल्ट तौर पर, यह तब होता है, जब अनुरोध मिला). समय की वैल्यू, आने वाले समय की नहीं होनी चाहिए. किसी इकाई को भेजते समय इंक्रीमेंटल कॉल, इकाई वर्शनिंग के ज़रिए कॉल मिटाने के मामले में भी delete_time फ़ील्ड का इस्तेमाल किया जाता है. इसे फ़ॉर्मैट करें yyyy-mm-ddTHH:mm:ssZ के तौर पर मान

उदाहरण के लिए, आपके पास "delivery-provider-id" के आईडी वाला एक प्रोजेक्ट है जो v2 इन्वेंट्री स्कीमा को हल कर सकते हैं. आप इसके साथ रेस्टोरेंट में बदलाव करना चाहते हैं: "मेन्यू सेक्शन" का रेस्टोरेंट इकाई टाइप और "menusection_122" का इकाई आईडी शामिल है. आपके डेटा के अपडेट के लिए एंडपॉइंट यह होगा:

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

इस इकाई को हटाने के लिए, आपको यह एचटीटीपी DELETE एपीआई कॉल करना होगा:

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

सैंडबॉक्स अनुरोध

सैंडबॉक्स अनुरोधों के लिए, ऊपर Endpoint में दिए गए दिशा-निर्देशों का पालन करें. हालांकि, /v2/apps/ के बजाय /v2/sandbox/apps/ को अनुरोध करें. उदाहरण के लिए, v2 इन्वेंट्री स्कीमा के लिए सैंडबॉक्स के मिटाने के अनुरोध का स्ट्रक्चर इस तरह से दिया गया है:

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

अपडेट और जोड़ी गई ऐसेट

इसके ज़रिए सबमिट किए गए बदलाव, आपके रोज़ के बैच फ़ीड में भी शामिल होने चाहिए एपीआई. ऐसा नहीं करने पर, बैच में किए गए अपडेट आपके बढ़ते हुए बदलावों को ओवरराइट कर देंगे.

पेलोड

हर पोस्ट अनुरोध में JSON के साथ, अनुरोध पैरामीटर शामिल होने चाहिए पेलोड में, इस तरह की किसी भी इकाई का स्ट्रक्चर्ड डेटा शामिल है इन्वेंट्री स्कीमा.

JSON बिलकुल वैसा ही दिखना चाहिए जैसा बैच फ़ीड में दिखेगा. क्या अंतर है:

  • पेलोड वाले हिस्से का साइज़ पांच एमबी से ज़्यादा नहीं होना चाहिए. बैच के लिए इसी तरह तो हमारा सुझाव है कि आप ज़्यादा डेटा को फ़िट करने के लिए खाली सफ़ेद जगहों को हटा दें.
  • लिफ़ाफ़ा ऐसा होता है:
{
  "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
}

ऐसा होने पर, एचटीटीपी पीओएसटी से होने वाला इंक्रीमेंटल अपडेट इस तरह होगा:

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"
  }
}

दूसरा उदाहरण: मेन्यू आइटम की कीमत अपडेट करना

मान लीजिए कि आपको एक मेन्यू आइटम की कीमत बदलनी है. उदाहरण 1 की तरह, आपके अपडेट में पूरी टॉप-लेवल इकाई (मेन्यू) के लिए JSON शामिल होना चाहिए, और फ़ीड में v1 इन्वेंट्री स्कीमा का इस्तेमाल किया जाता है.

ऐसा बैच फ़ीड चुनें जो इस तरह दिखता है:

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

तो पीओएसटी से होने वाला इंक्रीमेंटल अपडेट इस तरह होगा:

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 इन्वेंट्री स्कीमा के लिए प्रोसेस को पूरा करने का तरीका.

किसी इकाई को हटाना

टॉप-लेवल की इकाइयों को हटाने के लिए, थोड़े बदले हुए एंडपॉइंट का इस्तेमाल करें, साथ ही, अनुरोध में एचटीटीपी POST के बजाय एचटीटीपी DELETE का इस्तेमाल करें.

किसी टॉप लेवल इकाई में मौजूद किसी सब-इकाई को हटाने के लिए, एचटीटीपी DELETE का इस्तेमाल न करें, जैसे कि मेन्यू आइटम. इसके बजाय, सब-इकाइयों को हटाए जाने को उस टॉप-लेवल इकाई में अपडेट करें जिसमें सब-इकाई को प्रासंगिक सूची या पैरामीटर.

पहला उदाहरण: टॉप-लेवल की कोई इकाई मिटाना

ऐसी स्थिति पर विचार करें जिसमें आपको किसी ऐसे फ़ीड में मौजूद रेस्टोरेंट को मिटाना हो जिसमें 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
}

दूसरा उदाहरण: सब-इकाइयां हटाना

टॉप-लेवल की इकाई में से किसी सब-इकाई को हटाने के लिए, आपको टॉप लेवल की इकाई भेजी जाती है उप-इकाई से जुड़ी इकाई को सही फ़ील्ड से हटा दिया जाए. नीचे दिए गए उदाहरण के लिए, माना जाता है कि फ़ीड 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"
  }
}

एपीआई रिस्पॉन्स कोड

सफल कॉल का मतलब यह नहीं है कि फ़ीड मान्य या सही है, बल्कि एपीआई कॉल किया गया. पूरे होने वाले कॉल को एचटीटीपी रिस्पॉन्स कोड 200 मिलता है. साथ ही, जवाब का मुख्य हिस्सा खाली होना चाहिए:

{}

गड़बड़ी होने पर, एचटीटीपी रिस्पॉन्स कोड 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\""
          }
        ]
      }
    ]
  }
}

कोड सैंपल

यहां कुछ सैंपल दिए गए हैं. इनमें बताया गया है कि अलग-अलग प्रॉडक्ट में इंक्रीमेंटल अपडेट एपीआई भाषाएं. ये नमूने Google प्राधिकरण लाइब्रेरी का उपयोग करते हैं और इनका उपयोग करके फ़ीड मान लेते हैं v1 इन्वेंट्री स्कीमा को हल कर सकते हैं. वैकल्पिक समाधानों के लिए, यहां देखें सर्वर से सर्वर ऐप्लिकेशन के लिए, OAuth 2.0 का इस्तेमाल करना.

इकाइयां अपडेट करना

Node.js

यह कोड Node.js के लिए Google की पुष्टि करने वाली लाइब्रेरी का इस्तेमाल करता है.

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)

Python

यह कोड, Python के लिए Google की पुष्टि करने वाली लाइब्रेरी का इस्तेमाल करता है.

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

यह कोड Java के लिए Google की पुष्टि करने वाली लाइब्रेरी का इस्तेमाल करता है.

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 की पुष्टि करने वाली लाइब्रेरी का इस्तेमाल करता है.

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)

Python

यह कोड, Python के लिए Google की पुष्टि करने वाली लाइब्रेरी का इस्तेमाल करता है.

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

यह कोड Java के लिए Google की पुष्टि करने वाली लाइब्रेरी का इस्तेमाल करता है.

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));
}

उपयोग के उदाहरण

यहां इंक्रीमेंटल अपडेट, पूरी फ़ीड अपडेट, और और एपीआई कॉल में हाई लेवल पर कॉन्टेंट जोड़ दिया जाता है:

स्थिति टॉप लेवल की इकाई ब्यौरा और इफ़ेक्ट
किसी सेवा को बंद करना DisabledService

आपको किसी सेवा को किसी अचानक वजह से बंद करना होगा.

इंक्रीमेंटल अपडेट: Service इकाई को इसमें भेजें @type वाले सवाल को बदलकर यह किया गया DisabledService, लेकिन अन्य प्रॉपर्टी में कोई बदलाव न करें.

सभी फ़ीड: पक्का करें कि इकाई को सभी फ़ीड से अपडेट किया गया हो @type को DisabledService पर सेट करने के लिए अगली बार Google अपने डेटा को फ़ेच करेगा. ऐसा न करने पर, इकाई फिर से चालू हो जाएगी.

खास आइटम स्टॉक में नहीं है Menu इंक्रीमेंटल अपडेट: इनकैप्सुलेटिंग Menu भेजें दी गई इकाई के लिए, offer.inventoryLevel वाली इकाई 0 पर सेट की गई MenuItem, और अन्य सभी डेटा में कोई बदलाव नहीं हुआ.
मेन्यू आइटम की कीमत में बदलाव Menu इंक्रीमेंटल अपडेट: इनकैप्सुलेटिंग Menu भेजें दी गई इकाई के लिए, offer.price की अपडेट की गई कीमत पर सेट की गई इकाई MenuItem, और अन्य सभी डेटा में कोई बदलाव नहीं हुआ.

नई टॉप-लेवल इकाई जोड़ें

सिर्फ़ Menu टाइप की इकाई के लिए लागू होता है, Restaurant और Service.

Menu, Restaurant, Service

उदाहरण के लिए, आपको किसी रेस्टोरेंट में नया मेन्यू जोड़ना होगा.

इंक्रीमेंटल अपडेट: रेस्टोरेंट के साथ नई मेन्यू इकाई भेजें इकाई और उसके hasMenu फ़ील्ड वाली इकाई को उसी हिसाब से अपडेट किया जाता है.

टॉप-लेवल की इकाई को हमेशा के लिए मिटाएं

सिर्फ़ Menu टाइप की इकाई के लिए लागू होता है, Restaurant और Service.

Menu, Restaurant, Service

इंक्रीमेंटल अपडेट: अश्लील तरीके से मिटाया गया.

सभी फ़ीड: पक्का करें कि कार्रवाई से पहले, पूरे फ़ीड से इकाई को हटा दिया गया हो का उल्लंघन नहीं करता है, तो इकाई को फिर से जोड़ दिया जाएगा.

किसी खास Service में डिलीवरी की नई जगह जोड़ें Service इंक्रीमेंटल फ़ीड: जिस Service इकाई की शिकायत की गई है उसे उसकी सभी इकाइयों के साथ भेजें फ़ील्ड में कोई बदलाव नहीं है, जैसा कि आम तौर पर पूरे फ़ीड में किया जाता है. इसमें डिलीवरी की नई जगह शामिल है Service के areaServed के भीतर बताया गया है.
डिलीवरी के अनुमानित समय को Service में अपडेट करें Service इंक्रीमेंटल फ़ीड: Service को उसके जैसा ही भेजें फ़ीड को छोड़कर, उसका hoursAvailable.deliveryHours अपडेट किया गया है उसी के हिसाब से.
Service में डिलीवरी के लिए कीमतें अपडेट करें Service इंक्रीमेंटल फ़ीड: इसके साथ पूरे Service भेजें offers.priceSpecification.price अपडेट की गई.
Service में डिलीवरी या खाना पैक कराकर ले जाने की सुविधा के खुले होने का समय अपडेट करें Service इंक्रीमेंटल फ़ीड: Service को उसके जैसा ही भेजें फ़ीड को छोड़कर, उसका hoursAvailable अपडेट किया गया है उसी के हिसाब से.
Service (ऑर्डर की कम से कम रकम बदलें) Service इंक्रीमेंटल फ़ीड: इसके साथ पूरे Service भेजें Service.offers.priceSpecification.eligibleTransactionVolume अपडेट किया गया
MenuItem को हमेशा के लिए मिटाएं Menu इंक्रीमेंटल फ़ीड: Menu को वही भेजें जो इसमें लेकिन इस MenuItem को hasMenuItems सूची.

बैच जॉब और इंंक्रीमेंटल अपडेट के लिए, प्रोसेसिंग टाइम पर एसएलओ

बैच या इंंक्रीमेंटल अपडेट के ज़रिए जोड़ी गई इकाई, इसमें प्रोसेस की जाएगी 1-2 दिन. बैच का इस्तेमाल करके, मिटाई गई या अपडेट की गई इकाई को दो चरणों में प्रोसेस किया जाएगा घंटे के दौरान, जबकि लगातार अपडेट से अपडेट की गई इकाई प्रोसेस की जाएगी में पांच मिनट लगेंगे. किसी पुरानी इकाई को सात दिनों के अंदर मिटा दिया जाता है.

आपके पास Google को यह जानकारी भेजने का विकल्प होता है:

  • अपनी इन्वेंट्री को अप-टू-डेट रखने के लिए, हर दिन एक से ज़्यादा बैच जॉब
  • अपनी इन्वेंट्री को अप-टू-डेट रखने के लिए, हर दिन एक बैच जॉब और इंक्रीमेंटल एपीआई इस्तेमाल करें.