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

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

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

ज़रूरी शर्तें

इंक्रीमेंटल अपडेट लागू करने से पहले, इन आइटम की ज़रूरत होगी:

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

एंडपॉइंट

नीचे दिए गए अनुरोधों में, इन्हें बदलें:

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

एंडपॉइंट को अपडेट करें

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

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities:batchPush

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

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities:batchpush

एंडपॉइंट को मिटाएं

अपनी इन्वेंट्री में से किसी इकाई को मिटाने के लिए, नीचे दिए गए एंडपॉइंट पर एचटीटीपी DELETE अनुरोध करें.

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

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

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

सैंडबॉक्स एनवायरमेंट

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

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

इकाइयां अपडेट की जा रही हैं

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

पेलोड अपडेट करें

JSON, नीचे दिए गए अंतर के साथ बैच फ़ीड में वैसा ही दिखना चाहिए जैसा कि बैच में दिखता है:

  • पेलोड के मुख्य हिस्से का साइज़ 5 एमबी से ज़्यादा नहीं होना चाहिए. इसी तरह बैच फ़ीड के लिए, हमारा सुझाव है कि ज़्यादा डेटा लगाने के लिए, आप खाली सफ़ेद जगहों को हटा दें.
  • लिफ़ाफ़ा इस तरह का है:
{
  "requests": [
    {
      "entity": {
        "data":"ENTITY_DATA",
        "name": "apps/project_id>/entities/type/entity_id"
      },
      "update_time":"UPDATE_TIMESTAMP"
    },
  ],
  "vertical": "FOODORDERING"
}

ऊपर दिए गए पेलोड में, इन्हें बदलें:

  • 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/sandbox/apps/provider-project/entities:batchPush
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "requests": [
    {
      "entity": {
        "name": "apps/provider-project/entities/restaurant/restaurant12345",
        "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: एक से ज़्यादा रेस्टोरेंट अपडेट करना

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

POST v2/sandbox/apps/provider-project/entities:batchPush
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "requests": [
    {
      "entity": {
        "name": "apps/provider-project/entities/restaurant/restaurant12345",
        "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
        }
      }
    },
    {
      "entity": {
        "name": "apps/provider-project/entities/restaurant/restaurant123",
        "data": {
          "@type": "Restaurant",
          "@id": "restaurant123",
          "name": "Some Other Restaurant",
          "url": "https://www.provider.com/somerestaurant",
          "telephone": "+16501231235",
          "streetAddress": "385 Spear St",
          "addressLocality": "San Mateo",
          "addressRegion": "CA",
          "postalCode": "94115",
          "addressCountry": "US"
        }
      }
    }
  ]
  "vertical": "FOODORDERING"
}

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

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

ऐसा बैच फ़ीड बनाएं जो कुछ ऐसा दिखे:

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

तो, POST के ज़रिए आपका इंक्रीमेंटल अपडेट इस तरह होगा:

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

कोई इकाई जोड़ना

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

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

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

टॉप-लेवल की इकाई मिटाना

ऐसी स्थिति के बारे में सोचें जहां आपको फ़ीड में मौजूद किसी रेस्टोरेंट को मिटाना हो. आपको इसकी सेवाएं और मेन्यू भी मिटाने होंगे.

मेन्यू इकाई के लिए आईडी वाला सैंपल एंडपॉइंट "provider/restaurant/menu/nr":

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

किसी रेस्टोरेंट की इकाई के लिए आईडी वाला सैंपल एंडपॉइंट "https://www.provider.com/restaurant/nr":

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

आईडी वाली सेवा इकाई के लिए सैंपल एंडपॉइंट "https://www.provider.com/restaurant/service/nr":

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

उप-इकाइयां हटाई जा रही हैं

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

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

कॉल हो जाने का यह मतलब नहीं है कि फ़ीड मान्य या सही है. इसका मतलब सिर्फ़ एपीआई कॉल किया गया है. पूरे होने वाले कॉल को खाली रिस्पॉन्स वाले हिस्से के साथ एचटीटीपी रिस्पॉन्स कोड 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 = 'your/entity/id'
const PROJECT_ID = 'type/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(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:batchPush`,
    body: {
      requests: [
        {
          entity: {
            data: JSON.stringify(entity)
            name: `apps/${PROJECT_ID}/entities/${ENTITY_ID}`
          }
        }
      ],
      vertical: 'FOODORDERING'
    },
    json: true
  },
  (err, res, body) => {
    if (err) { return console.log(err); }
    console.log(`Response: ${JSON.stringify(res)}`)
  })
}

updateEntity(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 = 'type/your/entity/id'

ENDPOINT = 'https://actions.googleapis.com/v2/apps/%s/entities:batchPush' % (
    PROJECT_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()

entity = {}
entity['data'] = data #entity JSON-LD serialized as string
entity['name'] = 'apps/%s/entities/%s' % (PROJECT_ID, urllib.quote(ENTITY_ID, '') )

# Populating the request
request = {}
request['entity'] = entity
requestArray = [request]

# Populating the payload
payload = {}
payload['requests'] = requestArray
payload['vertical'] = 'FOODORDERING'

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

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 = "type/your-entity-id";

/**
 * 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 data) {
  String authToken = getAuthToken();
  String endpoint = String.format("https://actions.googleapis.com/v2/apps/%s/entities/:batchPush", PROJECT_ID);

  JSONObject entity = new JSONObject();
  entity.put("data", data.toString());
  entity.put("name", String.format("apps/%s/entities/%s", PROJECT_ID, URLEncoder.encode(ENTITY_ID, "UTF-8")));

  JSONObject request = new JSONObject();
  request.put("entity", entity);

  JSONArray requestArray = new JSONArray();
  requestArray.put(request);

  JSONObject payload = new JSONObject();
  payload.put("requests", requestArray);
  payload.put("vertical", FOODORDERING);

  // Execute POST request
  executePostRequest(endpoint, authToken, payload);
}

इकाइयां हटाना

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

इस्तेमाल के उदाहरण

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

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

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

इंक्रीमेंटल अपडेट: जिस इकाई की शिकायत की गई है उसे अपडेट करने के लिए, Service इकाई की isDisabled प्रॉपर्टी को true पर सेट करें. हालांकि, दूसरी प्रॉपर्टी को पहले जैसा ही रखें.

पूरी फ़ीड: Google से अगली बार फ़ेच किए जाने से पहले isDisabled को true पर सेट करने के लिए, पूरे फ़ीड में मौजूद इकाई को अपडेट करना न भूलें. ऐसा न करने पर, इकाई फिर से चालू हो जाएगी.

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

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

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

Menu, Restaurant, Service

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

पूरी फ़ीड: अपने डेटा फ़ीड में इकाई जोड़ें और बैच में डेटा डालने का इंतज़ार करें.

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

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

Menu, Restaurant, Service

इंक्रीमेंटल अपडेट: किसी अश्लील कॉन्टेंट को मिटाने की सूचना भेजें.

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

किसी खास Service में, डिलीवरी की नई जगह जोड़ें ServiceArea इंक्रीमेंटल फ़ीड: जिस ServiceArea इकाई की शिकायत की गई है उसे उसके सभी फ़ील्ड में बदलाव करके भेजें. ठीक वैसे ही जैसे आप आम तौर पर पूरे फ़ीड में करते हैं. डिलीवरी की जगह की जानकारी polygon, geoRadius या postalCode में दी जाती है.
Service में, डिलीवरी का अनुमानित समय अपडेट करें ServiceHours इंक्रीमेंटल फ़ीड: ServiceHours को वैसा ही भेजें जैसा कि फ़ीड में किया गया है. हालांकि, इसके leadTimeMin को उसी हिसाब से अपडेट किया जाता है.
Service में डिलीवरी वाली कीमतों को अपडेट करें Fee इंक्रीमेंटल फ़ीड: price अपडेट होने पर, पूरी डिलीवरी Fee भेजें.
Service में, डिलीवरी या खाना पैक कराकर ले जाने की सुविधा के खुले होने का समय अपडेट करें ServiceHours इंक्रीमेंटल फ़ीड: ServiceHours को वैसा ही भेजें जैसा कि फ़ीड में किया गया है. हालांकि, इसकी opens और closes प्रॉपर्टी उसी हिसाब से अपडेट की जाती हैं.
Service (ऑर्डर की कम से कम रकम बदलें) Fee इंक्रीमेंटल फ़ीड: अपडेट किए गए minPrice साथ ही, पूरा Fee भेजें
MenuItem को हमेशा के लिए मिटाएं Menu इंक्रीमेंटल फ़ीड: MenuItem को फ़ीड की तरह ही भेजें, लेकिन parentMenuSectionId खाली रखें.

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

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

Google को इनमें से कोई एक दस्तावेज़ भेजा जा सकता है:

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