Предложения
Интеграция предложений позволяет передавать структурированную информацию о промоакциях и скидках, которые применяются к определенным услугам в определенное время. Предложения состоят из скидки (в процентах или денежном выражении), периода действия (определенное время, дни недели и т. д.) и условий использования (предложение можно использовать только в определенных сервисах), а также сложных комбинаций ограничений.
Примеры предложений:
- Скидка на салаты по средам и четвергам в декабре с 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 может относиться только к одному типу действия. Если предложение можно использовать для нескольких типов услуг, для каждого из них нужно создать отдельное предложение с уникальным идентификатором. Обязательно. |
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) | Обязательно | Можно задать только одно из полей в этом разделе. |
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) | Можно задать только одно из полей в этом разделе. |
MoneyRange
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
min_amount | object(Money) | ||
max_amount | object(Money) |
AdditionalFee
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
name | string | Обязательно | Название дополнительного сбора. Примеры: сервисный сбор, комиссия за обработку заказа и т. д. Обязательный атрибут. |
fee | object(Fee) |
GiftCardInfo
| Название поля | Тип | Требования | Описание |
|---|---|---|---|
| oneOf(denomination_type) | Можно задать только одно из полей в этом разделе. |
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 | число | Дробные значения секунд со знаком и разрешением до наносекунд. Продолжительность менее одной секунды указывается с помощью поля 0 seconds и положительного или отрицательного поля 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 включительно (что соответствует периоду с 00:00:00 1 января 0001 г. до 23:59:59 31 декабря 9999 г.). | |
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.
Данные появятся в 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% нужно задать значение
Разработка и запуск
На протяжении всего процесса интеграции вы можете обращаться к Партнерскому порталу, чтобы получать информацию и отзывы о своей разработке. Процесс разработки будет выглядеть следующим образом:
- Интеграция будет сначала разработана в среде Sandbox. В тестовой среде Google следует использовать экспорт рабочих данных (или даже сами рабочие данные). Это поможет вам учесть все возможные ситуации, а Google – оценить качество данных и лучше помогать вам на основе вашей модели данных.
- После того как вы начнете регулярно загружать полные фиды товаров, услуг и предложений в песочницу 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.