Estructura de la solicitud
Las solicitudes de BatchAvailabilityLookup pueden abarcar varios servicios para el mismo comercio, y los horarios disponibles solicitados pueden abarcar varios recursos y días. Recomendamos usar un solo ID de servicio en todos los comercios para simplificar la integración.
Tiempos de respuesta
Las solicitudes de BatchAvailabilityLookup tienen un umbral de latencia de 1.5 segundos antes de que la respuesta se considere un error. Asegúrate de que el enrutamiento de DNS y la red interna estén sincronizados para minimizar cualquier demora en la solicitud que llegue a tu infraestructura. Si hay errores de tiempo de espera significativos, es posible que tu integración se desconecte hasta que puedas resolverlos.
Cada respuesta a una solicitud debe mostrar el estado real de tu inventario en ese momento y no cuando se ingresó al flujo de reservas. Si un horario disponible está reservado, indícalo en las respuestas actuales.
Definiciones
El método BatchAvailabilityLookup verifica que solo se muestren los horarios disponibles actuales a los usuarios durante el flujo de reserva.
Solicitud de 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;
}
Respuesta de 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
Si no se encuentran horarios disponibles, muestra una respuesta vacía. No muestres un error 400. En su lugar, puedes mostrar 204 o cualquier otro código 2xx. Verifica que la respuesta se reciba correctamente.
message SlotTimeAvailability {
// The SlotTime for which availability was checked.
SlotTime slot_time = 1;
// Whether the requested SlotTime is available
bool available = 2;
}
Ejemplos de BatchAvailabilityLookup
Carga de página
Cuando un usuario hace clic en Reservar en línea para iniciar el flujo de reservas, se envía una solicitud de BatchAvailabilityLookup con los horarios disponibles conocidos para el comercio. Por cada horario disponible enviado en la solicitud, tu servidor de reservas muestra una respuesta con la disponibilidad real y actual del horario disponible. Solo se muestran los horarios disponibles al usuario en el frontend.
Si un usuario cambia el tamaño del grupo o selecciona otra fecha, se puede enviar otra solicitud de carga de página.
Solicitud de carga de página
{
"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"
}
]
}
Respuesta de carga de página
{ "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 en el horario disponible
Cuando un usuario selecciona un horario disponible reservable, se envía una solicitud de BatchAvailabilityLookup para ese horario disponible específico. Tu servidor de reservas muestra una respuesta con la disponibilidad real y actual del horario disponible. La respuesta esperada es False para la disponibilidad si otro usuario de Google reservó ese horario disponible, ya sea internamente en tu sistema o entre la carga de página y las solicitudes de clic en el horario disponible.
Solicitud de clic en el horario disponible
{
"merchant_id" : "1234",
"slot_time" : [
{
"duration_sec" : "1800",
"resource_ids" : {
"party_size" : 2
},
"service_id" : "1000",
"start_sec" : "1606467600"
}
]
}
Respuesta de clic en el horario disponible
{
"slot_time_availability" : [
{
"available" : true,
"slot_time" : {
"duration_sec" : "1800",
"resource_ids" : {
"party_size" : 2
},
"service_id" : "1000",
"start_sec" : "1606467600"
}
}
]
}