Предложения
Интеграция специальных предложений позволяет передавать структурированную информацию о промоакциях и скидках, которые действуют на определенные услуги в определенное время. Предложения состоят из самого предложения (процент скидки, сумма скидки и т. д.), сроков действия (определенное время, дни недели и т. д.) и применимых вариантов использования (предложение можно использовать только для определенных услуг), а также сложных комбинаций ограничений.
Примеры предложений:
- Скидка на салаты по средам и четвергам в декабре с 12:00 до 17:00.
- Второй десерт бесплатно при заказе ужина в День матери с 18:00 до 22:00.
- Скидка 200 рублей на поздний завтрак каждое воскресенье с 10:00 до 14:00.
- Скидка 10% для посетителей без записи, которая суммируется со скидкой 5% для подписчиков Premium и скидкой 5% при оплате через приложение.
Чтобы предложение было включено в интеграцию, оно должно соответствовать технической модели данных и требованиям к участию. Ознакомьтесь с правилами в отношении предложений, чтобы убедиться, что ваша интеграция соответствует требованиям. В них также рассказывается, что делать с предложениями, которые не соответствуют техническим требованиям.
Реализация предложений
Интеграция специальных предложений состоит из двух фидов, которые будут загружаться ежедневно или с частотой, обеспечивающей высокую точность (то есть снижающей устаревание):
- Выполните одно из следующих действий:
- Фид продавцов
(с использованием конфигурации
Merchant) - Или
Фид объектов
(с использованием конфигурации
Generic)
- Фид продавцов
(с использованием конфигурации
- И
фид специальных предложений
(с использованием конфигурации
Generic)
OfferFeed
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
data | Массив объектов(Offer) |
Предложение
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
offer_id | string | Обязательно | Уникальный идентификатор предложения. Обязательно. |
entity_ids | Массив строк | Список продавцов, участвующих в этой акции. | |
add_on_offer_applicable_to_all_entities | Логическое значение | Если указано значение true, предложение применяется ко всем объектам агрегатора. Применимо только к дополнительным предложениям. | |
offer_source | enum(OfferSource) | Обязательно | Предложение может быть предоставлено агрегатором, отдельным продавцом или даже третьей стороной в качестве дополнения. Обязательно. |
action_type | enum(ActionType) | Обязательно | Сервис, который предоставляет предложение. Одному идентификатору предложения (offer_id) может соответствовать только один тип действия (action_type). Если предложение можно использовать для нескольких типов услуг, для каждого из них нужно создать отдельное предложение с уникальным идентификатором. Обязательно. |
offer_modes | Массив перечислений(OfferMode) | Обязательно | Способы воспользоваться предложением: посещение сервисного центра, бронирование, онлайн и т. д. Обязательный атрибут. |
offer_category | enum(OfferCategory) | Обязательно | Категория предложения. Обязательно. |
source_assigned_priority | число | Неотрицательное целое число от 1 до 100, где 1 – наивысший приоритет. Указывает уровень приоритета предложения, назначенный источником. Если у одного продавца есть несколько специальных предложений, это будет сигналом для ранжирования. Если приоритет не задан, используется значение 0. | |
offer_details | object(OfferDetails) | Обязательно | Подробные сведения о предложении, например скидка, стоимость бронирования и т. д. Обязательный параметр. |
offer_restrictions | object(OfferRestrictions) | Обязательно | Описывает ограничения, связанные с предложением, например требуется ли подписка или способ оплаты, можно ли комбинировать это предложение с другими (и с какими именно) и т. д. Обязательное поле. |
coupon | object(Coupon) | Сведения о купоне. Обязательный атрибут для категории OFFER_CATEGORY_ADD_ON_COUPON_OFFER. | |
payment_instrument | object(PaymentInstrument) | Сведения о способе оплаты. Обязательно для offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER. | |
subscription | object(Subscription) | Сведения о подписке. Обязательный параметр для offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER. | |
terms | object(Terms) | Обязательно | Условия использования предложения. Обязательно. |
validity_periods | Массив объектов(ValidityPeriod) | Обязательно | Срок действия предложения. Описывает период времени, в течение которого действует предложение, включая время начала и окончания, дни недели и т. д. Обязательное свойство. |
offer_url | string | URL страницы с предложением продавца. Обязательный атрибут для offer_category со значением OFFER_CATEGORY_BASE_OFFER. | |
tags | Массив перечислений(OfferTag) | Специальные теги, связанные с предложением. Используется для обозначения специальных предложений, например "Праздничное", "Лучшее", "Самое популярное" и т. д. | |
brand_id | string | Бренд, связанный с предложением. Если не задано, используется бренд по умолчанию. | |
availability_level | enum(AvailabilityLevel) | Уровень доступности предложения. |
OfferDetails
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
offer_display_text | string | Обязательно | Текст предложения, который поставщик хочет показывать клиентам на странице результатов поиска. Обратите внимание, что это может быть не совсем то, что показывается пользователям, и мы можем использовать другие метаданные, чтобы переписать или перефразировать его. Обязательно. |
| oneOf(offer_specification) | Обязательно | Можно задать только одно из полей в этом oneOf. |
max_discount_value | object(Money) | Максимальная скидка, которую можно получить. Пример: скидка 10% на сумму до 100 долларов США. | |
min_spend_value | object(Money) | Минимальная сумма расходов, необходимая для получения скидки. Например, скидка 10% при покупке на сумму от 100 долларов США. | |
booking_cost | object(Money) | Стоимость бронирования по этому предложению. Например, скидка 100 долларов США на итоговый счет при бронировании столика за 15 долларов США. | |
booking_cost_unit | enum(FeeUnit) | Единица стоимости бронирования. Например, на человека или на транзакцию. | |
convenience_fee | object(Fee) | ||
booking_cost_adjustable | Логическое значение | Можно ли скорректировать стоимость бронирования, то есть вычесть ее из окончательного счета. Пример: скидка 30% на ужин при бронировании. Стоимость бронирования – 15 долларов США. Эта сумма будет включена в итоговый счет. Итоговый счет: общие расходы – 30 % – 15 долларов США. | |
additional_fees | Массив объектов(AdditionalFee) | Дополнительные комиссии, взимаемые с пользователя. Примеры: комиссия за удобство, обработку, доставку, упаковку, обслуживание и т. д. | |
offer_discount_type | enum(OfferDiscountType) | Тип скидки. | |
gift_card_info | object(GiftCardInfo) | Сведения о специальных предложениях на подарочные карты. |
Деньги
Представляет сумму денег с указанием типа валюты.
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
currency_code | string | Трехбуквенный код валюты, определенный в стандарте ISO 4217. | |
units | число | Целая часть суммы.
Например, если currencyCode – это "USD", то одна единица – это один доллар США. | |
nanos | число | Количество нано-единиц (10^-9) суммы.
Значение должно быть в диапазоне от -999 999 999 до +999 999 999 включительно.
Если значение units положительное, то значение nanos должно быть положительным или нулевым.
Если значение units нулевое, то значение nanos может быть положительным, отрицательным или нулевым.
Если значение units отрицательное, то значение nanos должно быть отрицательным или нулевым.
Например,значение "–1,75 долл.США" будет представлено как units=-1 и nanos=-750 000 000. |
Плата
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
unit | enum(FeeUnit) | ||
type | enum(FeeType) | ||
| oneOf(cost) | Можно задать только одно из полей в этом oneOf. |
MoneyRange
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
min_amount | object(Money) | ||
max_amount | object(Money) |
AdditionalFee
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
name | string | Обязательно | Название дополнительной комиссии. Примеры: сервисный сбор, комиссия за обработку и т. д. Обязательный атрибут. |
fee | object(Fee) |
GiftCardInfo
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
| oneOf(denomination_type) | Можно задать только одно из полей в этом oneOf. |
FixedDenominations
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
amounts | Массив объектов(Money) | Список всех доступных номиналов (например, [100, 500, 1000]). |
OfferRestrictions
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
combinable_with_other_offers | Логическое значение | Можно ли комбинировать это предложение с другими. Если задано значение true, партнеры могут указать, с какими предложениями можно комбинировать это предложение. Если заданы оба параметра combinable_offer_categories и combinable_offer_ids, то комбинироваться будут все предложения, соответствующие одному из условий выше. | |
combinable_offer_categories | массив перечисляемых значений(OfferCategory) | Список типов предложений, с которыми можно сочетать это предложение. Например, это предложение может сочетаться с другими купонами. Если для параметра combinable_with_other_offers задано значение true, а это поле не заполнено, то можно будет комбинировать все типы предложений. | |
combinable_offer_ids | массив строк; | Список идентификаторов предложений, с которыми можно комбинировать это предложение. Некоторые предложения можно комбинировать только с определенными другими идентификаторами предложений (их можно считать родительскими предложениями). Если атрибут combinable_with_other_offers имеет значение true, а это поле не заполнено, то все идентификаторы предложений будут комбинируемыми. | |
inclusions | Массив объектов(OfferCondition) | Список условий, которые должны быть выполнены, чтобы предложение было действительным (например, безалкогольные напитки, еда). | |
exclusions | Массив объектов(OfferCondition) | Список условий, при которых предложение недействительно (например, шведский стол, комбинированные предложения и коктейли). | |
min_guest | число | Минимальное количество людей, необходимое для получения предложения. Примечание. Это поле применимо только для бронирования столиков и не должно использоваться для других вертикалей. | |
food_offer_restrictions | object(FoodOfferRestrictions) | Ограничения, относящиеся к предложениям продуктов питания. | |
max_redemption_count | число | Ограничения на количество использований предложения. Значение 0 означает, что ограничений нет. Например, если указать 3, то пользователь сможет воспользоваться предложением три раза. | |
max_total_discount_value | object(Money) | Максимальная скидка, которую можно получить за несколько транзакций в рамках этого предложения. | |
special_conditions | массив строк; | Специальные условия предложения, которые должны быть показаны пользователю. Примеры: "Действительно только для оплаты в [область]", "Недействительно для онлайн-платежей", "Подарочный сертификат можно использовать во время распродажи". |
OfferCondition
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
description | string |
FoodOfferRestrictions
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
meal_types | Массив перечислений(MealType) | Типы блюд, к которым можно применить предложение, например обед или ужин. Если не задано, предложение можно применить ко всем типам блюд. | |
restricted_to_certain_courses | Логическое значение | Можно ли применить предложение только к определенным курсам. |
Купон
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
text | string | Текст купона, который поставщик предложения хочет показывать пользователям. | |
code | string | Обязательно | Для участия в акции требуется промокод. Обязательно. |
PaymentInstrument
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
items | Массив объектов(PaymentInstrumentItem) | Обязательно | Список способов оплаты, которые можно использовать для получения бонуса. Обязательно. |
provider_name | string | Название поставщика платежного инструмента. Это может быть банк-партнер, название банка и т. д. Например: American Express, HDFC, ICICI. |
PaymentInstrumentItem
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
type | enum(PaymentInstrumentType) | Обязательно | Тип способа оплаты. Обязательно. |
name | string | Обязательно | Название способа оплаты, например кредитной карты. Примеры: HDFC Infinia, American Express Platinum. Обязательно. |
Подписка
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
name | string | Обязательно | Название подписки. Обязательно. |
subscription_auto_added | Логическое значение | Добавляется ли подписка автоматически, когда пользователь принимает это предложение. | |
cost | object(Money) | Обязательно | Стоимость подписки. Обязательно. |
subscription_duration | object(Duration) | Обязательно | Срок действия подписки по указанной абонентской плате. Обязательно. |
terms_and_conditions_url | string | URL условий использования партнера, относящихся к этой подписке. |
Продолжительность
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
seconds | число | Подписанные секунды временного интервала. Значение должно быть в диапазоне от -315 576 000 000 до +315 576 000 000 включительно. Примечание.Эти границы вычисляются следующим образом: 60 сек/мин * 60 мин/ч * 24 ч/день * 365,25 дней/год * 10 000 лет | |
nanos | число | Доли секунды со знаком и наносекундным разрешением. Продолжительность менее одной секунды представлена полем seconds со значением 0 и полем nanos с положительным или отрицательным значением. Для длительности от одной секунды ненулевое значение поля nanos должно иметь тот же знак, что и поле seconds. Значение должно быть в диапазоне от -999 999 999 до +999 999 999 включительно. |
Условия использования
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
url | string | URL страницы с условиями использования партнера. | |
restricted_to_certain_users | Логическое значение | Ограничено ли предложение определенными пользователями. | |
terms_and_conditions | string | Основной текст условий использования, предоставленный партнером. | |
additional_terms_and_conditions | массив строк; | Условия использования, дополняющие основные условия партнера. |
ValidityPeriod
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
valid_period | object(ValidityRange) | Временные метки начала и окончания действия предложения. Время начала и окончания должно соответствовать разным дням, то есть время начала должно быть 00:00 (начало дня), а время окончания – 00:00 (не включительно) в день окончания срока действия. | |
time_of_day | Массив объектов(TimeOfDayWindow) | Укажите допустимый временной интервал в течение дня и дни, в которые действует предложение. Если временной интервал пересекает полночь (например, с 22:00 до 02:00), используйте отдельные интервалы для каждого дня: один, заканчивающийся в 23:59:59, и другой, начинающийся в 00:00 на следующий день.
Пример:
Понедельник: с 10:00 до 17:00
Вторник: с 10:00 до 14:00
Вторник: с 17:00 до 19:00
Среда, четверг, пятница, суббота, воскресенье: с 15:00 до 19:00
Если значение не задано, предложение доступно в любое время в течение периода, указанного в атрибуте "дата начала действия предложения" valid_period. | |
time_exceptions | Массив объектов(ValidTimeException) | Позволяет задать исключения из значений атрибутов valid_period и valid_time_of_week. | |
date_exceptions | Массив объектов(Date) | Позволяет задать исключения в днях для атрибутов valid_period и time_of_day. | |
validity_scope | enum(ValidityScope) | Указывает область действия периода действия. | |
validity_duration_in_days | число | Срок действия купона или ваучера в днях с момента покупки. |
ValidityRange
Диапазон временных меток с закрытым началом и открытым концом.
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
valid_from_time | object(Timestamp) | Обязательно | Время начала диапазона (включительно). Обязательно. |
valid_through_time | object(Timestamp) | Время окончания диапазона (не включительно). Если значение не задано, период не ограничен. Необязательное поле. |
Временная метка
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
seconds | число | Представляет собой количество секунд по всемирному координированному времени с начала эпохи Unix (00:00:00 1 января 1970 года). Значение должно быть в диапазоне от -62135596800 до 253402300799 включительно (что соответствует периоду с 0001-01-01T00:00:00Z до 9999-12-31T23:59:59Z). | |
nanos | число | Доля секунды в наносекундах. Это поле содержит наносекундную часть продолжительности, а не альтернативу секундам. Отрицательные значения секунд с долями должны иметь неотрицательные значения наносекунд, которые отсчитываются вперед во времени. Значение должно быть в диапазоне от 0 до 999 999 999 включительно. |
TimeOfDayWindow
Объект TimeWindow – это составной объект, который описывает список временных интервалов, в течение которых заказ пользователя может быть размещен или выполнен.
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
time_windows | object(TimeOfDayRange) | Обязательно | Временной интервал, в течение которого заказ может быть размещен или выполнен. Обязательно. |
day_of_week | массив перечисляемых значений(DayOfWeek) | Список дней недели, к которым применяются окна. Если не задано ни одно значение, правило применяется ко всем дням недели. Необязательное поле. | |
day_of_month | Массив объектов(DayOfMonthRange) | Дни месяца, в которые применяются окна. Если не задано ни одно значение, правило применяется ко всем дням месяца. Необязательное поле. |
TimeOfDayRange
Закрытый временной диапазон.
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
open_time | object(TimeOfDay) | Время, указывающее начало дня диапазона (включительно). Если значение не задано, используется 00:00:00. Необязательное поле. | |
close_time | object(TimeOfDay) | Время, указывающее на окончание дня диапазона (не включительно). Если время не указано, по умолчанию используется 23:59:59. Необязательное поле. |
TimeOfDay
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
hours | число | Часы в 24-часовом формате. Значение должно быть больше или равно 0 и меньше или равно 23. В API допустимо значение "24:00:00" для таких сценариев, как время закрытия компании. | |
minutes | число | Минуты часа. Значение должно быть больше или равно 0 и меньше или равно 59. | |
seconds | число | Секунды. Значение должно быть больше или равно 0 и, как правило, меньше или равно 59. В API допустимо значение "60", если разрешены високосные секунды. | |
nanos | число | Доли секунды в наносекундах. Значение должно быть больше или равно 0 и меньше или равно 999 999 999. |
DayOfMonthRange
Диапазон дней месяца, который применяется ко всем месяцам года.
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
valid_from_day | число | Обязательно | Начало диапазона (включительно). Обязательно. |
valid_through_day | число | Последний день диапазона (включительно). Если значение не задано, диапазон представляет собой один день (valid_from_day). Необязательное поле. |
ValidTimeException
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
exceptional_period | object(ValidityRange) | Временные метки начала и окончания периода, в течение которого предложение недействительно. Время начала должно быть 00:00 (начало дня), а время окончания – 00:00 (исключая) в день окончания периода исключения. |
Дата
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
year | число | Год. Должно быть от 1 до 9999 или 0, чтобы указать дату без года. | |
month | число | Месяц года. Допустимые значения: от 1 до 12. Если вы хотите указать год без месяца и дня, введите 0. | |
day | число | День месяца. Допустимы значения от 1 до 31, соответствующие году и месяцу, или 0, если нужно указать только год или год и месяц, когда день не имеет значения. |
OfferSource
| Название | Описание |
|---|---|
OFFER_SOURCE_UNSPECIFIED | |
OFFER_SOURCE_AGGREGATOR |
ActionType
Представляет способ выполнения предложения. Если предложение можно использовать для нескольких способов выполнения, то для каждого из них нужно создать отдельное предложение.
| Название | Описание |
|---|---|
ACTION_TYPE_UNSPECIFIED | |
ACTION_TYPE_FOOD_DELIVERY | Предложение распространяется на сервисы доставки еды. |
ACTION_TYPE_FOOD_TAKEOUT | Предложение распространяется на заказы еды навынос или самовывозом. |
ACTION_TYPE_DINING | Предложение действует при посещении ресторана. |
ACTION_TYPE_APPOINTMENT | Предложение действует для сервисов бронирования встреч. |
ACTION_TYPE_SHOPPING_IN_STORE | Предложение распространяется на покупки в обычных магазинах. |
OfferMode
Указывает способ или канал, через который пользователь может воспользоваться предложением.
| Название | Описание |
|---|---|
OFFER_MODE_OTHER | Используйте для способов выполнения заказов, не охваченных другими конкретными режимами. |
OFFER_MODE_WALK_IN | Предложение доступно для посещений без предварительного бронирования. |
OFFER_MODE_FREE_RESERVATION | Предложение действует, когда пользователь бронирует номер без предоплаты. |
OFFER_MODE_PAID_RESERVATION | Предложение применяется, когда пользователь делает бронирование, требующее предоплаты. |
OFFER_MODE_ONLINE_ORDER | Предложение действует при заказе на сайте или цифровой платформе. |
OFFER_MODE_GIFT_CARD_PURCHASE | Покупка подарочной карты – основной шаг для получения предложения. |
OfferCategory
Категория предложения. Базовое предложение – это стандартное предложение, доступное всем клиентам, например скидка 10% при покупке на сумму от 100 долларов США. Если базовое предложение ограничено купоном или способом оплаты, в соответствующих полях будут указаны значения. Также у нас есть предложения дополнений, например ADD_ON_PAYMENT_OFFER. Такие предложения можно комбинировать с другими, чтобы получить дополнительные скидки.
| Название | Описание |
|---|---|
OFFER_CATEGORY_UNSPECIFIED | В фидах не следует использовать значение UNSPECIFIED или значение перечисления по умолчанию. |
OFFER_CATEGORY_BASE_OFFER | |
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER | |
OFFER_CATEGORY_ADD_ON_COUPON_OFFER | |
OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER | |
OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER |
FeeUnit
| Название | Описание |
|---|---|
FEE_UNIT_UNSPECIFIED | В фидах не следует использовать значение UNSPECIFIED или значение перечисления по умолчанию. |
FEE_UNIT_PER_GUEST | |
FEE_UNIT_PER_TRANSACTION |
FeeType
| Название | Описание |
|---|---|
FEE_TYPE_UNSPECIFIED | В фидах не следует использовать значение UNSPECIFIED или значение перечисления по умолчанию. |
FEE_TYPE_FIXED | |
FEE_TYPE_VARIABLE |
OfferDiscountType
| Название | Описание |
|---|---|
OFFER_DISCOUNT_TYPE_UNSPECIFIED | |
OFFER_DISCOUNT_TYPE_INSTANT_DISCOUNT | |
OFFER_DISCOUNT_TYPE_CASHBACK | |
OFFER_DISCOUNT_TYPE_REWARD_POINT |
MealType
| Название | Описание |
|---|---|
MEAL_TYPE_UNSPECIFIED | В фидах не следует использовать значение UNSPECIFIED или значение перечисления по умолчанию. |
MEAL_TYPE_BREAKFAST | |
MEAL_TYPE_LUNCH | |
MEAL_TYPE_DINNER |
PaymentInstrumentType
| Название | Описание |
|---|---|
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED | В фидах не следует использовать значение UNSPECIFIED или значение перечисления по умолчанию. |
PAYMENT_INSTRUMENT_CREDIT_CARD | |
PAYMENT_INSTRUMENT_DEBIT_CARD | |
PAYMENT_INSTRUMENT_BANK_ACCOUNT | |
PAYMENT_INSTRUMENT_UPI | |
PAYMENT_INSTRUMENT_ONLINE_WALLET | |
PAYMENT_INSTRUMENT_NETBANKING |
День недели
Представляет день недели.
| Название | Описание |
|---|---|
DAY_OF_WEEK_UNSPECIFIED | День недели не указан. |
MONDAY | Понедельник |
TUESDAY | Tuesday (вторник) |
WEDNESDAY | Wednesday (среда) |
THURSDAY | Thursday (четверг) |
FRIDAY | Friday (пятница) |
SATURDAY | Saturday (суббота) |
SUNDAY | Воскресенье |
ValidityScope
Область действия периода действия, то есть к каким именно действиям он применяется.
| Название | Описание |
|---|---|
VALIDITY_SCOPE_UNSPECIFIED | |
VALIDITY_SCOPE_CLAIM | |
VALIDITY_SCOPE_REDEEM |
OfferTag
| Название | Описание |
|---|---|
OFFER_TAG_UNSPECIFIED | В фидах не следует использовать значение UNSPECIFIED или значение перечисления по умолчанию. |
OFFER_TAG_NEW_YEAR_SPECIAL | |
OFFER_TAG_VALENTINES_SPECIAL |
AvailabilityLevel
Указывает на наличие товара.
| Название | Описание |
|---|---|
AVAILABILITY_LEVEL_UNSPECIFIED | |
AVAILABILITY_LEVEL_LOW | Обозначает, что предложение скоро станет недоступно. Пользователям рекомендуется активировать его, пока он есть в наличии. Позже мы можем добавить значения MEDIUM и HIGH. |
offer_specification
Скидка может быть указана в процентах или в виде фиксированной суммы, вычитаемой из общей стоимости. Пример: 1. Скидка 10% на итоговый счет. 2. Скидка 15 $ на заказ. Продавцы также могут предлагать собственные скидки, например "купи один, получи второй бесплатно", через соответствующие поля спецификации. Обязательно.
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
discount_percent | число | Взаимоисключающие с | Процентная доля счета, на которую распространяется скидка. [0, 100] Если предложение "1+1" или скидка 50% распространяется на весь заказ (например, "шведский стол 1+1", "1+1 на весь счет", "1+1 на комплексное меню"), то значение может быть равно 50. |
discount_value | object(Money) | Взаимоисключающие с | Фиксированное значение скидки. |
other_offer_detail_text | string | Взаимоисключающие значения: | Текст в свободной форме, описывающий скидку. Здесь нужно указать подробности специальных предложений "1+1", например "1+1 напитки", "+1 основное блюдо" или "1+1 выбранные позиции меню". |
стоимость
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
amount | object(Money) | Несовместимо с | |
amount_range | object(MoneyRange) | Несовместимо с |
denomination_type
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
fixed_denominations | object(FixedDenominations) | Несовместимо с | Используется, когда подарочная карта доступна с определенным номиналом. |
custom_range | object(MoneyRange) | Несовместимо с | Используется, когда бренд позволяет пользователям выбирать номинальную стоимость в заданном диапазоне. |
Загрузка фида
Фид специальных предложений необходимо загрузить на SFTP-сервер фида Generic. Следуйте инструкциям в руководстве Как использовать SFTP-сервер для универсального фида и задайте для параметра name значение google.offer в файле дескриптора.
Частота загрузки роликов
Обычно фид загружается раз в день. Частота может быть увеличена или уменьшена в зависимости от того, как часто вы обновляете предложения. Это позволяет поддерживать высокую точность данных. Обратитесь к контактному лицу Google.
Данные появятся в Google через несколько часов.
Категоризация предложений
OFFER_CATEGORY_BASE_OFFER– предложения, которые можно активировать отдельно, не комбинируя с другими. например:- фиксированные скидки на весь счет (например, 20 %);
- Специальные предложения для подписчиков (например, бесплатный десерт).
- Предложения по оплате, если у ресторана нет других базовых предложений.
- Примечание. Предложения, которые предусматривают отмену или снижение комиссии на всей платформе, не должны быть основными.
- Дополнительные предложения. Чтобы воспользоваться ими, нужно сначала активировать основное предложение. К ним относятся:
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER(например, "Дополнительная скидка 10% при оплате определенной кредитной картой").OFFER_CATEGORY_ADD_ON_COUPON_OFFER(например, бесплатный напиток по промокоду)OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER(например, "Дополнительная скидка 10% для подписчиков").OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER(например, бесплатная доставка или сниженная комиссия)
Другие причины:
- Специальные предложения, связанные с отказом от взимания комиссии или ее снижением на уровне платформы, не должны быть основными (
OFFER_CATEGORY_BASE_OFFER). Их следует устанавливать только какOFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFERв дополнение к другому активному основному предложению. - Если у ресторана нет основного предложения, дополнительные предложения не будут показываться.
Если базового предложения нет, то любое предложение, связанное с оплатой, подпиской или купоном, которое можно получить без добавления к другому предложению, должно быть помечено как
OFFER_CATEGORY_BASE_OFFER.- В зависимости от типа необходимо задать данные для
PaymentInstrument,SubscriptionилиCoupon. - Партнеры должны предоставить по две копии каждого предложения, чтобы учесть сценарии, в которых они выступают как в качестве основных, так и дополнительных предложений. Текст дополнительного предложения можно задать для нескольких ресторанов, используя
entity_idsилиadd_on_offer_applicable_to_all_entities.
- В зависимости от типа необходимо задать данные для
- Если у ресторана есть несколько базовых предложений, которые можно суммировать, все они должны быть помечены как
OFFER_CATEGORY_BASE_OFFER. Базовые предложения, которые являются предложениями по оплате, подписке или купонам, должны быть дополнительно отправлены как соответствующий тип дополнительного предложения. ValidityPeriodследует использовать для активации дополнительных предложений в качестве основных только в том случае, если нет активного основного предложения.- Объединение одинаковых предложений по способу оплаты. Если для нескольких способов оплаты действует одинаковая скидка (например, 5% при оплате кредитной картой, дебетовой картой и через интернет-банк), объедините их в один объект
Offer, а не отправляйте отдельные повторяющиеся предложения. Для этого заполните списокpayment_instrument.itemsвсеми подходящими платежными инструментами. Это позволяет не загромождать интерфейс Google и предотвращает возможное снижение рейтинга из-за чрезмерного количества ограничений на дублирование.
Вот несколько примеров ситуаций:
Ресторан предлагает скидку 5% при оплате определенной кредитной картой и бесплатный напиток при использовании промокода.
- Предложение со скидкой 5% при оплате кредитной картой должно быть отправлено в двух экземплярах: один с тегом
OFFER_CATEGORY_BASE_OFFER, а другой – с тегомOFFER_CATEGORY_ADD_ON_PAYMENT_OFFERи информацией оPaymentInstrument. - Предложение бесплатного напитка по промокоду должно быть отправлено как
OFFER_CATEGORY_ADD_ON_COUPON_OFFERс указанием подробной информации вCoupon.
- Предложение со скидкой 5% при оплате кредитной картой должно быть отправлено в двух экземплярах: один с тегом
Ресторан предлагает скидку 10% для посетителей без бронирования и скидку 5% при оплате определенной кредитной картой. Обе скидки можно комбинировать.
- Скидка 10% для посетителей без записи должна быть отмечена как
OFFER_CATEGORY_BASE_OFFER. - Для предложения "Скидка 5% при оплате кредитной картой" должно быть две копии: одна с тегом
OFFER_CATEGORY_BASE_OFFER, а другая – с тегомOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
- Скидка 10% для посетителей без записи должна быть отмечена как
Ресторан предлагает скидку 10% на обед по будням и скидку 5% в любое время при оплате определенной кредитной картой.
- Для предложения со скидкой 10% нужно задать значение
ValidityPeriod, чтобы оно действовало только в будние дни в обеденное время. - Предложение со скидкой 5% при оплате кредитной картой нужно отправить в двух экземплярах.
- Одна копия должна быть помечена как
OFFER_CATEGORY_BASE_OFFERи содержать сведенияPaymentInstrument.ValidityPeriodдолжно быть настроено так, чтобы исключать обеденное время в будние дни, когда действует предложение "Скидка 10% на обед". - Одна копия должна быть помечена тегом
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFERс указанием сведений оPaymentInstrument.
- Одна копия должна быть помечена как
- Все остальные предложения ресторана должны быть помечены как
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
- Для предложения со скидкой 10% нужно задать значение
Разработка и запуск
На протяжении всего процесса интеграции вы можете обращаться к Партнерскому порталу, чтобы получать информацию и отзывы о своей разработке. Процесс разработки будет следовать этому потоку:
- Сначала интеграция будет разработана в тестовой среде. В среде Google Sandbox следует использовать экспорт рабочей версии (или даже непосредственно рабочие данные). Это поможет вам учесть все пограничные случаи, а Google – оценить качество данных и помочь вам с учетом вашей модели данных.
- После того как вы загрузите полные фиды продавцов, услуг и специальных предложений в тестовую среду Google, наша команда проверит их. После того как команда Google одобрит ваш код, вы сможете перенести его в рабочую среду и начать отправлять в нее рабочие данные.
- После того как вы полностью протестируете интеграцию рабочей версии, это сделает команда Google. После завершения тестирования интеграция будет запущена.
Мониторинг
Чтобы обеспечить удобство для пользователей, Google будет проверять, являются ли предложения действительными, правильными и соответствующими нашим правилам до и после запуска. Для этого Google будет использовать как автоматическую проверку, так и проверку специалистами. Результаты проверок будут доступны на панели управления специальными предложениями в Центре действий (только для рабочей среды). Результаты мониторинга могут повлиять на ранжирование предложений.
Убедитесь, что страница загружается полностью вместе с предложениями менее чем за 5 секунд. В противном случае это будет считаться ошибкой и будет отмечено значком Bad link.
Автоматические проверки (поисковые роботы)
Поисковых роботов реализует команда Google по оценке качества. Краулеры – это скрипты, которые автоматизируют работу веб-браузера, чтобы выполнять клики и извлекать информацию о предложениях только для проверки качества.
Количество запросов
Например, если мы решили отправлять 5000 запросов в день, это означает, что 5000 раз в день (равномерно распределенных в течение дня, то есть примерно один раз в 17 секунд) наш поисковый робот выполняет все следующие действия, которые выполнил бы обычный пользователь:
- Перейдите по ссылке партнера из Google Поиска.
- Найдите информацию о предложении.
- Если для предложения требуется бронирование, будет выполнен переход к процессу бронирования, чтобы проверить, доступно ли предложение в указанное время (бронирование не будет выполнено).
Обнаружение веб-скрейперов
Чтобы веб-скрейпер не был заблокирован (что может привести к выводу о недоступности предложений), убедитесь, что ваша система позволяет нашему веб-скрейперу запрашивать вашу страницу в любое время. Чтобы идентифицировать нашего веб-скрейпера:
- Агент пользователя веб-скрейпера будет содержать строку Google-Offers:
- Пример: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
- Вы также можете проверить, действительно ли вызовы поступают от Google, используя обратный DNS-запрос, как рекомендуется в статье Как убедиться, что ваш сайт сканируют именно Googlebot или другие поисковые роботы.
В нашем случае обратное DNS-преобразование выполняется по следующему шаблону:
google-proxy-***-***-***-***.google.com.
Технические особенности
Кеширование
Чтобы снизить нагрузку на сайт партнера, наши поисковые роботы обычно настроены на соблюдение всех стандартных заголовков кеширования HTTP, присутствующих в ответе. Это означает, что для правильно настроенных сайтов мы избегаем повторного получения контента, который редко меняется (например, библиотек JavaScript). Подробную информацию о том, как реализовать кеширование, можно найти в документации по кешированию HTTP.