Inkrementelle Inventaraktualisierungen v1

In diesem Abschnitt wird beschrieben, wie Sie zeitkritische Aktualisierungen Ihrer Feeds an Google senden können. Mit der increment Updates API können Sie Entitäten in Ihren Feeds nahezu in Echtzeit aktualisieren und löschen.

Diese Funktion ist hauptsächlich für Updates vorgesehen, die nicht vorhersehbar sind, z. B. Notfallschließungen. In der Regel sollte es sich bei jeder Änderung, die über die Partial Updates API gesendet wird, um eine Änderung handeln, die innerhalb von maximal einer Woche übernommen werden darf. Wenn Ihre Änderung nicht sofort wirksam werden muss, können Sie stattdessen eine Batch-Aktualisierung verwenden. Inkrementelle Aktualisierungen werden in höchstens fünf Minuten verarbeitet.

Einrichtung

So implementieren Sie inkrementelle Updates:

  1. Führen Sie die unter Projekt erstellen und einrichten beschriebenen Schritte aus, um ein Projekt zu erstellen.
  2. Führen Sie die unter Dienstkonto einrichten beschriebenen Schritte aus, um ein Dienstkonto zu erstellen. Sie müssen „Inhaber“ des Projekts sein, um dem Dienstkonto die Rolle „Bearbeiter“ hinzufügen zu können
  3. Optional, aber empfohlen: Installieren Sie die Google-Clientbibliothek in der Sprache Ihrer Wahl, um die Verwendung von OAuth 2.0 beim Aufrufen der API zu vereinfachen. Diese Bibliotheken werden in den unten aufgeführten Codebeispielen verwendet. Andernfalls müssen Sie den Tokenaustausch manuell ausführen, wie unter OAuth 2.0 für den Zugriff auf Google APIs verwenden beschrieben.

Endpunkt

Wenn Sie Google über eine Aktualisierung informieren möchten, senden Sie eine HTTP-POST-Anfrage an die gestreifte Updates-API und fügen Sie eine Nutzlast von Updates und Ergänzungen hinzu. 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 dem verwendeten Inventarschema entspricht:

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 unter Projekt erstellen und einrichten erstellt haben.
  • TYPE (nur V2-Inventarschema): Der Entitätstyp (@type-Property) des Objekts in Ihrem Datenfeed, das Sie aktualisieren möchten.
  • ENTITY_ID: ID der Entität in der Nutzlast. Ihre Entitäts-ID muss URL-codiert sein.
  • DELETE_TIME (nur Endpunkt löschen): Optionales Feld, das den Zeitpunkt angibt, zu dem die Entität auf Ihren Systemen gelöscht wurde. Der Standardwert ist der Zeitpunkt, zu dem die Anfrage eingeht. Der Zeitwert darf nicht in der Zukunft liegen. Beim Senden einer Entität über einen inkrementellen Aufruf verwendet die Entitätsversionsverwaltung auch bei einem Löschaufruf das Feld delete_time. Formatieren Sie diesen Wert als yyyy-mm-ddTHH:mm:ssZ.

Angenommen, Sie haben ein Projekt mit der ID "delivery-provider-id", das das Inventarschema V2 verwendet. Sie möchten Änderungen am Restaurant mit dem Restaurant-Entitätstyp „MenuSection“ und der Entitäts-ID „menuSection_122“ vornehmen. Der Endpunkt für Aktualisierungen Ihrer Daten wäre:

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

Um dieselbe Entität zu entfernen, verwenden Sie diesen 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. Senden Sie Anfragen jedoch an /v2/sandbox/apps/ und nicht an /v2/apps/. Eine Sandbox-Löschanfrage für das Inventarschema V2 ist beispielsweise so strukturiert:

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

Updates und Ergänzungen

Ihre täglichen Batchfeeds sollten außerdem alle Änderungen enthalten, die über diese API gesendet werden. Andernfalls überschreiben Ihre Batch-Updates Ihre inkrementellen Änderungen.

Nutzlast

Jede POST-Anfrage muss die Anfrageparameter zusammen mit der JSON-Nutzlast enthalten, die die strukturierten Daten jedes im Inventarschema aufgeführten Entitätstyps enthält.

Die JSON-Datei sollte bis auf die folgenden Unterschiede genauso aussehen wie im Batchfeed:

  • Der Nutzlasttext darf nicht größer als 5 MB sein. Ähnlich wie bei Batchfeeds empfehlen wir Ihnen, Leerzeichen zu entfernen, um mehr Daten anzupassen.
  • Der Umschlag sieht so aus:
{
  "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, an dem Google die Anfrage empfängt. Beim Senden einer Entität über eine inkrementelle Anfrage verwendet die Entitätsversionsverwaltung auch das Feld update_time für eine Anfrage zum Hinzufügen oder Aktualisieren.

Entität aktualisieren

Beispiel 1: Ein Restaurant aktualisieren

Angenommen, Sie müssen die Telefonnummer eines Restaurants dringend aktualisieren. Dein Update enthält den JSON-Code für das gesamte Restaurant.

Betrachten Sie einen Batch-Feed, 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 eines Artikels auf der Speisekarte aktualisieren

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

Betrachten Sie einen Batch-Feed, der so aussieht:

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

Dann würde Ihr inkrementelles Update über 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

Vermeiden Sie zum Hinzufügen von Entitäten die Verwendung von Inventaraktualisierungen. Wenden Sie stattdessen die Batch-Feeds an, wie unter V2-Inventarschema beschrieben.

Element entfernen

Um Entitäten der obersten Ebene zu entfernen, verwenden Sie einen leicht modifizierten Endpunkt und verwenden 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. einen Menüpunkt in einem Menü. Betrachten Sie das Entfernen von Unterentitäten stattdessen als Aktualisierung einer übergeordneten Entität, bei der die Unterentität aus der entsprechenden Liste oder dem entsprechenden Parameter entfernt wird.

Beispiel 1: Eine Entität auf oberster Ebene löschen

Angenommen, Sie möchten ein Restaurant in einem Feed löschen, der das V1-Inventarschema verwendet. Sie müssen auch die zugehörigen Dienste und Menüs löschen.

Beispiel-Endpunkt für eine Menüentität mit der 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

Beispiel für einen Endpunkt für eine Restaurantentität mit der 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

Beispiel für einen Endpunkt für eine Dienstentität mit der 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

Zum Entfernen einer Unterentität aus einer übergeordneten Entität senden Sie die Entität der obersten Ebene, wobei die Unterentität aus dem entsprechenden Feld entfernt wird. Im folgenden Beispiel wird davon ausgegangen, dass der Feed das Inventarschema V1 verwendet.

Wenn Sie beispielsweise ein Einzugsgebiet entfernen möchten, aktualisieren Sie es so, dass es aus der areaServed-Liste entfernt wird.

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 erfolgt ist. Erfolgreiche Aufrufe erhalten den HTTP-Antwortcode 200 mit einem leeren Antworttext:

{}

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

Wenn der Nutzer beispielsweise den Wert "vertical" im Umschlag auf FAKE_VERTICAL gesetzt hat, 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

Im Folgenden finden Sie einige Beispiele für die Verwendung der Inkrementellen Updates API in verschiedenen Sprachen. In diesen Beispielen werden die Google-Authentifizierungsbibliotheken verwendet und es wird davon ausgegangen, dass es sich um einen Feed mit V1-Inventarschema handelt. 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

Dieser Code verwendet die Google-Authentifizierungsbibliothek für Java.

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

Dieser Code verwendet die Google-Authentifizierungsbibliothek für Java.

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 Element der obersten Ebene Beschreibung und Effekte
Dienst deaktivieren DisabledService

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

Inkrementelle Aktualisierungen: Senden Sie die betreffende Service-Entität mit @type in DisabledService, behalten Sie jedoch andere Attribute bei.

Vollständige Feeds:Aktualisieren Sie die Entität aus den vollständigen Feeds so, dass @type vor dem nächsten Abruf durch Google auf DisabledService gesetzt ist. Andernfalls wird die Entität wieder aktiviert.

Ein bestimmter Artikel ist nicht auf Lager Menu Inkrementelle Aktualisierungen: Sende die kapselnde Menu-Entität, wobei offer.inventoryLevel für die angegebene MenuItem auf 0 gesetzt ist und alle anderen Daten unverändert bleiben.
Preisänderung auf Speisekarte Menu Inkrementelle Aktualisierungen: Sende die kapselnde Menu-Entität, wobei offer.price auf den aktualisierten Preis für die angegebene MenuItem festgelegt ist und alle anderen Daten unverändert bleiben.

Neues Element der obersten Ebene hinzufügen

Gilt nur für Entitäten der Typen Menu, Restaurant und Service.

Menu, Restaurant, Service

Beispielsweise müssen Sie einem Restaurant eine neue Speisekarte hinzufügen.

Inkrementelle Aktualisierungen:Senden Sie die neue Menüentität zusammen mit der Restaurantentität mit dem Feld hasMenu entsprechend.

Element der obersten Ebene endgültig löschen

Gilt nur für Entitäten der Typen Menu, Restaurant und Service.

Menu, Restaurant, Service

Inkrementelle Updates:Senden Sie einen expliziten Löschvorgang.

Vollständige Feeds:Die Entität muss vor dem nächsten Abruf durch Google aus den vollständigen Feeds entfernt werden. Andernfalls wird die Entität wieder hinzugefügt.

Neues Liefergebiet in einem bestimmten Service hinzufügen Service Inkrementelle Feeds:Senden Sie die betreffende Service-Entität mit allen Feldern intakt, wie Sie es auch normalerweise in den vollständigen Feeds tun würden, und geben Sie innerhalb von areaServed der Service einen neuen Lieferbereich an.
Voraussichtliche Lieferzeit in Service aktualisieren Service Inkrementelle Feeds:Senden Sie Service wie in den Feeds, außer dass hoursAvailable.deliveryHours entsprechend aktualisiert wird.
Lieferpreise in Service aktualisieren Service Inkrementelle Feeds:Vollständige Service senden, wobei offers.priceSpecification.price aktualisiert wird.
Liefer- oder Abholzeiten in Service aktualisieren Service Inkrementelle Feeds:Senden Sie Service wie in den Feeds, außer dass hoursAvailable entsprechend aktualisiert wird.
Service (Mindestbestellbetrag ändern) Service Inkrementelle Feeds:Vollständige Service senden, wobei Service.offers.priceSpecification.eligibleTransactionVolume aktualisiert wird
MenuItem endgültig löschen Menu Inkrementelle Feeds:Sende das Menu genau wie in den Feeds, aber so, dass MenuItem aus der hasMenuItems-Liste entfernt wird.

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

Eine Entität, die durch ein Batch- oder inkrementelles Update hinzugefügt wird, wird in ein bis zwei Tagen verarbeitet. Eine Entität, die über einen Batch aktualisiert oder gelöscht wird, wird in 2 Stunden verarbeitet, während eine Entität, die durch ein inkrementelles Update aktualisiert wurde, in 5 Minuten verarbeitet wird. Eine veraltete Entität wird nach 7 Tagen gelöscht.

Sie können Google folgende Informationen senden:

  • Mehrere Batch-Aufträge 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.