Les réservations synchrones sont définies comme des réservations confirmées ou refusées. en temps réel.
Les réservations asynchrones sont définies comme des réservations confirmées par le marchand diminue ultérieurement.
Une réservation est spécifiée comme étant synchrone ou asynchrone au selon le niveau de disponibilité. Cela signifie également que, pour un marchand et un service donnés, il peut y avoir des créneaux de disponibilité synchrones et asynchrones.
Pour déterminer l'implémentation appropriée, commencez par identifier la catégorie de votre inventaire:
- Activer uniquement les réservations synchrones: Tous les marchands et services sont confirmés instantanément.
- Activer les réservations asynchrones: Le manuel du marchand est requis pour certains ou l'ensemble des marchands et des services confirmation.
Critères applicables aux réservations asynchrones
- La modification d'une réservation asynchrone dans le centre d'actions n'est pas compatibles.
- Les marchands doivent pouvoir accepter ou refuser la réservation depuis la le système en ligne du partenaire (panneau hôte du restaurant, par exemple). En appelant la méthode le marchand pour le compte de l'utilisateur afin de déterminer s'il accepte ou refuse une réservation n'est pas autorisé.
- Le système ne permet pas que le marchand propose une nouvelle heure de réservation. La demande de réservation doit être acceptée ou refusée dans son état d'origine.
Activer uniquement des réservations synchrones
La mise en œuvre standard utilise par défaut les réservations synchrones. Veuillez consulter la documentation sur l'intégration de bout en bout de Réservations pour plus d'informations.
Activer la réservation asynchrone
Si certains ou l'ensemble des marchands utilisent un processus de réservation asynchrone, le les modifications suivantes doivent être apportées:
-
Mode confirmation:toutes les représentations des créneaux de disponibilité sont désormais affichées. contient un champ
confirmation_mode
décrivant comment les réservations de ce créneau de disponibilité sont confirmées. Spécifiez le paramètreconfirmation_mode
de chaque créneau de disponibilité pour suivantes:- Dans le flux disponibilité,
confirmation_mode
est spécifié au niveau de niveau de disponibilité - Dans les méthodes de l'API Booking Server,
confirmation_mode
est spécifié à au niveau de l'emplacement - Dans les méthodes de l'API Real-Time Updates,
confirmation_mode
est spécifié. au niveau de la disponibilité
- Dans le flux disponibilité,
- État de la réservation:toutes les représentations des réservations contiennent un
Champ
status
représentant l'état de la réservation. Trois Ajout de nouvelles valeurs d'état asynchrones:PENDING_CONFIRMATION
,DECLINED_BY_MERCHANT
etFAILED
. Utilisez ces nouvelles valeurs d'état lorsque traiter les créations, les refus et les échecs de réservations asynchrones. - Informations sur les réservations:toutes les mises à jour asynchrones de l'état de la les réservations doivent être enregistrées via bookings.patch.
Le diagramme ci-dessous montre comment le mode de confirmation et l'état de la réservation sont utilisés. lors d'une interaction de réservation asynchrone classique.
<ph type="x-smartling-placeholder">![Figure 1: Flux de réservation asynchrone](https://developers-dot-devsite-v2-prod.appspot.com/static/actions-center/images/enabling_async_1.png?authuser=0000&hl=fr)
- .
- Les flux disponibilité ont été mis à jour de sorte que chaque créneau de disponibilité mode de confirmation est spécifié. Il est important d'avoir ces informations dans le flux afin que nous puissions expliquer la nature asynchrone de la réservation à l’utilisateur dès le début du flux.
- Quand ?
BatchAvailabilityLookup
ouCheckAvailability
nous transmettons le mode de confirmation et, idéalement, le même mode de confirmation renvoyé. Cela permet de s'assurer que l'utilisateur verra le message approprié. - Quand ?
CreateBooking
nous transmettons le mode de confirmation indiquer le mode de confirmation anticipé. Lorsque la réservation asynchrone envoyée, la réservation est renvoyée avec l'étatPENDING_MERCHANT_CONFIRMATION
- Lorsque le marchand accepte ou refuse une demande de réservation, la réservation le statut est mis à jour via la mise à jour en temps réel de l'API Booking Notification bookings.patch. Si vous souhaitez refuser automatiquement les réservations rapidement, grâce à la même mise à jour .
Flux de disponibilité
Dans le flux disponibilité, indiquez si chaque créneau est synchrone ou
asynchrone. Pour ce faire, définissez le nouveau confirmation_mode
.
// 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; }
Bien que le mode de confirmation soit considéré comme synchrone si aucun mode n'est il est fortement recommandé de spécifier explicitement un mode, car pour éviter toute confusion éventuelle liée à des omissions accidentelles.
Asynchrone
{ "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" } ] }
Synchrone
{ "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" } ] }
Asynchrone et synchrone
{ "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" } ] }
Serveur de réservation
BatchAvailabilityLookup ou CheckAvailability
Dans
BatchAvailabilityLookupResponse
(BAL)
ou
CheckAvailabilityResponse
(CA), renvoie le même confirmation_mode
que celui spécifié dans
et transmis via le flux de disponibilité
BatchAvailabilityLookupRequest
ou
CheckAvailabilityRequest
BAL-Async
{ "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-Sync
{ "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-Async
{ "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-Sync
{ "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
Assurez-vous de renvoyer le bon état de la réservation à l'aide de la colonne options ci-dessous:
// 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; }
Dans CreateBookingResponse
,
renvoie la valeur confirmation_mode
actuelle pour le créneau horaire agrégé de la réservation fourni
dans la requête CreateBookingRequest. De plus, si la réservation est asynchrone,
définissez status
sur PENDING_MERCHANT_CONFIRMATION
. Assurez-vous que
confirmation_mode
correspond à l'utilisateur et à l'environnement de réservation
Google s'engage à ne pas induire en erreur l'utilisateur.
Asynchrone
{ "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" } }
Sync
{ "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
Dans la version initiale d'async, les modifications apportées par les utilisateurs à une réservation existante ne sont pas acceptés. À la place, l'utilisateur doit annuler la réservation et créer un nouvelle réservation.
Real-Time Updates (Mises à jour en temps réel)
Pour mettre à jour en temps réel les disponibilités, confirmation_mode
doit être spécifié. Cela s'applique aux méthodes suivantes :
RTU Inventory (ReplaceServiceAvailability ou BatchReplaceServiceAvailability)
En utilisant
Méthode availability.replace
(par lot)
ou
la méthode services.availability.replace
,
définissez confirmation_mode
sur CONFIRMATION_MODE_ASYNCHRONOUS
dans le Availability
Asynchrone
{ "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" } ] } ] }
Synchrone
{ "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" } ] } ] }
Asynchrone et synchrone
{ "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" } ] } ] }
API Booking Notification
Les mises à jour asynchrones de l'état d'une réservation doivent être effectuées via la page de réservation bookings.patch de l'API Notification.
Lorsque vous mettez à jour l'état, veillez à inclure le nom du champ status
dans
updateMask
État | Description |
---|---|
CONFIRMED | Le marchand a confirmé la réservation. |
FAILED | Le partenaire n'a pas pu confirmer ou refuser la réservation auprès du marchand. |
DECLINED_BY_MERCHANT | Le marchand a refusé la réservation. |
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"}
En cas d'échec de la réservation, définissez l'état de la réservation sur FAILED
.
spécifiez la valeur "booking_failure". Si l'état est défini sur un autre état,
booking_failure
est ignoré.
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"}
Notifications par e-mail
Pour les réservations asynchrones, il existe cinq e-mails potentiels liés au l'état de la réservation envoyé aux utilisateurs.
<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">- </ph>
PENDING_MERCHANT_CONFIRMATION
CONFIRMED
DECLINED_BY_MERCHANT
FAILED
CANCELED