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:
- Nur synchrone Buchungen aktivieren: Alle Händler und Dienstleistungen werden sofort bestätigt.
- Asynchrone Buchungen aktivieren: Für einige oder alle Händler und Dienstleistungen ist das Händlerhandbuch erforderlich bestätigen.
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 dieconfirmation_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
- Im Verfügbarkeitsfeed wird
- 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
undFAILED
. 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">![Abbildung 1: Asynchroner Buchungsvorgang](https://developers.google.cn/static/actions-center/images/enabling_async_1.png?authuser=19&hl=de)
- 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.
- Wann?
BatchAvailabilityLookup
oderCheckAvailability
aufgerufen wird, übergeben wir den Bestätigungsmodus und idealerweise denselben zurückgegeben. So wird sichergestellt, dass dem Nutzer die richtige Botschaft angezeigt wird. - 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 StatusPENDING_MERCHANT_CONFIRMATION
- 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.
// 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.
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