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, utworzone tylko dla konkretnych użytkowników, nie kwalifikują się. Oferty dostępne na całej platformie 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, pod warunkiem że są wyświetlane na stronie docelowej oferty wszystkim użytkownikom. Warunki oferty muszą być wyraźnie 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, niezależnie od tego, czy są 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% zniżki 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 przy 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
OfferDetails.offer_display_text to wymagane pole, które służy jako zwięzły nagłówek zapewniający natychmiastową widoczność 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ć umowę, 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 oferty nie można wyrazić jako stałej wartości rabatu lub procentu. 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ść oferty i umożliwić lepsze rankingowanie i filtrowanie, partnerzy muszą podać metadane oferty w odpowiednich polach strukturalnych. Pole terms.terms_and_conditions jest wymagane. Wartość powinna zawierać warunki wykorzystania oferty. Możesz na przykład wypełnić to pole szczegółowymi warunkami, które są wyświetlane użytkownikom na stronie docelowej oferty.
Oferty dotyczące określonych podzbiorów produktów muszą używać pola terms.terms_and_conditions lub pól offer_restrictions.inclusions i offer_restrictions.exclusions, aby określić kwalifikujące się produkty.
Przykłady kodu JSON oferty
Stały rabat 20 zł
Przykład: stała zniżka w wysokości 20 PLN we wtorki przy minimalnych wydatkach w wysokości 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 wszystkie 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 all Sandwiches", "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, "combinable_offer_ids": ["offer-example-4-delivery"], "inclusions": [ "Sandwiches" ] }, "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 przy płatności 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 wymagania i sprawdzone metody dotyczące specyfikacji realizacji oferty oraz powiązanych z nimi ograniczeń.
Tryb realizacji (dostawa i odbiór osobisty)
Jeśli jedna oferta dotyczy zarówno dostawy, jak i odbioru osobistego, w pliku danych musi zawierać 2 oferty. Każdy wpis musi mieć dedykowany atrybut 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ą zalogowani lub wylogowani z Twojej witryny lub aplikacji. Jeśli oferta jest ważna w określonym czasie, musisz podać pole validity_periods.valid_period, aby określić okres ważności. Zapobiega to wyświetlaniu oferty poza tym okresem. Okres musi być też ustawiony, jeśli oferta jest wyświetlana w adresie URL oferty w określonych godzinach w ciągu dnia. Jeśli na przykład strona docelowa nie wyświetla ofert, gdy restauracja jest zamknięta, musisz podać godziny otwarcia i zamknięcia w polu 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ł 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.