Le prenotazioni sincrone sono definite come prenotazioni confermate o rifiutate in tempo reale.
Le prenotazioni asincrone sono definite come 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 disponibili slot sincroni e asincroni.
Per determinare l'implementazione appropriata, identifica innanzitutto la categoria a cui appartiene il tuo inventario:
- Attivazione solo delle prenotazioni sincrone: Tutti i commercianti e i servizi vengono confermati immediatamente.
- Attivazione delle prenotazioni asincrone: Alcuni o tutti i commercianti e servizi richiedono la conferma manuale del commerciante.
Criteri di prenotazione asincrona
- 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 es. il pannello dell'host per il ristorante). Chiamare il commerciante per conto dell'utente per determinare se accetta o rifiuta una prenotazione non è consentito.
- La proposta di un nuovo orario di prenotazione da parte del commerciante non è supportata. La richiesta di prenotazione deve essere accettata o rifiutata nello stato originale.
Attivare solo le prenotazioni sincrone
L'implementazione standard prevede prenotazioni sincrone per impostazione predefinita. Per ulteriori informazioni, consulta la documentazione sull'integrazione end-to-end di Prenotazioni.
Attivazione della prenotazione asincrona
Se alcuni o tutti i commercianti utilizzano un flusso di prenotazione asincrono, è necessario apportare le seguenti modifiche:
-
Modalità di conferma:tutte le rappresentazioni degli slot di disponibilità ora contengono un campo
confirmation_modeche descrive come vengono confermate le prenotazioni di quello slot di disponibilità. Specifica ilconfirmation_modedi ogni slot di disponibilità per quanto segue:- Nel feed della disponibilità,
confirmation_modeè specificato a livello di disponibilità - Nei metodi dell'API Booking Server,
confirmation_modeviene specificato a livello di slot - Nei metodi dell'API Real-time Updates,
confirmation_modeviene specificato a livello di disponibilità
- Nel feed della disponibilità,
- Stato della prenotazione:tutte le rappresentazioni delle prenotazioni contengono un
campo
statusche rappresenta lo stato della prenotazione. Sono stati introdotti tre nuovi valori di stato asincroni:PENDING_CONFIRMATION,DECLINED_BY_MERCHANTeFAILED. Utilizza questi nuovi valori di stato quando elabori creazioni, rifiuti ed errori di prenotazioni asincrone. - Aggiornamenti delle prenotazioni:tutti gli aggiornamenti asincroni dello 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.
- I feed di disponibilità sono stati aggiornati in modo che venga specificata la modalità di conferma di ogni slot di disponibilità. È importante disporre di queste informazioni nel feed in modo da poter spiegare la natura asincrona della prenotazione all'utente all'inizio del flusso.
- Quando
viene chiamato
BatchAvailabilityLookupoCheckAvailability, trasmettiamo la modalità di conferma e, idealmente, la stessa modalità di conferma da restituire. In questo modo, all'utente vengono mostrati i messaggi appropriati. - Quando viene chiamato
CreateBooking, passiamo la modalità di conferma per indicare la modalità di conferma prevista. Quando viene inviata la richiesta di prenotazione asincrona, 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 notifica delle prenotazioni con aggiornamento in tempo reale. Se vuoi rifiutare automaticamente le prenotazioni a cui non viene data risposta in modo tempestivo, fallo tramite lo stesso metodo di aggiornamento in tempo reale.
Feed sulla disponibilità
Nel feed sulla disponibilità, specifica se ogni slot è sincrono o
asincrono. 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; }
Sebbene la modalità di conferma sia considerata sincrona se non viene specificata alcuna modalità, è fortemente consigliato specificare esplicitamente una modalità, in quanto ciò elimina qualsiasi confusione in caso di 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"
}
]
}Sincronizza
{
"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"
}
]
}Asincrono e sincrono
{
"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), restituisci lo stesso confirmation_mode specificato nel
feed di disponibilità e trasmesso tramite
BatchAvailabilityLookupRequest
o
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
Assicurati di restituire lo stato corretto della prenotazione utilizzando le opzioni disponibili di seguito:
// 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,
restituisci l'confirmation_mode corrente per lo slot aggregato della prenotazione fornito
in CreateBookingRequest. Inoltre, quando la prenotazione è asincrona,
imposta status su PENDING_MERCHANT_CONFIRMATION. Assicurati che
confirmation_mode sia ciò che l'utente e Prenota con
Google si aspettano per 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" } }
Sincronizza
{ "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 versione iniziale della funzionalità asincrona, le modifiche apportate dall'utente a una prenotazione esistente non sono supportate. L'utente deve invece annullare la prenotazione e crearne una nuova.
Aggiornamenti in tempo reale
Per gli aggiornamenti in tempo reale delle disponibilità, è necessario specificare confirmation_mode. Ciò si applica ai seguenti metodi:
RTU inventario (ReplaceServiceAvailability o BatchReplaceServiceAvailability)
Utilizzando il
metodo availability.replace (batch)
o il
metodo services.availability.replace,
imposta confirmation_mode su CONFIRMATION_MODE_ASYNCHRONOUS in 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"
}
]
}
]
}Sincronizza
{
"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"
}
]
}
]
}Asincrono e sincrono
{
"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 di notifica delle prenotazioni
Gli aggiornamenti asincroni dello stato di una prenotazione devono essere eseguiti 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 |
|---|---|
| CONFERMATA | il commerciante ha confermato la prenotazione |
| ERRORE | il partner non ha potuto 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 booking_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, agli utenti vengono inviate cinque potenziali email relative allo stato della prenotazione.
PENDING_MERCHANT_CONFIRMATIONCONFIRMEDDECLINED_BY_MERCHANTFAILEDCANCELED