Echtzeitaktualisierungen strukturieren

Anwendungsfälle für Echtzeitupdates

In den folgenden Fällen müssen immer Echtzeitaktualisierungen herausgegeben werden:

  • Wenn ein Nutzer eine Reservierung in Ihrem System storniert und der Slot wieder verfügbar wird.
  • Ein Nutzer reserviert einen Slot über das Aktionscenter. Er ist also nicht mehr verfügbar.
  • Eine Reservierung, die über das Actions Center vorgenommen wurde, wird in deinem System storniert, z. B. direkt vom Händler. Du musst die Buchung und die Verfügbarkeit aktualisieren, weil der ursprüngliche Slot jetzt wieder verfügbar ist.

Wenn Sie Echtzeitaktualisierungen für „AvailabilityReplace“ implementieren, sollten in den folgenden Fällen Echtzeitaktualisierungen gesendet werden:

  • Wenn ein Händler seinen Zeitplan (Verfügbarkeit) in Ihrem System ändert.
  • Ein Nutzer reserviert einen Slot in deinem System. Er ist also nicht mehr verfügbar.
  • Wenn Sie eine alte Integration mit CheckAvailability verwenden und ein CheckAvailability-Aufruf des Buchungsservers Inventar zurückgibt, das nicht mit dem tatsächlichen Inventar übereinstimmt.

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

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

Buchung – Echtzeitaktualisierung

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

Änderbare 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 Ersatzmethoden, mit denen Sie Ihre Verfügbarkeit aktualisieren können:

  • Batch Replace (InventoryUpdate.BatchServiceAvailability): Die Verfügbarkeitsdaten für einen Händler und mehrere Dienste werden vollständig ersetzt.
    • Hinweis: Dieser Batch-Aufruf garantiert nicht die Atomarität. Es werden nur erfolgreich aktualisierte verfügbare Slots zurückgegeben.
  • Einzelvorgang (InventoryUpdate.ReplaceServiceAvailability): Die Verfügbarkeit für einen einzelnen Händler und Dienst wird vollständig ersetzt.

Weitere Informationen finden Sie in der Referenz.

Für Echtzeitaktualisierungen muss dieselbe Verfügbarkeitsstruktur verwendet werden wie für die Daten, die über Feeds gesendet werden. Sie müssen eine der folgenden Optionen verwenden:

  • spotsOpen
  • recurrence

Methode zum Ersetzen auswählen

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

  • Sind durch eine einzelne Buchung mehrere Dienstleistungen betroffen? Wenn beispielsweise ein Haarschnitt und eine Färbung (beides separate Dienstleistungen) bei einem Stylisten gebucht werden, sollten alle Dienstleistungen, die für diesen Zeitblock mit dem Stylisten verknüpft sind, entfernt werden.
  • Ihr System wird von Zeit zu Zeit mit dem von Google synchronisiert, indem alle Verfügbarkeitsänderungen seit dem letzten Update gesendet werden (nicht empfohlen).
    • Batch-Ersetzen
    • Hinweis: Wir gehen davon aus, dass die Inventar-RTU innerhalb von 5 Minuten nach einer Aktualisierung auf Ihrer Seite gesendet wird. Sie sollten daher mindestens alle 5 Minuten nach Updates suchen und diese senden.
  • Trifft keine dieser Optionen auf Sie zu?
    • Einzelnes Ersetzen
    • Hinweis: Sie können mehrere einzelne Replace-Aufrufe verwenden, um einen Batch-Replace-Aufruf zu emulieren. Es ist jedoch effizienter, einen einzelnen Batch-Replace-Aufruf zu verwenden.

Echtzeitaktualisierungen: Format „Spots Open“

Es ist wichtig, dasselbe Format für Feeds, 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 ist das Format des Anfragetexts für den Ersatz, wenn ein Slot um 15:30 Uhr gebucht wird, so:

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 für den nächsten täglichen Feed, 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 Feeds, Buchungsserver und Echtzeitaktualisierungen zu verwenden.

Ein Feed mit Wiederholung 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
              }
            }
          ],
        }
      ]

Für die Inventory Update API sieht das Format des Replace-Anfragetexts 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 ein Beispiel für den nächsten täglichen Feed. Beachten Sie, dass es sich um die Verfügbarkeit des gesamten Dienstes für diesen Händler und alle vorherigen und neuen schedule_exceptions handelt:

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 Echtzeit-Updates einreichen?

Echtzeitaktualisierungen sollten kontinuierlich gesendet werden, wenn sich die Verfügbarkeit ändert. Dies ist zusätzlich zu einem umfassenden Verfügbarkeitsfeed, der einmal täglich eingereicht werden sollte, damit die Verfügbarkeit zwischen Ihrem und dem Google-System synchronisiert wird.