Zusätzliche Inventarupdates in Version 2

In diesem Abschnitt wird beschrieben, wie Sie zeitkritische Updates Ihrer Inventarentitäten an Google senden können. Mit der Incremental Update API kannst du Aktualisierungen veröffentlichen und Entitäten in deinem Sandbox- oder Produktionsinventar nahezu in Echtzeit löschen.

Diese Funktion ist in erster Linie für Updates vorgesehen, die nicht vorhersehbar sind, z. B. für Notfälle. In der Regel sollten Änderungen, die über die inkrementelle Update API gesendet werden, nicht länger als eine Stunde dauern. Wenn Ihre Änderung nicht sofort übernommen werden muss, können Sie stattdessen die Batchaufnahme verwenden. Inkrementelle Aktualisierungen werden in der Regel nicht länger als fünf Minuten verarbeitet.

Voraussetzungen

Folgende Elemente sind erforderlich, bevor Sie inkrementelle Updates implementieren:

  1. Ein Dienstkonto wird mit der Rolle „Bearbeiter“ für Ihr Actions-Projekt erstellt. Weitere Informationen finden Sie unter Projekt erstellen und einrichten.
  2. Produktions- oder Sandbox-Datenfeeds werden gehostet und aufgenommen. Weitere Informationen finden Sie unter Batchaufnahme.
  3. Optional, aber empfohlen: Installieren Sie die Google-Clientbibliothek in der Sprache Ihrer Wahl, um den API-Zugriff beim Aufrufen der API zu vereinfachen. In den folgenden Codebeispielen werden diese Bibliotheken verwendet. Andernfalls müssen Sie den Austausch von Tokens manuell handhaben, wie unter Mit OAuth 2.0 auf Google APIs zugreifen beschrieben.

Endpunkte

Ersetzen Sie in den folgenden 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: Der Entitätstyp (@type-Property) des Objekts in Ihrem Datenfeed, den Sie aktualisieren möchten.
  • ENTITY_ID (nur Endpunkt löschen): ID der zu löschenden Entität. Die Entitäts-ID muss URL-codiert werden.
  • DELETE_TIME (nur Endpunkt löschen): Optionales Feld, mit dem angegeben wird, wann die Entität auf Ihren Systemen gelöscht wurde (Standardeinstellung ist, wenn die Anfrage eingeht). Der Zeitwert darf nicht in der Zukunft liegen. Wenn Sie eine Entität über einen inkrementellen Aufruf senden, wird bei einem Löschaufruf auch das Feld delete_time verwendet. Formatieren Sie diesen Wert als yyyy-mm-ddTHH:mm:ssZ

Endpunkt aktualisieren

Zum Ändern einer Entität senden Sie eine HTTP-POST-Anfrage an den folgenden Endpunkt und fügen Sie eine Nutzlast mit Aktualisierungen und Ergänzungen hinzu. Sie können in einem einzelnen API-Aufruf Aktualisierungen von bis zu 1.000 Entitäten vornehmen.

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

Wenn Sie beispielsweise Entitäten in einem Projekt mit der ID „delivery-provider-id“ aktualisieren möchten, würde der Endpunkt folgendermaßen aussehen:

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

Endpunkt löschen

Um eine Entität in Ihrem Inventar zu löschen, stellen Sie eine HTTP DELETE-Anfrage an den folgenden Endpunkt.

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

Wenn Sie beispielsweise die Entität "MenuSection" mit der ID "MenuSection_122" aus Ihrem Projekt "delivery-provider-id"" löschen möchten, würden Sie einen HTTP DELETE API-Aufruf an folgende Adresse senden:

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

Sandbox-Umgebung

Wenn Sie die Incremental Update API in Ihrem Sandbox-Inventar verwenden möchten, folgen Sie der Anleitung unter Endpunkte oben. Senden Sie jedoch Anfragen an /v2/sandbox/apps/ statt an /v2/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

Entitäten aktualisieren

Jede POST-Anfrage muss die Anfrageparameter sowie die JSON-Nutzlast enthalten, die die strukturierten Daten eines beliebigen Entitätstyps im Inventarschema enthält.

Nutzlast aktualisieren

Die JSON-Datei sollte wie im Batchfeed angezeigt werden. Es gibt jedoch folgende Unterschiede:

  • Der Nutzlasttext darf nicht größer als 5 MB sein. Ähnlich wie bei Batch-Feeds empfehlen wir, Leerzeichen zu entfernen, um mehr Daten aufzunehmen.
  • Der Briefumschlag sieht so aus:
{
  "requests": [
    {
      "entity": {
        "data":"ENTITY_DATA",
        "name": "apps/project_id>/entities/type/entity_id"
      },
      "update_time":"UPDATE_TIMESTAMP"
    },
  ],
  "vertical": "FOODORDERING"
}

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, der angibt, wann 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. Beim Senden einer Entität über eine inkrementelle Anfrage verwendet die Entitätsversionsverwaltung auch im Fall einer Anfrage zum Hinzufügen/Aktualisieren das Feld update_time.

Beispiele

Beispiel 1: Restaurant aktualisieren

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

Ein Batchfeed könnte so aussehen:

{
  "@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 Ihre inkrementelle Aktualisierung per HTTP POST folgendermaßen aussehen:

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

Beispiel 2: Mehrere Restaurants aktualisieren

Um zwei Restaurantentitäten in einem einzigen API-Aufruf zu aktualisieren, würde die HTTP POST-Anfrage so aussehen:

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

Beispiel 3: Preis einer Speisekarte aktualisieren

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

Ein Batchfeed könnte so aussehen:

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

Entität hinzufügen

Vermeiden Sie Inventaraktualisierungen, um Entitäten hinzuzufügen. Verwenden Sie stattdessen den Batchfeed-Prozess für das Inventarschema v2.

Entität entfernen

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

Element der obersten Ebene löschen

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

Beispiel-Endpunkt für eine Menüentität mit der ID "provider/restaurant/menu/nr":

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

Beispielendpunkt für eine Restaurantentität mit der ID "https://www.provider.com/restaurant/nr":

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

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

Unterentitäten werden entfernt

Verwenden Sie HTTP DELETE nicht zum Entfernen einer Unterentität innerhalb einer übergeordneten Entität, z. B. eines Menüelements in einem Menü. Stattdessen sollten Sie die Entfernung von Unterentitäten als Aktualisierung einer Top-Level-Entität behandeln, in der die Unterentität aus der entsprechenden Liste oder reverseReference entfernt wird.

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 sowie einen 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 Envelope 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

Nachfolgend finden Sie einige Beispiele für die Verwendung der Incremental Update API in verschiedenen Sprachen. In diesen Beispielen wird die Google-Authentifizierungsbibliotheken verwendet. Dabei wird davon ausgegangen, dass ein Feed das Inventarschema V1 verwendet. Alternative Lösungen finden Sie unter OAuth 2.0 für Server-zu-Server-Anwendungen verwenden.

Entitäten aktualisieren

Node.js

Dieser Code verwendet die Google-Authentifizierungsbibliothek für Node.js.

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

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 = '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

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

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

Entitäten werden entfernt

Node.js

Dieser Code verwendet die Google-Authentifizierungsbibliothek für Node.js.

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 Updates, vollständige Feedaktualisierungen und den allgemeinen Inhalt des API-Aufrufs:

Szenario Zu aktualisierende Entität Beschreibung und Effekte
Dienst deaktivieren Service

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

Inkrementelle Aktualisierungen:Aktualisieren Sie die betreffende Service-Entität. Geben Sie dazu für das Attribut isDisabled den Wert true an, verwenden Sie aber andere Attribute.

Vollständige Feeds: Du musst die Entität aus den vollständigen Feeds aktualisieren, damit isDisabled vor dem nächsten Abruf durch Google auf true gesetzt wird. Andernfalls wird die Entität wieder aktiviert.

Ein bestimmter Artikel ist nicht auf Lager MenuItemOffer Inkrementelle Aktualisierungen:Die kapselnde MenuItemOffer-Entität wird gesendet, wobei inventoryLevel für die angegebene MenuItem auf 0 gesetzt ist. Alle anderen Daten bleiben unverändert.
Preisänderung für Menüpunkt MenuItemOffer Inkrementelle Aktualisierungen: Die kapselnde MenuItemOffer-Entität wird gesendet, wobei price auf den aktualisierten Preis für die angegebene MenuItem festgelegt ist. Alle anderen Daten bleiben unverändert.

Neues Element auf oberster Ebene hinzufügen

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

Menu, Restaurant, Service

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

Vollständige Feeds: Fügen Sie die Entität Ihren Datenfeeds hinzu und warten Sie auf die Batchaufnahme.

Entität auf oberster Ebene endgültig löschen

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

Menu, Restaurant, Service

Zusätzliche Updates:Sende eine explizite Löschung.

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

Einen neuen Lieferbereich für eine bestimmte Service hinzufügen ServiceArea Inkrementelle Feeds: Sendet die betreffende ServiceArea-Entität, wobei alle ihre Felder intakt sind, wie bei normalen Feeds, und mit einem neuen Lieferbereich innerhalb von polygon, geoRadius oder postalCode.
Voraussichtliche Ankunftszeit in Service aktualisieren ServiceHours Inkrementelle Feeds:Sendet die ServiceHours wie in den Feeds, außer dass leadTimeMin entsprechend aktualisiert wird.
Lieferpreise in Service aktualisieren Fee Inkrementelle Feeds:Vollständige Übermittlung Fee mit aktualisierter price senden.
Liefer- oder Abholzeiten in Service aktualisieren ServiceHours Inkrementelle Feeds:Sendet die ServiceHours wie in den Feeds, außer dass ihre opens- und closes-Attribute entsprechend aktualisiert werden.
Service (Mindestbestellwert ändern) Fee Inkrementelle Feeds:Vollständige Fee mit aktualisiertem minPrice senden
MenuItem endgültig löschen Menu Inkrementelle Feeds:Sendet die MenuItem wie in den Feeds, nur dass parentMenuSectionId leer ist.

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

Eine Entität, die über einen Batch aktualisiert oder gelöscht wird, wird innerhalb von 2 Stunden im besten Aufwand verarbeitet. Eine über eine inkrementelle Aktualisierung aktualisierte Entität wird dagegen innerhalb von 5 Minuten verarbeitet. Ein veraltetes Element wird in 7 Tagen gelöscht.

Dazu haben Sie folgende Möglichkeiten:

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