Partnerzy korzystający z integracji ofert muszą najpierw skonfigurować konto w ramach integracji opartej na sprzedawcy lub podmiocie (wersja pilotażowa). W tym przewodniku znajdziesz szczegółowe informacje o wdrażaniu, testowaniu i uruchamianiu integracji ofert. Przed przejściem do kroków integracji zapoznaj się z tym omówieniem i zasadami dotyczącymi ofert.
Oferty
Integracja z ofertami umożliwia przekazywanie uporządkowanych informacji o promocjach sprzedawcy i rabatach stosowanych do konkretnych usług w określonych godzinach. Oferty składają się z rzeczywistej oferty (procentowa zniżka, zniżka w dolarach …), okresów ważności (określone godziny, dni tygodnia …), zastosowań (oferta może być używana tylko w przypadku określonych usług) oraz złożonych kombinacji ograniczeń.
Przykłady ofert:
- 50% zniżki na przystawki w środy i czwartki w grudniu w godzinach 12:00–17:00
- Kup jeden deser i otrzymaj drugi bezpłatnie na kolację z okazji Dnia Matki w godzinach 18:00–22:00
- 5 USD zniżki na danie główne podczas brunchu w każdą niedzielę od 10:00 do 14:00
- 10% rabatu w przypadku oferty dla klientów bez rezerwacji, który można połączyć z 5% rabatem dla subskrybentów premium i 5% rabatem, jeśli użytkownik zapłaci za pomocą Twojej aplikacji.
Aby oferta mogła zostać uwzględniona w integracji, musi pasować do technicznego modelu danych i spełniać nasze wymagania. Zapoznaj się z naszymi zasadami dotyczącymi ofert, aby upewnić się, że Twoja integracja jest z nimi zgodna. Znajdziesz tam też instrukcje dotyczące postępowania z ofertami, które nie spełniają wymagań technicznych.
Implementacja ofert
Integracja ofert składa się z 2 plików danych, które będą przesyłane codziennie lub z częstotliwością zapewniającą wysoką dokładność (czyli zmniejszającą nieaktualność):
OfferFeed
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
data | tablica obiektów(Offer) |
Oferta
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
offer_id | ciąg znaków | Wymagane | Unikalny identyfikator oferty. Wymagany. |
entity_ids | tablica ciągów znaków | Lista sprzedawców, którzy biorą udział w tej ofercie. | |
add_on_offer_applicable_to_all_entities | Wartość logiczna | Jeśli wartość to „true”, oferta dotyczy wszystkich podmiotów należących do agregatora. Dotyczy tylko ofert dodatkowych. | |
offer_source | enum(OfferSource) | Wymagane | Oferta może być dostarczana przez pośrednika, pojedynczego sprzedawcę, a nawet przez osobę trzecią jako dodatek. Wymagany. |
action_type | enum(ActionType) | Wymagane | Usługa, która udostępnia ofertę. Identyfikator offer_id może należeć tylko do jednego typu działania. Jeśli oferta może być udostępniana w ramach wielu typów usług, dla każdego typu usługi należy utworzyć zduplikowane oferty z unikalnymi identyfikatorami. Wymagany. |
offer_modes | tablica typu enum(OfferMode) | Wymagane | Metody skorzystania z oferty – bez rezerwacji, rezerwacja, online itp. Wymagane. |
offer_category | enum(OfferCategory) | Wymagane | Kategoria oferty. Wymagany. |
source_assigned_priority | liczba | Nieujemna liczba całkowita ([1–100], gdzie 1 oznacza najwyższy priorytet) określająca poziom priorytetu oferty przypisany przez źródło. Gdy dla tego samego sprzedawcy dostępnych jest wiele ofert, będzie to sygnał do rankingu ofert. Wartość 0 oznacza, że priorytet nie jest ustawiony. | |
offer_details | object(OfferDetails) | Wymagane | Szczegóły oferty, takie jak rabat, koszt rezerwacji itp. Wymagane. |
offer_restrictions | object(OfferRestrictions) | Wymagane | Opisuje ograniczenia oferty, np. czy wymagana jest subskrypcja lub instrument płatniczy, czy ofertę można łączyć z innymi ofertami (i jakiego typu) itp. Wymagane. |
coupon | object(Coupon) | Szczegóły kuponu. Wymagany w przypadku offer_category: OFFER_CATEGORY_ADD_ON_COUPON_OFFER. | |
payment_instrument | object(PaymentInstrument) | Szczegóły instrumentu płatniczego. Wymagany w przypadku atrybutu offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER. | |
subscription | object(Subscription) | Szczegóły subskrypcji. Wymagany w przypadku atrybutu offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER. | |
terms | object(Terms) | Wymagane | Warunki oferty. Wymagany. |
validity_periods | tablica obiektów(ValidityPeriod) | Wymagane | Okres ważności oferty. Opisuje okres, w którym oferta jest ważna, w tym godziny rozpoczęcia i zakończenia, dni tygodnia itp. Wymagany. |
offer_url | ciąg znaków | Adres URL strony oferty sprzedawcy. Wymagany w przypadku atrybutu offer_category: OFFER_CATEGORY_BASE_OFFER. | |
image_url | ciąg znaków | Adres URL obrazu oferty sprzedawcy. |
OfferDetails
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
offer_display_text | ciąg znaków | Wymagane | Tekst oferty, który dostawca oferty chce wyświetlać klientom na stronie wyników wyszukiwania. Wymagany. |
| oneOf(offer_specification) | Wymagane | Można ustawić tylko jedno z pól w tym polu oneOf. |
max_discount_value | object(Money) | Maksymalna zniżka, z której można skorzystać. Na przykład rabat 10% do 100 PLN. | |
min_spend_value | object(Money) | Minimalna wartość wydatków, aby skorzystać ze zniżki. Na przykład 10% zniżki, gdy łączna cena wynosi co najmniej 100 PLN. | |
booking_cost | object(Money) | Koszt rezerwacji tej oferty. Na przykład 100 zł zniżki na rachunek końcowy, gdy stolik zostanie zarezerwowany za 15 zł. | |
booking_cost_unit | enum(FeeUnit) | Jednostka kosztu rezerwacji. np. na osobę lub na transakcję. | |
convenience_fee | object(Fee) | ||
booking_cost_adjustable | Wartość logiczna | Czy koszt rezerwacji można dostosować, tzn. czy koszt rezerwacji jest odejmowany od ostatecznego rachunku. Na przykład: 30% zniżki na kolację po dokonaniu rezerwacji. Koszt rezerwacji wynosi 15 USD i zostanie odliczony od ostatecznej płatności. Ostateczny rachunek: wydana kwota – 30% – 15 USD | |
additional_fees | tablica obiektów(AdditionalFee) | Dodatkowe opłaty pobierane od użytkownika. Przykłady: wygoda, obsługa itp. |
Pieniądze
Reprezentuje kwotę pieniędzy wraz z rodzajem waluty.
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
currency_code | ciąg znaków | Trzyliterowy kod waluty zdefiniowany w normie ISO 4217. | |
units | ciąg znaków | Całe jednostki kwoty.
Jeśli na przykład currencyCode to "USD" , 1 jednostka to 1 dolar amerykański. | |
nanos | liczba | Liczba jednostek nano (10^-9) kwoty.
Wartość musi mieścić się w przedziale od -999 999 999 do +999 999 999 (włącznie).
Jeśli wartość units jest dodatnia, wartość nanos musi być dodatnia lub wynosić zero.
Jeśli units wynosi zero, nanos może być dodatnia, ujemna lub równa zero.
Jeśli wartość units jest ujemna, wartość nanos musi być ujemna lub równa zero.
Na przykład wartość $-1,75 jest przedstawiana jako units =-1 i nanos =-750 000 000. |
Opłata
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
unit | enum(FeeUnit) | ||
type | enum(FeeType) | ||
| oneOf(cost) | Można ustawić tylko jedno z pól w tym polu oneOf. |
MoneyRange
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
min_amount | object(Money) | ||
max_amount | object(Money) |
AdditionalFee
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
name | ciąg znaków | Wymagane | Nazwa dodatkowej opłaty. Przykłady: opłata za usługi dodatkowe, opłata manipulacyjna itp. Wymagane. |
fee | object(Fee) |
OfferRestrictions
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
combinable_with_other_offers | Wartość logiczna | Czy tę ofertę można łączyć z innymi ofertami. Jeśli ta opcja jest włączona, partnerzy mogą określić, z jakimi ofertami można łączyć tę ofertę. Jeśli ustawione są zarówno combinable_offer_categories, jak i combinable_offer_ids, każda oferta spełniająca jeden z powyższych warunków będzie mogła być łączona z innymi ofertami. | |
combinable_offer_categories | tablica typu enum(OfferCategory) | Lista typów ofert, z którymi można połączyć tę ofertę. Na przykład ta oferta może łączyć się z innymi kuponami. Jeśli wartość combinable_with_other_offers to „true”, a to pole nie jest ustawione, wszystkie typy będą możliwe do łączenia. | |
combinable_offer_ids | tablica ciągów znaków | Lista identyfikatorów ofert, z którymi można połączyć tę ofertę. Niektóre oferty można łączyć tylko z określonymi identyfikatorami innych ofert (można je uznać za oferty nadrzędne). Jeśli pole combinable_with_other_offers ma wartość true, a to pole nie jest ustawione, wszystkie identyfikatory ofert będzie można łączyć. | |
inclusions | tablica obiektów(OfferCondition) | Lista warunków, które muszą być spełnione, aby oferta była ważna (np. napoje bezalkoholowe, jedzenie). | |
exclusions | tablica obiektów(OfferCondition) | Lista warunków, które unieważniają ofertę (np. bufet, oferty łączone i koktajle). | |
min_guest | liczba | Minimalna liczba osób wymagana do skorzystania z oferty. | |
food_offer_restrictions | object(FoodOfferRestrictions) | Ograniczenia dotyczące ofert gastronomicznych. |
OfferCondition
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
description | ciąg znaków |
FoodOfferRestrictions
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
meal_types | tablica typu enum(MealType) | Rodzaje posiłków, do których można zastosować ofertę, np. lunch lub kolacja. Jeśli nie zostanie ustawiona, oferta może być stosowana do wszystkich rodzajów posiłków. | |
restricted_to_certain_courses | Wartość logiczna | Czy oferta może być zastosowana tylko do niektórych kursów. |
Kupon
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
text | ciąg znaków | Tekst kuponu, który dostawca oferty chce wyświetlać użytkownikom. | |
code | ciąg znaków | Wymagane | Aby skorzystać z oferty, musisz użyć kodu kuponu. Wymagany. |
PaymentInstrument
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
items | tablica obiektów(PaymentInstrumentItem) | Wymagane | Lista instrumentów płatniczych, których można użyć, aby skorzystać z oferty. Wymagany. |
provider_name | ciąg znaków | Wymagane | Nazwa dostawcy instrumentu płatniczego. Może to być partner bankowy, nazwa banku itp. Na przykład: American Express, HDFC, ICICI. Wymagany. |
PaymentInstrumentItem
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
type | enum(PaymentInstrumentType) | Wymagane | Rodzaj instrumentu płatniczego. Wymagany. |
name | ciąg znaków | Wymagane | Nazwa elementu instrumentu płatniczego, np. nazwa karty kredytowej. Na przykład: HDFC Infinia, American Express Platinum. Wymagany. |
Subskrypcja
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
name | ciąg znaków | Wymagane | Nazwa subskrypcji. Wymagany. |
subscription_auto_added | Wartość logiczna | Czy subskrypcja jest dodawana automatycznie, gdy użytkownik skorzysta z tej oferty. | |
cost | object(Money) | Wymagane | Koszt subskrypcji. Wymagany. |
subscription_duration | object(Duration) | Wymagane | Jak długo subskrypcja jest ważna w przypadku kosztu abonamentu. Wymagany. |
terms_and_conditions_url | ciąg znaków | Adres URL warunków partnera dotyczących tej subskrypcji. |
Czas trwania
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
seconds | ciąg znaków | Podpisane sekundy przedziału czasu. Musi mieścić się w zakresie od -315 576 000 000 do +315 576 000 000 włącznie. Uwaga: te granice są obliczane na podstawie tych wartości: 60 s/min * 60 min/godz. * 24 godz./dzień * 365,25 dni/rok * 10 000 lat. | |
nanos | liczba | Ułamki sekundy ze znakiem o rozdzielczości nanosekundowej w zakresie czasu. Czasy trwania krótsze niż sekunda są reprezentowane przez pole 0
seconds i pole nanos z wartością dodatnią lub ujemną. W przypadku czasów trwania wynoszących co najmniej 1 sekundę wartość niezerowa w polu nanos musi mieć ten sam znak co pole seconds . Musi mieścić się w zakresie od -999 999 999 do +999 999 999 włącznie. |
Warunki
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
url | ciąg znaków | Adres URL warunków partnera. | |
restricted_to_certain_users | Wartość logiczna | Czy oferta jest ograniczona do określonych użytkowników. | |
terms_and_conditions | ciąg znaków | Główny tekst warunków dostarczony przez partnera. | |
additional_terms_and_conditions | tablica ciągów znaków | Warunki dodatkowe do głównych warunków partnera. |
ValidityPeriod
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
valid_period | object(ValidityRange) | Sygnatura czasowa rozpoczęcia i zakończenia okresu, w którym oferta jest ważna. Te godziny muszą przypadać na różne dni, tzn. godzina rozpoczęcia musi być 00:00 (początek dnia), a godzina zakończenia musi być 00:00 (wyłączona) w dniu, w którym kończy się okres ważności. | |
time_of_day | tablica obiektów(TimeOfDayWindow) | Określa prawidłowy przedział czasu w danym dniu i dni, w których oferta jest dostępna.
Przykład:
Poniedziałek: 10:00–17:00
Wtorek: 10:00–14:00
Wtorek: 17:00–19:00
Śr, czw, pt, sob, nd: 15:00–19:00
Jeśli nie podano żadnych informacji, oznacza to, że oferta jest dostępna przez cały czas w ramach
valid_period . | |
time_exceptions | tablica obiektów(ValidTimeException) | Określa wyjątki od powyższych wartości valid_period i valid_time_of_week. |
ValidityRange
Zakres sygnatur czasowych zamknięty-otwarty.
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
valid_from_time | object(Timestamp) | Wymagane | Godzina rozpoczęcia zakresu (włącznie). Wymagany. |
valid_through_time | object(Timestamp) | Czas zakończenia zakresu (wyłącznie). Jeśli nie jest ustawiona, oznacza to, że ten okres nigdy się nie kończy. Opcjonalnie. |
Sygnatura czasowa
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
seconds | ciąg znaków | Reprezentuje sekundy czasu UTC od epoki uniksowej, czyli od 1970-01-01T00:00:00Z. Musi mieścić się w zakresie od 0001-01-01T00:00:00Z do 9999-12-31T23:59:59Z włącznie. | |
nanos | liczba | Nieujemne ułamki sekundy z dokładnością do nanosekundy. Ujemne wartości sekund z ułamkami nadal muszą mieć nieujemne wartości nanosekund, które liczą czas do przodu. Musi mieścić się w zakresie od 0 do 999 999 999 włącznie. |
TimeOfDayWindow
Obiekt TimeWindow to złożona jednostka, która opisuje listę przedziałów czasowych, w których zamówienie użytkownika może zostać złożone lub zrealizowane.
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
time_windows | object(TimeOfDayRange) | Wymagane | Przedział czasowy, w którym można złożyć lub zrealizować zamówienie. Wymagany. |
day_of_week | tablica typu enum(DayOfWeek) | Lista dni tygodnia, w których obowiązują przedziały czasu. Jeśli nie ustawisz żadnego dnia, oznacza to, że zasada obowiązuje we wszystkie dni tygodnia. Opcjonalnie. |
TimeOfDayRange
Zakres czasu zamknięty-otwarty.
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
open_time | object(TimeOfDay) | Godzina wskazująca początek dnia w zakresie (włącznie). Jeśli nie jest ustawiona, oznacza to 00:00:00. Opcjonalnie. | |
close_time | object(TimeOfDay) | Godzina wskazująca godzinę zakończenia dnia zakresu (wyłącznie). Jeśli nie jest ustawiona, oznacza to godzinę 23:59:59. Opcjonalnie. |
TimeOfDay
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
hours | liczba | Godziny w formacie 24-godzinnym. Musi być równa lub większa niż 0 i zwykle nie może być większa niż 23. Interfejs API może zezwalać na wartość „24:00:00” w przypadku takich scenariuszy jak godzina zamknięcia firmy. | |
minutes | liczba | Minuty w godzinie. Musi być równa lub większa niż 0 i równa lub mniejsza niż 59. | |
seconds | liczba | sekundy minuty, Musi być równa lub większa niż 0 i zwykle nie może być większa niż 59. Interfejs API może zezwalać na wartość 60, jeśli zezwala na sekundy przestępne. | |
nanos | liczba | Ułamki sekund w nanosekundach. Musi być równa lub większa niż 0 i równa lub mniejsza niż 999 999 999. |
ValidTimeException
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
exceptional_period | object(ValidityRange) | Znaczniki czasu rozpoczęcia i zakończenia, dla których oferta jest nieważna. Te godziny muszą przypadać w różnych dniach, tzn. godzina rozpoczęcia musi być 00:00 (początek dnia), a godzina zakończenia musi być 00:00 (bez włączenia) w dniu, w którym kończy się okres wyjątku. |
OfferSource
Nazwa | Opis |
---|---|
OFFER_SOURCE_UNSPECIFIED | |
OFFER_SOURCE_AGGREGATOR |
ActionType
Nazwa | Opis |
---|---|
ACTION_TYPE_UNSPECIFIED | |
ACTION_TYPE_DINING |
OfferMode
Nazwa | Opis |
---|---|
OFFER_MODE_OTHER | |
OFFER_MODE_WALK_IN | |
OFFER_MODE_FREE_RESERVATION | |
OFFER_MODE_PAID_RESERVATION | |
OFFER_MODE_ONLINE_ORDER |
OfferCategory
Kategoria oferty. Oferta podstawowa to standardowa oferta dostępna dla wszystkich klientów, np. 10% rabatu na wydatki powyżej 100 PLN. Oferta podstawowa ograniczona kuponem lub instrumentem płatniczym będzie miała ustawione odpowiednie pola. Mamy też oferty dodatkowe, takie jak ADD_ON_PAYMENT_OFFER. Takie oferty można łączyć z innymi, aby uzyskać dodatkowe rabaty.
Nazwa | Opis |
---|---|
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
Nazwa | Opis |
---|---|
FEE_UNIT_UNSPECIFIED | |
FEE_UNIT_PER_GUEST | |
FEE_UNIT_PER_TRANSACTION |
FeeType
Nazwa | Opis |
---|---|
FEE_TYPE_UNSPECIFIED | |
FEE_TYPE_FIXED | |
FEE_TYPE_VARIABLE |
MealType
Nazwa | Opis |
---|---|
MEAL_TYPE_UNSPECIFIED | |
MEAL_TYPE_BREAKFAST | |
MEAL_TYPE_LUNCH | |
MEAL_TYPE_DINNER |
PaymentInstrumentType
Nazwa | Opis |
---|---|
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED | |
PAYMENT_INSTRUMENT_CREDIT_CARD | |
PAYMENT_INSTRUMENT_DEBIT_CARD | |
PAYMENT_INSTRUMENT_BANK_ACCOUNT | |
PAYMENT_INSTRUMENT_UPI | |
PAYMENT_INSTRUMENT_ONLINE_WALLET |
DzieńTygodnia
Reprezentuje dzień tygodnia.
Nazwa | Opis |
---|---|
DAY_OF_WEEK_UNSPECIFIED | Dzień tygodnia nie jest określony. |
MONDAY | Poniedziałek |
TUESDAY | Tuesday (wtorek) |
WEDNESDAY | Wednesday (środa) |
THURSDAY | Thursday (czwartek) |
FRIDAY | Friday (piątek) |
SATURDAY | Saturday (sobota) |
SUNDAY | Niedziela |
offer_specification
Rabat może być wyrażony w procentach lub jako stała wartość odliczona od łącznej wartości. Przykład:1. 10% zniżki na rachunek końcowy. 2. 15 USD zniżki na zamówienie. Sprzedawcy mogą też oferować rabaty niestandardowe, np. „kup jeden produkt, a drugi otrzymasz bezpłatnie”, za pomocą odpowiednich pól specyfikacji. Wymagany.
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
discount_percent | liczba | Wzajemnie wykluczające się z | Procent rachunku, który jest objęty rabatem. [0, 100] W przypadku ofert typu „1+1” lub „50% zniżki” obowiązujących na cały posiłek (np. „1+1” na bufet, „1+1” na cały rachunek, „1+1” na zestaw menu) tę wartość można ustawić na 50. |
discount_value | object(Money) | Wzajemnie wykluczające się z | Stała wartość rabatu. |
other_offer_detail_text | ciąg znaków | Wzajemnie wykluczające się z | Dowolny tekst opisujący rabat. W przypadku konkretnych ofert 1+1 (np. 1+1 napoje, +1 danie główne, 1+1 wybrane pozycje w menu) należy podać tutaj szczegóły. |
koszt
Nazwa pola | Typ | Wymaganie | Opis |
---|---|---|---|
amount | object(Money) | Wzajemnie wykluczające się z | |
amount_range | object(MoneyRange) | Wzajemnie wykluczające się z |
Przesyłanie pliku danych
Plik danych z ofertami musi zostać przesłany na serwer SFTP pliku danych Generic
. Postępuj zgodnie z instrukcjami w samouczku dotyczącym korzystania z serwera SFTP ogólnego pliku danych i użyj wartości name
ustawionej na google.offer
w pliku deskryptora.
Częstotliwość przesyłania
Ogólnie rzecz biorąc, Google oczekuje 1 przesłania pliku danych dziennie. Częstotliwość może być zwiększana lub zmniejszana w zależności od częstotliwości aktualizacji ofert po Twojej stronie, aby zapewnić stale wysoką precyzję. Skonsultuj się z osobą kontaktową w Google.
Zanim dane pojawią się w Google, może minąć kilka godzin.
Kategoryzacja ofert
OFFER_CATEGORY_BASE_OFFER
: oferty, które można wykorzystać niezależnie, bez łączenia z innymi ofertami. Obejmuje to:- rabaty stałe na cały rachunek (np. 20% zniżki)
- Oferty subskrypcji (np. bezpłatny deser dla subskrybentów),
- Oferty płatności w przypadku, gdy nie ma innych ofert podstawowych dla restauracji
- Oferty dodatkowe: oferty, które wymagają odebrania oferty podstawowej. Są to:
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
(np. Dodatkowe 10% zniżki za płatność określoną kartą kredytową)OFFER_CATEGORY_ADD_ON_COUPON_OFFER
(np. bezpłatny napój z określonym kodem kuponu);OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER
(np. Dodatkowe 10% zniżki dla subskrybentów)
Inne kwestie:
- Jeśli restauracja nie ma ustawionej oferty podstawowej, oferty dodatkowe nie będą się wyświetlać.
Jeśli nie ma oferty podstawowej, każda oferta płatności, subskrypcji lub kuponu, którą można wykorzystać bez konieczności dodawania jej do innej oferty, musi być oznaczona jako
OFFER_CATEGORY_BASE_OFFER
.- W zależności od typu należy ustawić odpowiednie dane dla
PaymentInstrument
,Subscription
lubCoupon
. - Partnerzy muszą przesłać 2 kopie każdej z tych ofert, aby uwzględnić sytuacje, w których pełnią one funkcję zarówno ofert podstawowych, jak i dodatkowych. Tekst oferty dodatkowej można następnie ustawić dla wielu restauracji za pomocą
entity_ids
lubadd_on_offer_applicable_to_all_entities
.
- W zależności od typu należy ustawić odpowiednie dane dla
- Jeśli restauracja ma kilka ofert podstawowych, które można łączyć, wszystkie oferty podstawowe powinny być oznaczone jako
OFFER_CATEGORY_BASE_OFFER
, a oferty podstawowe, które są ofertami płatności, subskrypcji lub kuponów, powinny być dodatkowo przesyłane jako odpowiedni typ oferty dodatkowej. ValidityPeriod
należy używać do aktywowania ofert dodatkowych jako ofert podstawowych tylko wtedy, gdy nie ma aktywnej oferty podstawowej.
Przykładowe scenariusze:
Restauracja oferuje 5% zniżki przy płatności określoną kartą kredytową i bezpłatny napój przy użyciu określonego kodu kuponu.
- Oferta 5% rabatu na kartę kredytową powinna zostać wysłana w 2 kopiach, z których jedna powinna być oznaczona jako
OFFER_CATEGORY_BASE_OFFER
, a druga jakoOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
z uwzględnieniem szczegółówPaymentInstrument
. - Oferta bezpłatnego napoju z kodem kuponu powinna być wysłana jako
OFFER_CATEGORY_ADD_ON_COUPON_OFFER
z podanymiCoupon
szczegółami.
- Oferta 5% rabatu na kartę kredytową powinna zostać wysłana w 2 kopiach, z których jedna powinna być oznaczona jako
Restauracja oferuje 10% zniżki dla klientów bez rezerwacji i 5% zniżki przy płatności określoną kartą kredytową. Obie zniżki można łączyć.
- Oferta 10% rabatu dla klientów, którzy przyjdą do sklepu, powinna być oznaczona tagiem
OFFER_CATEGORY_BASE_OFFER
. - Oferta rabatu 5% za płatność kartą kredytową powinna mieć 2 kopie, z których jedna powinna być oznaczona tagiem
OFFER_CATEGORY_BASE_OFFER
, a druga tagiemOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
.
- Oferta 10% rabatu dla klientów, którzy przyjdą do sklepu, powinna być oznaczona tagiem
Restauracja oferuje 10% zniżki tylko na lunch w dni powszednie i 5% zniżki w dowolnym momencie, jeśli płatność jest dokonywana określoną kartą kredytową.
- Oferta 10% rabatu powinna mieć ustawioną wartość
ValidityPeriod
, aby wskazywać, że obowiązuje tylko w godzinach lunchu w dni powszednie. - Oferta rabatu 5% za płatność kartą kredytową powinna zostać wysłana w 2 kopiach.
- Jedna kopia powinna być oznaczona jako
OFFER_CATEGORY_BASE_OFFER
i zawierać szczegółyPaymentInstrument
.ValidityPeriod
należy ustawić tak, aby wykluczyć godziny lunchu w dni robocze, gdy aktywna jest oferta 10% zniżki na lunch. - Jedna kopia powinna być oznaczona jako
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
i zawierać szczegółyPaymentInstrument
.
- Jedna kopia powinna być oznaczona jako
- Wszystkie inne oferty płatności w tej restauracji powinny być oznaczone jako
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
.
- Oferta 10% rabatu powinna mieć ustawioną wartość
Proces tworzenia i wdrażania
Podczas integracji Portal dla partnerów będzie Ci pomagać, dostarczając informacje i opinie na podstawie Twoich postępów. Proces tworzenia będzie przebiegał w następujący sposób:
- Integracja zostanie najpierw opracowana w środowisku Sandbox. W środowisku piaskownicy Google należy używać eksportu danych produkcyjnych (lub nawet bezpośrednio danych produkcyjnych). Dzięki temu Twój proces programowania obejmie wszystkie przypadki brzegowe, a Google będzie mogło ocenić jakość danych i lepiej Ci pomagać na podstawie Twojego modelu danych.
- Gdy zaczniesz przesyłać kompletne i codzienne pliki danych Merchant, Services i Deals w środowisku testowym Google, zespół Google oceni Twoje pliki danych. Gdy zespół Google zatwierdzi Twój kod, możesz go przesłać do środowiska produkcyjnego i zacząć wysyłać dane produkcyjne do środowiska produkcyjnego Google.
- Po pełnym przetestowaniu integracji produkcyjnej zespół Google również przeprowadzi testy. Po zakończeniu wszystkich testów integracja zostanie uruchomiona.
Monitorowanie
Aby zapewnić użytkownikom wygodę, przed wprowadzeniem ofert i po nim będziemy sprawdzać, czy są one ważne, prawidłowe i zgodne z naszymi zasadami. W tym celu Google będzie korzystać z weryfikacji manualnej i automatycznej. Wyniki tych weryfikacji będą dostępne w panelu ofert w Centrum działań (tylko w wersji produkcyjnej). Wyniki tego monitorowania mogą mieć wpływ na ranking ofert.
Automatyczne sprawdzanie (roboty indeksujące)
Roboty indeksujące są wdrażane przez zespół Google ds. jakości. Roboty to skrypty, które automatyzują przeglądarkę internetową, aby wykonywać kliknięcia i wyodrębniać informacje o ofertach wyłącznie na potrzeby testowania jakości.
Liczba zapytań
Jeśli na przykład zdecydujemy się wysyłać 5000 sprawdzeń dziennie, oznacza to, że 5000 razy dziennie (równomiernie rozłożonych w ciągu dnia, czyli mniej więcej raz na 17 sekund) nasz robot wykonuje wszystkie te czynności, które wykonuje zwykły użytkownik:
- Zacznij od wyszukiwarki Google i kliknij link partnera.
- Znajdź informacje o ofercie.
- Jeśli oferta wymaga rezerwacji, przejdziesz do procesu rezerwacji, aby potwierdzić, że oferta jest dostępna w określonym czasie (rezerwacja nie zostanie dokonana).
Wykrywanie programów do pobierania danych ze stron internetowych
Aby uniknąć zablokowania narzędzia do pobierania danych z internetu (co może spowodować, że uzna ono, że oferty są niedostępne), upewnij się, że Twój system zawsze zezwala na wysyłanie zapytań do strony przez to narzędzie. Aby zidentyfikować nasz program do pobierania danych z internetu:
- Klient użytkownika robota skanującego witryny będzie zawierać ciąg znaków „Google-Offers”:
- Przykład: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
- Możesz też sprawdzić, czy wywołania pochodzą z Google, korzystając z odwrotnego wyszukiwania DNS zgodnie z zaleceniami w artykule „Weryfikowanie Googlebota i innych robotów Google”.
W naszym przypadku rozpoznawanie odwrotne DNS przebiega w ten sposób:
google-proxy-***-***-***-***.google.com
Działanie techniczne
Pamięć podręczna
Aby zmniejszyć obciążenie witryny partnera, nasze roboty są zwykle skonfigurowane tak, aby uwzględniać wszystkie standardowe nagłówki pamięci podręcznej HTTP w odpowiedzi. Oznacza to, że w przypadku prawidłowo skonfigurowanych witryn unikamy wielokrotnego pobierania treści, które rzadko się zmieniają (np. bibliotek JavaScript). Więcej informacji o wdrażaniu buforowania znajdziesz w dokumentacji buforowania HTTP.