Plik danych o dostępności wizyt

Tworzenie i przesyłanie plików danych o dostępności spotkań

Podczas tworzenia i przesyłania plików danych o dostępności terminów spotkań postępuj zgodnie z tymi instrukcjami:

  • Postępuj zgodnie ze specyfikacją opisaną w pliku danych o dostępności wizyt w przypadku plików danych o dostępności wizyt. Zalecamy używanie unikalnych nazw plików danych o dostępności terminów wizyt w przypadku każdego przesłania. W nazwie pliku umieść sygnaturę czasową, np. appointment availability_1633621547.json.
  • W deskryptorze zestawu plików ustaw pole name na wartość appointment.availability. Przykładowy plik deskryptora znajdziesz w sekcji Przykładowy plik JSON. Zalecamy używanie unikalnych nazw plików deskryptorów dla każdego przesłania. W nazwie pliku umieść sygnaturę czasową, np. appointment availability_1633621547.filesetdesc.json. Plik deskryptora musi zostać przesłany na ogólny serwer SFTP.
  • Przesyłaj pliki danych na ogólny serwer SFTP co 30 minut w ramach pełnych odświeżeń.
  • Szczegóły serwera SFTP znajdziesz w sekcji Konfiguracja > Pliki danych na portalu dla partnerów.
  • Wybieranie serwerów plików danych

    Wybieranie serwerów plików danych w Portalu Partnerów
  • Stan przetwarzania kanału możesz sprawdzić w sekcji Pliki danych > Historia w portalu dla partnerów.

Przesyłanie dodatkowych plików danych

Dostępność terminów obsługuje też dodatkowe pliki danych, dzięki czemu partnerzy mogą przesyłać tylko zmiany wprowadzone w dostępności za pomocą przesyłania plików danych.

Aby przesłać plik danych z przyrostowymi aktualizacjami, ustaw wartość is_incremental: true w co najmniej jednym przedziale dostępności w pliku danych. Jeśli niektóre pliki danych mają wartość is_incremental ustawioną na true, a inne na false, system traktuje wszystkie jako przyrostowe.

Aktualizacje przyrostowe umożliwiają wykonywanie tych operacji:

Bez zmian
Nie podawaj identyfikatora dostępności w przypadku jednostek, w których nie ma zmian.
Aktualizowanie dostępności
Aby zaktualizować pojedynczą dostępność, prześlij konkretny wpis dotyczący dostępności (ten sam availability_id), który wymaga modyfikacji, zmieniając dowolne wybrane pola.
Usuwanie dostępności
Jeśli wpis dotyczący dostępności nie jest już dostępny lub powinien zostać usunięty, prześlij ten wpis (ten sam availability_id) z wartością spots_available ustawioną na 0, a system automatycznie go usunie. Aby usunąć wszystkie dane sprzedawcy lub podmiotu, ustaw wartość spots_available wszystkich przedziałów czasowych dostępności na 0 – spowoduje to usunięcie sprzedawcy lub podmiotu z sekcji Dostępność.
Dodaj dostępność
W przypadku nowych przedziałów czasowych dostępności w przesłanym pliku danych uwzględnij nowy wpis dotyczący dostępności z nowym, unikalnym identyfikatorem availability_id. System traktuje go tak samo, jakby był uwzględniony w zwykłym pliku danych.

Definicje

Definicja pliku danych AppointmentAvailabilityFeed

message AppointmentAvailabilityFeed {
  repeated AppointmentAvailability data = 1;
}

Definicja AppointmentAvailability

// This represents the availability data for a bookable service provided by a
// merchant.
// For example, it can be a haircut/nail manicure service for a beauty salon or
// a massage service for a spa.
// The availability feed should be a list of this message.
message AppointmentAvailability {
  // An opaque string generated by the partner that identifies a service time
  // slot. Must be unique across all entities and service time slots.
  // Strongly recommended to only include URL-safe characters.
  // Required.
  string availability_id = 1;

  // An opaque string generated by the partner that identifies an Entity.
  // Must be unique across all entities.
  // Strongly recommended to only include URL-safe characters.
  // Required.
  string entity_id = 2;

  // An opaque string of ASCII characters from an aggregator partner which
  // uniquely identifies the Service (haircut, nail manicure, massage).
  // Strongly recommended to only include URL-safe characters.
  // Required.
  string service_id = 3;

  // The name of the service provider. For example, the name of the
  // hairdresser or the spa staff member.
  // Optional.
  string provider = 12;

  // Timestamp of when this availability slot starts in UTC.
  // Given in seconds since the unix epoch.
  // For example, 1735714800 seconds for 1 Jan 2025, 07:00:00 (UTC).
  // Required.
  int64 start_time_sec = 4;

  // The minimum number of minutes in advance before the start time that this
  // availability slot can be booked.
  // For example, if the start time is 10:00 AM and the min_advance_minutes is
  // 60, then the latest time this slot can be booked is 9:00 AM on the day of
  // the appointment.
  // If not set, it is assumed to be 0, meaning the slot can be booked at any
  // time before the start time.
  // Optional.
  int32 min_advance_minutes = 13;

  // Number of total spots and available spots of this booking availability.
  // Required.
  int32 spots_total = 5;
  // Required.
  int32 spots_available = 6;

  // The minimum number of spots that should be booked for this availability.
  // For example, a user has to book at least 2 spots for a time slot sometimes.
  // If set, spots_minimum_book should be less or equal to spots_available.
  // Optional.
  int32 spots_minimum_book = 7;

  // Link of this booking availability. Users will be redirected to partner
  // website to continue booking after clicking this link.
  // Required.
  string booking_link = 8;

  // Base price per person.
  // Required.
  google.type.Money base_price = 9;
  // Fee per person.
  // Required.
  google.type.Money fee_price = 10;

  // Whether the feed is incremental or not.
  // By default it is false, meaning the Availability feed will override the
  // previous data for the same entity_id.
  // If this is set to be true, the Availability feed will be proceeded as
  // incremental updates for the same entity_id.
  //    1) If it is a new availability_id, the entry is added.
  //    2) If it is an existing availability_id and the spots_available is 0,
  //       the entry is removed.
  //    3) If it is an existing availability_id and the spots_available is not
  //    0, the entry is updated.
  bool is_incremental = 11;
}

Zewnętrzne odwołania do plików proto:

Przykłady plików danych o dostępności pól golfowych

Plik danych o dostępności wizyt

{
  "data": [
    {
      "availability_id": "availability_id_1",
      "entity_id": "entity_id_1",
      "service_id": "service_id_1",
      "start_time_sec": 1728257400,
      "spots_total": 4,
      "spots_available": 4,
      "spots_minimum_book": 2,
      "booking_link": "https://www.googleappointments.com/a_link_direct_to_booking_page",
      "base_price": {
        "currency_code": "USD",
        "units": 80,
        "nanos": 0
      },
      "fee_price": {
        "currency_code": "USD",
        "units": 1,
        "nanos": 750000000
      }
    },
    {
      "availability_id": "availability_id_2",
      "entity_id": "entity_id_2",
      "service_id": "service_id_2",
      "start_time_sec": 1728259200,
      "spots_total": 4,
      "spots_available": 4,
      "spots_minimum_book": 2,
      "booking_link": "https://googlegolfappointments.com/a_link_direct_to_booking_page",
      "base_price": {
        "currency_code": "USD",
        "units": 80,
        "nanos": 0
      },
      "fee_price" : {
        "currency_code": "USD",
        "units": 2,
        "nanos": 850000000
      }
    }
  ]
}

Plik deskryptora

{
  "generation_timestamp": 1663347730,
  "name": "appointment.availability",
  "data_file": [
    "appointment_availability_1663347730.json"
  ]
}