Ten przewodnik zawiera wymagania i przykłady ofert dotyczących zamawiania jedzenia.
Kryteria i zasady
W tej sekcji znajdziesz ważne kryteria kwalifikacji, których partnerzy muszą przestrzegać podczas udostępniania ofert. Podczas testowania pliku danych w piaskownicy ważne jest, aby przetestować wszystkie typy ofert, które planujesz uruchomić. Jeśli nie masz pewności, czy oferta kwalifikuje się do programu, skontaktuj się z osobą kontaktową w Google.
Wykluczanie ofert spersonalizowanych i jednorazowych
Aby zapewnić wysoką jakość i spójność wrażeń użytkowników, partnerzy nie mogą uwzględniać ofert ograniczonych do określonych grup użytkowników. Oferty spersonalizowane, które są tworzone tylko dla konkretnych użytkowników, nie kwalifikują się do udziału w programie. Oferty obowiązujące na całej platformie, które są dostępne dla wszystkich użytkowników, np. dla nowych użytkowników lub dla osób, które po raz pierwszy zamawiają w danej restauracji, są dozwolone, o ile są wyświetlane na stronie docelowej oferty wszystkim użytkownikom. Warunki oferty muszą być jasno określone w tytule oferty i na stronie docelowej adresu URL oferty. Oferty muszą być widoczne na stronie docelowej oferty dla wszystkich użytkowników, którzy są wylogowani lub zalogowani w Twojej witrynie lub aplikacji.
Oferty z kodami kuponów
Niektóre oferty wymagają wpisania przez użytkownika kodu kuponu, np. „Zastosuj kod ZNIŻKA20, aby otrzymać 20% rabatu na cały rachunek”. Pamiętaj, że Google nie wyświetla kodów kuponów z definicji kuponu. Partnerzy mogą umieścić te informacje w polu OfferDetails.offer_display_text, aby wyświetlać je użytkownikom. Oferty oparte na kuponach dzielą się na 2 kategorie:
- Oferty, w których kupon jest automatycznie wyświetlany podczas płatności każdemu użytkownikowi, który przychodzi z Google. Są one dozwolone.
- Oferty, które wymagają od użytkownika wpisania kodu kuponu podczas płatności, ale nie zawierają instrukcji, jak zastosować kod kuponu na stronie docelowej adresu URL oferty, lub nie stosują automatycznie kuponu po kliknięciu adresu URL oferty, są niedozwolone.
Treść i struktura oferty
W tej sekcji znajdziesz szczegółowe wymagania dotyczące treści i struktury ofert podanych w pliku danych, w tym przykłady uporządkowanych metadanych.
Tekst wyświetlany oferty i specyfikacja oferty
Pole OfferDetails.offer_display_text jest wymagane i służy jako zwięzły nagłówek, który jest od razu widoczny w sekcji ofert w wyszukiwarce Google, np. „10 zł zniżki” lub „Oszczędź 15%”.
Pole OfferDetails.offer_specification jest wymaganym polem typu „one of” w ramach OfferDetails. Oznacza to, że aby określić transakcję, musisz podać dokładnie jedno z tych 3 pól:
discount_valuediscount_percentageother_offer_details_text
Pole OfferDetails.other_offer_details_text to pole tekstowe o dowolnej formie, które służy do uzupełniania pola offer_display_text, gdy oferta nie może być wyrażona jako stała wartość rabatu lub procent. Jeśli pole offer_display_text zawiera już wszystkie niezbędne informacje o ofercie, pole other_offer_details_text powinno zawierać ten sam tekst co pole offer_display_text. W przypadku złożonych ofert to pole powinno zawierać szczegółowy opis nagrody.
Pola metadanych strukturalnych
Aby zwiększyć przejrzystość ofert i umożliwić lepsze rankingowanie i filtrowanie, partnerzy muszą podawać metadane ofert w odpowiednich polach strukturalnych. Pole terms.terms_and_conditions jest wymagane. Wartość powinna zawierać warunki korzystania z oferty. Możesz na przykład wypełnić to pole szczegółowymi warunkami, które są wyświetlane użytkownikom na stronie docelowej oferty.
Przykłady kodu JSON oferty
Stały rabat 20 zł
Przykład: stała zniżka w wysokości 20 PLN we wtorki przy minimalnym wydatku 15 PLN
{ "offer_id": "offer-example-1-takeout", "offer_source": "OFFER_SOURCE_AGGREGATOR", "action_type": "ACTION_TYPE_FOOD_TAKEOUT", "offer_modes": ["OFFER_MODE_ONLINE_ORDER"], "offer_category": "OFFER_CATEGORY_BASE_OFFER", "offer_details": { "offer_display_text": "$20 off on Tuesdays", "discount_value": { "currency_code": "USD", "units": 20 }, "min_spend_value": { "currency_code": "USD", "units": 15 } }, "validity_periods": [ { "valid_period": { "valid_from_time": { "seconds": 1768953600 }, "valid_through_time": { "seconds": 1795219200 } }, "time_of_day": [ { "time_windows": { "open_time": { "hours": 9 }, "close_time": { "hours": 20, "minutes": 59, "seconds": 59 } }, "day_of_week": ["TUESDAY"] } ] } ], "offer_restrictions": { "combinable_with_other_offers": false }, "terms": { "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders with $15 minimum spend. Single use per order. Offer may not be combined with any other offers, discounts, or promotions. Valid only on Tuesdays." }, "entity_ids": ["dining-1"], "offer_url": "https://www.example-restaurant.com/offer/base_offer_1" }
Oferta „Kup 1, a otrzymasz 1 bezpłatnie”
Przykład: kup przystawkę, a drugą otrzymasz bezpłatnie, oferta ważna od poniedziałku do czwartku
{ "offer_id": "offer-example-2-delivery", "offer_source": "OFFER_SOURCE_AGGREGATOR", "action_type": "ACTION_TYPE_FOOD_DELIVERY", "offer_modes": ["OFFER_MODE_ONLINE_ORDER"], "offer_category": "OFFER_CATEGORY_BASE_OFFER", "offer_details": { "offer_display_text": "Buy one appetizer, get one free", "other_offer_detail_text": "Buy one appetizer, get one free" }, "validity_periods": [ { "valid_period": { "valid_from_time": { "seconds": 1768953600 }, "valid_through_time": { "seconds": 1795219200 } }, "time_of_day": [ { "time_windows": { "open_time": { "hours": 10 }, "close_time": { "hours": 23, "minutes": 59, "seconds": 59 } }, "day_of_week": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY"] } ] } ], "offer_restrictions": { "combinable_with_other_offers": true, "inclusions": [ { "description": "appetizers" } ] }, "terms": { "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Single use per order. Valid on all menu appetizers. Offer may be combined with any other offers, discounts, or promotions. Valid Monday through Thursday." }, "entity_ids": ["dining-1"], "offer_url": "https://www.example-restaurant.com/offer/base_offer_4" }
Oferta rabatu procentowego
Przykład: 25% zniżki na kanapki
{ "offer_id": "offer-example-3-delivery", "offer_source": "OFFER_SOURCE_AGGREGATOR", "action_type": "ACTION_TYPE_FOOD_DELIVERY", "offer_modes": ["OFFER_MODE_ONLINE_ORDER"], "offer_category": "OFFER_CATEGORY_BASE_OFFER", "offer_details": { "offer_display_text": "25% off on Sandwitches", "discount_percent": 25.0 }, "validity_periods": [ { "valid_period": { "valid_from_time": { "seconds": 1768953600 }, "valid_through_time": { "seconds": 1795219200 } } } ], "offer_restrictions": { "combinable_with_other_offers": true }, "terms": { "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Applies to specific items only. Single use per order. May be combined with any other offers, discounts, or promotions." }, "entity_ids": ["dining-1"], "offer_url": "https://www.example-restaurant.com/offer/base_offer_2" }
Oferta bezpłatnej dostawy
Przykład: bezpłatna dostawa zamówień powyżej 30 zł. W innych przypadkach dostawa kosztuje 7,00 PLN.
{ "offer_id": "offer-example-4-delivery", "offer_source": "OFFER_SOURCE_AGGREGATOR", "action_type": "ACTION_TYPE_FOOD_DELIVERY", "offer_modes": ["OFFER_MODE_ONLINE_ORDER"], "offer_category": "OFFER_CATEGORY_BASE_OFFER", "offer_details": { "offer_display_text": "Free delivery on orders over $30", "discount_value": { "currency_code": "USD", "units": 7 }, "min_spend_value": { "currency_code": "USD", "units": 30 } }, "validity_periods": [ { "valid_period": { "valid_from_time": { "seconds": 1768953600 }, "valid_through_time": { "seconds": 1795219200 } } } ], "offer_restrictions": { "combinable_with_other_offers": true }, "terms": { "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery orders with $30 minimum spend. Delivery is $7.00 otherwise. Single use per order. May be combined with any other offers, discounts, or promotions." }, "entity_ids": ["dining-1"], "offer_url": "https://www.example-restaurant.com/offer/base_offer_3" }
Przykład oferty podstawowej z ofertą dodatkową
Przykład: restauracja oferuje 10% zniżki tylko na lunch w dni powszednie i 5% zniżki w dowolnym momencie, gdy płatność jest dokonywana określoną kartą kredytową.
[ { "offer_id": "offerId1", "offer_source": "OFFER_SOURCE_AGGREGATOR", "action_type": "ACTION_TYPE_FOOD_TAKEOUT", "offer_modes": ["OFFER_MODE_ONLINE_ORDER"], "offer_category": "OFFER_CATEGORY_BASE_OFFER", "offer_details": { "offer_display_text": "10% off", "discount_percent": 10.0 }, "validity_periods": [ { "valid_period": { "valid_from_time": { "seconds": 1768953600 }, "valid_through_time": { "seconds": 1795219200 } }, "time_of_day": [ { "day_of_week": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY"] } ] } ], "offer_restrictions": { "combinable_with_other_offers": true, "combinable_offer_categories": ["OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER"] }, "terms": { "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Single use per order. Offer may be combined with any other offers, discounts, or promotions." }, "entity_ids": ["dining-1"], "offer_url": "https://www.example-restaurant.com/offer/base_offer_5" }, { "offer_id": "offerId2", "offer_source": "OFFER_SOURCE_AGGREGATOR", "action_type": "ACTION_TYPE_FOOD_TAKEOUT", "offer_modes": ["OFFER_MODE_ONLINE_ORDER"], "offer_category": "OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER", "offer_details": { "offer_display_text": "5% off", "discount_percent": 5.0 }, "validity_periods": [ { "valid_period": { "valid_from_time": { "seconds": 1768953600 }, "valid_through_time": { "seconds": 1795219200 } }, "time_of_day": [ { "day_of_week": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY"] } ] } ], "offer_restrictions": { "combinable_with_other_offers": true, "combinable_offer_ids": ["offerId1"] }, "payment_instrument": { "items": [ { "type": "PAYMENT_INSTRUMENT_CREDIT_CARD", "name": "Participating Credit Card" } ], "provider_name": "Card Provider" }, "terms": { "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Single use per order. Offer may be combined with any other offers, discounts, or promotions." }, "entity_ids": ["dining-1"], "offer_url": "https://www.example-restaurant.com/offer/addon_offer_1" } ]
Realizacja i ograniczenia
W tej sekcji znajdziesz szczegółowe informacje o wymaganiach i sprawdzonych metodach związanych ze specyfikacją realizacji oferty oraz ograniczeniach z nią związanych.
Tryb realizacji (dostawa i odbiór osobisty)
Jeśli jedna oferta dotyczy zarówno dostawy, jak i odbioru osobistego, musi ona mieć w pliku danych 2 oferty. Każdy wpis musi mieć dedykowany element ActionType:
ACTION_TYPE_FOOD_DELIVERYACTION_TYPE_FOOD_TAKEOUT
Dzięki temu użytkownicy, którzy trafią do witryny partnera, zobaczą prawidłowy kontekst realizacji.
Przedziały czasu
Oferty powinny być wyświetlane na stronie docelowej oferty wszystkim użytkownikom, którzy są wylogowani lub zalogowani w Twojej witrynie lub aplikacji. Jeśli oferta jest ważna w określonym przedziale czasu, musisz uwzględnić pole validity_periods.valid_period, aby określić okres ważności. Zapobiega to wyświetlaniu oferty poza tym okresem. Przedział czasu musi być też ustawiony, jeśli oferta jest wyświetlana w adresie URL oferty w określonych godzinach. Jeśli np. strona docelowa nie wyświetla ofert, gdy restauracja jest zamknięta, musisz podać godziny otwarcia i zamknięcia w elemencie TimeOfDayWindow.
Obsługa przedziałów czasowych przekraczających północ
Oferty, które obejmują północ (np. ważne od wtorku od 22:00 do środy do 2:00), muszą być podzielone na segmenty, aby można je było prawidłowo przetworzyć w potoku wprowadzania danych. Wymaganie: użyj pola TimeOfDayWindow, aby podzielić przedział czasu na 2 osobne segmenty:
- Segment 1: od 22:00 do 23:59:59 w dniu rozpoczęcia (np. we wtorek).
- Segment 2: od 00:00 do 02:00 następnego dnia (np. środy).
Dzięki temu ważność oferty będzie dokładnie odzwierciedlona przez cały okres.
Specyfikacje opłat
Opłaty za dostawę i odbiór osobisty można określić za pomocą pola OfferDetails.additional_fees. Opłatę za przetworzenie płatności należy określić za pomocą atrybutu OfferDetails.convenience_fee. W przypadku opłat zmiennych użyj zakresu opłat, np. jeśli opłaty za dostawę zmieniają się w zależności od lokalizacji użytkownika.