Muestras y definiciones de BatchAvailabilityLookup

Estructura de la solicitud

Las solicitudes de BatchAvailabilityLookup pueden abarcar varios servicios para el mismo comercio, y los espacios solicitados pueden abarcar varios recursos y días. Recomendamos usar un solo ID de servicio en todos los comercios para simplificar tu integración.

Tiempos de respuesta

Las solicitudes BatchAvailabilityLookup tienen un umbral de latencia de 1.5 segundos antes de que la respuesta se considere un error. Asegúrate de que tu red interna y el enrutamiento de DNS 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 reserva. Si un horario está reservado, reflejarlo 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 espacios, devuelve una respuesta vacía. No devuelvas un error 400. En cambio, puedes devolver un código 204 o cualquier otro código 2xx. Verifica que la respuesta se haya recibido correctamente.

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

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

Muestras de BatchAvailabilityLookup

Carga de página

Cuando un usuario hace clic en Reservar en línea para iniciar el flujo de reserva, se envía una solicitud de BatchAvailabilityLookup con los horarios disponibles conocidos del comercio. Para cada horario enviado en la solicitud, tu servidor de reservas devuelve una respuesta con la disponibilidad actual real del horario. En el frontend, solo se presentan al usuario los horarios disponibles.

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, se envía una solicitud BatchAvailabilityLookup para ese horario específico. Tu servidor de reservas devuelve una respuesta con la disponibilidad actual real del horario. La respuesta esperada es False para la disponibilidad si otro usuario de Google reservó ese horario, ya sea internamente en tu sistema o entre las solicitudes de carga de la página y de clic en el horario.

Solicitud de clic en la ranura

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

Respuesta al clic en la ranura

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