Updates in Echtzeit strukturieren

Anwendungsfälle für Echtzeitaktualisierungen

In folgenden Fällen müssen Echtzeitaktualisierungen erfolgen:

  • Wenn ein Nutzer eine Reservierung auf Ihrem System storniert und der Slot verfügbar ist.
  • Wenn ein Nutzer eine Reservierung über „Mit Google reservieren“ bucht und der verfügbare Slot nicht mehr verfügbar ist
  • Wenn eine Reservierung über „Mit Google reservieren“ von dir storniert wird, z. B. direkt vom Händler. Sie müssen die Buchung und die Verfügbarkeit aktualisieren, da der ursprüngliche Slot wieder verfügbar ist.

Wenn Sie die Verfügbarkeitsaktualisierung aktivieren, sollten Aktualisierungen in Echtzeit auch in folgenden Fällen ausgeführt werden:

  • Wenn ein Händler seinen Zeitplan (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 Sie die Legacy-Integration mit CheckAvailability verwenden und ein Aufruf des CheckAvailability-Buchungsservers Inventar zurückgibt, das nicht mit dem tatsächlichen Inventar übereinstimmt.

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

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

Echtzeitaktualisierung für Buchungen aktualisieren

Bei einer Buchung mit „Mit Google reservieren“ (z.B. storniert oder geändert) in deinem System 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, um Ihre Verfügbarkeit zu aktualisieren:

  • Batch-Ersetzung (InventoryUpdate.BatchServiceAvailability): ersetzt die Verfügbarkeitsdaten für einen Händler und mehrere Dienstleistungen vollständig.
    • Hinweis: Dieser Batchaufruf garantiert nicht die Atomarität. Nur erfolgreich aktualisierte verfügbare Slots werden zurückgegeben.
  • Einzelersatz (InventoryUpdate.ReplaceServiceAvailability): ersetzt die Verfügbarkeit eines einzelnen Händlers und einer Dienstleistung vollständig.

Weitere Informationen finden Sie in der folgenden Referenz.

Echtzeitaktualisierungen müssen dieselbe Verfügbarkeitsstruktur wie die Daten haben, die über Feeds gesendet werden. Folgende Optionen sind verfügbar:

  • spotsOpen
  • recurrence

Informationen dazu, welches Format für Sie am besten geeignet ist, finden Sie hier.

Ersetzungsmethode zum Aufrufen auswählen

Anhand der folgenden Anleitung können Sie herausfinden, welche Ersetzungsmethode am besten geeignet ist:

  • Sind mehrere Dienstleistungen von einer einzelnen Buchung betroffen? Zum Beispiel werden ein Haarschnitt und eine Ausmalung (jeweils ein eigener Dienst) mit einem Stylist gebucht. Daher sollten alle mit dem Stylist verknüpften Dienste für diesen Slot entfernt werden.
  • Ihr System synchronisiert hin und wieder mit Google, indem alle Verfügbarkeitsänderungen seit dem letzten Update gesendet werden (nicht empfohlen).
    • Batch-Ersetzung
    • Hinweis: Die Inventaraktualisierung erfolgt voraussichtlich innerhalb von 5 Minuten nach einer Aktualisierung. Daher sollten Sie alle 5 Minuten prüfen und aktualisieren.
  • Keiner dieser Fälle trifft zu?
    • Einzelersatz
    • Hinweis: Sie können mehrere einzelne Ersetzungsaufrufe verwenden, um einen Batch-Ersetzungsaufruf zu emulieren. Es wäre jedoch effizienter, einen einzelnen Ersetzungsaufruf zu verwenden.

Aktualisierungen in Echtzeit: Spots im offenen Format

Es ist wichtig, dasselbe Format für alle Feeds, den Buchungsserver und für 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 das Textformat der Ersatzanfrage für die Buchung eines Slots von 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 siehst du ein Beispiel dafür, was wir im nächsten täglichen Feed erwarten, wenn ein neuer Slot um 15:30 Uhr 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"
        }
      ]

Echtzeitaktualisierungen: Wiederholungsformat

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

Ein Feed, der eine Wiederholung verwendet, sieht so 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
              }
            }
          ],
        }
      ]

Bei der Inventory Update API sieht das Ersetzen des Anfragetexts für den Austausch einer Reservierung von 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 ein Beispiel dafür, was im nächsten täglichen Feed zu erwarten ist: Beachten Sie, dass dies die gesamte Verfügbarkeit des Dienstes für diesen Händler sowie alle seine vorherigen und neuen schedule_exceptions ist:

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
              }
            }
          ],
        }
      ]

Wann sollten Aktualisierungen in Echtzeit eingereicht werden?

Echtzeitaktualisierungen sollten kontinuierlich gesendet werden, wenn sich die Verfügbarkeit ändert. Das ist zusätzlich zu einem umfassenden Verfügbarkeitsfeed, der einmal täglich gesendet werden muss, damit die Verfügbarkeit zwischen deinem System und dem von Google synchronisiert wird.