Лента доступности встреч

Создавайте и загружайте ленты доступности встреч.

При создании и загрузке данных о доступности встреч следуйте этим инструкциям:

  • Для файлов данных о доступности записи на прием следуйте спецификациям, описанным в ленте информации о доступности записей. Мы рекомендуем использовать уникальные имена файлов данных о доступности записей для каждой загрузки. Включите метку времени в имя файла, например, appointment availability_1633621547.json .
  • В дескрипторе набора файлов установите поле name равным appointment.availability . Пример файла дескриптора можно найти в образце JSON . Рекомендуется использовать уникальные имена файлов дескрипторов для каждой загрузки. Включите метку времени в имя файла, например, appointment availability_1633621547.filesetdesc.json . Файл дескриптора необходимо загрузить на универсальный SFTP-сервер.
  • Загрузка каналов на общий SFTP-сервер осуществляется каждые 30 минут при полном обновлении.
  • Информацию о SFTP-сервере можно найти в разделе «Конфигурация > Каналы» на Партнерском портале.
  • Выбор серверов лент новостей

    Выбор серверов фидов на партнерском портале.
  • Статус загрузки данных в канал можно посмотреть в разделе «Каналы > История» на партнерском портале.

Загрузка пошаговых каналов

Функция отслеживания доступности также поддерживает поэтапную загрузку данных, позволяя партнерам загружать только те изменения, которые были внесены в их доступность с помощью функции загрузки данных из ленты.

Для загрузки инкрементного фида установите is_incremental: true хотя бы в одном из доступных слотов вашего фида. Если для некоторых фидов параметр is_incremental установлен в true , а для других — в false , система будет рассматривать все фиды как инкрементные.

Постепенные обновления предоставляют следующие возможности:

Без изменений
Не указывайте идентификатор доступности для объектов, для которых изменений не произошло.
Обновить доступность
Для обновления одной записи о доступности загрузите конкретную запись о доступности (с тем же availability_id ), требующую изменения, внеся правки в любое из выбранных полей.
Удалить доступность
Если запись о доступности больше недоступна или должна быть удалена, загрузите эту запись (с тем же availability_id ), установив spots_available равным 0, и система автоматически удалит её. Кроме того, чтобы удалить все данные для продавца/субъекта, установите spots_available для всех его слотов доступности равным 0 — это удалит самого продавца/субъект из списка доступных.
Добавить доступность
Для новых доступных временных интервалов включите новую запись о доступности с ее уникальным availability_id в загружаемый фид. Система обрабатывает ее так же, как и обычный фид.

Определения

Определение доступности записи на прием

message AppointmentAvailabilityFeed {
  repeated AppointmentAvailability data = 1;
}

Определение доступности записи на прием

// 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;
}

Внешние ссылки на прототипы:

Образцы кормов для гольфа.

Лента доступности записи на прием

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

Файл описания

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