Echtzeit-Update

Echtzeitaktualisierungen

Echtzeitaktualisierungen sind in erster Linie für Aktualisierungen gedacht, die nicht vorhersehbar sind, z. B. Notfallschließungen oder Metadaten, die sich regelmäßig ändern (z. B. voraussichtliche Ankunftszeiten). Wenn Ihre Änderung nicht sofort wirksam werden muss, können Sie stattdessen die Batch-Feedaufnahme verwenden. Echtzeitaktualisierungen werden in höchstens fünf Minuten verarbeitet.

Einrichtung der Google Cloud Platform

  1. Ein GCP-Projekt einrichten Für den Zugriff auf die RTU API ist ein GCP-Projekt erforderlich.
    • Gewähren Sie Bearbeitungszugriff food-support@google.com
    • Teilen Sie Ihrem Google-Ansprechpartner die GCP-Projektnummer mit.Ihr GCP-Projekt muss mit Ihrem Actions Center-Konto verknüpft sein, damit Echtzeitaktualisierungen funktionieren.
    • Maps Booking API aktivieren:
      • Rufen Sie in der GCP APIs & Dienste > Bibliothek auf.
      • Suche nach „Google Maps Booking API“.
        Google Maps Booking APIs finden
      • Suchen Sie die Sandbox-Instanz („Google Maps Booking API (Dev)“) und klicken Sie auf Aktivieren.
      • Suchen Sie die Produktionsinstanz („Google Maps Booking API“) und klicken Sie auf Aktivieren
        Google Maps Booking API aktivieren
      • Erstellen Sie ein Dienstkonto mit der Bearbeiterrolle für Ihr GCP-Projekt. Weitere Informationen finden Sie unter Dienstkonto einrichten.
      • Laden Sie Batch-Feeds in die Umgebung hoch, in der Sie an Echtzeitaktualisierungen arbeiten.
      • Für die API-Authentifizierung empfehlen wir, die Google-Clientbibliothek in der Sprache Ihrer Wahl zu installieren. Verwenden Sie als OAuth-Bereich „https://www.googleapis.com/auth/mapsbooking“. Diese Bibliotheken werden in den folgenden Codebeispielen verwendet. Andernfalls müssen Sie den Tokenaustausch manuell durchführen, wie unter Mit OAuth 2.0 auf Google APIs zugreifen beschrieben.

Dienstkonto einrichten

Sie benötigen ein Dienstkonto, um authentifizierte HTTPS-Anfragen an Google APIs wie die Realtime Updates API zu senden.

So richten Sie ein Dienstkonto ein:

  1. Rufen Sie die Google Cloud Platform Console auf.
  2. Mit Ihrem Konto im Actions Center ist auch ein Google Cloud-Projekt verknüpft. Wählen Sie das Projekt aus, falls es noch nicht ausgewählt ist.
  3. Klicken Sie im Menü auf der linken Seite auf Dienstkonten.
  4. Klicken Sie auf Dienstkonto erstellen.
  5. Geben Sie einen Namen für das Dienstkonto ein und klicken Sie auf Erstellen.
  6. Wählen Sie unter Rolle auswählen die Option Projekt > Bearbeiter aus.
  7. Klicken Sie auf Weiter.
  8. Optional: Fügen Sie Nutzer hinzu, um ihnen Zugriff auf das Dienstkonto zu gewähren, und klicken Sie auf Fertig.
  9. Klicken Sie für das gerade erstellte Dienstkonto auf das Dreipunkt-Menü > Schlüssel erstellen.
  10. Wählen Sie JSON als Format aus und klicken Sie auf Erstellen.
  11. Nachdem Sie Ihr neues öffentliches/privates Schlüsselpaar generiert haben, laden Sie es auf Ihren Computer herunter.

Mit der API arbeiten

Die Real-time Updates API unterstützt zwei Arten von Vorgängen: Aktualisieren und Löschen. Das Hinzufügen neuer Entitäten über die Realtime Update API wird nicht unterstützt. Echtzeitaktualisierungen können zusammengefasst werden, wenn mehrere Aktualisierungen in einer einzelnen API-Anfrage enthalten sind. Sie können bis zu 1.000 Updates in einem einzigen API-Aufruf zusammenfassen. Wir empfehlen, wenn möglich, einen Auslösern zu verwenden, um Aktualisierungen über Echtzeitaktualisierungen zu senden (d.h. eine Datenänderung in Ihrem System löst ein Echtzeitupdate an Google aus) anstatt einer häufigkeitsbasierten Methode (d.h., Ihr System wird alle x Minuten auf Änderungen gescannt).

Die API für Echtzeitaktualisierungen funktioniert sowohl in der Sandbox- als auch in der Produktionsumgebung. Die Sandbox-Umgebung wird verwendet, um die API-Anfragen und die Produktionsumgebung zu testen, um die Inhalte zu aktualisieren, die für End-to-End-Nutzer von Ordering sichtbar sind.

  • Sandbox – partnerdev-mapsbooking.googleapis.com
  • Produktion – mapsbooking.googleapis.com

Endpunkte

Die API für Echtzeitaktualisierungen stellt zwei Endpunkte zur Verarbeitung der eingehenden Anfragen nach Inventaraktualisierungen bereit:

  • AKTUALISIERUNG – /v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
  • LÖSCHEN – /v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete

Den Parameter PARTNER_ID finden Sie im Actions Center auf der Seite Konto und Nutzer, wie im Screenshot unten gezeigt.

Partner-ID im Partner-Portal

Im Screenshot oben ist 10000001 als Wert für PARTNER_ID zu sehen. Die vollständigen URLs zum Senden von API-Anfragen in Sandbox und Produktion sehen wie in den folgenden Beispielen aus.

Sandbox-Update

https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush

Sandbox LÖSCHEN

https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete

Produktionsupdate

https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush

Produktion DELETE

https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete

Entitäten aktualisieren

Verwenden Sie den Endpunkt update in einer HTTP-POST-Anfrage, um Entitäten in Ihrem Inventar zu aktualisieren. Jede POST-Anfrage muss den Parameter 10000001 sowie eine JSON-Nutzlast mit der Entität enthalten, die Sie aktualisieren möchten.

Hinweis: Achten Sie darauf, dass Ihre täglichen Datenfeeds auch alle Änderungen enthalten, die über die API für Echtzeitaktualisierungen eingereicht werden. Andernfalls sind Ihre Daten möglicherweise veraltet oder veraltet.

Nutzlast der Anfrage aktualisieren

Der Anfragetext ist ein JSON-Objekt mit einer Liste von Datensätzen. Jeder Datensatz entspricht einer Entität, die aktualisiert wird. Sie besteht aus dem Feld proto_record und dem generation_timestamp, der den Zeitpunkt der Entitätsaktualisierung angibt:

  {
    "records": [
      {
        "proto_record":"ServiceData PROTO",
        "generation_timestamp":"UPDATE_TIMESTAMP"
      }
    ]
  }
  • ServiceData PROTO: Die Proto- oder JSON-Übersetzung der Entität ServiceData, die Sie aktualisieren.
  • UPDATE_TIMESTAMP: Achten Sie darauf, den Zeitstempel der Generierung der Entität in Ihren Back-End-Systemen anzugeben. Wird dieses Feld nicht angegeben, wird es auf den Zeitpunkt festgelegt, zu dem Google die Anfrage erhält. Beim Aktualisieren einer Entität über eine batchPush-Anfrage wird das Feld generation_timestamp für die Entitätsversionsverwaltung verwendet. Sehen Sie sich das erwartete Format für Zeitwerte im relationalen Inventarschema an.
  • Der Nutzlasttext darf nicht größer als 5 MB sein.
  • Leerzeichen entfernen, um die Größe zu verringern
  • Eine batchPush-Anfrage kann bis zu 1.000 Aktualisierungen enthalten.

Beispiele

Voraussichtliche Ankunftszeit aktualisieren

Angenommen, Sie müssen die voraussichtliche Ankunftszeit für einen Lieferservice dringend von 30–60 auf 60–90 Minuten ändern. Das Update muss den JSON-Code für die gesamte Dienstentität enthalten.

Betrachten Sie eine Dienstentität, die so aussieht:

{
	"service": {
		"service_id": "service/entity002",
		"service_type": "DELIVERY",
		"parent_entity_id": "entity002",
		"lead_time": {
			"min_lead_time_duration": "600s",
			"max_lead_time_duration": "1800s"
		},
		"action_link_id": "delivery_link/entity002"
	}
}

Ihre Echtzeit-Aktualisierung per HTTP POST sieht so aus (Anfragetexte sind zur besseren Lesbarkeit recht gedruckt):

POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
Host: mapsbooking.googleapis.com
Content-Type: application/json
{
  "records": [{
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "service" : {
        "service_id" : "23456/delivery",
        "service_type" : "DELIVERY",
        "parent_entity_id" : "23456",
        "disabled" : "false",
        "action_link_id": "delivery_link/entity002",
        "lead_time" : {
          "min_lead_time_duration" : {
            "seconds": "3600"
          },
          "max_lead_time_duration" : {
            "seconds": "5400"
          }
        }
      }
    },
    "generation_timestamp": "2023-09-13T17:11:10.750Z"
  }]
}

Mehrere Elemente aktualisieren

Wenn Sie mehrere Restaurantentitäten in einem einzigen API-Aufruf aktualisieren möchten, fügen Sie mehrere Datensätze in das Feld „proto_record“ des Anfragetexts ein.

POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
Host: mapsbooking.googleapis.com
Content-Type: application/json
{
  "records": [{
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "service" : {
        "service_id" : "23456/delivery",
        "service_type" : "DELIVERY",
        "parent_entity_id" : "23456",
        "disabled" : "false",
        "action_link_id": "delivery_link/entity002",
        "lead_time" : {
          "min_lead_time_duration" : {
            "seconds": "1800"
          },
          "max_lead_time_duration" : {
            "seconds": "3600"
          }
        }
      }
    },
    "generation_timestamp": "2023-09-13T17:11:10.750Z"
  },
  {
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "fee" : {
        "fee_id" : "12345/delivery_fee",
        "fee_type" : "DELIVERY",
        "fixed_amount" : {
          "currency_code" : "USD",
          "units" : "10",
          "nanos" : "0"
        },
        "service_ids": ["service/entity002"]
      }
    },
    "generation_timestamp" : "2023-09-13T17:11:10.750Z"
  }]
}

Entitäten löschen

Verwenden Sie den Endpunkt DELETE in einer HTTP-POST-Anfrage, um Entitäten aus Ihrem Inventar zu löschen. Jede POST-Anfrage muss den Parameter PARTNER_ID zusammen mit der JSON-Nutzlast enthalten, die die Kennung der zu löschenden Entität enthält.

Hinweis: Achten Sie darauf, dass Ihre täglichen Datenfeeds auch alle Änderungen enthalten, die über die Realtime Update API gesendet werden. Andernfalls werden Ihre Echtzeitänderungen durch die tägliche Batchaufnahme überschrieben.

POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete
Host: mapsbooking.googleapis.com
Content-Type: application/json
{
  "records": [{
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "service" : {
        "service_id" : "23456/delivery"
      }
    },
    "delete_time": "2023-09-13T17:11:10.750Z"
  },
  {
    "proto_record": {
      "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData",
      "fee" : {
        "fee_id" : "12345/delivery_fee"
     }
  },
  "delete_time" : "2023-09-13T17:11:10.750Z"
  }]
}

Entitäten hinzufügen

Verwenden Sie keine Echtzeitaktualisierungen, um neue Entitäten hinzuzufügen, da dies zu Dateninkonsistenzen führen kann. Verwenden Sie stattdessen Batch-Feeds.

Validierungs- und API-Antwortcodes

Bei den API-Aufrufen für die Echtzeitaktualisierung werden zwei Arten von Validierungen durchgeführt:

  • Anfrageebene: Bei diesen Validierungen wird geprüft, ob die Nutzlast dem Schema folgt und jeder proto_record die Felder id und type enthält. Diese Prüfungen sind synchron und die Ergebnisse werden im API-Antworttext zurückgegeben. Der Antwortcode 200 und der leere JSON-Text {} bedeutet, dass diese Validierungen bestanden wurden und die Entitäten in dieser Anfrage zur Verarbeitung in die Warteschlange gestellt wurden. Ein nicht 200-Antwortcode bedeutet, dass eine oder mehrere dieser Validierungen fehlgeschlagen sind und die gesamte Anfrage abgelehnt wird (einschließlich aller Entitäten in der Nutzlast). Wenn bei einer proto_record beispielsweise ein @type fehlt, wird die folgende Fehlerantwort zurückgegeben:
  {
      "error": {
        "code": 400,
    "message": "Record:{...}",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "[ORIGINAL ERROR] generic::invalid_argument: Failed to parse one or more rtu records. Record:... The entity type could not be extracted from the entity value." 
      }
    ]
  }
  • Entitätsebene: Jede Entität (proto_record) in der Nutzlast wird anhand des Schemas validiert. In dieser Phase der Überprüfung auftretende Probleme werden nicht in der API-Antwort gemeldet. Sie werden nur im RTU-Berichterstellungs-Dashboard im Actions Center gemeldet.

Hinweis:Der Antwortcode 200 bedeutet nicht, dass alle Entitäten erfolgreich aufgenommen wurden.

API-Kontingente

Echtzeit-API-Updates haben ein Kontingent von 1.500 Anfragen alle 60 Sekunden, was durchschnittlich 25 Anfragen pro Sekunde entspricht. Wenn ein Kontingent überschritten wird, antwortet Google mit der folgenden Fehlermeldung:

{
  "error": {
    "code": 429,
    "message": "Insufficient tokens for quota ...",
    "status": "RESOURCE_EXHAUSTED",
    "details": [...]
  }
}

Wiederholen Sie dazu den Aufruf in exponentiell größeren Intervallen, bis er erfolgreich ist. Wenn Sie das Kontingent regelmäßig ausschöpfen, sollten Sie in einer API-Anfrage mehr Entitäten angeben. Ein API-Aufruf kann bis zu 1.000 Entitäten enthalten.

Verarbeitungszeiten – Echtzeitaktualisierungen

Eine Entität, die über ein Echtzeitupdate aktualisiert wird, wird in 5 Minuten verarbeitet.