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

Предложения

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

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

  • Скидка на салаты по средам и четвергам в декабре с 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 может относиться только к одному типу действия. Если предложение можно использовать для нескольких типов услуг, для каждого из них нужно создать отдельное предложение с уникальным идентификатором. Обязательно.
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)

Обязательно

Можно задать только одно из полей в этом разделе.
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)

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

MoneyRange

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

max_amountobject
(Money)

AdditionalFee

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

Обязательно

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

Дробные значения секунд со знаком и разрешением до наносекунд. Продолжительность менее одной секунды указывается с помощью поля 0 seconds и положительного или отрицательного поля 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 включительно (что соответствует периоду с 00:00:00 1 января 0001 г. до 23:59:59 31 декабря 9999 г.).
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.

Данные появятся в 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.

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

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

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