I partner che partecipano all'integrazione delle offerte devono completare la configurazione dell'account per un passaggio di integrazione basato su commerciante o entità (progetto pilota) prima di iniziare. L'implementazione, il test e il lancio dell'integrazione delle offerte verranno descritti in dettaglio in questa guida. Leggi questa panoramica e le norme relative alle offerte prima di procedere con i passaggi di integrazione.
Offerte
L'integrazione delle offerte ti consente di trasmettere informazioni strutturate su promozioni e sconti del commerciante applicati a servizi specifici in momenti specifici. Le offerte sono costituite dall'offerta vera e propria (sconto percentuale, sconto in euro ...), finestre di validità (orari specifici, giorni della settimana ...) e utilizzi applicabili (l'offerta può essere utilizzata solo su determinati servizi), nonché da combinazioni complesse di limitazioni.
Esempi di offerte:
- Antipasti a metà prezzo il mercoledì e il giovedì di dicembre dalle 12:00 alle 17:00
- Acquista un dessert e ricevi il secondo in omaggio per la cena della Festa della mamma dalle 18:00 alle 22:00
- 5 $ di sconto su un piatto principale del brunch ogni domenica dalle 10:00 alle 14:00
- Sconto del 10% come offerta walk-in combinabile con lo sconto del 5% per gli abbonati premium e sconto del 5% se l'utente paga tramite la tua app.
Affinché un'offerta venga inclusa nell'integrazione, deve rientrare nel modello di dati tecnici e soddisfare i nostri requisiti di idoneità. Assicurati di esaminare le nostre norme relative alle offerte per assicurarti che l'integrazione sia conforme e per istruzioni su cosa fare con le offerte che non soddisfano i requisiti tecnici.
Implementazione delle offerte
L'integrazione delle offerte è costituita da due feed che verranno caricati giornalmente o con una frequenza che garantisce un'elevata precisione (riducendo l'obsolescenza):
OfferFeed
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
data | array di object(Offer) |
Offerta
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
offer_id | stringa | Obbligatorio | ID univoco dell'offerta. Obbligatorio. |
entity_ids | array di stringhe | Elenco dei commercianti che partecipano a questa offerta. | |
add_on_offer_applicable_to_all_entities | booleano | Se è vero, questa offerta è applicabile a tutte le entità dell'aggregatore. Valido solo per le offerte di componenti aggiuntivi. | |
offer_source | enum(OfferSource) | Obbligatorio | Un'offerta può essere fornita dall'aggregatore, da un singolo commerciante o anche da una terza parte come componente aggiuntivo. Obbligatorio. |
action_type | enum(ActionType) | Obbligatorio | Il servizio che fornisce l'offerta. Un offer_id può appartenere a un solo action_type. Se un'offerta può essere condivisa tra più tipi di servizio, è previsto che vengano create offerte duplicate con ID univoci per ogni tipo di servizio. Obbligatorio. |
offer_modes | array di enum(OfferMode) | Obbligatorio | I metodi con cui è possibile usufruire dell'offerta: senza prenotazione, con prenotazione, online e così via. Obbligatorio. |
offer_category | enum(OfferCategory) | Obbligatorio | La categoria dell'offerta. Obbligatorio. |
source_assigned_priority | numero | Numero intero non negativo ([1-100], dove 1 rappresenta la priorità più alta) che indica il livello di priorità dell'offerta assegnato dall'origine. Quando sono disponibili più offerte per lo stesso commerciante, questo sarà un segnale per il ranking delle offerte. 0 indica che la priorità non è impostata. | |
offer_details | oggetto(OfferDetails) | Obbligatorio | Dettagli dell'offerta, ad esempio sconto, costo della prenotazione e così via. Obbligatorio. |
offer_restrictions | oggetto(OfferRestrictions) | Obbligatorio | Descrive le limitazioni dell'offerta, ad esempio se è richiesto un abbonamento/strumento di pagamento, se l'offerta può essere combinata con altre offerte (e di quali tipi) e così via. Obbligatorio. |
coupon | oggetto(Coupon) | Dettagli di un coupon. Obbligatorio per offer_category: OFFER_CATEGORY_ADD_ON_COUPON_OFFER. | |
payment_instrument | oggetto(PaymentInstrument) | Dettagli di uno strumento di pagamento. Obbligatorio per offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER. | |
subscription | oggetto(Subscription) | Dettagli di un abbonamento. Obbligatorio per offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER. | |
terms | oggetto(Terms) | Obbligatorio | Termini e condizioni dell'offerta. Obbligatorio. |
validity_periods | array di object(ValidityPeriod) | Obbligatorio | Il periodo di validità dell'offerta. Descrive il periodo di tempo per cui l'offerta è valida, inclusi ora di inizio e di fine, giorni della settimana e così via. Obbligatorio. |
offer_url | stringa | URL della pagina dell'offerta del commerciante. Obbligatorio per offer_category: OFFER_CATEGORY_BASE_OFFER. | |
image_url | stringa | URL dell'immagine dell'offerta del commerciante. |
OfferDetails
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
offer_display_text | stringa | Obbligatorio | Il testo dell'offerta che il fornitore dell'offerta vuole mostrare ai clienti nella pagina dei risultati di ricerca. Obbligatorio. |
| oneOf(offer_specification) | Obbligatorio | È possibile impostare solo uno dei campi in questo oneOf. |
max_discount_value | oggetto(Money) | Lo sconto massimo di cui è possibile usufruire. Ad esempio, sconto del 10% fino a 100 €. | |
min_spend_value | oggetto(Money) | Il valore di spesa minimo per usufruire dello sconto. Ad esempio, 10% di sconto se il prezzo totale è pari o superiore a 100 $. | |
booking_cost | oggetto(Money) | Il costo per prenotare questa offerta. Ad esempio, 100 $ di sconto sul conto finale quando viene prenotato un tavolo al costo di 15 $. | |
booking_cost_unit | enum(FeeUnit) | L'unità del costo della prenotazione. Ad esempio, per persona, per transazione. | |
convenience_fee | oggetto(Fee) | ||
booking_cost_adjustable | booleano | Se il costo della prenotazione è regolabile, ovvero viene sottratto dalla fattura finale. Ad esempio: 30% di sconto sulla cena con prenotazione. Costo della prenotazione di 15 $che verranno applicati alla fattura finale. Quindi, la fattura finale è: Spesa totale - 30% - 15 $ | |
additional_fees | array di object(AdditionalFee) | Tariffe aggiuntive addebitate all'utente. Esempi: comodità, maneggevolezza e così via. |
Denaro
Rappresenta un importo di denaro con il relativo tipo di valuta.
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
currency_code | stringa | Il codice valuta di tre lettere definito nello standard ISO 4217. | |
units | stringa | Le unità intere dell'importo.
Ad esempio, se currencyCode è "USD" , un'unità corrisponde a un dollaro statunitense. | |
nanos | numero | Numero di unità nano (10^-9) dell'importo.
Il valore deve essere compreso tra -999.999.999 e +999.999.999 inclusi.
Se units è positivo, nanos deve essere positivo o zero.
Se units è zero, nanos può essere positivo, zero o negativo.
Se units è negativo, nanos deve essere negativo o zero.
Ad esempio, -1,75 $ è rappresentato come units =-1 e nanos =-750.000.000. |
A pagamento
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
unit | enum(FeeUnit) | ||
type | enum(FeeType) | ||
| oneOf(cost) | È possibile impostare solo uno dei campi in questo oneOf. |
MoneyRange
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
min_amount | oggetto(Money) | ||
max_amount | oggetto(Money) |
AdditionalFee
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
name | stringa | Obbligatorio | Il nome della tariffa aggiuntiva. Esempi: commissione per il servizio, commissione di gestione ecc. Obbligatorio. |
fee | oggetto(Fee) |
OfferRestrictions
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
combinable_with_other_offers | booleano | Se questa offerta può essere combinata con altre offerte. Se è true, i partner possono specificare con quali offerte può essere combinata questa offerta. Se sono impostati sia combinable_offer_categories che combinable_offer_ids, qualsiasi offerta che soddisfi una delle condizioni sopra indicate sarà combinabile. | |
combinable_offer_categories | array di enum(OfferCategory) | Elenco dei tipi di offerta con cui è possibile combinare questa offerta. Ad esempio, questa offerta potrebbe essere combinabile con altri coupon. Se combinable_with_other_offers è true e questo campo non è impostato, tutti i tipi saranno combinabili. | |
combinable_offer_ids | array di stringhe | Elenco degli offer_id con cui è possibile combinare questa offerta. Alcune offerte possono essere combinate solo con determinati altri offer_id specifici (possono essere considerate offerte principali). Se combinable_with_other_offers è true e questo campo non è impostato, tutti gli ID offerta saranno combinabili. | |
inclusions | array di object(OfferCondition) | Elenco delle condizioni che devono essere soddisfatte affinché l'offerta sia valida (ad es. bevande analcoliche, cibo). | |
exclusions | array di object(OfferCondition) | Elenco delle condizioni che invaliderebbero l'offerta (ad es. buffet, offerte combinate e cocktail). | |
min_guest | numero | Il numero minimo di persone richiesto per usufruire dell'offerta. | |
food_offer_restrictions | oggetto(FoodOfferRestrictions) | Limitazioni specifiche per le offerte di cibo. |
OfferCondition
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
description | stringa |
FoodOfferRestrictions
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
meal_types | array di enum(MealType) | I tipi di pasti a cui può essere applicata l'offerta, ad esempio pranzo o cena. Se non impostato, l'offerta può essere applicata a tutti i tipi di pasti. | |
restricted_to_certain_courses | booleano | Se l'offerta può essere applicata solo a determinati corsi. |
Coupon
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
text | stringa | Il testo del coupon che il fornitore dell'offerta vuole mostrare agli utenti. | |
code | stringa | Obbligatorio | Per utilizzare l'offerta è necessario un codice coupon. Obbligatorio. |
PaymentInstrument
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
items | array di object(PaymentInstrumentItem) | Obbligatorio | Elenco degli strumenti di pagamento che possono essere utilizzati per usufruire dell'offerta. Obbligatorio. |
provider_name | stringa | Obbligatorio | Nome del fornitore dello strumento di pagamento. Potrebbe essere un partner bancario, il nome di una banca e così via. Ad esempio: American Express, HDFC, ICICI. Obbligatorio. |
PaymentInstrumentItem
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
type | enum(PaymentInstrumentType) | Obbligatorio | Tipo di strumento di pagamento. Obbligatorio. |
name | stringa | Obbligatorio | Nome dell'elemento dello strumento di pagamento, ad esempio il nome della carta di credito. Ad esempio: HDFC Infinia, American Express Platinum. Obbligatorio. |
Abbonamento
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
name | stringa | Obbligatorio | Il nome dell'abbonamento. Obbligatorio. |
subscription_auto_added | booleano | Indica se l'abbonamento viene aggiunto automaticamente quando un utente usufruisce di questa offerta. | |
cost | oggetto(Money) | Obbligatorio | Il costo dell'abbonamento. Obbligatorio. |
subscription_duration | oggetto(Duration) | Obbligatorio | Per quanto tempo è valido l'abbonamento al costo dell'abbonamento. Obbligatorio. |
terms_and_conditions_url | stringa | URL dei termini e condizioni del partner pertinenti a questo abbonamento. |
Durata
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
seconds | stringa | Secondi firmati dell'intervallo di tempo. Deve essere compreso tra -315.576.000.000 e +315.576.000.000 inclusi. Nota: questi limiti vengono calcolati da: 60 sec/min * 60 min/ora * 24 ore/giorno * 365,25 giorni/anno * 10.000 anni | |
nanos | numero | Frazioni di secondo con segno con risoluzione di nanosecondi dell'intervallo
di tempo. Le durate inferiori a un secondo sono rappresentate con un campo seconds pari a 0 e un campo nanos positivo o negativo. Per durate
di un secondo o più, un valore diverso da zero per il campo nanos deve avere
lo stesso segno del campo seconds . Deve essere compreso tra -999.999.999
e +999.999.999 inclusi. |
Termini
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
url | stringa | URL dei termini e condizioni del partner. | |
restricted_to_certain_users | booleano | Indica se l'offerta è limitata a determinati utenti. | |
terms_and_conditions | stringa | Testo dei Termini e condizioni principali fornito dal partner. | |
additional_terms_and_conditions | array di stringhe | Termini e condizioni aggiuntivi rispetto a quelli principali del partner. |
ValidityPeriod
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
valid_period | oggetto(ValidityRange) | Il timestamp di inizio e di fine per cui è valida l'offerta. Questi orari devono rappresentare giorni distinti, ovvero l'ora di inizio deve essere 00:00 (inizio della giornata) e l'ora di fine deve essere 00:00 (esclusa) il giorno in cui termina il periodo di validità. | |
time_of_day | array di object(TimeOfDayWindow) | Specifica l'intervallo di tempo valido in un determinato giorno e i giorni in cui
l'offerta è disponibile.
Ad esempio:
Lunedì: dalle 10:00 alle 17:00
Martedì: dalle 10:00 alle 14:00
Martedì: dalle 17:00 alle 19:00
Mercoledì, giovedì, venerdì, sabato, domenica: dalle 15:00 alle 19:00
Se non è impostato alcun orario, l'offerta è disponibile in qualsiasi momento entro
valid_period . | |
time_exceptions | array di object(ValidTimeException) | Specifica le eccezioni ai valori valid_period e valid_time_of_week indicati sopra |
ValidityRange
Un intervallo di timestamp chiuso-aperto.
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
valid_from_time | oggetto(Timestamp) | Obbligatorio | L'ora di inizio dell'intervallo (inclusa). Obbligatorio. |
valid_through_time | oggetto(Timestamp) | L'ora di fine dell'intervallo (esclusa). Se non è impostato, significa che questo periodo non ha mai fine. (Facoltativo) |
Timestamp
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
seconds | stringa | Rappresenta i secondi di tempo UTC dall'epoca di Unix 1970-01-01T00:00:00Z. Deve essere compreso tra 0001-01-01T00:00:00Z e 9999-12-31T23:59:59Z inclusi. | |
nanos | numero | Frazioni di secondo non negative con risoluzione in nanosecondi. I valori negativi dei secondi con frazioni devono comunque avere valori di nanosecondi non negativi che contano in avanti nel tempo. Deve essere compreso tra 0 e 999.999.999 inclusi. |
TimeOfDayWindow
L'oggetto TimeWindow è un'entità composita che descrive un elenco di finestre in cui l'ordine dell'utente può essere effettuato o evaso.
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
time_windows | oggetto(TimeOfDayRange) | Obbligatorio | Il periodo di tempo in cui è possibile effettuare/evadere l'ordine. Obbligatorio. |
day_of_week | array di enum(DayOfWeek) | L'elenco dei giorni della settimana in cui vengono applicate le finestre. Se non ne viene impostato nessuno, significa che si applica a tutti i giorni della settimana. (Facoltativo) |
TimeOfDayRange
Un intervallo di tempo chiuso-aperto.
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
open_time | oggetto(TimeOfDay) | Un'ora che indica l'inizio del giorno dell'intervallo (incluso). Se non viene impostato, il valore è 00:00:00. (Facoltativo) | |
close_time | oggetto(TimeOfDay) | Un'ora che indica l'ora di fine del giorno dell'intervallo (esclusa). Se non è impostato, il valore è 23:59:59. (Facoltativo) |
TimeOfDay
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
hours | numero | Ore di un giorno nel formato 24 ore. Deve essere maggiore o uguale a 0 e in genere deve essere minore o uguale a 23. Un'API può scegliere di consentire il valore "24:00:00" per scenari come l'orario di chiusura dell'attività. | |
minutes | numero | Minuti di un'ora. Deve essere maggiore o uguale a 0 e minore o uguale a 59. | |
seconds | numero | Secondi di un minuto. Deve essere maggiore o uguale a 0 e in genere deve essere minore o uguale a 59. Un'API potrebbe consentire il valore 60 se consente i secondi intercalari. | |
nanos | numero | Frazioni di secondi, in nanosecondi. Deve essere maggiore o uguale a 0 e minore o uguale a 999.999.999. |
ValidTimeException
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
exceptional_period | oggetto(ValidityRange) | Il timestamp di inizio e di fine per cui l'offerta non è valida. Questi orari devono rappresentare giorni distinti, ovvero l'ora di inizio deve essere 00:00 (inizio della giornata) e l'ora di fine deve essere 00:00 (esclusa) il giorno in cui termina il periodo di eccezione. |
OfferSource
Nome | Descrizione |
---|---|
OFFER_SOURCE_UNSPECIFIED | |
OFFER_SOURCE_AGGREGATOR |
ActionType
Nome | Descrizione |
---|---|
ACTION_TYPE_UNSPECIFIED | |
ACTION_TYPE_DINING |
OfferMode
Nome | Descrizione |
---|---|
OFFER_MODE_OTHER | |
OFFER_MODE_WALK_IN | |
OFFER_MODE_FREE_RESERVATION | |
OFFER_MODE_PAID_RESERVATION | |
OFFER_MODE_ONLINE_ORDER |
OfferCategory
Categoria dell'offerta. Un'offerta di base è un'offerta standard disponibile per tutti i clienti, ad esempio uno sconto del 10% per una spesa superiore a 100 $. Un'offerta di base limitata da un coupon o uno strumento di pagamento avrà i rispettivi campi impostati. Abbiamo anche offerte di componenti aggiuntivi come ADD_ON_PAYMENT_OFFER. Queste offerte possono essere aggiunte ad altre offerte per ottenere sconti aggiuntivi.
Nome | Descrizione |
---|---|
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
Nome | Descrizione |
---|---|
FEE_UNIT_UNSPECIFIED | |
FEE_UNIT_PER_GUEST | |
FEE_UNIT_PER_TRANSACTION |
FeeType
Nome | Descrizione |
---|---|
FEE_TYPE_UNSPECIFIED | |
FEE_TYPE_FIXED | |
FEE_TYPE_VARIABLE |
MealType
Nome | Descrizione |
---|---|
MEAL_TYPE_UNSPECIFIED | |
MEAL_TYPE_BREAKFAST | |
MEAL_TYPE_LUNCH | |
MEAL_TYPE_DINNER |
PaymentInstrumentType
Nome | Descrizione |
---|---|
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED | |
PAYMENT_INSTRUMENT_CREDIT_CARD | |
PAYMENT_INSTRUMENT_DEBIT_CARD | |
PAYMENT_INSTRUMENT_BANK_ACCOUNT | |
PAYMENT_INSTRUMENT_UPI | |
PAYMENT_INSTRUMENT_ONLINE_WALLET |
DayOfWeek
Rappresenta un giorno della settimana.
Nome | Descrizione |
---|---|
DAY_OF_WEEK_UNSPECIFIED | Il giorno della settimana non è specificato. |
MONDAY | Lunedì |
TUESDAY | Martedì |
WEDNESDAY | Mercoledì |
THURSDAY | Giovedì |
FRIDAY | Venerdì |
SATURDAY | Sabato |
SUNDAY | Domenica |
offer_specification
Lo sconto può essere una percentuale o un valore fisso sottratto dal valore totale. Ad esempio: 1. 10% di sconto sulla fattura finale. 2. 15 $ di sconto su un ordine. I commercianti possono anche offrire sconti personalizzati come "Prendi due, paghi uno" tramite i campi di specifica pertinenti. Obbligatorio.
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
discount_percent | numero | Esclusivo con | Percentuale della fattura scontata. [0, 100] Per le offerte 1+1 o con sconto del 50% applicabili all'intero pasto (ad es. buffet 1+1, 1+1 sull'intero conto, 1+1 sul menu fisso), questo valore può essere impostato su 50. |
discount_value | oggetto(Money) | Esclusivo con | Valore fisso dello sconto. |
other_offer_detail_text | stringa | Esclusivo con | Testo in formato libero per descrivere lo sconto. Per le offerte specifiche 1+1 (ad es. 1+1 bevande, +1 piatto principale, 1+1 voci di menu selezionate), questi dettagli devono essere descritti qui. |
costo
Nome campo | Tipo | Requisito | Descrizione |
---|---|---|---|
amount | oggetto(Money) | Esclusivo con | |
amount_range | oggetto(MoneyRange) | Esclusivo con |
Caricamento del feed
Il
feed Offerte
deve essere caricato sul server SFTP del feed Generic
. Segui le istruzioni riportate nell'esercitazione su come utilizzare il server SFTP per i feed generici e utilizza il set name
impostato su google.offer
nel file descrittore.
Frequenza di caricamento
In generale, Google si aspetta un caricamento del feed al giorno. La frequenza può essere aumentata o diminuita a seconda della frequenza degli aggiornamenti delle offerte da parte tua per garantire una precisione costantemente elevata. Rivolgiti al tuo POC Google.
Prima di essere visualizzati su Google, i dati richiedono alcune ore.
Categorizzazione delle offerte
OFFER_CATEGORY_BASE_OFFER
: Offerte che possono essere richieste in modo indipendente senza essere combinate con altre offerte. Ad esempio:- Sconti fissi sull'intero conto (ad es. 20% di sconto)
- Offerte di abbonamento (ad es. Dolce senza costi con l'abbonamento)
- Offerte di pagamento nei casi in cui non sono presenti altre offerte di base per il ristorante
- Offerte aggiuntive: offerte che richiedono la rivendicazione di un'offerta base. Questi
includono:
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
(ad es. 10% di sconto aggiuntivo con carta di credito specifica)OFFER_CATEGORY_ADD_ON_COUPON_OFFER
(ad es. Bevanda senza costi con un codice coupon specifico)OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER
(ad es. Sconto aggiuntivo del 10% per gli abbonati)
Altre considerazioni:
- Quando un ristorante non ha impostato un'offerta di base, le offerte aggiuntive non vengono visualizzate.
Se non è presente un'offerta di base, qualsiasi offerta di pagamento, abbonamento o coupon che può
essere rivendicata senza dover essere aggiunta a un'altra offerta deve essere taggata come
OFFER_CATEGORY_BASE_OFFER
.- A seconda del tipo, devono essere impostati i dati pertinenti per
PaymentInstrument
,Subscription
oCoupon
. - I partner devono fornire due copie di ciascuna di queste offerte per coprire
gli scenari in cui funzionano sia come offerte di base sia come offerte aggiuntive. Il testo dell'offerta aggiuntiva può essere impostato per più ristoranti utilizzando
entity_ids
oadd_on_offer_applicable_to_all_entities
.
- A seconda del tipo, devono essere impostati i dati pertinenti per
- Quando un ristorante ha più offerte di base cumulabili, tutte le offerte di base devono essere taggate come
OFFER_CATEGORY_BASE_OFFER
e le offerte di base che sono offerte di pagamento, abbonamento o coupon devono essere inviate anche come tipo di offerta aggiuntiva pertinente. ValidityPeriod
deve essere utilizzato per attivare le offerte di componenti aggiuntivi come offerte di base solo quando non è presente un'offerta di base attiva.
Scenari di esempio:
Un ristorante offre il 5% di sconto se paghi con una carta di credito specifica e una bevanda senza costi con un codice coupon specifico
- L'offerta del 5% di sconto sulla carta di credito deve essere inviata in due copie, una contrassegnata come
OFFER_CATEGORY_BASE_OFFER
e l'altra comeOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
con i dettagliPaymentInstrument
inclusi. - L'offerta di una bevanda senza costi con un codice coupon deve essere inviata come
OFFER_CATEGORY_ADD_ON_COUPON_OFFER
con i dettagli diCoupon
inclusi.
- L'offerta del 5% di sconto sulla carta di credito deve essere inviata in due copie, una contrassegnata come
Un ristorante offre il 10% di sconto per i clienti che si presentano senza prenotazione e il 5% di sconto se pagano con una carta di credito specifica. Entrambi gli sconti possono essere combinati.
- L'offerta per i clienti che si presentano senza prenotazione deve essere taggata come
OFFER_CATEGORY_BASE_OFFER
. - L'offerta con carta di credito con sconto del 5% deve avere due copie, una taggata come
OFFER_CATEGORY_BASE_OFFER
e l'altra comeOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
.
- L'offerta per i clienti che si presentano senza prenotazione deve essere taggata come
Un ristorante offre uno sconto del 10% solo per il pranzo nei giorni feriali e del 5% in qualsiasi momento se paghi con una carta di credito specifica.
- L'offerta con sconto del 10% deve avere
ValidityPeriod
impostato per indicare solo durante l'orario di pranzo del ristorante nei giorni feriali. - L'offerta del 5% di sconto con carta di credito deve essere inviata in due copie.
- Una copia deve essere contrassegnata come
OFFER_CATEGORY_BASE_OFFER
con i dettagliPaymentInstrument
inclusi.ValidityPeriod
deve essere impostato per escludere le ore di pranzo nei giorni feriali quando l'offerta del 10% di sconto per il pranzo è attiva - Una copia deve essere taggata come
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
con i dettagli diPaymentInstrument
inclusi.
- Una copia deve essere contrassegnata come
- Tutte le altre offerte di pagamento per questo ristorante devono essere contrassegnate come
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
.
- L'offerta con sconto del 10% deve avere
Procedura di sviluppo e lancio
Durante l'integrazione, il Partner Portal potrà aiutarti fornendoti informazioni e feedback in base al tuo sviluppo. Il processo di sviluppo seguirà questo flusso:
- L'integrazione verrà sviluppata prima nell'ambiente sandbox. Devi utilizzare un'esportazione della produzione (o anche i dati di produzione direttamente) nell'ambiente sandbox di Google. Ciò contribuisce a garantire che il tuo sviluppo intercetti tutti i casi limite e consenta a Google di valutare la qualità dei dati e di fornirti un'assistenza migliore in base al tuo modello di dati.
- Una volta caricati in modo completo e giornaliero i feed di Merchant, Servizi e Offerte in modo coerente nell'ambiente sandbox di Google, il team di Google valuterà i tuoi feed. Una volta che il team di Google fornisce l'approvazione, puoi eseguire il push del codice in produzione e iniziare a inviare i dati di produzione all'ambiente di produzione di Google.
- Dopo aver testato completamente l'integrazione di produzione, anche il team di Google eseguirà dei test. Una volta completati tutti i test, l'integrazione verrà lanciata.
Monitoraggio
Per garantire una buona esperienza utente, Google verificherà che le offerte fornite siano valide, corrette e soddisfino i criteri delle nostre norme prima e dopo il lancio. A tal fine, Google utilizzerà una combinazione di revisione umana e automatica. Il risultato di queste revisioni sarà accessibile nella dashboard delle offerte del Centro azioni (solo produzione). Il risultato di questo monitoraggio potrebbe essere utilizzato per influire sul ranking delle offerte.
Controlli automatici (crawler)
Il team per la qualità di Google implementa i crawler. I crawler sono script che automatizzano un browser web per eseguire alcuni clic ed estrarre le informazioni sulle offerte, solo a scopo di test di qualità.
Numero di query
Ad esempio, se decidessimo di inviare 5000 controlli al giorno, ciò significa che 5000 volte al giorno (distribuiti uniformemente durante la giornata, ovvero circa uno ogni 17 secondi), il nostro crawler esegue tutte le azioni che un utente normale eseguirebbe:
- Inizia dalla Ricerca Google e fai clic sul link del partner.
- Cerca le informazioni sull'offerta.
- Se l'offerta richiede la prenotazione, continuerà verso il flusso di prenotazione per confermare che l'offerta è disponibile all'ora specificata (non verrà effettuata alcuna prenotazione).
Rilevamento di web scraper
Per assicurarti che lo scraper web non venga bloccato (il che potrebbe portare a concludere che le offerte non sono disponibili), assicurati che il tuo sistema consenta al nostro scraper web di eseguire query sulla tua pagina in qualsiasi momento. Per identificare il nostro web scraper:
- Lo user agent del web scraper conterrà la stringa "Google-Offers":
- Esempio: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
- Puoi anche verificare se le chiamate provengono da Google utilizzando il DNS inverso, come consigliato in "Verificare Googlebot e altri crawler di Google".
Nel nostro caso specifico, la risoluzione DNS inversa segue questo pattern:
google-proxy-***-***-***-***.google.com
.
Comportamento tecnico
Memorizzazione nella cache
Al fine di ridurre il carico sul sito web partner, i nostri crawler sono generalmente configurati per rispettare tutte le intestazioni di memorizzazione nella cache HTTP standard presenti nella risposta. Ciò significa che per i siti web configurati correttamente evitiamo di recuperare ripetutamente i contenuti che cambiano raramente (ad es. le librerie JavaScript). Per maggiori dettagli su come implementare la memorizzazione nella cache, leggi questa documentazione sulla memorizzazione nella cache HTTP.