Партнеры, участвующие в интеграции предложений, должны завершить настройку учетной записи для этапа интеграции на основе продавца или организации (пилотный проект), прежде чем начать. В данном руководстве подробно описаны внедрение, тестирование и запуск интеграции предложений. Перед началом интеграции ознакомьтесь с этим обзором и правилами использования предложений .
Предложения
Интеграция предложений позволяет передавать структурированную информацию о рекламных акциях и скидках продавцов, применяемых к конкретным услугам в определенное время. Предложения состоят из фактического предложения (процентная скидка, долларовая скидка и т. д.), периодов действия (конкретное время, дни недели и т. д.) и условий использования (предложение может быть использовано только для определенных услуг), а также сложных комбинаций ограничений.
Примеры предложений:
- В декабре по средам и четвергам с 12:00 до 17:00 действует скидка 50% на закуски.
- В честь Дня матери с 18:00 до 22:00 действует акция: купите один десерт и получите второй бесплатно.
- Каждое воскресенье с 10:00 до 14:00 скидка 5 долларов на основное блюдо для бранча.
- Скидка 10% при личном посещении, суммируется со скидкой 5% для премиум-подписчиков и 5% при оплате через ваше приложение.
Для включения предложения в интеграцию оно должно соответствовать технической модели данных, а также отвечать нашим требованиям к участию. Обязательно ознакомьтесь с нашими правилами размещения предложений , чтобы убедиться в их соответствии требованиям, а также с инструкциями о том, что делать с предложениями, не соответствующими техническим требованиям.
Предлагает реализацию
Интеграция предложений включает в себя два потока данных, которые будут загружаться ежедневно или с частотой, обеспечивающей высокую точность (то есть, уменьшающей устаревание):
OfferFeed
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
data | массив объектов(Offer) |
Предложение
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
offer_id | нить | Необходимый | Уникальный идентификатор предложения. Обязательно. |
entity_ids | массив строк | Список продавцов, участвующих в этой акции. | |
add_on_offer_applicable_to_all_entities | логический | Если это правда, то данное предложение распространяется на все организации, входящие в состав агрегатора. Действует только для дополнительных предложений. | |
offer_source | перечисление(OfferSource) | Необходимый | Предложение может быть предоставлено агрегатором, отдельным продавцом или даже третьей стороной в качестве дополнительной услуги. Обязательно. |
action_type | перечисление(ActionType) | Необходимый | Сервис, предоставляющий предложение. Идентификатор предложения (offer_id) может принадлежать только одному типу действия (action_type). Если предложение может использоваться несколькими типами сервисов, то для каждого типа сервиса будут созданы дубликаты предложений с уникальными идентификаторами. Обязательно. |
offer_modes | массив перечислений(OfferMode) | Необходимый | Способы получения предложения: лично, по предварительной записи, онлайн и т.д. Обязательно. |
offer_category | перечисление(OfferCategory) | Необходимый | Категория предложения. Обязательно. |
source_assigned_priority | число | Неотрицательное целое число ([1-100], где 1 обозначает наивысший приоритет), указывающее уровень приоритета предложения, присвоенный источником. Если для одного и того же продавца доступно несколько предложений, это будет сигналом для ранжирования предложений. 0 означает, что приоритет не установлен. | |
offer_details | объект(OfferDetails) | Необходимый | Подробности предложения, такие как скидка, стоимость бронирования и т. д., обязательны. |
offer_restrictions | объект(OfferRestrictions) | Необходимый | Описывает ограничения предложения, например, требуется ли подписка/платежный инструмент, можно ли комбинировать это предложение с другими предложениями (и какие именно) и т. д. Обязательно. |
coupon | объект(Coupon) | Подробная информация о купоне. Обязательно для категории предложения: OFFER_CATEGORY_ADD_ON_COUPON_OFFER. | |
payment_instrument | объект(PaymentInstrument) | Детали платежного инструмента. Обязательно для категории предложения: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER. | |
subscription | объект(Subscription) | Детали подписки. Обязательно для параметра offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER. | |
terms | объект(Terms) | Необходимый | Условия предложения. Обязательно. |
validity_periods | массив объектов(ValidityPeriod) | Необходимый | Срок действия предложения. Указывается период действия предложения, включая время начала и окончания, дни недели и т. д. Обязательно. |
offer_url | нить | URL страницы предложения продавца. Обязательно для параметра offer_category: OFFER_CATEGORY_BASE_OFFER. | |
image_url | нить | URL-адрес изображения предложения продавца. | |
tags | массив перечислений(OfferTag) | Специальные теги, связанные с предложением. Они используются для обозначения специальных предложений, таких как «Праздничное», «Самое популярное», «Наиболее часто бронируемое» и т. д. |
Подробности предложения
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
offer_display_text | нить | Необходимый | Текст предложения, который поставщик предложения хочет отобразить клиентам на странице результатов поиска. Обязательно. |
| один из(offer_specification) | Необходимый | В этом объекте oneOf можно задать значение только для одного из полей. |
max_discount_value | объект(Money) | Максимальная скидка, которую можно получить. Например, 10% скидка до 100 долларов. | |
min_spend_value | объект(Money) | Минимальная сумма покупки для получения скидки. Например, скидка 10% предоставляется при общей сумме покупки в 100 долларов и более. | |
booking_cost | объект(Money) | Стоимость бронирования по этому предложению. Например, скидка в 100 долларов на окончательный счет при бронировании столика за 15 долларов. | |
booking_cost_unit | перечисление(FeeUnit) | Единица измерения стоимости бронирования. Например, за человека, за транзакцию. | |
convenience_fee | объект(Fee) | ||
booking_cost_adjustable | логический | Возможность корректировки стоимости бронирования, то есть вычитание стоимости бронирования из окончательного счета. Например: скидка 30% на ужин при бронировании. Стоимость бронирования 15 долларов, и скидка будет применена к окончательному счету. Таким образом, окончательный счет: Общая сумма расходов - 30% - 15 долларов | |
additional_fees | массив объектов(AdditionalFee) | Дополнительные сборы, взимаемые с пользователя. Примеры: плата за удобство, обработку и т. д. |
Деньги
Представляет собой сумму денег с указанием типа валюты.
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
currency_code | нить | Трехбуквенный код валюты, определенный в стандарте ISO 4217. | |
units | нить | Целые единицы суммы. Например, если currencyCode — "USD" , то 1 единица — это один доллар США. | |
nanos | число | Количество нано (10^-9) единиц величины. Значение должно находиться в диапазоне от -999 999 999 до +999 999 999 включительно. Если units положительно, то nanos должно быть положительным или равным нулю. Если units равно нулю, nanos может быть положительным, равным нулю или отрицательным. Если units отрицательно, то nanos должно быть отрицательным или равным нулю. Например, $-1,75 представляется как units = -1 и nanos = -750 000 000. |
Платеж
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
unit | перечисление(FeeUnit) | ||
type | перечисление(FeeType) | ||
| один из(cost) | В этом объекте oneOf можно задать значение только для одного из полей. |
MoneyRange
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
min_amount | объект(Money) | ||
max_amount | объект(Money) |
Дополнительный сбор
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
name | нить | Необходимый | Название дополнительной платы. Примеры: плата за удобство, плата за обработку и т. д. Обязательно. |
fee | объект(Fee) |
Ограничения предложения
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
combinable_with_other_offers | логический | Можно ли комбинировать это предложение с другими предложениями. Если значение равно true, партнеры могут указать, с какими предложениями это предложение можно комбинировать. Если заданы параметры combinable_offer_categories и combinable_offer_ids, то любое предложение, соответствующее одному из вышеуказанных условий, будет допускать комбинирование. | |
combinable_offer_categories | массив перечислений(OfferCategory) | Список типов предложений, с которыми это предложение может быть объединено. Например, это предложение может быть объединено с другими купонами. Если combinable_with_other_offers имеет значение true и это поле не задано, все типы предложений будут объединены. | |
combinable_offer_ids | массив строк | Список offer_ids, с которыми можно комбинировать данное предложение. Некоторые предложения могут быть объединены только с определенными другими offer_ids (их можно считать родительскими предложениями). Если combinable_with_other_offers имеет значение true и это поле не задано, все offer_ids будут совместимы. | |
inclusions | массив объектов(OfferCondition) | Список условий, которые должны быть соблюдены для того, чтобы предложение было действительным (например, безалкогольные напитки, еда). | |
exclusions | массив объектов(OfferCondition) | Список условий, при которых предложение становится недействительным (например, шведский стол, комплексные обеды и коктейли). | |
min_guest | число | Минимальное количество человек, необходимое для получения предложения. | |
food_offer_restrictions | объект(FoodOfferRestrictions) | Ограничения, касающиеся предложений продуктов питания. |
Условия предложения
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
description | нить |
Ограничения на предложения продуктов питания
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
meal_types | массив перечислений(MealType) | Укажите, к каким типам блюд может применяться предложение, например, обед или ужин. Если этот параметр не указан, предложение может применяться ко всем типам блюд. | |
restricted_to_certain_courses | логический | Предложение действительно только для определенных курсов. |
Купон
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
text | нить | Текст купона, который поставщик предложения хочет отобразить пользователям. | |
code | нить | Необходимый | Для активации предложения необходим промокод. Обязательно. |
Платежный инструмент
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
items | массив объектов(PaymentInstrumentItem) | Необходимый | Список платежных инструментов, которые можно использовать для получения предложения. Обязательно. |
provider_name | нить | Необходимый | Название поставщика платежного инструмента. Это может быть банковский партнер, название банка и т. д. Например: American Express, HDFC, ICICI. Обязательно. |
Платежный инструмент
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
type | перечисление(PaymentInstrumentType) | Необходимый | Тип платежного инструмента. Обязательно. |
name | нить | Необходимый | Название платежного инструмента, например, название кредитной карты. Например: HDFC Infinia, American Express Platinum. Обязательно. |
Подписка
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
name | нить | Необходимый | Название подписки. Обязательно. |
subscription_auto_added | логический | Будет ли подписка автоматически добавлена при использовании пользователем этого предложения? | |
cost | объект(Money) | Необходимый | Стоимость подписки. Обязательно. |
subscription_duration | объект(Duration) | Необходимый | Укажите срок действия подписки по указанной стоимости подписки. Обязательно к заполнению. |
terms_and_conditions_url | нить | URL-адрес условий и положений партнера, относящихся к данной подписке. |
Продолжительность
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
seconds | нить | Секунды, выраженные знаком, представляют собой промежуток времени. Должны находиться в диапазоне от -315 576 000 000 до +315 576 000 000 включительно. Примечание: эти границы вычисляются по формуле: 60 сек/мин * 60 мин/час * 24 часа/сутки * 365,25 дней/год * 10000 лет | |
nanos | число | Доли секунды со знаком, отображаемые с наносекундным разрешением. Длительности менее одной секунды обозначаются полем 0 seconds и положительным или отрицательным значением поля nanos . Для длительностей в одну секунду и более ненулевое значение поля nanos должно иметь тот же знак, что и поле seconds . Должен находиться в диапазоне от -999 999 999 до +999 999 999 включительно. |
Условия
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
url | нить | URL-адрес условий и положений партнера. | |
restricted_to_certain_users | логический | Доступно ли данное предложение только определенным пользователям? | |
terms_and_conditions | нить | Основной текст условий и положений предоставлен партнером. | |
additional_terms_and_conditions | массив строк | Условия и положения дополняют основные условия и положения партнера. |
Срок действия
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
valid_period | объект(ValidityRange) | Укажите время начала и окончания действия предложения. Это время должно соответствовать разным дням, то есть время начала должно быть 00:00 (начало дня), а время окончания — 00:00 (исключительно) в день окончания срока действия предложения. | |
time_of_day | массив объектов(TimeOfDayWindow) | Указывает допустимый временной интервал в конкретный день и дни, в которые действует предложение. Например: Понедельник: с 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. |
Диапазон допустимости
Диапазон временных меток (закрытый-открытый).
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
valid_from_time | объект(Timestamp) | Необходимый | Начальное время диапазона (включительно). Обязательно. |
valid_through_time | объект(Timestamp) | Время окончания диапазона (исключая указанное время). Если не задано, это означает, что этот период никогда не заканчивается. Необязательно. |
Отметка времени
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
seconds | нить | Обозначает количество секунд UTC-времени с начала эпохи Unix 1970-01-01T00:00:00Z. Должно находиться в диапазоне от -62135596800 до 253402300799 включительно (что соответствует периоду с 0001-01-01T00:00:00Z по 9999-12-31T23:59:59Z). | |
nanos | число | Неотрицательные доли секунды с разрешением в наносекунды. Это поле представляет собой наносекундную часть длительности, а не альтернативу секундам. Отрицательные значения секунд с дробными долями должны по-прежнему иметь неотрицательные значения в наносекундах, отсчитываемые вперед во времени. Должны быть в диапазоне от 0 до 999 999 999 включительно. |
TimeOfDayWindow
Объект TimeWindow — это составная сущность, описывающая список временных интервалов, в течение которых пользователь может разместить или выполнить свой заказ.
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
time_windows | объект(TimeOfDayRange) | Необходимый | Временной интервал, в течение которого может быть размещен/выполнен заказ. Обязательно. |
day_of_week | массив перечислений(DayOfWeek) | Список дней недели, к которым применяются окна. Если список не указан, это означает, что окна применяются ко всем дням недели. Необязательно. |
Диапазон времени суток
Закрытый/открытый временной диапазон.
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
open_time | объект(TimeOfDay) | Время, указывающее на начало дня в рассматриваемом диапазоне (включительно). Если не указано, означает 00:00:00. Необязательно. | |
close_time | объект(TimeOfDay) | Время, указывающее на время окончания стрельбища (исключая указанное время). Если не задано, означает 23:59:59. Необязательно. |
Время суток
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
hours | число | Часы суток в 24-часовом формате. Значение должно быть больше или равно 0 и, как правило, меньше или равно 23. API может разрешить значение "24:00:00" для таких сценариев, как время закрытия предприятия. | |
minutes | число | Минуты часа. Должно быть больше или равно 0 и меньше или равно 59. | |
seconds | число | Секунды минуты. Должно быть больше или равно 0 и, как правило, меньше или равно 59. API может допускать значение 60, если он поддерживает високосные секунды. | |
nanos | число | Доли секунд, в наносекундах. Должно быть больше или равно 0 и меньше или равно 999 999 999. |
ValidTimeException
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
exceptional_period | объект(ValidityRange) | Укажите начальную и конечную временные метки, в течение которых предложение недействительно. Эти временные метки должны соответствовать разным дням, то есть начальное время должно быть 00:00 (начало дня), а конечное время должно быть 00:00 (исключительно) в день окончания периода действия исключения. |
Дата
Представляет собой целую или частичную календарную дату, например, день рождения. Время суток и часовой пояс либо указаны отдельно, либо не имеют значения. Дата указывается относительно григорианского календаря. Это может представлять одно из следующих значений: * Полная дата с ненулевыми значениями года, месяца и дня. * Месяц и день с нулевым годом (например, годовщина). * Год сам по себе с нулевым месяцем и нулевым днем. * Год и месяц с нулевым днем (например, срок действия кредитной карты). Связанные типы: * [google.type.TimeOfDay][] * [google.type.DateTime][] * [google.protobuf.Timestamp][]
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
year | число | Год даты. Должен быть от 1 до 9999, или 0, чтобы указать дату без года. | |
month | число | Месяц года. Должен быть от 1 до 12, или 0, чтобы указать год без месяца и дня. | |
day | число | День месяца. Должен быть от 1 до 31 и соответствовать году и месяцу, или 0, чтобы указать только год или год и месяц, где день не имеет значения. |
OfferSource
| Имя | Описание |
|---|---|
OFFER_SOURCE_UNSPECIFIED | |
OFFER_SOURCE_AGGREGATOR |
Тип действия
| Имя | Описание |
|---|---|
ACTION_TYPE_UNSPECIFIED | |
ACTION_TYPE_DINING |
OfferMode
| Имя | Описание |
|---|---|
OFFER_MODE_OTHER | |
OFFER_MODE_WALK_IN | |
OFFER_MODE_FREE_RESERVATION | |
OFFER_MODE_PAID_RESERVATION | |
OFFER_MODE_ONLINE_ORDER |
Категория предложения
Категория предложения. Базовое предложение — это стандартное предложение, доступное всем клиентам, например, скидка 10% при покупке на сумму свыше 100 долларов. Базовое предложение, ограниченное купоном или способом оплаты, будет иметь соответствующие поля. У нас также есть дополнительные предложения, такие как ADD_ON_PAYMENT_OFFER. Такие предложения можно добавлять к другим предложениям для получения дополнительных скидок.
| Имя | Описание |
|---|---|
OFFER_CATEGORY_UNSPECIFIED | |
OFFER_CATEGORY_BASE_OFFER | |
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER | |
OFFER_CATEGORY_ADD_ON_COUPON_OFFER | |
OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER |
FeeUnit
| Имя | Описание |
|---|---|
FEE_UNIT_UNSPECIFIED | |
FEE_UNIT_PER_GUEST | |
FEE_UNIT_PER_TRANSACTION |
FeeType
| Имя | Описание |
|---|---|
FEE_TYPE_UNSPECIFIED | |
FEE_TYPE_FIXED | |
FEE_TYPE_VARIABLE |
Тип питания
| Имя | Описание |
|---|---|
MEAL_TYPE_UNSPECIFIED | |
MEAL_TYPE_BREAKFAST | |
MEAL_TYPE_LUNCH | |
MEAL_TYPE_DINNER |
Тип платежного инструмента
| Имя | Описание |
|---|---|
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED | |
PAYMENT_INSTRUMENT_CREDIT_CARD | |
PAYMENT_INSTRUMENT_DEBIT_CARD | |
PAYMENT_INSTRUMENT_BANK_ACCOUNT | |
PAYMENT_INSTRUMENT_UPI | |
PAYMENT_INSTRUMENT_ONLINE_WALLET |
День недели
Обозначает день недели.
| Имя | Описание |
|---|---|
DAY_OF_WEEK_UNSPECIFIED | День недели не указан. |
MONDAY | Понедельник |
TUESDAY | Вторник |
WEDNESDAY | Среда |
THURSDAY | Четверг |
FRIDAY | Пятница |
SATURDAY | Суббота |
SUNDAY | Воскресенье |
OfferTag
| Имя | Описание |
|---|---|
OFFER_TAG_NEW_YEAR_SPECIAL |
спецификация предложения
Скидка может быть в процентах или представлять собой фиксированную сумму, вычитаемую из общей стоимости. Например: 1. Скидка 10% от окончательной суммы. 2. Скидка 15 долларов на заказ. Продавцы также могут предлагать индивидуальные скидки, такие как «купи один — получи второй бесплатно», используя соответствующие поля для указания условий. Обязательно.
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
discount_percent | число | Взаимоисключающий с | Процент от суммы счета, на который распространяется скидка. [0, 100] Для предложений «1+1» или «50% скидка», которые распространяются на весь обед (например, «1+1 шведский стол», «1+1 на весь счет», «1+1 на комплексное меню»), это значение можно установить равным 50. |
discount_value | объект(Money) | Взаимоисключающий с | Фиксированная сумма скидки. |
other_offer_detail_text | нить | Взаимоисключающие свойства с | Текст в свободной форме для описания скидки. Для конкретных предложений «1+1» (например, 1+1 напиток, +1 основное блюдо, 1+1 выбранное блюдо из меню) эти подробности следует указать здесь. |
расходы
| Название поля | Тип | Требование | Описание |
|---|---|---|---|
amount | объект(Money) | Взаимоисключающий с | |
amount_range | объект(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_BASE_OFFER.- В зависимости от типа, необходимо указать соответствующие данные для
PaymentInstrument,SubscriptionилиCoupon. - Партнеры должны предоставить по 2 копии каждого из этих предложений, чтобы охватить сценарии, в которых они функционируют как базовые предложения и дополнительные предложения. Копию дополнительного предложения можно затем установить для нескольких ресторанов, используя либо
entity_ids, либоadd_on_offer_applicable_to_all_entities.
- В зависимости от типа, необходимо указать соответствующие данные для
- Если у ресторана есть несколько базовых предложений, которые можно суммировать, все базовые предложения следует пометить тегом
OFFER_CATEGORY_BASE_OFFER, а базовые предложения, относящиеся к оплате, подписке или купонам, следует отправлять дополнительно в качестве соответствующего типа дополнительного предложения. -
ValidityPeriodследует использовать для активации дополнительных предложений в качестве базовых предложений только в том случае, если активное базовое предложение отсутствует.
Примеры сценариев:
Ресторан предлагает скидку 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% по кредитной карте должно иметь 2 копии, одна из которых должна быть помечена как
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 будет проверять достоверность, корректность и соответствие предлагаемых товаров и услуг критериям нашей политики до и после запуска. Для этого Google будет использовать сочетание ручной и автоматизированной проверки. Результаты этих проверок будут доступны на панели управления предложениями в Центре действий (только в рабочей версии). Результаты этого мониторинга могут быть использованы для влияния на ранжирование предложений.
Убедитесь, что страница загружается со всеми предложениями менее чем за 5 секунд , иначе это будет расценено как ошибка и помечено как Bad link .
Автоматизированные проверки (краулеры)
Команда Google по контролю качества внедряет веб-краулеры. Краулеры — это скрипты, которые автоматизируют веб-браузер для выполнения определенных кликов и извлечения информации о предложениях исключительно в целях тестирования качества .
Количество запросов
Например, если мы решим отправлять 5000 проверок в день, это означает, что 5000 раз в день ( равномерно распределенных в течение дня, то есть примерно раз в 17 секунд ) наш веб-краулер выполняет все следующие действия, которые обычно выполняет обычный пользователь:
- Начните с поиска Google и нажмите на ссылку партнера.
- Найдите информацию о предложении.
- Если предложение требует бронирования, процесс бронирования продолжится с подтверждения доступности предложения в указанное время (бронирование не будет оформлено).
обнаружение веб-скрейперов
Чтобы гарантировать, что веб-скрейпер не будет заблокирован (что может привести к выводу о недоступности предложений), убедитесь, что ваша система разрешает нашему веб-скрейперу постоянно запрашивать вашу страницу. Для идентификации нашего веб-скрейпера:
- В адресе User-Agent веб-скрейпера будет содержаться строка " 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 и других поисковых роботов Google» . В нашем конкретном случае разрешение обратного DNS соответствует следующему шаблону:
google-proxy-***-***-***-***.google.com.
Техническое поведение
Кэширование
В целях снижения нагрузки на веб-сайт партнера наши поисковые роботы, как правило, настроены на учет всех стандартных заголовков HTTP-кэширования, присутствующих в ответе. Это означает, что для правильно настроенных веб-сайтов мы избегаем повторной загрузки контента, который редко меняется (например, библиотек JavaScript). Для получения более подробной информации о реализации кэширования ознакомьтесь с этой документацией по HTTP-кэшированию .