Создавайте и загружайте ленты доступности встреч.
При создании и загрузке данных о доступности встреч следуйте этим инструкциям:
- Для файлов данных о доступности записи на прием следуйте спецификациям, описанным в ленте информации о доступности записей. Мы рекомендуем использовать уникальные имена файлов данных о доступности записей для каждой загрузки. Включите метку времени в имя файла, например,
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" ] }