Per prenotazioni sincrone si intendono le prenotazioni confermate o rifiutate in tempo reale.
Per prenotazioni asincrone si intendono le prenotazioni che il commerciante conferma o rifiuta in un secondo momento.
Una prenotazione viene specificata come sincrona o asincrona a livello di disponibilità. Ciò significa anche che per un determinato commerciante e servizio, potrebbero essere presenti slot di disponibilità sia sincroni che asincroni.
Per determinare l'implementazione appropriata, identifica innanzitutto la categoria a cui appartiene il tuo inventario:
- Attiva solo le prenotazioni sincrone: tutti i commercianti e i servizi vengono confermati immediatamente.
- Attiva le prenotazioni asincrone: per alcuni o tutti i commercianti e i servizi è necessaria la conferma manuale del commerciante.
Criteri di prenotazione asincroni
- La modifica di una prenotazione asincrona nel Centro azioni non è supportata.
- I commercianti devono essere in grado di accettare o rifiutare la prenotazione tramite il sistema online del partner (ad esempio, il pannello host del ristorante). Non è consentito chiamare il commerciante per conto dell'utente per determinare se accetta o rifiuta una prenotazione.
- La proposta del commerciante di un nuovo orario di prenotazione non è supportata. La richiesta di prenotazione deve essere accettata o rifiutata nello stato originale.
Abilitazione solo delle prenotazioni sincrone
L'implementazione standard prevede per impostazione predefinita le prenotazioni sincrone. Per ulteriori informazioni, consulta la documentazione sull'integrazione end-to-end delle prenotazioni.
Attivazione della prenotazione asincrona
Se alcuni o tutti i commercianti utilizzano un flusso di prenotazione asincrono, devono essere apportate le seguenti modifiche:
-
Modalità di conferma: tutte le rappresentazioni degli slot di disponibilità ora contengono un campo
confirmation_mode
che descrive in che modo vengono confermate le prenotazioni di quello slot di disponibilità. Specificaconfirmation_mode
di ogni slot di disponibilità per quanto segue:- Nel feed di disponibilità, il valore
confirmation_mode
è specificato a livello di disponibilità - Nei metodi dell'API Booking Server, il campo
confirmation_mode
viene specificato a livello di slot - Nei metodi dell'API Real-Time Updates,
confirmation_mode
viene specificato a livello di disponibilità
- Nel feed di disponibilità, il valore
- Stato della prenotazione: tutte le rappresentazioni delle prenotazioni contengono un
campo
status
che rappresenta lo stato della prenotazione. Sono stati introdotti tre nuovi valori di stato asincroni:PENDING_CONFIRMATION
,DECLINED_BY_MERCHANT
eFAILED
. Utilizza questi nuovi valori di stato durante l'elaborazione delle creazioni, dei rifiuti e degli errori nelle prenotazioni asincrone. - Aggiornamenti delle prenotazioni: tutti gli aggiornamenti asincroni allo stato delle prenotazioni devono essere segnalati tramite il metodo bookings.patch dell'API Booking Notification.
Il diagramma seguente mostra come vengono utilizzati la modalità di conferma e lo stato della prenotazione in una tipica interazione di prenotazione asincrona.
![Figura 1: flusso di prenotazione asincrono](https://developers-dot-devsite-v2-prod.appspot.com/static/actions-center/images/enabling_async_1.png?authuser=6&hl=it)
- I feed di disponibilità sono stati aggiornati in modo da specificare la modalità di conferma di ogni slot di disponibilità. È importante avere queste informazioni nel feed in modo da poter spiegare la natura asincrona della prenotazione all'utente nelle prime fasi del flusso.
- Quando viene chiamato
BatchAvailabilityLookup
oCheckAvailability
, trasmettiamo la modalità di conferma e, idealmente, la stessa modalità di conferma da restituire. Ciò garantisce che all'utente vengano mostrati i messaggi appropriati. - Quando
CreateBooking
viene chiamato, trasmettiamo la modalità di conferma per indicare la modalità di conferma prevista. Quando la richiesta di prenotazione asincrona viene inviata, la prenotazione viene restituita con lo statoPENDING_MERCHANT_CONFIRMATION
. - Quando il commerciante accetta o rifiuta una richiesta di prenotazione, lo stato della prenotazione viene aggiornato tramite il metodo bookings.patch dell'API di aggiornamento in tempo reale di prenotazione. Se vuoi rifiutare automaticamente le prenotazioni a cui non viene risposto in modo tempestivo, utilizza lo stesso metodo di aggiornamento in tempo reale.
Feed di disponibilità
Nel feed della disponibilità, specifica se ogni area annuncio è sincrona o asincrona. Per farlo, imposta il nuovo campo 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; }
Anche se si presume che la modalità di conferma sia sincrona se non viene specificata alcuna modalità, ti consigliamo vivamente di specificare esplicitamente una modalità, in quanto ciò consente di evitare la confusione sulle omissioni accidentali.
Asinc
{ "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" } ] }
Sincronizzazione
{ "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" } ] }
Asinc e sincronizzazione
{ "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" } ] }
Server di prenotazione
BatchavailabilityLookup o Checkavailability
In BatchAvailabilityLookupResponse
(BAL) o CheckAvailabilityResponse
(CA), restituisce lo stesso confirmation_mode
specificato nel feed di disponibilità e trasmesso tramite BatchAvailabilityLookupRequest
o CheckAvailabilityRequest
.
BAL asincrono
{ "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 } ] }
Sincronizzazione BAL
{ "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 } ] }
Asinc con CA
{ "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" }
Sincronizzazione CA
{ "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
Assicurati di restituire lo stato corretto della prenotazione utilizzando le seguenti opzioni disponibili:
// 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; }
In CreateBookingResponse
,
restituisce il confirmation_mode
corrente per lo spazio aggregato della prenotazione fornito
in CreateBookingRequest. Inoltre, quando la prenotazione è asincrona, imposta status
su PENDING_MERCHANT_CONFIRMATION
. Assicurati che confirmation_mode
corrisponda a ciò che l'utente e a Prenota con Google si aspetta di evitare di confondere l'utente.
Asinc
{ "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" } }
Sincronizzazione
{ "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
Nella release iniziale della modalità asincrona, le modifiche degli utenti a una prenotazione esistente non sono supportate. L'utente deve invece annullare la prenotazione e crearne una nuova.
Aggiornamenti in tempo reale
Per aggiornamenti in tempo reale delle disponibilità, è necessario specificare confirmation_mode
. Ciò si applica ai seguenti metodi:
RTU dell'inventario (SostituisciServiceDisponibilità o BatchSostituisciServiceDisponibilità)
Utilizzando il metodo availability.replace
(batch) o il metodo services.availability.replace
, imposta confirmation_mode
su CONFIRMATION_MODE_ASYNCHRONOUS
nella classe Availability
Asinc
{ "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" } ] } ] }
Sincronizzazione
{ "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" } ] } ] }
Asinc e sincronizzazione
{ "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
Gli aggiornamenti asincroni di uno stato di prenotazione devono essere effettuati tramite il metodo bookings.patch dell'API Booking Notification.
Quando aggiorni lo stato, assicurati di includere il nome del campo status
in
updateMask
.
Stato | Descrizione |
---|---|
CONFERMATO | il commerciante ha confermato la prenotazione |
ERRORE | il partner non è riuscito a confermare o rifiutare la prenotazione con il commerciante |
DECLINED_BY_MERCHANT | il commerciante ha rifiutato la prenotazione |
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"}
In caso di errore di prenotazione, imposta lo stato della prenotazione su FAILED
e specifica il valore Book_failure. Se lo stato è impostato su un altro valore, booking_failure
viene ignorato.
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"}
Notifiche email
Per le prenotazioni asincrone, esistono cinque potenziali email relative allo stato della prenotazione inviate agli utenti.
PENDING_MERCHANT_CONFIRMATION
CONFIRMED
DECLINED_BY_MERCHANT
FAILED
CANCELED