Przykłady i definicje BatchAvailabilityLookup

Struktura żądania

Żądania BatchAvailabilityLookup mogą obejmować wiele usług tego samego sprzedawcy, a żądane miejsca mogą obejmować wiele zasobów i dni. Aby uprościć integrację, zalecamy używanie jednego identyfikatora usługi w przypadku wszystkich sprzedawców.

Czas odpowiedzi

W przypadku żądań BatchAvailabilityLookup próg opóźnienia wynosi 1,5 sekundy, po przekroczeniu którego odpowiedź jest uznawana za nieudaną. Upewnij się, że wewnętrzna sieć i routing DNS są zsynchronizowane, aby zminimalizować opóźnienie żądania docierającego do Twojej infrastruktury. Jeśli wystąpią poważne błędy przekroczenia limitu czasu, Twoja integracja może zostać wyłączona do czasu rozwiązania problemów.

Każda odpowiedź na żądanie musi zwracać rzeczywisty stan Twojego asortymentu w danym momencie, a nie w momencie rozpoczęcia procesu rezerwacji. Jeśli przedział jest zarezerwowany, odzwierciedlaj to w bieżących odpowiedziach.

Definicje

Metoda BatchAvailabilityLookup sprawdza, czy użytkownikom podczas procesu rezerwacji są prezentowane tylko aktualne miejsca.

Żądanie 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;
}

Odpowiedź 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

Jeśli nie znaleziono żadnych boksów, zwróć pustą odpowiedź. Nie zwracaj błędu 400, zamiast tego możesz zwrócić kod 204 lub inny kod z zakresu 2xx. Potwierdza, że odpowiedź została prawidłowo odebrana.

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

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

Przykłady BatchAvailabilityLookup

Wczytanie strony

Gdy użytkownik kliknie Zarezerwuj online, aby rozpocząć proces rezerwacji, wysyłane jest żądanie BatchAvailabilityLookup z dostępnymi terminami dla sprzedawcy. W przypadku każdego przedziału czasu wysłanego w żądaniu serwer rezerwacji zwraca odpowiedź z rzeczywistą, aktualną dostępnością przedziału czasu. Użytkownikowi są prezentowane tylko dostępne miejsca.

Jeśli użytkownik zmieni liczbę osób lub wybierze inną datę, może zostać wysłana kolejna prośba o wczytanie strony.

Żądanie wczytania strony

 {
    "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"
       }
    ]
 }

Odpowiedź dotycząca wczytania strony

 { "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" }
       }
    ]
 }

Kliknięcie przedziału

Gdy użytkownik wybierze dostępny termin, wysyłana jest prośba BatchAvailabilityLookup dotycząca tego terminu. Serwer rezerwacji zwraca odpowiedź z rzeczywistą, aktualną dostępnością miejsca. Oczekiwana odpowiedź to False w przypadku dostępności, jeśli to miejsce zostało zarezerwowane przez innego użytkownika Google, wewnętrznie w Twoim systemie lub między wczytaniem strony a kliknięciem miejsca.

Żądanie kliknięcia w slot

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

Odpowiedź na kliknięcie miejsca

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