Esempi e definizioni di BatchAvailabilityLookup

Struttura della richiesta

Le richieste BatchAvailabilityLookup possono riguardare più servizi per lo stesso commerciante e gli slot richiesti possono riguardare più risorse e giorni. Ti consigliamo di utilizzare un singolo ID servizio per tutti i commercianti per semplificare l'integrazione.

Tempi di risposta

Le richieste BatchAvailabilityLookup hanno una soglia di latenza di 1,5 secondi prima che la risposta venga considerata non riuscita. Assicurati che il routing DNS e di rete interno siano sincronizzati per ridurre al minimo qualsiasi ritardo nella richiesta che raggiunge la tua infrastruttura. Se si verificano errori di timeout significativi, l'integrazione potrebbe essere disattivata finché non riesci a risolverli.

Ogni risposta a una richiesta deve restituire lo stato effettivo del tuo inventario in quel momento e non quando è stato inserito il flusso di prenotazione. Se uno slot è esaurito, riflettilo nelle risposte correnti.

Definizioni

Il metodo BatchAvailabilityLookup verifica che durante il flusso di prenotazione agli utenti vengano presentati solo gli slot attuali.

Richiesta BatchAvailabilityLookup

message BatchAvailabilityLookupRequest {
  // ID of the merchant.
  string merchant_id = 1;

  // Multiple slot times to be checked for availability. All queried times apply
  // to the same merchant_id and service_id.
  repeated SlotTime slot_time = 3;

  reserved 2;
}

Risposta BatchAvailabilityLookup

// Response for the [ext.maps.booking.partner.v3.BatchAvailabilityLookupRequest]
// RPC with the availabilities of the appointment slots.
message BatchAvailabilityLookupResponse {
  // The availabilities for the requested SlotTime entries. There must be
  // exactly one slot_time_availability for each SlotTime entry in the
  // [ext.maps.booking.partner.v3.BatchAvailabilityLookupRequest].
  repeated SlotTimeAvailability slot_time_availability = 1;
}

SlotTime

// Identifies a Slot service_id and start time and optionally, the Slot duration
// and resources, for a specific merchant. Note that this differs from the
// definition of Slot, as it does not include merchant_id identifier.
message SlotTime {
  // ID of the service. (required)
  string service_id = 5;

  // Start time of the appointment slot in seconds of UTC time since Unix epoch
  // (required)
  int64 start_sec = 1;

  // Duration of the appointment slot in seconds (optional)
  int64 duration_sec = 2;

  // Opaque tag that identifies the availability slot and matches the value
  // provided in the Availability Feed (optional)
  string availability_tag = 3;

  // The set of resources that specifies the appointment slot, e.g. by
  // indicating the staff member and room selected by the user, or party size
  // for dining slots (optional)
  ResourceIds resource_ids = 4;

  // Indicates whether bookings of this slot will be confirmed
  // synchronously or asynchronously. (optional)
  // An UNSPECIFIED value will be interpreted as synchronous.
  ConfirmationMode confirmation_mode = 6;
}

SlotTimeAvailability

Se non vengono trovati slot, restituisci una risposta vuota. Non restituire un errore 400, ma puoi restituire un codice 204 o un altro codice 2xx. Verifica che la risposta sia stata ricevuta correttamente.

message SlotTimeAvailability {
  // The SlotTime for which availability was checked.
  SlotTime slot_time = 1;

  // Whether the requested SlotTime is available
  bool available = 2;
}

Esempi di BatchAvailabilityLookup

Caricamento pagina

Quando un utente fa clic su Prenota online per avviare il flusso di prenotazione, viene inviata una richiesta BatchAvailabilityLookup con gli slot di disponibilità noti per il commerciante. Per ogni slot inviato nella richiesta, il server di prenotazione restituisce una risposta con la disponibilità effettiva e attuale dello slot. Agli utenti vengono presentati solo gli slot disponibili nel frontend.

Se un utente modifica le dimensioni del gruppo o seleziona un'altra data, è possibile inviare un'altra richiesta di caricamento della pagina.

Richiesta di caricamento pagina

 {
    "merchant_id" : "1234",
   "slot_time" : [
       {
          "duration_sec" : "1800",
          "resource_ids" : {
             "party_size" : 2
          },
          "service_id" : "1000",
          "start_sec" : "1606467600"
       },
       {
          "duration_sec" : "1800",
          "resource_ids" : {
             "party_size" : 2
          },
          "service_id" : "1000",
          "start_sec" : "1606469400"
       },
       {
          "duration_sec" : "1800",
          "resource_ids" : {
             "party_size" : 2
          },
          "service_id" : "1000",
          "start_sec" : "1606471200"
       }
    ]
 }

Risposta di caricamento pagina

 { "slot_time_availability" :
    [
       {
          "available" : true,
          "slot_time" : {
                "duration_sec" : "1800",
                "resource_ids" : {
                     "party_size" : 2 },
                 "service_id" : "1000",
                 "start_sec" : "1606467600"  }
       },
       {
          "available" : true,
          "slot_time" : {
                "duration_sec" : "1800",
                "resource_ids" : {
                     "party_size" : 2 },
                 "service_id" : "1000",
                 "start_sec" : "1606469400" }
       },
       {
          "available" : false,
          "slot_time" : {
                 "duration_sec" : "1800",
                  "resource_ids" : {
                       "party_size" : 2 },
                 "service_id" : "1000",
                 "start_sec" : "1606471200" }
       }
    ]
 }

Clic sullo slot

Quando un utente seleziona uno slot prenotabile, viene inviata una richiesta BatchAvailabilityLookup per lo slot specifico. Il server di prenotazione restituisce una risposta con la disponibilità effettiva e attuale dello slot. La risposta prevista è False per la disponibilità se lo spazio è esaurito da un altro utente Google, internamente al tuo sistema o tra le richieste di caricamento pagina e di clic sullo spazio.

Richiesta di clic sullo slot

 {
    "merchant_id" : "1234",
    "slot_time" : [
       {
          "duration_sec" : "1800",
          "resource_ids" : {
             "party_size" : 2
          },
          "service_id" : "1000",
          "start_sec" : "1606467600"
       }
    ]
 }

Risposta di clic sullo slot

 {
    "slot_time_availability" : [
       {
          "available" : true,
          "slot_time" : {
           "duration_sec" : "1800",
             "resource_ids" : {
                "party_size" : 2
             },
             "service_id" : "1000",
             "start_sec" : "1606467600"
          }
       }
    ]
 }