Visão geral

Antes de iniciar a integração de ofertas, os parceiros precisam concluir a configuração da conta para uma etapa de integração baseada em comerciante ou entidade (piloto). Neste guia, detalharemos como implementar, testar e lançar esse recurso. Leia esta visão geral e as políticas de ofertas para prosseguir com as etapas de integração.

Ofertas

Com a integração de ofertas, você exibe informações estruturadas sobre promoções e descontos de comerciantes aplicados a serviços específicos em horários determinados. As ofertas incluem a oferta real (porcentagem de desconto, desconto em moeda etc.), as janelas de validade (horários ou dias da semana específicos etc.) e os usos aplicáveis (a oferta só pode ser usada em determinados serviços), além de combinações complexas de restrições.

Exemplos de ofertas:

  • Aperitivos pela metade do preço às quartas e quintas de dezembro, das 12h às 17h.
  • Compre uma sobremesa e ganhe outra para o jantar do dia das mães das 18h às 22h.
  • R$ 5 de desconto em entradas de brunch todos os domingos, das 10h às 14h.
  • 10% de desconto como oferta sem agendamento, combinável com 5% de desconto para assinantes premium e 5% de desconto se o usuário pagar pelo seu app.

Para que uma oferta possa ser incluída na integração, ela precisa seguir o modelo de dados técnicos e atender aos nossos requisitos de qualificação. Consulte nossas políticas de ofertas para garantir a conformidade e saber como lidar com itens que não se encaixam nos requisitos técnicos.

Implementação de ofertas

A integração de ofertas consiste em dois feeds que são enviados diariamente ou com uma frequência que garante alta precisão (ou seja, reduz a defasagem):

OfferFeed

Nome do campoTipoRequisitoDescrição
datamatriz de objeto
(Offer)

Oferta

Nome do campoTipoRequisitoDescrição
offer_idstring

Obrigatório

ID exclusivo da oferta. Obrigatório.
entity_idsmatriz de strings

Lista de comerciantes que estão participando desta oferta.
add_on_offer_applicable_to_all_entitiesbooleano

Se for "true", a oferta será aplicável a todas as entidades do agregador. Aplicável somente a ofertas complementares.
offer_sourceenum
(OfferSource)

Obrigatório

Uma oferta pode ser fornecida pelo agregador, por um comerciante individual ou até mesmo por um terceiro como um complemento. Obrigatório.
action_typeenum
(ActionType)

Obrigatório

O serviço que está oferecendo a promoção. Um offer_id pode pertencer a apenas um action_type. Se uma oferta puder ser compartilhada em vários tipos de serviço, será necessário criar ofertas duplicadas com IDs exclusivos para cada tipo de serviço. Obrigatório.
offer_modesmatriz de enum
(OfferMode)

Obrigatório

Os métodos de aproveitamento da oferta: sem reserva, com reserva, on-line etc. Obrigatório.
offer_categoryenum
(OfferCategory)

Obrigatório

A categoria da oferta. Obrigatório.
source_assigned_prioritynúmero

Número inteiro não negativo ([1 a 100], em que 1 representa a prioridade mais alta) que indica o nível de prioridade da oferta atribuída pela fonte. Quando várias ofertas estão disponíveis para o mesmo comerciante, isso é um indicador para a classificação delas. "0" representa que a prioridade não está definida.
offer_detailsobject
(OfferDetails)

Obrigatório

Detalhes da oferta, como desconto, custo da reserva etc. Obrigatório.
offer_restrictionsobject
(OfferRestrictions)

Obrigatório

Descreve como a oferta é restrita, ou seja, se é necessário ter uma assinatura/instrumento de pagamento, se ela pode ser combinada com outras ofertas (e quais tipos) etc. Obrigatório.
couponobject
(Coupon)

Detalhes de um cupom. Obrigatório para offer_category: OFFER_CATEGORY_ADD_ON_COUPON_OFFER.
payment_instrumentobject
(PaymentInstrument)

Detalhes de um instrumento de pagamento. Obrigatório para offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
subscriptionobject
(Subscription)

Detalhes de uma assinatura. Obrigatório para offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER.
termsobject
(Terms)

Obrigatório

Termos e Condições da oferta. Obrigatório.
validity_periodsmatriz de objeto
(ValidityPeriod)

Obrigatório

O período de validade da oferta. Descreve o período em que a oferta é válida, incluindo horários de início e término, dias da semana etc. Obrigatório.
offer_urlstring

URL da página de oferta do comerciante. Obrigatório para offer_category: OFFER_CATEGORY_BASE_OFFER.
image_urlstring

URL da imagem da oferta do comerciante.

OfferDetails

Nome do campoTipoRequisitoDescrição
offer_display_textstring

Obrigatório

O texto da oferta que o provedor quer mostrar aos clientes na página de resultados da pesquisa. Obrigatório.
oneOf
(offer_specification)

Obrigatório

Apenas um dos campos neste "oneOf" pode ser definido.
max_discount_valueobject
(Money)

O desconto máximo que pode ser aproveitado. Por exemplo, 10% de desconto em até R $100.
min_spend_valueobject
(Money)

O valor mínimo de gasto para aproveitar o desconto. Por exemplo, 10% de desconto quando o preço total for de US $100 ou mais.
booking_costobject
(Money)

O custo para reservar esta oferta. Por exemplo, R$ 100 de desconto na conta final quando uma mesa é reservada ao custo de R $15.
booking_cost_unitenum
(FeeUnit)

A unidade do custo da reserva. Por exemplo, por pessoa, por transação.
convenience_feeobject
(Fee)

booking_cost_adjustablebooleano

Se o custo da reserva é ajustável, ou seja, se ele é subtraído da fatura final. Por exemplo: 30% de desconto no jantar com reserva. O custo para reservar é de US $15, que será aplicado à fatura final. Portanto, a fatura final é: Total gasto - 30% - US$ 15
additional_feesmatriz de objeto
(AdditionalFee)

Taxas extras cobradas do usuário. Exemplos: conveniência, manuseio etc.

Dinheiro

Representa um montante em dinheiro com o respectivo tipo de moeda.

Nome do campoTipoRequisitoDescrição
currency_codestring

O código de moeda de três letras definido no ISO 4217.
unitsstring

As unidades inteiras do montante. Por exemplo, se currencyCode for "USD", então 1 unidade equivalerá a um dólar americano.
nanosnúmero

Número de unidades nano (10^-9) do montante. É necessário que o valor fique entre -999.999.999 e +999.999.999 (inclusive os dois limites). Se units for positivo, nanos será positivo ou zero. Se units for zero, nanos poderá ser positivo, zero ou negativo. Se units for negativo, nanos será negativo ou zero. Por exemplo,US $-1,75 é representado como units=-1 e nanos=-750.000.000.

Fee

Nome do campoTipoRequisitoDescrição
unitenum
(FeeUnit)

typeenum
(FeeType)

oneOf
(cost)

Apenas um dos campos neste "oneOf" pode ser definido.

MoneyRange

Nome do campoTipoRequisitoDescrição
min_amountobject
(Money)

max_amountobject
(Money)

AdditionalFee

Nome do campoTipoRequisitoDescrição
namestring

Obrigatório

O nome da taxa adicional. Exemplos: taxa de conveniência, taxa de manuseio etc. Obrigatório.
feeobject
(Fee)

OfferRestrictions

Nome do campoTipoRequisitoDescrição
combinable_with_other_offersbooleano

Se esta oferta pode ser combinada com outras. Quando definido como "true", os parceiros podem especificar com quais ofertas esta pode ser combinada. Se combinable_offer_categories e combinable_offer_ids estiverem definidos, qualquer oferta que corresponda a uma das condições acima poderá ser combinada.
combinable_offer_categoriesmatriz de enum
(OfferCategory)

Lista de tipos de ofertas que podem ser combinadas com esta. Por exemplo, esta oferta pode ser combinada com outros cupons. Se "combinable_with_other_offers" for verdadeiro e esse campo não estiver definido, todos os tipos poderão ser combinados.
combinable_offer_idsmatriz de strings

Lista de "offer_ids" que podem ser combinados com esta oferta. Algumas ofertas só podem ser combinadas com determinados outros offer_ids específicos (podem ser consideradas ofertas principais). Se "combinable_with_other_offers" for verdadeiro e esse campo não estiver definido, todos os IDs de oferta poderão ser combinados.
inclusionsmatriz de objeto
(OfferCondition)

Lista de condições que precisam ser atendidas para que a oferta seja válida (por exemplo, bebidas não alcoólicas, comida).
exclusionsmatriz de objeto
(OfferCondition)

Lista de condições que invalidariam a oferta (por exemplo, buffet, combos e coquetéis).
min_guestnúmero

O número mínimo de pessoas necessárias para aproveitar a oferta.
food_offer_restrictionsobject
(FoodOfferRestrictions)

Restrições específicas a ofertas de alimentos.

OfferCondition

Nome do campoTipoRequisitoDescrição
descriptionstring

FoodOfferRestrictions

Nome do campoTipoRequisitoDescrição
meal_typesmatriz de enum
(MealType)

Os tipos de refeição a que a oferta pode ser aplicada, como almoço ou jantar. Se não for definido, a oferta poderá ser aplicada a todos os tipos de refeição.
restricted_to_certain_coursesbooleano

Se a oferta só pode ser aplicada a determinados cursos.

Cupom

Nome do campoTipoRequisitoDescrição
textstring

O texto do cupom que o provedor da oferta quer mostrar aos usuários.
codestring

Obrigatório

É necessário um código de cupom para resgatar a oferta. Obrigatório.

PaymentInstrument

Nome do campoTipoRequisitoDescrição
itemsmatriz de objeto
(PaymentInstrumentItem)

Obrigatório

Lista de instrumentos de pagamento que podem ser usados para aproveitar a oferta. Obrigatório.
provider_namestring

Obrigatório

Nome do provedor do instrumento de pagamento. Pode ser um parceiro bancário, o nome de um banco etc. Por exemplo: American Express, HDFC, ICICI. Obrigatório.

PaymentInstrumentItem

Nome do campoTipoRequisitoDescrição
typeenum
(PaymentInstrumentType)

Obrigatório

Tipo do instrumento de pagamento. Obrigatório.
namestring

Obrigatório

Nome do item do instrumento de pagamento, como o nome do cartão de crédito. Por exemplo: HDFC Infinia, American Express Platinum. Obrigatório.

Assinatura

Nome do campoTipoRequisitoDescrição
namestring

Obrigatório

O nome da assinatura. Obrigatório.
subscription_auto_addedbooleano

Indica se a assinatura é adicionada automaticamente quando um usuário aproveita esta oferta.
costobject
(Money)

Obrigatório

O custo da assinatura. Obrigatório.
subscription_durationobject
(Duration)

Obrigatório

Por quanto tempo a assinatura é válida no subscription_cost. Obrigatório.
terms_and_conditions_urlstring

URL dos Termos e Condições do parceiro relevantes para esta assinatura.

Duração

Nome do campoTipoRequisitoDescrição
secondsstring

Segundos assinados do período. Precisa estar entre -315.576.000.000 e +315.576.000.000 (inclusive). Observação: esses limites são calculados com base em: 60 s/min * 60 min/h * 24 h/dia * 365,25 dias/ano * 10.000 anos
nanosnúmero

Frações assinadas de um segundo com resolução de nanossegundos do período. Durações menores que um segundo são representadas com um campo 0 seconds e um campo nanos positivo ou negativo. Para durações de um segundo ou mais, um valor diferente de zero para o campo nanos precisa ter o mesmo sinal do campo seconds. Precisa estar entre -999.999.999 e +999.999.999 (inclusive).

Termos

Nome do campoTipoRequisitoDescrição
urlstring

URL dos Termos e Condições do parceiro.
restricted_to_certain_usersbooleano

Se a oferta é restrita a determinados usuários.
terms_and_conditionsstring

Texto principal dos Termos e Condições fornecido pelo parceiro.
additional_terms_and_conditionsmatriz de strings

Termos e condições além dos T&C principais do parceiro.

ValidityPeriod

Nome do campoTipoRequisitoDescrição
valid_periodobject
(ValidityRange)

O carimbo de data/hora de início e término da validade da oferta. Esses horários precisam representar dias distintos. Ou seja, o horário de início precisa ser 00:00 (início do dia) e o horário de término precisa ser 00:00 (exclusivo) no dia em que o período de validade termina.
time_of_daymatriz de objeto
(TimeOfDayWindow)

Especifica o intervalo de tempo válido em um determinado dia e quais dias estão disponíveis para a oferta. Por exemplo: Segunda-feira: das 10h às 17h Terça-feira: das 10h às 14h Terça-feira: das 17h às 19h Quarta, quinta, sexta, sábado e domingo: das 15h às 19h Se nenhum horário for definido, isso significa que a oferta está disponível o tempo todo dentro de valid_period.
time_exceptionsmatriz de objeto
(ValidTimeException)

Especifica exceções para valid_period e valid_time_of_week acima.

ValidityRange

Um intervalo de carimbos de data/hora fechado.

Nome do campoTipoRequisitoDescrição
valid_from_timeobject
(Timestamp)

Obrigatório

O horário de início do intervalo (inclusivo). Obrigatório.
valid_through_timeobject
(Timestamp)

O horário de término do intervalo (exclusivo). Se não for definido, significa que esse período nunca termina. Opcional.

Carimbo de data/hora

Nome do campoTipoRequisitoDescrição
secondsstring

Representa os segundos do horário UTC desde a época Unix 1970-01-01T00:00:00Z. Precisa ser de 0001-01-01T00:00:00Z a 9999-12-31T23:59:59Z (inclusive).
nanosnúmero

Frações não negativas de um segundo com resolução de nanossegundos. Os valores de segundos negativos com frações ainda precisam ter valores em nanossegundos não negativos que representam períodos posteriores. O valor precisa ser de 0 a 999.999.999 (inclusive).

TimeOfDayWindow

O objeto TimeWindow é uma entidade composta que descreve uma lista de períodos em que o pedido do usuário pode ser feito ou atendido.

Nome do campoTipoRequisitoDescrição
time_windowsobject
(TimeOfDayRange)

Obrigatório

O período em que o pedido pode ser feito/atendido. Obrigatório.
day_of_weekmatriz de enum
(DayOfWeek)

A lista de dias da semana em que as janelas são aplicadas. Se nenhum for definido, isso significa que ele se aplica a todos os dias da semana. Opcional.

TimeOfDayRange

Um período fechado.

Nome do campoTipoRequisitoDescrição
open_timeobject
(TimeOfDay)

Um horário que indica o início do dia do período (inclusive). Se não for definido, significa 00:00:00. Opcional.
close_timeobject
(TimeOfDay)

Um Time que indica o horário de término do dia do intervalo (exclusivo). Se não for definido, o horário será 23:59:59. Opcional.

TimeOfDay

Nome do campoTipoRequisitoDescrição
hoursnúmero

Horas de um dia no formato de 24 horas. Precisa ser maior ou igual a 0 e geralmente menor ou igual a 23. Uma API pode permitir o valor "24:00:00" para o horário de fechamento da empresa, por exemplo.
minutesnúmero

Minutos de uma hora. Precisa ser maior ou igual a 0 e menor ou igual a 59.
secondsnúmero

Segundos de um minuto. Precisa ser maior ou igual a 0 e normalmente menor ou igual a 59. Será possível usar o valor 60 caso a API permita segundos bissextos.
nanosnúmero

Frações de segundos, em nanossegundos. Precisa ser maior ou igual a 0 e menor ou igual a 999.999.999.

ValidTimeException

Nome do campoTipoRequisitoDescrição
exceptional_periodobject
(ValidityRange)

O carimbo de data/hora de início e fim em que a oferta não é válida. Esses horários precisam representar dias distintos. Ou seja, o horário de início precisa ser 00:00 (início do dia) e o horário de término precisa ser 00:00 (exclusivo) no dia em que o período de exceção termina.

OfferSource

NomeDescrição
OFFER_SOURCE_UNSPECIFIED
OFFER_SOURCE_AGGREGATOR

ActionType

NomeDescrição
ACTION_TYPE_UNSPECIFIED
ACTION_TYPE_DINING

OfferMode

NomeDescrição
OFFER_MODE_OTHER
OFFER_MODE_WALK_IN
OFFER_MODE_FREE_RESERVATION
OFFER_MODE_PAID_RESERVATION
OFFER_MODE_ONLINE_ORDER

OfferCategory

Categoria da oferta. Uma oferta básica é uma oferta padrão disponível para todos os clientes, como 10% de desconto em gastos acima de US $100. Uma oferta básica restrita por um cupom ou instrumento de pagamento terá os respectivos campos definidos. Também temos ofertas de complemento x, como ADD_ON_PAYMENT_OFFER. Essas ofertas podem ser adicionadas a outras para ganhar mais descontos.

NomeDescrição
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

NomeDescrição
FEE_UNIT_UNSPECIFIED
FEE_UNIT_PER_GUEST
FEE_UNIT_PER_TRANSACTION

FeeType

NomeDescrição
FEE_TYPE_UNSPECIFIED
FEE_TYPE_FIXED
FEE_TYPE_VARIABLE

MealType

NomeDescrição
MEAL_TYPE_UNSPECIFIED
MEAL_TYPE_BREAKFAST
MEAL_TYPE_LUNCH
MEAL_TYPE_DINNER

PaymentInstrumentType

NomeDescrição
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED
PAYMENT_INSTRUMENT_CREDIT_CARD
PAYMENT_INSTRUMENT_DEBIT_CARD
PAYMENT_INSTRUMENT_BANK_ACCOUNT
PAYMENT_INSTRUMENT_UPI
PAYMENT_INSTRUMENT_ONLINE_WALLET

DayOfWeek

Representa um dia da semana.

NomeDescrição
DAY_OF_WEEK_UNSPECIFIEDO dia da semana não é especificado.
MONDAYSegunda-feira
TUESDAYTerça-feira
WEDNESDAYQuarta-feira
THURSDAYQuinta-feira
FRIDAYSexta-feira
SATURDAYSábado
SUNDAYDomingo

offer_specification

O desconto pode ser uma porcentagem ou um valor fixo subtraído do valor total. Por exemplo: 1. 10% de desconto na conta final. 2. US$ 15 de desconto em um pedido. Os comerciantes também podem oferecer descontos personalizados, como "compre um e ganhe outro sem custo financeiro", nos campos de especificação relevantes. Obrigatório.

Nome do campoTipoRequisitoDescrição
discount_percentnúmero

Mutuamente exclusivo com discount_value, other_offer_detail_text

Porcentagem da fatura com desconto. [0, 100] Para promoções de 1+1 ou 50% de desconto aplicáveis a toda a refeição (por exemplo, buffet 1+1, 1+1 na conta inteira, 1+1 no menu fixo), esse valor pode ser definido como 50.
discount_valueobject
(Money)

Mutuamente exclusivo com discount_percent, other_offer_detail_text

Valor fixo do desconto.
other_offer_detail_textstring

Mutuamente exclusivo com discount_percent, discount_value

Texto em formato livre para descrever o desconto. Para ofertas específicas de 1+1 (por exemplo, 1+1 bebidas, +1 prato principal, 1+1 itens selecionados do menu), esses detalhes devem ser descritos aqui.

custo

Nome do campoTipoRequisitoDescrição
amountobject
(Money)

Mutuamente exclusivo com amount_range

amount_rangeobject
(MoneyRange)

Mutuamente exclusivo com amount

Upload do feed

O feed de ofertas precisa ser enviado para o servidor SFTP de feeds Generic. Siga o tutorial Como usar o servidor SFTP genérico de feeds para instruções e use o name definido como google.offer no arquivo descritor.

Frequência de envio

Em geral, o Google espera um upload de feed por dia. A frequência pode ser aumentada ou diminuída dependendo da frequência de atualizações de ofertas no seu lado para garantir uma precisão consistentemente alta. Consulte seu contato principal do Google.

Os dados vão levar algumas horas para aparecer no Google.

Categorização de ofertas

  • OFFER_CATEGORY_BASE_OFFER: ofertas que podem ser reivindicadas de forma independente sem serem combinadas com outras. Isso inclui o seguinte:
    • Descontos fixos em toda a conta (por exemplo, 20% de desconto)
    • Ofertas de assinatura (por exemplo, Sobremesa sem custo financeiro com assinatura)
    • Ofertas de pagamento em casos em que não há outras ofertas básicas para o restaurante
  • Ofertas complementares: ofertas que exigem o resgate de uma oferta básica. São elas:
    • OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER (ex., Mais 10% de desconto com cartão de crédito específico)
    • OFFER_CATEGORY_ADD_ON_COUPON_OFFER (ex., Bebida sem custo financeiro com um código de cupom específico)
    • OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER (ex., Mais 10% de desconto para assinantes)

Outras considerações:

  • Quando um restaurante não tem uma oferta básica definida, as ofertas complementares não são exibidas. Se não houver uma oferta básica, qualquer oferta de pagamento, assinatura ou cupom que possa ser reivindicada sem precisar ser adicionada a outra oferta precisa ser marcada como OFFER_CATEGORY_BASE_OFFER.
    • Dependendo do tipo, os dados relevantes para PaymentInstrument, Subscription ou Coupon precisam ser definidos.
    • Os parceiros precisam fornecer duas cópias de cada uma dessas ofertas para cobrir cenários em que elas funcionam como ofertas básicas e complementares. O texto da oferta de complemento pode ser definido para vários restaurantes usando entity_ids ou add_on_offer_applicable_to_all_entities.
  • Quando um restaurante tem várias ofertas básicas que podem ser combinadas, todas elas precisam ser marcadas como OFFER_CATEGORY_BASE_OFFER. Além disso, as ofertas básicas de pagamento, assinatura ou cupom precisam ser enviadas como o tipo de oferta complementar relevante.
  • O ValidityPeriod deve ser usado para ativar ofertas de complemento como ofertas básicas apenas quando não houver uma oferta básica ativa.

Cenários de exemplo:

  • Um restaurante oferece 5% de desconto ao pagar com um cartão de crédito específico e uma bebida sem custo financeiro com um código de cupom específico.

    • A oferta de 5% de desconto no cartão de crédito deve ser enviada em duas cópias, uma marcada como OFFER_CATEGORY_BASE_OFFER e outra como OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER com os detalhes de PaymentInstrument incluídos.
    • A oferta de bebida sem custo financeiro com um código de cupom precisa ser enviada como OFFER_CATEGORY_ADD_ON_COUPON_OFFER com os detalhes de Coupon incluídos.
  • Um restaurante oferece 10% de desconto para clientes sem reserva e 5% de desconto para pagamentos com um cartão de crédito específico. Os dois descontos podem ser combinados.

    • A oferta de 10% para clientes sem hora marcada precisa ser marcada como OFFER_CATEGORY_BASE_OFFER.
    • A oferta de 5% de desconto no cartão de crédito precisa ter duas cópias, uma marcada como OFFER_CATEGORY_BASE_OFFER e outra como OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
  • Um restaurante oferece 10% de desconto apenas no almoço durante a semana e 5% de desconto a qualquer hora ao pagar com um cartão de crédito específico.

    • O desconto de 10% precisa ter ValidityPeriod definido para indicar apenas durante o horário de almoço do restaurante em dias úteis.
    • A oferta de 5% de desconto no cartão de crédito precisa ser enviada em duas cópias.
      • Uma cópia precisa ser marcada como OFFER_CATEGORY_BASE_OFFER com os detalhes de PaymentInstrument incluídos. ValidityPeriod deve ser definido para excluir o horário de almoço nos dias de semana quando a oferta de 10% de desconto no almoço estiver ativa.
      • Uma cópia precisa ser marcada como OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER com os detalhes de PaymentInstrument incluídos.
    • Todas as outras ofertas de pagamento para este restaurante devem ser marcadas como OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.

Processo de desenvolvimento e lançamento

Durante a integração, o portal de parceiros vai ajudar você com informações e feedback com base no seu desenvolvimento. O processo de desenvolvimento segue estas etapas:

  • A integração começará no ambiente de sandbox. É preciso usar uma exportação de produção (ou até mesmo dados de produção diretamente) no ambiente de sandbox do Google. Assim, você garante que seu desenvolvimento identifique todos os casos extremos, e o Google consegue avaliar a qualidade dos dados e auxiliar no processo com base no modelo.
  • Quando você envia os feeds completos de serviços, transações e comerciantes diariamente ao ambiente de sandbox do Google, a equipe do Google consegue avaliá-los. Assim que receber nossa aprovação, você poderá enviar seu código para produção e transmitir os dados de produção para o ambiente do Google correspondente.
  • Depois que você testar a integração de produção, a equipe do Google fará outro teste. A integração será iniciada após esse processo.

Monitoramento

Para garantir uma boa experiência do usuário, o Google vai verificar se as ofertas fornecidas são válidas, corretas e atendem aos critérios da nossa política antes e depois do lançamento. Para isso, o Google vai usar uma combinação de análise humana e automatizada. O resultado dessas análises vai estar disponível no Painel de ofertas da Central de ações (somente produção). O resultado desse monitoramento pode ser usado para afetar a classificação das ofertas.

Verificações automatizadas (rastreadores)

A equipe de qualidade do Google implementa rastreadores. Os rastreadores são scripts que automatizam um navegador da Web para realizar alguns cliques e extrair informações de ofertas, apenas para fins de teste de qualidade.

Número de consultas

Por exemplo, se decidirmos enviar 5.000 verificações por dia, isso significa que 5.000 vezes por dia (distribuídas uniformemente ao longo do dia, ou seja, aproximadamente uma a cada 17 segundos), nosso rastreador realiza todas as ações a seguir que um usuário comum faria:

  • Comece na Pesquisa Google e clique no link do parceiro.
  • Procure as informações da oferta.
  • Se a oferta exigir uma reserva, ela vai continuar para o fluxo de reserva e confirmar se está disponível no horário especificado (nenhuma reserva será feita).

Detecção de web scraper

Para garantir que o web scraper não seja banido (o que pode levar à conclusão de que as ofertas não estão disponíveis), verifique se o sistema permite que nosso web scraper consulte sua página a qualquer momento. Para identificar nosso web scraper:

  • O user agent do web scraper vai conter a string "Google-Offers":
    • Exemplo:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
  • Você também pode verificar se as chamadas vêm do Google usando o DNS reverso, conforme recomendado em "Como verificar o Googlebot e outros rastreadores do Google". No nosso caso específico, a resolução de DNS reverso segue este padrão: google-proxy-***-***-***-***.google.com.

Comportamento técnico

Armazenamento em cache

Para reduzir a carga no site do parceiro, nossos rastreadores geralmente são configurados para respeitar todos os cabeçalhos de cache HTTP padrão presentes na resposta. Isso significa que, para sites configurados corretamente, evitamos buscar repetidamente conteúdo que muda raramente, como bibliotecas JavaScript. Para mais detalhes sobre como implementar o armazenamento em cache, leia esta documentação sobre cache HTTP.