Интеграция фида предложений

Предложения

Интеграция специальных предложений позволяет передавать структурированную информацию о промоакциях и скидках, которые действуют на определенные услуги в определенное время. Предложения состоят из самого предложения (процент скидки, сумма скидки и т. д.), сроков действия (определенное время, дни недели и т. д.) и применимых вариантов использования (предложение можно использовать только для определенных услуг), а также сложных комбинаций ограничений.

Примеры предложений:

  • Скидка на салаты по средам и четвергам в декабре с 12:00 до 17:00.
  • Второй десерт бесплатно при заказе ужина в День матери с 18:00 до 22:00.
  • Скидка 200 рублей на поздний завтрак каждое воскресенье с 10:00 до 14:00.
  • Скидка 10% для посетителей без записи, которая суммируется со скидкой 5% для подписчиков Premium и скидкой 5% при оплате через приложение.

Чтобы предложение было включено в интеграцию, оно должно соответствовать технической модели данных и требованиям к участию. Ознакомьтесь с правилами в отношении предложений, чтобы убедиться, что ваша интеграция соответствует требованиям. В них также рассказывается, что делать с предложениями, которые не соответствуют техническим требованиям.

Реализация предложений

Интеграция специальных предложений состоит из двух фидов, которые будут загружаться ежедневно или с частотой, обеспечивающей высокую точность (то есть снижающей устаревание):

OfferFeed

Название поляТипТребованияОписание
dataМассив объектов
(Offer)

Предложение

Название поляТипТребованияОписание
offer_idstring

Обязательно

Уникальный идентификатор предложения. Обязательно.
entity_idsМассив строк

Список продавцов, участвующих в этой акции.
add_on_offer_applicable_to_all_entitiesЛогическое значение

Если указано значение true, предложение применяется ко всем объектам агрегатора. Применимо только к дополнительным предложениям.
offer_sourceenum
(OfferSource)

Обязательно

Предложение может быть предоставлено агрегатором, отдельным продавцом или даже третьей стороной в качестве дополнения. Обязательно.
action_typeenum
(ActionType)

Обязательно

Сервис, который предоставляет предложение. Одному идентификатору предложения (offer_id) может соответствовать только один тип действия (action_type). Если предложение можно использовать для нескольких типов услуг, для каждого из них нужно создать отдельное предложение с уникальным идентификатором. Обязательно.
offer_modesМассив перечислений
(OfferMode)

Обязательно

Способы воспользоваться предложением: посещение сервисного центра, бронирование, онлайн и т. д. Обязательный атрибут.
offer_categoryenum
(OfferCategory)

Обязательно

Категория предложения. Обязательно.
source_assigned_priorityчисло

Неотрицательное целое число от 1 до 100, где 1 – наивысший приоритет. Указывает уровень приоритета предложения, назначенный источником. Если у одного продавца есть несколько специальных предложений, это будет сигналом для ранжирования. Если приоритет не задан, используется значение 0.
offer_detailsobject
(OfferDetails)

Обязательно

Подробные сведения о предложении, например скидка, стоимость бронирования и т. д. Обязательный параметр.
offer_restrictionsobject
(OfferRestrictions)

Обязательно

Описывает ограничения, связанные с предложением, например требуется ли подписка или способ оплаты, можно ли комбинировать это предложение с другими (и с какими именно) и т. д. Обязательное поле.
couponobject
(Coupon)

Сведения о купоне. Обязательный атрибут для категории OFFER_CATEGORY_ADD_ON_COUPON_OFFER.
payment_instrumentobject
(PaymentInstrument)

Сведения о способе оплаты. Обязательно для offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
subscriptionobject
(Subscription)

Сведения о подписке. Обязательный параметр для offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER.
termsobject
(Terms)

Обязательно

Условия использования предложения. Обязательно.
validity_periodsМассив объектов
(ValidityPeriod)

Обязательно

Срок действия предложения. Описывает период времени, в течение которого действует предложение, включая время начала и окончания, дни недели и т. д. Обязательное свойство.
offer_urlstring

URL страницы с предложением продавца. Обязательный атрибут для offer_category со значением OFFER_CATEGORY_BASE_OFFER.
tagsМассив перечислений
(OfferTag)

Специальные теги, связанные с предложением. Используется для обозначения специальных предложений, например "Праздничное", "Лучшее", "Самое популярное" и т. д.
brand_idstring

Бренд, связанный с предложением. Если не задано, используется бренд по умолчанию.
availability_levelenum
(AvailabilityLevel)

Уровень доступности предложения.

OfferDetails

Название поляТипТребованияОписание
offer_display_textstring

Обязательно

Текст предложения, который поставщик хочет показывать клиентам на странице результатов поиска. Обратите внимание, что это может быть не совсем то, что показывается пользователям, и мы можем использовать другие метаданные, чтобы переписать или перефразировать его. Обязательно.
oneOf
(offer_specification)

Обязательно

Можно задать только одно из полей в этом oneOf.
max_discount_valueobject
(Money)

Максимальная скидка, которую можно получить. Пример: скидка 10% на сумму до 100 долларов США.
min_spend_valueobject
(Money)

Минимальная сумма расходов, необходимая для получения скидки. Например, скидка 10% при покупке на сумму от 100 долларов США.
booking_costobject
(Money)

Стоимость бронирования по этому предложению. Например, скидка 100 долларов США на итоговый счет при бронировании столика за 15 долларов США.
booking_cost_unitenum
(FeeUnit)

Единица стоимости бронирования. Например, на человека или на транзакцию.
convenience_feeobject
(Fee)

booking_cost_adjustableЛогическое значение

Можно ли скорректировать стоимость бронирования, то есть вычесть ее из окончательного счета. Пример: скидка 30% на ужин при бронировании. Стоимость бронирования – 15 долларов США. Эта сумма будет включена в итоговый счет. Итоговый счет: общие расходы – 30 % – 15 долларов США.
additional_feesМассив объектов
(AdditionalFee)

Дополнительные комиссии, взимаемые с пользователя. Примеры: комиссия за удобство, обработку, доставку, упаковку, обслуживание и т. д.
offer_discount_typeenum
(OfferDiscountType)

Тип скидки.
gift_card_infoobject
(GiftCardInfo)

Сведения о специальных предложениях на подарочные карты.

Деньги

Представляет сумму денег с указанием типа валюты.

Название поляТипТребованияОписание
currency_codestring

Трехбуквенный код валюты, определенный в стандарте 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.

Плата

Название поляТипТребованияОписание
unitenum
(FeeUnit)

typeenum
(FeeType)

oneOf
(cost)

Можно задать только одно из полей в этом oneOf.

MoneyRange

Название поляТипТребованияОписание
min_amountobject
(Money)

max_amountobject
(Money)

AdditionalFee

Название поляТипТребованияОписание
namestring

Обязательно

Название дополнительной комиссии. Примеры: сервисный сбор, комиссия за обработку и т. д. Обязательный атрибут.
feeobject
(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_restrictionsobject
(FoodOfferRestrictions)

Ограничения, относящиеся к предложениям продуктов питания.
max_redemption_countчисло

Ограничения на количество использований предложения. Значение 0 означает, что ограничений нет. Например, если указать 3, то пользователь сможет воспользоваться предложением три раза.
max_total_discount_valueobject
(Money)

Максимальная скидка, которую можно получить за несколько транзакций в рамках этого предложения.
special_conditionsмассив строк;

Специальные условия предложения, которые должны быть показаны пользователю. Примеры: "Действительно только для оплаты в [область]", "Недействительно для онлайн-платежей", "Подарочный сертификат можно использовать во время распродажи".

OfferCondition

Название поляТипТребованияОписание
descriptionstring

FoodOfferRestrictions

Название поляТипТребованияОписание
meal_typesМассив перечислений
(MealType)

Типы блюд, к которым можно применить предложение, например обед или ужин. Если не задано, предложение можно применить ко всем типам блюд.
restricted_to_certain_coursesЛогическое значение

Можно ли применить предложение только к определенным курсам.

Купон

Название поляТипТребованияОписание
textstring

Текст купона, который поставщик предложения хочет показывать пользователям.
codestring

Обязательно

Для участия в акции требуется промокод. Обязательно.

PaymentInstrument

Название поляТипТребованияОписание
itemsМассив объектов
(PaymentInstrumentItem)

Обязательно

Список способов оплаты, которые можно использовать для получения бонуса. Обязательно.
provider_namestring

Название поставщика платежного инструмента. Это может быть банк-партнер, название банка и т. д. Например: American Express, HDFC, ICICI.

PaymentInstrumentItem

Название поляТипТребованияОписание
typeenum
(PaymentInstrumentType)

Обязательно

Тип способа оплаты. Обязательно.
namestring

Обязательно

Название способа оплаты, например кредитной карты. Примеры: HDFC Infinia, American Express Platinum. Обязательно.

Подписка

Название поляТипТребованияОписание
namestring

Обязательно

Название подписки. Обязательно.
subscription_auto_addedЛогическое значение

Добавляется ли подписка автоматически, когда пользователь принимает это предложение.
costobject
(Money)

Обязательно

Стоимость подписки. Обязательно.
subscription_durationobject
(Duration)

Обязательно

Срок действия подписки по указанной абонентской плате. Обязательно.
terms_and_conditions_urlstring

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 включительно.

Условия использования

Название поляТипТребованияОписание
urlstring

URL страницы с условиями использования партнера.
restricted_to_certain_usersЛогическое значение

Ограничено ли предложение определенными пользователями.
terms_and_conditionsstring

Основной текст условий использования, предоставленный партнером.
additional_terms_and_conditionsмассив строк;

Условия использования, дополняющие основные условия партнера.

ValidityPeriod

Название поляТипТребованияОписание
valid_periodobject
(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_scopeenum
(ValidityScope)

Указывает область действия периода действия.
validity_duration_in_daysчисло

Срок действия купона или ваучера в днях с момента покупки.

ValidityRange

Диапазон временных меток с закрытым началом и открытым концом.

Название поляТипТребованияОписание
valid_from_timeobject
(Timestamp)

Обязательно

Время начала диапазона (включительно). Обязательно.
valid_through_timeobject
(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_windowsobject
(TimeOfDayRange)

Обязательно

Временной интервал, в течение которого заказ может быть размещен или выполнен. Обязательно.
day_of_weekмассив перечисляемых значений
(DayOfWeek)

Список дней недели, к которым применяются окна. Если не задано ни одно значение, правило применяется ко всем дням недели. Необязательное поле.
day_of_monthМассив объектов
(DayOfMonthRange)

Дни месяца, в которые применяются окна. Если не задано ни одно значение, правило применяется ко всем дням месяца. Необязательное поле.

TimeOfDayRange

Закрытый временной диапазон.

Название поляТипТребованияОписание
open_timeobject
(TimeOfDay)

Время, указывающее начало дня диапазона (включительно). Если значение не задано, используется 00:00:00. Необязательное поле.
close_timeobject
(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_periodobject
(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Понедельник
TUESDAYTuesday (вторник)
WEDNESDAYWednesday (среда)
THURSDAYThursday (четверг)
FRIDAYFriday (пятница)
SATURDAYSaturday (суббота)
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число

Взаимоисключающие с discount_value, other_offer_detail_text

Процентная доля счета, на которую распространяется скидка. [0, 100] Если предложение "1+1" или скидка 50% распространяется на весь заказ (например, "шведский стол 1+1", "1+1 на весь счет", "1+1 на комплексное меню"), то значение может быть равно 50.
discount_valueobject
(Money)

Взаимоисключающие с discount_percent, other_offer_detail_text

Фиксированное значение скидки.
other_offer_detail_textstring

Взаимоисключающие значения: discount_percent, discount_value

Текст в свободной форме, описывающий скидку. Здесь нужно указать подробности специальных предложений "1+1", например "1+1 напитки", "+1 основное блюдо" или "1+1 выбранные позиции меню".

стоимость

Название поляТипТребованияОписание
amountobject
(Money)

Несовместимо с amount_range

amount_rangeobject
(MoneyRange)

Несовместимо с amount

denomination_type

Название поляТипТребованияОписание
fixed_denominationsobject
(FixedDenominations)

Несовместимо с custom_range

Используется, когда подарочная карта доступна с определенным номиналом.
custom_rangeobject
(MoneyRange)

Несовместимо с fixed_denominations

Используется, когда бренд позволяет пользователям выбирать номинальную стоимость в заданном диапазоне.

Загрузка фида

Фид специальных предложений необходимо загрузить на 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.
  • Ресторан предлагает скидку 10% для посетителей без бронирования и скидку 5% при оплате определенной кредитной картой. Обе скидки можно комбинировать.

    • Скидка 10% для посетителей без записи должна быть отмечена как OFFER_CATEGORY_BASE_OFFER.
    • Для предложения "Скидка 5% при оплате кредитной картой" должно быть две копии: одна с тегом OFFER_CATEGORY_BASE_OFFER, а другая – с тегом OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
  • Ресторан предлагает скидку 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.

Разработка и запуск

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

  • Сначала интеграция будет разработана в тестовой среде. В среде 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.