Echtzeitaktualisierungen strukturieren

Anwendungsfälle für Echtzeitaktualisierungen

In den folgenden Fällen müssen Updates in Echtzeit immer durchgeführt werden:

  • Wenn ein Nutzer eine Reservierung in Ihrem System storniert, wird der Slot verfügbar.
  • Wenn ein Nutzer eine Reservierung über das Actions Center bucht und der verfügbare Slot nicht mehr verfügbar ist.
  • Wenn eine Reservierung, die über das Actions Center vorgenommen wurde, für Sie storniert wird, z. B. direkt vom Händler. Sie müssen die Buchung und die Verfügbarkeit aktualisieren, da der ursprüngliche Slot jetzt wieder verfügbar ist.

Wenn du die Echtzeitaktualisierung für die Funktion „Verfügbarkeit“ implementierst, sollten in den folgenden Szenarien Echtzeitaktualisierungen gesendet werden:

  • Wenn ein Händler seinen Zeitplan (die Verfügbarkeit) in Ihrem System ändert
  • Wenn ein Nutzer eine Reservierung in Ihrem System bucht und der verfügbare Slot nicht mehr verfügbar ist.
  • Wenn du eine Legacy-Integration mit CheckAvailability verwendest, gibt ein Buchungsserver-Aufruf CheckAvailability Inventar zurück, das nicht mit dem tatsächlichen Inventar übereinstimmt.

Nicht alle Maps Booking API-Aufrufe sind erforderlich. Folgendes ist erforderlich:

Je nach Art der Integration sind möglicherweise auch folgende Funktionen verfügbar oder erforderlich:

Echtzeitaktualisierung für Buchungen aktualisieren

Falls eine Actions Center-Buchung in Ihrem System aktualisiert (z.B. storniert oder geändert) wurde, muss ein notification.partners.bookings.patch (BookingNotification.UpdateBooking) gesendet werden.

Bearbeitbare Felder

  • status
  • startTime
  • duration
  • partySize
  • paymentInformation.prepaymentStatus

Beispiel für eine Kündigung

Request:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status

Body:
{
  "name": "partners/<PARTNER_ID>/bookings/<BOOKING_ID>",
  "merchantId": "10001",
  "serviceId": "1001",
  "startTime": "2014-10-02T15:01:23.045123456Z",
  "duration": "3000s",
  "status": "CANCELED"
}

Echtzeitaktualisierung für "AvailabilityReplace"

Es gibt zwei Arten von Ersetzungsmethoden, mit denen die Verfügbarkeit aktualisiert werden kann:

  • Im Batch ersetzen (InventoryUpdate.BatchServiceAvailability): Ersetzt die Verfügbarkeitsdaten für einen Händler und mehrere Dienste vollständig.
    • Hinweis: Dieser Batchaufruf garantiert keine Atomarität. Es werden nur erfolgreich aktualisierte verfügbare Slots zurückgegeben.
  • Einzelne Ersetzung (InventoryUpdate.ReplaceServiceAvailability): Ersetzt die Verfügbarkeit für einen einzelnen Händler und eine einzelne Dienstleistung.

Weitere Informationen finden Sie in der entsprechenden Referenz.

Echtzeitaktualisierungen müssen dieselbe Verfügbarkeitsstruktur haben wie die Daten, die über Feeds gesendet werden. Dazu muss eine der folgenden Optionen verwendet werden:

  • spotsOpen
  • recurrence

Auswählen einer Ersetzungsmethode für den Aufruf

Anhand der folgenden Anleitung können Sie entscheiden, welche Ersatzmethode am besten geeignet ist:

  • Sind bei einer einzelnen Buchung mehrere Dienstleistungen betroffen? Zum Beispiel wird ein Friseur oder eine Färbung (jeweils eine eigene Dienstleistung) mit einem Stylisten gebucht. Daher sollten alle Dienstleistungen, die dem Stylisten für diesen Zeitraum zugeordnet sind, entfernt werden.
  • Ihr System wird von Zeit zu Zeit mit dem System von Google synchronisiert, indem alle Verfügbarkeitsänderungen seit der letzten Aktualisierung gesendet werden (nicht empfohlen).
    • Im Batch ersetzen
    • Hinweis: Wir gehen davon aus, dass die Echtzeitaktualisierung für das Inventar innerhalb von 5 Minuten nach einem Update auf deiner Seite gesendet wird. Sie sollten daher mindestens alle 5 Minuten Updates prüfen und senden.
  • Keiner dieser Fälle trifft zu?
    • Einzelne Ersetzung
    • Hinweis: Sie können mehrere einzelne Ersetzungsaufrufe verwenden, um einen Batch-Ersetzungsaufruf zu emulieren. Es wäre jedoch effizienter, einen einzelnen Batch-Ersetzungsaufruf zu verwenden.

Echtzeit-Updates: Spots Open-Format

Es ist wichtig, dasselbe Format für alle Feeds, den Buchungsserver und Echtzeitaktualisierungen zu verwenden.

Ein spots_open-Feed-Snippet sieht so aus:

Feed-Snippet

   "availability": [
          {
            "merchant_id": "1001",
            "service_id": "12310",
            "spots_open": 2,
            "spots_total": 2,
            "start_sec": 1412263800, # October 02, 2014 15:30:00
            "duration_sec": 1800,
            "availabilityTag": "1000001"
          }
    ]

Für die Inventory Update API gilt das Format des Ersatzanfragetexts für die Buchung eines Slots um 15:30 Uhr:

Snippet für Echtzeitaktualisierungen ersetzen

  {
    "extendedServiceAvailability": [
      {
        "merchantId": "1001",
        "serviceId": "12310",
        "startTimeRestrict": "2014-10-02T15:01:23.045123456Z",
        "endTimeRestrict": "2014-10-02T19:01:23.045123456Z",
        "availability": [
          {
            "startTime": "2014-10-02T15:30:00.00Z",
            "duration": "3600s",
            "spotsOpen": "1",
            "spotsTotal": "2",
            "availabilityTag": "1000001"
          }
        ]
      }
    ]
  }

Hier ein Beispiel dafür, was wir im nächsten täglichen Feed erwarten, wenn um 15:30 Uhr ein neuer Slot gebucht wird:

Feed-Snippet

"availability": [
        {
          "merchant_id": "1001",
          "service_id": "12310",
          "spots_open": 1,
          "spots_total": 2,
          "start_sec": 1412263800, # October 02, 2014 15:30:00
          "duration_sec": 1800,
          "availabilityTag": "1000001"
        }
      ]

Aktualisierungen in Echtzeit: Wiederholungsformat

Es ist wichtig, dasselbe Format für alle Feeds, den Buchungsserver und Echtzeitaktualisierungen zu verwenden.

Ein Feed mit Wiederholung sieht folgendermaßen aus:

Feed-Snippet

  "availability": [
        {
          "merchant_id": "1001",
          "service_id": "12310",
          "spots_open": 1,
          "spots_total": 1,
          "start_sec": 1540890000, # October 30, 2018 9:00:00 AM
          "duration_sec": 1800,
          "recurrence": {
            "repeat_every_sec": 1800,
            "repeat_until_sec": 1540918800 # October 30, 2018 5:00:00 PM
          },
          "schedule_exception": [
            {
              "time_range": {
                "begin_sec": 1540902600, # October 30, 2018 12:30:00 PM
                "end_sec": 1540904400 # October 30, 2018 1:00:00 PM
              }
            }
          ],
        }
      ]

Für die Inventory Update API sieht das Textformat der Ersetzungsanfrage für die Buchung eines Slots um 15:30 Uhr so aus:

  {
    "extendedServiceAvailability": [
      {
        "merchantId": "1001",
        "serviceId": "12310",
        "startTimeRestrict": "2018-10-30T15:01:23.045123456Z",
        "endTimeRestrict": "2018-10-30T19:01:23.045123456Z",
        "availability": [
          {
            "startTime": "2018-10-30T15:30:00.00Z",
            "duration": "3600s",
            "spotsOpen": "1",
            "scheduleException": [
             {
                "timeRange": {
                  "startTime": "2018-10-30T12:30:00.00Z",
                  "endTime": "2018-10-30T13:00:00.00Z"
                }
              },
              {
                "timeRange": {
                  "startTime": "2018-10-30T15:30:00.00Z",
                  "endTime": "2018-10-30T16:00:00.00Z"
                }
              }
            ]
          }
        ]
      }
    ]
  }

Hier ist ein Beispiel dafür, was im nächsten täglichen Feed erwartet wird. Hier werden die Verfügbarkeit der gesamten Dienstleistung für diesen Händler sowie alle vorherigen und neuen schedule_exceptions angezeigt:

Feed-Snippet

   "availability": [
        {
          "merchant_id": "1001",
          "service_id": "12310",
          "spots_open": 1,
          "spots_total": 1,
          "start_sec": 1540890000, # October 30, 2018 9:00:00 AM
          "duration_sec": 1800,
          "recurrence": {
            "repeat_every_sec": 1800,
            "repeat_until_sec": 1540918800 # October 30, 2018 5:00:00 PM
          },
          "schedule_exception": [
            {
              "time_range": {
                "begin_sec": 1540902600, # October 30, 2018 12:30:00 PM
                "end_sec": 1540904400 # October 30, 2018 1:00:00 PM
              }
            },
            {
              "time_range": {
                "begin_sec": 1540913400, # October 30, 2018 3:30:00 PM
                "end_sec": 1540915200 # October 30, 2018 4:00:00 PM
              }
            }
          ],
        }
      ]

Zeitpunkt für das Einreichen von Echtzeitaktualisierungen

Updates in Echtzeit sollten kontinuierlich gesendet werden, wenn sich die Verfügbarkeit ändert. Dies ist eine Ergänzung zu einem umfassenden Verfügbarkeitsfeed, der einmal täglich gesendet werden muss, damit die Verfügbarkeit zwischen Ihren Systemen und den Systemen von Google synchronisiert wird.