Asynchrone Buchungen hinzufügen

<ph type="x-smartling-placeholder">

Als synchrone Buchungen gelten Reservierungen, die bestätigt oder abgelehnt wurden. in Echtzeit.

Asynchrone Buchungen werden vom Händler bestätigt oder zu einem späteren Zeitpunkt ablehnen.

Eine Buchung wird entweder als synchron oder asynchron angegeben, Verfügbarkeitsstufe. Das bedeutet auch, dass für einen bestimmten Händler und eine bestimmte Dienstleistung sowohl synchrone als auch asynchrone verfügbare Slots.

Um die geeignete Implementierung zu finden, ermitteln Sie zuerst, welche Kategorie gehört zu den folgenden Kategorien:

Kriterien für asynchrone Buchungen

  • Es ist nicht möglich, asynchrone Buchungen im Actions Center zu ändern. unterstützt.
  • Händler sollten in der Lage sein, die Buchung über das Onlinesystem des Partners (z. B. Hostbereich für das Restaurant) Durch Aufrufen der im Namen des Nutzers an, um zu ermitteln, ob der Händler eine Buchung ablehnt, nicht zulässig.
  • Händler können keine alternativen Zeiten für Buchungen vorschlagen. Die Buchungsanfrage muss im ursprünglichen Zustand angenommen oder abgelehnt werden.

Nur synchrone Buchungen aktivieren

In der Standardimplementierung sind synchrone Buchungen voreingestellt. Bitte wenden Sie sich an Weitere Informationen finden Sie in der Dokumentation zur End-to-End-Einbindung von Terminen.

Asynchrone Buchung aktivieren

Wenn einige oder alle Händler einen asynchronen Buchungsvorgang verwenden, müssen folgende Änderungen vorgenommen werden:

  • Bestätigungsmodus: Alle Darstellungen verfügbarer Slots jetzt das Feld confirmation_mode enthalten, mit dem beschrieben wird, wie Buchungen dieses verfügbaren Slots bestätigt. Geben Sie die confirmation_mode jedes verfügbaren Slots für den Folgendes:

    • Im Verfügbarkeitsfeed wird confirmation_mode im Verfügbarkeitsstufe
    • In den Booking Server API-Methoden wird confirmation_mode angegeben unter die Anzeigenflächenebene
    • In den Methoden der Real-Time Updates API ist confirmation_mode angegeben. auf Verfügbarkeitsebene
  • Buchungsstatus:Alle Darstellungen von Buchungen enthalten einen status-Feld, das den Status der Buchung darstellt. Dreimal Neue asynchrone Statuswerte wurden eingeführt: PENDING_CONFIRMATION, DECLINED_BY_MERCHANT und FAILED. Verwenden Sie diese neuen Statuswerte, wenn Kreationen, Ablehnungen und Fehler bei asynchronen Buchungen.
  • Buchungsaktualisierungen: Alle asynchronen Aktualisierungen des Status des Buchungen sollten über die bookings.patch verwenden.

Das folgende Diagramm zeigt, wie der Bestätigungsmodus und der Buchungsstatus verwendet werden einer typischen asynchronen Buchungsinteraktion.

<ph type="x-smartling-placeholder">
</ph> Abbildung 1: Asynchroner Buchungsvorgang
Abbildung 1:Asynchroner Buchungsvorgang
  1. Verfügbarkeitsfeeds wurden aktualisiert, sodass für jeden verfügbaren Slot Bestätigungsmodus angegeben ist. Es ist wichtig, dass diese Informationen damit wir dem Kunden den asynchronen Charakter der Buchung erklären können. Nutzende frühzeitig im User Flow.
  2. Wann? BatchAvailabilityLookup oder CheckAvailability aufgerufen wird, übergeben wir den Bestätigungsmodus und idealerweise denselben zurückgegeben. So wird sichergestellt, dass dem Nutzer die richtige Botschaft angezeigt wird.
  3. Wann? CreateBooking aufgerufen wird, übergeben wir den Bestätigungsmodus erwarteten Bestätigungsmodus anzeigen. Wenn die asynchrone Buchung Anfrage gesendet wird, wird die Buchung mit dem Status PENDING_MERCHANT_CONFIRMATION
  4. Wenn der Händler eine Buchungsanfrage annimmt oder ablehnt, wird die Buchung wird über die Booking Notification API für Echtzeit-Updates aktualisiert. bookings.patch verwenden. Wenn Sie Buchungen automatisch ablehnen möchten, zeitnah reagieren können, tun Sie dies über die gleiche Echtzeit-Aktualisierung, .

Verfügbarkeitsfeeds

Geben Sie im Verfügbarkeitsfeed an, ob jeder Slot synchron oder asynchron. Legen Sie dazu den neuen confirmation_mode fest ein.

<ph type="x-smartling-placeholder">
// Mode by which bookings for an availability slot are confirmed.
enum ConfirmationMode {
  // The confirmation mode was not specified.
  // Synchronous confirmation will be assumed.
  CONFIRMATION_MODE_UNSPECIFIED = 0;

  // Bookings for this availability will be confirmed synchronously.
  CONFIRMATION_MODE_SYNCHRONOUS = 1;

  // Bookings for this availability will be confirmed asynchronously.
  CONFIRMATION_MODE_ASYNCHRONOUS = 2;
}

Es wird zwar davon ausgegangen, dass der Bestätigungsmodus synchron ist, wenn kein Modus angegeben ist, wird dringend empfohlen, explizit einen Modus anzugeben, da um versehentliche Auslassungen zu vermeiden.

Asynchron

{
  "availability": [
    {
      "merchant_id": "10001",
      "service_id": "1000",
      "spots_open": 3,
      "spots_total": 3,
      "duration_sec": 3600,
      "start_sec": 1535806800,
      "resources": {
        "party_size": 4
      },
      "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
    }
  ]
}

Synchron

{
  "availability": [
    {
      "merchant_id": "10001",
      "service_id": "1000",
      "spots_open": 3,
      "spots_total": 3,
      "duration_sec": 3600,
      "start_sec": 1535806800,
      "resources": {
        "party_size": 4
      },
      "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
    }
  ]
}

Asynchron und synchron

{
  "availability": [
    {
      "merchant_id": "10001",
      "service_id": "1000",
      "spots_open": 3,
      "spots_total": 3,
      "duration_sec": 3600,
      "start_sec": 1535806800,
      "resources": {
        "party_size": 4
      },
      "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
    },
    {
      "merchant_id": "10002",
      "service_id": "1000",
      "spots_open": 4,
      "spots_total": 4,
      "duration_sec": 3600,
      "start_sec": 1535806800,
      "resources": {
        "party_size": 2
      },
      "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
    }

  ]
}

Buchungsserver

"BatchAvailabilityLookup" oder "CheckAvailability"

Im BatchAvailabilityLookupResponse (BAL) oder CheckAvailabilityResponse (CA), gibt denselben confirmation_mode zurück, wie in den Verfügbarkeitsfeed bereitgestellt und über die BatchAvailabilityLookupRequest oder CheckAvailabilityRequest.

BAL – asynchron

{
  "slot_time_availability": [
    {
      "slot_time": {
        "duration_sec": "3600",
        "resource_ids": {
          "party_size": 3
        },
        "service_id": "1000",
        "start_sec": "1546458300",
        "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
      },
      "available": true
    }
  ]
}

BAL – synchron

{
  "slot_time_availability": [
    {
      "slot_time": {
        "duration_sec": "3600",
        "resource_ids": {
          "party_size": 3
        },
        "service_id": "1000",
        "start_sec": "1546458300",
        "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
      },
      "available": true
    }
  ]
}

CA – asynchron

{
  "slot": {
    "duration_sec": "3600",
    "merchant_id": "317652",
    "resources": {
      "party_size": 3
    },
    "service_id": "1000",
    "start_sec": "1546458300",
    "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
  },
  "count_available": 1,
  "duration_requirement": "DO_NOT_SHOW_DURATION"
}

CA – synchron

{
  "slot": {
    "duration_sec": "3600",
    "merchant_id": "317652",
    "resources": {
      "party_size": 3
    },
    "service_id": "1000",
    "start_sec": "1546458300",
    "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
  },
  "count_available": 1,
  "duration_requirement": "DO_NOT_SHOW_DURATION"
}

CreateBooking

Achten Sie darauf, den richtigen Status für die Buchung mithilfe der verfügbaren Optionen:

// Status of a booking.
//
// Updating booking status does not change the status of the associated payment.
// Prepayment status updates should be done using the PrepaymentStatus enum.
enum BookingStatus {
  // Not specified.
  BOOKING_STATUS_UNSPECIFIED = 0;

  // Booking has been confirmed
  CONFIRMED = 1;

  // Booking is awaiting confirmation by the merchant before it can transition
  // into CONFIRMED status. Only applicable to non-payments Dining or
  // Beauty verticals.
  PENDING_MERCHANT_CONFIRMATION = 2;

  // Booking has been canceled on behalf of the user.
  // The merchant can still trigger a manual refund.
  CANCELED = 3;

  // User did not show for the appointment
  NO_SHOW = 4;

  // User did not show for the appointment in violation of the cancellation
  // policy.
  NO_SHOW_PENALIZED = 5;

  // Booking could not be completed by the async backend due to a failure.
  FAILED = 6;

  // Booking was asynchronously declined by the merchant. Only applicable to
  // non-payments Dining or Beauty verticals.
  DECLINED_BY_MERCHANT = 7;
}

Führen Sie in der CreateBookingResponse folgende Schritte aus: Aktuelle confirmation_mode für den zusammengefassten Slot der Buchung zurückgeben in "CreateBookingRequest". Wenn die Buchung asynchron ist, Setzen Sie status auf PENDING_MERCHANT_CONFIRMATION. Bitte achten Sie darauf, confirmation_mode ist das, was der Nutzer und was „Mit Reservieren mit“ Google erwartet, Nutzer nicht zu verwirren.

Asynchron

{
  "booking": {
    "slot": {
      "duration_sec": "3600",
      "merchant_id": "100001",
      "resources": {
        "party_size": 2
      },
      "service_id": "1000",
      "start_sec": "1546647234",
      "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
    },
    "user_information": {
      "email": "johnsmith@gmail.com",
      "family_name": "John",
      "given_name": "Smith",
      "telephone": "+1 800-123-4567",
      "user_id": "2017492857928759285"
    },
    "payment_information": {
      "prepayment_status": "PREPAYMENT_NOT_PROVIDED"
    },
    "status": "PENDING_MERCHANT_CONFIRMATION"
  }
}

Synchron

{
  "booking": {
    "slot": {
      "duration_sec": "3600",
      "merchant_id": "100001",
      "resources": {
        "party_size": 2
      },
      "service_id": "1000",
      "start_sec": "1546647234",
      "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
    },
    "user_information": {
      "email": "johnsmith@gmail.com",
      "family_name": "John",
      "given_name": "Smith",
      "telephone": "+1 800-123-4567",
      "user_id": "2017492857928759285"
    },
    "payment_information": {
      "prepayment_status": "PREPAYMENT_NOT_PROVIDED"
    },
    "status": "CONFIRMED"
  }
}

UpdateBooking

In der ersten Version des asynchronen Modus können Nutzer Änderungen an einer bestehenden Buchung vornehmen werden nicht unterstützt. Stattdessen sollte der Nutzer die Buchung stornieren und eine für eine neue Buchung.

Echtzeitaktualisierungen

Für Echtzeitaktualisierungen zu den Verfügbarkeiten confirmation_mode angegeben werden. Das gilt für folgende Methoden:

Echtzeitaktualisierung für Inventar (ReplaceServiceAvailability oder BatchReplaceServiceAvailability)

Mit Methode availability.replace (Batch) oder services.availability.replace-Methode, confirmation_mode auf CONFIRMATION_MODE_ASYNCHRONOUS in der Availability festlegen

Asynchron

{
  "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": "0",
          "spotsTotal": "2",
          "availabilityTag": "1000001",
          "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
        }
      ]
    }
  ]
}

Synchron

{
  "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": "0",
          "spotsTotal": "2",
          "availabilityTag": "1000001",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

Asynchron und synchron

{
  "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": "0",
          "spotsTotal": "2",
          "availabilityTag": "1000001",
          "confirmation_mode": "CONFIRMATION_MODE_ASYNCHRONOUS"
        },
        {
          "startTime": "2014-10-03T11:00:00.00Z",
          "duration": "5400s",
          "spotsOpen": "1",
          "spotsTotal": "1",
          "availabilityTag": "1000002",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

Booking Notification API

Asynchrone Aktualisierungen des Buchungsstatus müssen über das Feld Methode bookings.patch der Notification API.

Achten Sie beim Aktualisieren des Status darauf, den Feldnamen status im Feld updateMask.

Status Beschreibung
CONFIRMED Der Händler hat die Buchung bestätigt.
FAILED Der Partner konnte die Buchung beim Händler weder bestätigen noch ablehnen.
DECLINED_BY_MERCHANT Der Händler hat die Buchung abgelehnt.
Request:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status

Body:
{"name":"partners/<PARTNER_ID>/bookings/<BOOKING_ID>", "status":"DECLINED_BY_MERCHANT"}

Wenn eine Buchung fehlschlägt, setze den Buchungsstatus auf FAILED und geben Sie "booking_failure" an. Ist der Status auf einen anderen Wert gesetzt, booking_failure wird ignoriert.

<ph type="x-smartling-placeholder">
Request:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status&booking_failure.cause="SLOT_UNAVAILABLE"

Body:
{"name":"partners/<PARTNER_ID>/bookings/<BOOKING_ID>", "status":"FAILED"}

E-Mail-Benachrichtigungen

Bei asynchronen Buchungen gibt es fünf potenzielle E-Mails, die sich auf Status der Buchung, die an Nutzer gesendet werden.

<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">
    </ph>
  • PENDING_MERCHANT_CONFIRMATION
  • CONFIRMED
  • DECLINED_BY_MERCHANT
  • FAILED
  • CANCELED