Sprawdzone metody

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ć użytkownikom wysoką jakość i spójność, 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, z których mogą skorzystać wszyscy użytkownicy, np. nowi użytkownicy lub osoby składające pierwsze zamówienie w danej restauracji, dozwolone, o ile oferta jest wyświetlana 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% 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 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

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_value
  • discount_percent
  • other_offer_detail_text

Pole OfferDetails.other_offer_detail_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_detail_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. Określenie warunków jest wymagane. Zalecamy ustawienie pola terms.terms_and_conditions z szczegółowymi warunkami, które są wyświetlane użytkownikom na stronie docelowej oferty.

Łączna liczba ofert dotyczących zamówienia i konkretnych produktów

Oferty dotyczące określonych podzbiorów produktów muszą używać pól offer_restrictions.inclusions i offer_restrictions.exclusions, aby określić kwalifikujące się produkty. Jeśli oferta dotyczy konkretnego produktu, jego nazwa powinna być zawarta w tagu offer_display_text. Jeśli nazwa produktu jest uwzględniona w offer_display_text, ustawienie offer_restrictions.inclusions nie jest wymagane.

Jeśli atrybuty offer_restrictions.inclusions nie są ustawione lub nazwa produktu nie jest uwzględniona w atrybucie offer_display_text, oferta jest uznawana za obowiązującą w przypadku łącznej kwoty zamówienia.

Oferty opłat za dostawę

Oferty opłat za dostawę muszą używać atrybutu offer_category OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER. Dzięki temu oferta będzie wyświetlana tylko w połączeniu z inną ofertą podstawową dla danej lokalizacji. Oferta opłaty za dostawę nie będzie wyświetlana jako oferta podstawowa.

Przykłady plików JSON z ofertami

Stały rabat 20 zł

Przykład: stała zniżka w wysokości 20 PLN na całe zamówienie we wtorki przy minimalnej wartości zamówienia wynoszącej 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"
}

50% zniżki na Berry Smoothie

Przykład: oferta z rabatem 50% na poziomie produktu.

{
  "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": "50% off on Berry Smoothie",
    "discount_percent": 50.0
  },
  "validity_periods": [
    {
      "valid_period": {
        "valid_from_time": { "seconds": 1768953600 },
        "valid_through_time": { "seconds": 1795219200 }
      }
    }
  ],
  "offer_restrictions": {
    "combinable_with_other_offers": true,
    "inclusions": [
      {"description":"Berry Smoothie"}
    ]
  },
  "terms": {
    "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Single use per order."
  },
  "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 bezpłatnej dostawy

Przykład: bezpłatna dostawa jako dodatek do oferty podstawowej. Oferta 0 USD za opłaty za dostawę będzie wyświetlana z dowolną ofertą podstawową dla danej lokalizacji.

[
  {
    "offer_id": "offerId1",
    "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": "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_DELIVERY",
    "offer_modes": ["OFFER_MODE_ONLINE_ORDER"],
    "offer_category": "OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER",
    "offer_details": {
      "offer_display_text": "$0 Delivery Fee",
      "other_offer_detail_text": "Free dellivery"
    },
    "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": "Delivery is free 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, musi mieć w pliku danych 2 oferty. Każdy wpis musi mieć dedykowany element ActionType:

  • ACTION_TYPE_FOOD_DELIVERY
  • ACTION_TYPE_FOOD_TAKEOUT

Dzięki temu użytkownicy, którzy trafią na stronę 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. Jeśli np. 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 obejmujące 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.