Inkrementelle Inventaraktualisierungen v1

In diesem Abschnitt wird beschrieben, wie Sie zeitkritische Aktualisierungen Ihrer Feeds an Google. Mit der Inkrementelle Updates API können Sie Entitäten in Ihrem Feeds nahezu in Echtzeit.

Diese Funktion ist hauptsächlich für Updates gedacht, die Sie nicht vorhersehen können, z. B. bei Notrufen. In der Regel gilt, dass jede Änderung, die über das Die Inkrementelle Updates API sollte eine Änderung sein, die in maximal einer Woche. Muss Ihre Änderung nicht sofort übernommen werden, können Sie stattdessen eine Batch-Aktualisierung. Inkrementelle Aktualisierungen werden in maximal fünf Minuten.

Einrichtung

So implementieren Sie inkrementelle Updates:

  1. Folgen Sie der Anleitung unter Projekt erstellen und einrichten, um Projekt erstellen.
  2. Folgen Sie der Anleitung unter Dienstkonto einrichten. um ein Dienstkonto zu erstellen. Sie müssen ein „Inhaber“ sein der um einen Bearbeiter hinzuzufügen, Rolle für das Dienstkonto
  3. Optional, aber empfohlen: Google-Clientbibliothek installieren in der Sprache Ihrer Wahl, um die Verwendung von OAuth 2.0 beim Aufrufen der der API erstellen. Diese Bibliotheken werden in den unten aufgeführten Codebeispielen verwendet. Andernfalls müssen Tokenaustausch manuell durchführen, wie unter OAuth 2.0 für den Zugriff auf Google APIs verwenden beschrieben.

Endpunkt

Um Google über ein Update zu informieren, stellen Sie eine HTTP-POST-Anfrage an den inkrementellen Updates API mit einer Nutzlast von Updates und Ergänzungen. Das verwendete Inventarschema bestimmt, an welchen Endpunkt Ihre Anfrage gesendet wird:

v2-Inventar

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

v1-Inventar

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

Um eine Entität zu entfernen, stellen Sie eine HTTP DELETE-Anfrage an den folgenden Endpunkt, der welches Inventarschema Sie verwenden:

v2-Inventar

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

v1-Inventar

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

Ersetzen Sie in den obigen Anfragen Folgendes:

  • PROJECT_ID: Google Cloud-Projekt-ID, die mit dem Projekt verknüpft ist, das Sie die unter Projekt erstellen und einrichten erstellt wurden.
  • TYPE (nur Inventarschema Version 2): Der Entitätstyp (Attribut @type) des Objekts in Ihrem Datenfeed, das Sie aktualisieren möchten.
  • ENTITY_ID: ID der in der Nutzlast enthaltenen Entität. Achten Sie darauf, Die Entitäts-ID muss URL-codiert werden.
  • DELETE_TIME (nur Endpunkt löschen): Optionales Feld zur Kennzeichnung des Zeitpunkt, zu dem die Entität in Ihren Systemen gelöscht wurde (standardmäßig die Anfrage empfangen). Der Zeitwert darf nicht in der Zukunft liegen. Beim Senden einer Entität durch einen inkrementellen Aufruf, Entitätsversionsverwaltung verwendet im Falle eines Löschaufrufs auch das Feld delete_time. Formatieren Wert als yyyy-mm-ddTHH:mm:ssZ

Angenommen, Sie haben ein Projekt mit der ID „delivery-provider-id“. mit das Inventarschema der Version 2. Sie möchten Änderungen am Restaurant vornehmen, Typ des Restaurantunternehmens von „MenuSection“ und die Entitäts-ID „menuSection_122“. Der Endpunkt für Aktualisierungen Ihrer Daten wäre der folgende:

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

Um dieselbe Entität zu entfernen, verwenden Sie folgenden HTTP DELETE API-Aufruf:

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

Sandbox-Anfragen

Folgen Sie bei Sandbox-Anfragen der Anleitung unter Endpunkt oben, aber Anfragen an /v2/sandbox/apps/ statt an /v2/apps/ stellen Beispiel: Die Sandbox-Löschanfrage für das V2-Inventarschema ist so aufgebaut:

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

Aktualisierungen und Ergänzungen

Ihre täglichen Batch-Feeds sollten auch Änderungen enthalten, die über dieses der API erstellen. Andernfalls überschreiben die Batch-Updates Ihre inkrementellen Änderungen.

Nutzlast

Jede POST-Anfrage muss die Anfrageparameter zusammen mit dem JSON-Code enthalten. Nutzlast, die die strukturierten Daten eines beliebigen Entitätstyps enthält, der in den Inventarschema.

Die JSON-Datei sollte wie im Batch-Feed aussehen, mit den folgenden Zeichen: folgenden Unterschieden:

  • Der Nutzlasttext darf nicht größer als 5 MB sein. Ähnlich wie im Batch -Feeds, empfehlen wir, Leerzeichen zu entfernen, damit mehr Daten unterzubringen sind.
  • Der Umschlag lautet:
{
  "entity": {
    "data":"ENTITY_DATA",
    "vertical":"FOODORDERING"
  },
  "update_time":"UPDATE_TIMESTAMP"
}

Ersetzen Sie in der obigen Nutzlast Folgendes:

  • ENTITY_DATA: Entität im JSON-Format serialisiert als String. Die JSON-LD-Entität muss als String im Feld data übergeben werden.
  • UPDATE_TIMESTAMP (optional): Zeitstempel für die Aktualisierung der Entität in Ihren Systemen. Der Zeitwert darf nicht in der Zukunft liegen. Der Standardzeitstempel ist der Zeitpunkt, Google erhält die Anfrage. Wenn Sie eine Entität über eine -Anfrage verwendet, verwendet die Entitätsversionsverwaltung auch die update_time im Fall einer Anfrage zum Hinzufügen/Aktualisieren.

Entität aktualisieren

Beispiel 1: Restaurant aktualisieren

Angenommen, Sie müssen die Telefonnummer eines Restaurants dringend aktualisieren. Ihr update enthält die JSON-Datei für das gesamte Restaurant.

Stellen Sie sich einen Batch-Feed vor, der so aussieht:

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

Dann würde Ihr inkrementelles Update per HTTP POST so aussehen:

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

Beispiel 2: Preis für Artikel auf einer Speisekarte aktualisieren

Angenommen, Sie müssen den Preis eines Artikels auf der Speisekarte ändern. Wie in Beispiel 1 wird Ihr Update muss die JSON-Datei für die gesamte übergeordnete Entität (das Menü) enthalten und die -Feed verwendet das V1-Inventarschema.

Stellen Sie sich einen Batch-Feed vor, der so aussieht:

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

Dann würde Ihr inkrementelles Update per POST wie folgt aussehen:

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

Entität hinzufügen

Verwenden Sie keine Inventaraktualisierungen, um Entitäten hinzuzufügen. Verwenden Sie stattdessen Batch-Feeds wie für das v2-Inventarschema beschrieben.

Entität entfernen

Um Entitäten der obersten Ebene zu entfernen, verwenden Sie einen leicht modifizierten endpoint, und verwenden Sie in der Anfrage HTTP DELETE anstelle von HTTP POST.

Verwenden Sie HTTP DELETE nicht, um eine Unterentität innerhalb einer übergeordneten Entität zu entfernen, z. B. ein Menüelement innerhalb eines Menüs. Behandeln Sie das Entfernen von Unterentitäten als Aktualisierung auf eine übergeordnete Entität, bei der die Unterentität aus der relevante Liste oder einen relevanten Parameter enthält.

Beispiel 1: Entität der obersten Ebene löschen

Angenommen, Sie möchten ein Restaurant aus einem Feed löschen, in dem das Inventarschema von V1. Sie müssen auch die zugehörigen Dienste und Speisekarten löschen.

Beispielendpunkt für eine Menüentität mit ID "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

Beispielendpunkt für eine Restaurantentität mit ID "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

Ein Beispielendpunkt für eine Dienstentität mit ID "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
}

Beispiel 2: Unterentitäten entfernen

Wenn Sie eine Unterentität innerhalb einer übergeordneten Entität entfernen möchten, senden Sie die oberste Ebene Entität, wobei die Unterentität aus dem entsprechenden Feld entfernt wurde. Die folgenden Im Beispiel wird davon ausgegangen, dass im Feed das Inventarschema V1 verwendet wird.

Wenn Sie z. B. ein Einzugsgebiet entfernen möchten, geben Sie das entsprechende Einzugsgebiet an. wurde aus der areaServed-Liste entfernt.

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-Antwortcodes

Ein erfolgreicher Aufruf bedeutet nicht, dass der Feed gültig oder korrekt ist, sondern nur, dass der API-Aufruf wurde ausgeführt. Erfolgreiche Aufrufe erhalten den HTTP-Antwortcode 200 sowie mit leerem Antworttext:

{}

Bei Fehlern ist der HTTP-Antwortcode nicht 200 und der Antworttext ist nicht zeigt an, was schiefgelaufen ist.

Wenn der Nutzer beispielsweise die Branche in den Umschlag ein, FAKE_VERTICAL, erhalten Sie die folgende Nachricht:

{
  "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\""
          }
        ]
      }
    ]
  }
}

Codebeispiel

Unten sehen Sie einige Beispiele, wie die Inkrementelle Updates API auf verschiedenen Sprachen. In diesen Beispielen werden die Google Auth Libraries verwendet. Es wird davon ausgegangen, dass ein Feed mit das Inventarschema von V1. Alternative Lösungen finden Sie unter OAuth 2.0 für Server-zu-Server-Anwendungen verwenden.

Entitäten aktualisieren

Node.js

In diesem Code wird die Google-Authentifizierungsbibliothek für Node.js verwendet.

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

In diesem Code wird die Google-Authentifizierungsbibliothek für Python verwendet.

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

In diesem Code wird die Google-Authentifizierungsbibliothek für Java verwendet.

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

Elemente entfernen

Node.js

In diesem Code wird die Google-Authentifizierungsbibliothek für Node.js verwendet.

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

In diesem Code wird die Google-Authentifizierungsbibliothek für Python verwendet.

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

In diesem Code wird die Google-Authentifizierungsbibliothek für Java verwendet.

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

Anwendungsfälle

Die folgenden Anwendungsfälle sind Beispiele für inkrementelle Aktualisierungen, vollständige Feedaktualisierungen, und den Inhalt auf übergeordneter Ebene im API-Aufruf:

Szenario Entität der obersten Ebene Beschreibung und Effekte
Dienst deaktivieren DisabledService

Sie müssen einen Dienst aus unvorhergesehenen Gründen deaktivieren.

Inkrementelle Updates:Senden Sie die Entität Service per Frage mit @type geändert zu DisabledService, die anderen Eigenschaften bleiben jedoch unverändert.

Vollständige Feeds:Aktualisieren Sie die Entität über die vollständigen Feeds. @type auf DisabledService eingestellt vor beim nächsten Abruf von Google an. Andernfalls wird die Entität wieder aktiviert.

Bestimmter Artikel ist nicht auf Lager Menu Inkrementelle Updates: Senden Sie die kapselende Menu. Entität mit offer.inventoryLevel auf 0 für die angegebene MenuItem und alle anderen Daten unverändert.
Preisänderung für Artikel auf der Speisekarte Menu Inkrementelle Updates: Senden Sie die kapselende Menu. Entität mit offer.price auf den aktualisierten Preis für das angegebene MenuItem und alle anderen Daten unverändert.

Neues übergeordnetes Element hinzufügen

Gilt nur für Entitätstypen Menu, Restaurant und Service.

Menu, Restaurant, Service

Beispiel: Sie möchten einem Restaurant eine neue Speisekarte hinzufügen.

Inkrementelle Updates:Senden Sie den neuen Menüeintrag zusammen mit dem Restaurant. mit dem Feld hasMenu entsprechend aktualisiert.

Entität der obersten Ebene endgültig löschen

Gilt nur für Entitätstypen Menu, Restaurant und Service.

Menu, Restaurant, Service

Inkrementelle Updates:Senden Sie eine explizites Löschen.

Vollständige Feeds:Entfernen Sie die Entität vor dem beim nächsten Abruf durch Google an. Andernfalls wird die Entität wieder hinzugefügt.

Neues Liefergebiet in einer bestimmten Service hinzufügen Service Inkrementelle Feeds:Senden Sie die betreffende Service-Entität mit allen zugehörigen mit neuem Liefergebiet, wie Sie es normalerweise bei den vollständigen Feeds tun würden. angegeben im areaServed von Service.
Voraussichtliche Lieferzeit aktualisieren in Service Service Inkrementelle Feeds:Senden Sie Service wie in die Feeds, außer der hoursAvailable.deliveryHours, die aktualisiert wurde entsprechend anpassen.
Lieferpreise in Service aktualisieren Service Inkrementelle Feeds:Vollständige Service senden mit offers.priceSpecification.price aktualisiert.
Öffnungszeiten für Lieferung oder Essen zum Mitnehmen in Service aktualisieren Service Inkrementelle Feeds:Senden Sie Service wie in die Feeds, außer der hoursAvailable, die aktualisiert wurde entsprechend anpassen.
Service (Mindestbestellwert ändern) Service Inkrementelle Feeds:Vollständige Service senden mit Service.offers.priceSpecification.eligibleTransactionVolume aktualisiert
MenuItem endgültig löschen Menu Inkrementelle Feeds: Senden Sie die Menu wie im -Feeds entfernt. Diese MenuItem wurden aus dem hasMenuItems-Liste.

SLO für die Verarbeitungszeit für Batchjobs und inkrementelle Updates

Eine Entität, die über eine Batch- oder inkrementelle Aktualisierung hinzugefügt wurde, wird verarbeitet in 1–2 Tage. Eine Entität, die durch einen Batch aktualisiert oder gelöscht wurde, wird in 2 verarbeitet Stunden, während eine durch schrittweise Aktualisierung aktualisierte Entität in 5 Minuten. Eine veraltete Entität wird nach sieben Tagen gelöscht.

Sie können Google Folgendes senden:

  • Mehrere Batchjobs pro Tag, um Ihr Inventar auf dem neuesten Stand zu halten, ODER
  • Ein Batchjob pro Tag und inkrementelle APIs, um Ihr Inventar auf dem neuesten Stand zu halten