इन्वेंट्री के अपडेट के लिए, वर्शन 1

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

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

सेटअप

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

  1. प्रोजेक्ट बनाने के लिए, प्रोजेक्ट बनाएं और सेट अप करें में दिया गया तरीका अपनाएं.
  2. सेवा खाता बनाने के लिए, सेवा खाता सेट अप करना में बताए गए निर्देशों का पालन करें. ध्यान दें कि सेवा खाते के लिए "एडिटर" की भूमिका जोड़ने के लिए, आपके पास प्रोजेक्ट का "मालिक" होना ज़रूरी है
  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

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

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

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

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

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

अपडेट और नई सुविधाएं

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

पेलोड

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

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

  • पेलोड बॉडी का साइज़ 5 एमबी से ज़्यादा नहीं होना चाहिए. बैच फ़ीड की तरह ही, हमारा सुझाव है कि ज़्यादा डेटा फ़िट करने के लिए, खाली जगहों को हटाएं.
  • लिफाफा इस तरह का होना चाहिए:
{
  "entity": {
    "data":"ENTITY_DATA",
    "vertical":"FOODORDERING"
  },
  "update_time":"UPDATE_TIMESTAMP"
}

ऊपर दिए गए पेलोड में, इनकी जगह ये डालें:

  • ENTITY_DATA: JSON फ़ॉर्मैट में मौजूद इकाई, स्ट्रिंग के तौर पर सीरियलाइज़ की गई. data फ़ील्ड में, JSON-LD इकाई को स्ट्रिंग के तौर पर पास किया जाना चाहिए.
  • UPDATE_TIMESTAMP (ज़रूरी नहीं): आपके सिस्टम में इकाई को अपडेट किए जाने का टाइमस्टैंप. समय की वैल्यू, आगे की नहीं होनी चाहिए. डिफ़ॉल्ट टाइमस्टैंप वह समय होता है जब Google को अनुरोध मिलता है. इंक्रीमेंटल अनुरोध के ज़रिए इकाई भेजते समय, इकाई के वर्शन में जोड़ने/अपडेट करने के अनुरोध के मामले में भी update_time फ़ील्ड का इस्तेमाल किया जाता है.

इकाई को अपडेट करना

पहला उदाहरण: रेस्टोरेंट की जानकारी अपडेट करना

मान लें कि आपको किसी रेस्टोरेंट का फ़ोन नंबर तुरंत अपडेट करना है. आपके अपडेट में, पूरे रेस्टोरेंट का 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"
  }
}

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

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

मान लें कि आपके पास ऐसा बैच फ़ीड है जो इस तरह दिखता है:

{
  "@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 इन्वेंट्री स्कीमा के लिए बताई गई बैच फ़ीड प्रोसेस का इस्तेमाल करें.

इकाई हटाना

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

किसी टॉप-लेवल इकाई में मौजूद किसी सब-इकाई को हटाने के लिए, एचटीटीपी 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 Auth लाइब्रेरी का इस्तेमाल करते हैं. साथ ही, इनमें 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 में बदलकर भेजें, लेकिन अन्य प्रॉपर्टी को पहले जैसा ही रखें.

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

कोई आइटम स्टॉक में नहीं है Menu बढ़ोतरी वाले अपडेट: MenuItem के लिए offer.inventoryLevel को 0 पर सेट करके, 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 की सूची से हटा दें.

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

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

Google को इनमें से कोई एक ईमेल भेजा जा सकता है:

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