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

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

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

सेटअप

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

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

एंडपॉइंट

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

वर्शन 2 इन्वेंट्री

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

वर्शन 1 इन्वेंट्री

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

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

वर्शन 2 इन्वेंट्री

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

वर्शन 1 इन्वेंट्री

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 इन्वेंट्री स्कीमा का इस्तेमाल करता है. आप रेस्टोरेंट में किसी तरह की और भी इकाई के साथ रेस्टोरेंट में बदलाव करना चाहते हों. आपके डेटा के अपडेट के लिए एंडपॉइंट यह होगा:

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

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

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

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

सैंडबॉक्स के अनुरोधों के लिए, ऊपर दिए गए एंडपॉइंट में दिए गए दिशा-निर्देशों का पालन करें. हालांकि, /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 की मदद से इस तरह अपडेट किया जाएगा:

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: मेन्यू आइटम की कीमत अपडेट करना

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

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

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

किसी टॉप-लेवल की इकाई में मौजूद सब-इकाई को हटाने के लिए, एचटीटीपी 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"
  }
}

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

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

{}

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

उदाहरण के लिए, अगर उपयोगकर्ता ने लिफ़ाफ़े में FAKE_VERTICAL में "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 पुष्टि लाइब्रेरी का इस्तेमाल करते हैं और वर्शन 1 इन्वेंट्री स्कीमा का इस्तेमाल करके फ़ीड मानते हैं. वैकल्पिक समाधानों के लिए, सर्वर ऐप्लिकेशन के लिए 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

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

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

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

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

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

सिर्फ़ 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 को Service.offers.priceSpecification.eligibleTransactionVolume के साथ अपडेट किया गया
MenuItem को हमेशा के लिए मिटाएं Menu इंक्रीमेंटल फ़ीड: Menu को फ़ीड में वैसा ही भेजें, लेकिन इस MenuItem को hasMenuItems सूची से हटाया गया.

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

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

आप या तो Google को भेज सकते हैं:

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