Inkrementelle Inventaraktualisierungen für Version 1

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

Diese Funktion ist in erster Linie für Aktualisierungen gedacht, die Sie nicht vorhersehen können, z. B. Schließungen aufgrund von Notfällen. Änderungen, die über die Incremental Updates API eingereicht werden, sollten in der Regel innerhalb einer Woche veröffentlicht werden. Wenn die Änderung nicht sofort übernommen werden muss, können Sie stattdessen ein Batch-Update verwenden. Inkrementenelle Updates werden innerhalb von maximal fünf Minuten verarbeitet.

Einrichtung

So implementieren Sie inkrementelle Updates:

  1. Folgen Sie der Anleitung unter Projekt erstellen und einrichten, um ein Projekt zu erstellen.
  2. Folgen Sie der Anleitung unter Dienstkonto einrichten, um ein Dienstkonto zu erstellen. Sie müssen Inhaber des Projekts sein, um dem Dienstkonto die Rolle „Bearbeiter“ hinzuzufügen.
  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. In den folgenden Codebeispielen werden diese Bibliotheken verwendet. Andernfalls müssen Sie den Token-Austausch manuell vornehmen, wie unter OAuth 2.0 für den Zugriff auf Google APIs verwenden beschrieben.

Endpunkt

Wenn Sie Google über ein Update informieren möchten, senden Sie eine HTTP POST-Anfrage an die Incremental Updates API und fügen Sie eine Nutzlast mit Änderungen und Ergänzungen hinzu. Das von dir verwendete Inventarschema bestimmt, an welchen Endpunkt deine 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

Wenn Sie eine Entität entfernen möchten, senden Sie eine HTTP-DELETE-Anfrage an den folgenden Endpunkt, der dem von Ihnen 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: Die Google Cloud-Projekt-ID, die mit dem Projekt verknüpft ist, das Sie unter Projekt erstellen und einrichten erstellt haben.
  • TYPE (nur Inventarschema v2): Der Entitätstyp (@type-Eigenschaft) des Objekts in Ihrem Datenfeed, das Sie aktualisieren möchten.
  • ENTITY_ID: ID der Entität, die in der Nutzlast enthalten ist. Die Entitäts-ID muss URL-codiert sein.
  • DELETE_TIME (nur Löschendpunkt): Optionales Feld, das angibt, wann die Entität in Ihren Systemen gelöscht wurde. Standardmäßig ist das der Zeitpunkt, an dem die Anfrage empfangen wurde. Der Zeitwert darf nicht in der Zukunft liegen. Wenn eine Entität über einen inkrementellen Aufruf gesendet wird, wird bei der Entitätsversionierung auch das Feld delete_time für einen Löschaufruf verwendet. Diesen Wert als yyyy-mm-ddTHH:mm:ssZ formatieren

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

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

Wenn Sie dieselbe Entität entfernen möchten, führen Sie diesen HTTP DELETE API-Aufruf aus:

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

Sandbox-Anfragen

Folgen Sie für Sandboxanfragen der Anleitung unter Endpunkt oben, stellen Sie aber Anfragen an /v2/sandbox/apps/ statt an /v2/apps/. Eine Löschanfrage für die Sandbox für das Inventarschema der Version 2 sieht beispielsweise so aus:

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 alle Änderungen enthalten, die über diese API eingereicht wurden. Andernfalls werden Ihre inkrementellen Änderungen durch die Batch-Aktualisierungen überschrieben.

Nutzlast

Jede POST-Anfrage muss die Anfrageparameter sowie die JSON-Nutzlast mit den strukturierten Daten aller im Inventarschema aufgeführten Entitätstypen enthalten.

Die JSON-Datei sollte wie im Batchfeed aussehen, mit den folgenden Unterschieden:

  • Der Payload-Body darf nicht größer als 5 MB sein. Ähnlich wie bei Batchfeeds empfehlen wir, Lücken zu entfernen, damit mehr Daten passen.
  • 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, die als String serialisiert ist. Die JSON-LD-Entität muss als String im Feld data übergeben werden.
  • UPDATE_TIMESTAMP (optional): Zeitstempel, zu dem die Entität in Ihren Systemen aktualisiert wurde. Der Zeitwert darf nicht in der Zukunft liegen. Der Standardzeitstempel ist der Zeitpunkt, zu dem Google die Anfrage erhält. Wenn eine Entität über eine inkrementelle Anfrage gesendet wird, wird bei der Entitätsversionierung auch das Feld update_time für eine Anfrage zum Hinzufügen oder Aktualisieren verwendet.

Entität aktualisieren

Beispiel 1: Restaurant aktualisieren

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

Angenommen, Sie haben einen Batchfeed, 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
}

Die inkrementelle Aktualisierung per HTTP POST würde dann 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 Menüpunkts aktualisieren

Angenommen, Sie möchten den Preis eines Menüpunkts ändern. Wie in Beispiel 1 muss Ihre Aktualisierung die JSON-Datei für die gesamte Entität der obersten Ebene (das Menü) enthalten und der Feed muss das Inventarschema v1 verwenden.

Angenommen, Sie haben einen Batchfeed, der so aussieht:

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

Die inkrementelle Aktualisierung per POST würde dann so 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 zum Hinzufügen von Entitäten keine Inventaraktualisierungen. Verwenden Sie stattdessen den Batchfeed-Prozess, wie für das Inventarschema v2 beschrieben.

Entität entfernen

Wenn Sie Entitäten der obersten Ebene entfernen möchten, verwenden Sie einen leicht geänderten Endpunkt und HTTP DELETE anstelle von HTTP POST in der Anfrage.

Verwenden Sie HTTP DELETE nicht, um eine untergeordnete Entität innerhalb einer übergeordneten Entität zu entfernen, z. B. ein Menüelement in einem Menü. Behandeln Sie das Entfernen von untergeordneten Entitäten stattdessen als Aktualisierung einer übergeordneten Entität, bei der die untergeordnete Entität aus der entsprechenden Liste oder dem entsprechenden Parameter entfernt wird.

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

Angenommen, Sie möchten ein Restaurant in einem Feed löschen, in dem das Inventarschema v1 verwendet wird. Außerdem müssen Sie die zugehörigen Dienste und Menüs löschen.

Beispiel für einen 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: Untergeordnete Entitäten entfernen

Wenn Sie eine untergeordnete Entität aus einer übergeordneten Entität entfernen möchten, senden Sie die übergeordnete Entität, aus der die untergeordnete Entität aus dem entsprechenden Feld entfernt wurde. Im folgenden Beispiel wird davon ausgegangen, dass im Feed das Inventarschema v1 verwendet wird.

Wenn Sie beispielsweise ein Einzugsgebiet entfernen möchten, aktualisieren Sie den Dienst, indem Sie das Einzugsgebiet aus der Liste areaServed entfernen.

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. Bei erfolgreichen Aufrufen wird der HTTP-Antwortcode 200 zusammen mit einem leeren Antworttext zurückgegeben:

{}

Bei Fehlern ist der HTTP-Antwortcode nicht 200 und im Antworttext wird angegeben, was schiefgelaufen ist.

Wenn der Nutzer beispielsweise den Wert „vertical“ im Umschlag auf FAKE_VERTICAL festgelegt 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

Unten finden Sie einige Beispiele für die Verwendung der API für inkrementelle Updates in verschiedenen Sprachen. In diesen Beispielen werden die Google Auth-Bibliotheken verwendet und es wird davon ausgegangen, dass ein Feed das Inventarschema v1 verwendet. Informationen zu alternativen 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 Auth-Bibliothek 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 Auth-Bibliothek 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 Auth-Bibliothek 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);
}

Entitäten entfernen

Node.js

In diesem Code wird die Google Auth-Bibliothek 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 Auth-Bibliothek 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 Auth-Bibliothek 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 hoher Ebene im API-Aufruf:

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

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

Inkrementelle Updates:Senden Sie die Service-Entität infrage, wobei @type in DisabledService geändert wird, die anderen Eigenschaften aber unverändert bleiben.

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

Bestimmter Artikel nicht auf Lager Menu Inkrementelle Updates:Senden Sie die umschließende Menu-Entität mit offer.inventoryLevel = 0 für die angegebene MenuItem und alle anderen Daten unverändert.
Preisänderung für Menüpunkt Menu Inkrementelle Aktualisierungen: Senden Sie die umschließende Menu-Entität, wobei offer.price auf den aktualisierten Preis für die angegebene MenuItem festgelegt ist und alle anderen Daten unverändert bleiben.

Neue Entität der obersten Ebene hinzufügen

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

Menu, Restaurant, Service

Beispiel: Sie müssen einem Restaurant ein neues Menü hinzufügen.

Inkrementelle Updates:Senden Sie die neue Menüentität zusammen mit der Restaurantentität, wobei das Feld hasMenu entsprechend aktualisiert wird.

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

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

Menu, Restaurant, Service

Inkrementelle Aktualisierungen:Senden Sie ein explizites Löschen.

Vollständige Feeds:Entfernen Sie die Entität vor dem nächsten Abruf durch Google aus den vollständigen Feeds. Andernfalls wird sie wieder hinzugefügt.

Neues Liefergebiet in einer bestimmten Service hinzufügen Service Inkrementelle Feeds:Senden Sie die betreffende Service-Entität mit allen ihren Feldern wie gewohnt in den vollständigen Feeds, wobei der neue Auslieferungsbereich innerhalb von areaServed der Service angegeben werden muss.
Voraussichtliche Zustellung am Service aktualisieren Service Inkrementelle Feeds:Senden Sie den Service wie in den Feeds, mit der Ausnahme, dass sein hoursAvailable.deliveryHours entsprechend aktualisiert wird.
Lieferpreise in Service aktualisieren Service Inkrementelle Feeds:Senden Sie die vollständige Service mit aktualisiertem offers.priceSpecification.price.
Liefer- oder Abholzeiten in Service aktualisieren Service Inkrementelle Feeds:Senden Sie den Service wie in den Feeds, mit der Ausnahme, dass sein hoursAvailable entsprechend aktualisiert wird.
Service (Mindestbestellwert ändern) Service Inkrementelle Feeds:Senden Sie den vollständigen Service mit Service.offers.priceSpecification.eligibleTransactionVolumeaktualisiert.
MenuItem endgültig löschen Menu Inkrementelle Feeds:Senden Sie den Menu wie in den Feeds, aber ohne diesen MenuItem aus der Liste hasMenuItems.

SLO für die Verarbeitungszeit von Batchjobs und inkrementellen Updates

Eine Entität, die über ein Batch- oder inkrementelles Update hinzugefügt wurde, wird innerhalb von 1 bis 2 Tagen verarbeitet. Eine Entität, die über einen Batch aktualisiert oder gelöscht wird, wird in 2 Stunden verarbeitet. Eine Entität, die über eine inkrementelle Aktualisierung aktualisiert wird, wird in 5 Minuten verarbeitet. Ein veraltete Entität wird nach 7 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.