Integración del feed de ofertas

Ofertas

La integración de ofertas te permite transmitir información estructurada sobre las promociones y los descuentos de los comercios que se aplican a servicios específicos en momentos determinados. Las ofertas se componen de la oferta real (porcentaje de descuento, descuento en dólares…), los períodos de validez (horas específicas, días de la semana…) y los usos aplicables (la oferta solo se puede usar en ciertos servicios), así como de combinaciones complejas de restricciones.

Ejemplos de ofertas:

  • Aperitivos a mitad de precio los miércoles y jueves de diciembre, de 12 p.m. a 5 p.m.
  • Compra un postre y obtén otro gratis para la cena del Día de la Madre, de 18:00 a 22:00
  • Descuento de USD 5 en platos de entrada todos los domingos, de 10 a.m. a 2 p.m.
  • 10% de descuento como oferta para clientes sin reserva, combinable con un 5% de descuento para suscriptores premium y un 5% de descuento si el usuario paga a través de tu app.

Para que una oferta se incluya en la integración, debe ajustarse al modelo de datos técnicos y cumplir con nuestros requisitos de elegibilidad. Asegúrate de revisar nuestras políticas de ofertas para garantizar que tu integración cumpla con los requisitos y obtener instrucciones sobre qué hacer con las ofertas que no cumplen con los requisitos técnicos.

Implementación de las ofertas

La integración de ofertas consta de dos feeds que se subirán diariamente o con una frecuencia que garantice una precisión alta (es decir, que reduzca la obsolescencia):

OfferFeed

Nombre del campoTipoRequisitoDescripción
dataarray de objeto
(Offer)

Oferta

Nombre del campoTipoRequisitoDescripción
offer_idstring

Obligatorio

Es el ID único de la oferta. Obligatorio.
entity_idsarray de cadenas

Es la lista de comercios que participan en esta oferta.
add_on_offer_applicable_to_all_entitiesbooleano

Si es verdadero, esta oferta se aplica a todas las entidades del agregador. Solo se aplica a las ofertas de complementos.
offer_sourceenum
(OfferSource)

Obligatorio

El agregador, un comercio individual o incluso un tercero pueden proporcionar una oferta como complemento. Obligatorio.
action_typeenum
(ActionType)

Obligatorio

Es el servicio que proporciona la oferta. Un offer_id solo puede pertenecer a un action_type. Si una oferta se puede compartir en varios tipos de servicios, se espera que se creen ofertas duplicadas con IDs únicos para cada tipo de servicio. Obligatorio.
offer_modesArray de enum
(OfferMode)

Obligatorio

Son los métodos por los que se puede acceder a la oferta: sin reserva, con reserva, en línea, etcétera. Se requiere este campo.
offer_categoryenum
(OfferCategory)

Obligatorio

Es la categoría de la oferta. Obligatorio.
source_assigned_prioritynúmero

Es un número entero no negativo ([1-100], donde 1 representa la prioridad más alta) que indica el nivel de prioridad de la oferta asignada por la fuente. Cuando haya varias ofertas disponibles para el mismo comercio, esto será un indicador para clasificarlas. El 0 representaría que no se estableció la prioridad.
offer_detailsobjeto
(OfferDetails)

Obligatorio

Son los detalles de la oferta, como el descuento, el costo de la reserva, etcétera (obligatorio).
offer_restrictionsobjeto
(OfferRestrictions)

Obligatorio

Describe cómo se restringe la oferta, es decir, si se requiere un instrumento de suscripción o pago, si esta oferta se puede combinar con otras (y de qué tipos), etcétera. Es obligatorio.
couponobjeto
(Coupon)

Son los detalles de un cupón. Obligatorio para offer_category: OFFER_CATEGORY_ADD_ON_COUPON_OFFER.
payment_instrumentobjeto
(PaymentInstrument)

Son los detalles de un instrumento de pago. Es obligatorio para offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
subscriptionobjeto
(Subscription)

Son los detalles de una suscripción. Se requiere para offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER.
termsobjeto
(Terms)

Obligatorio

Términos y Condiciones de la oferta Obligatorio.
validity_periodsarray de objeto
(ValidityPeriod)

Obligatorio

Es el período de validez de la oferta. Describe el período de validez de la oferta, incluidas las horas de inicio y finalización, los días de la semana, etcétera. Es obligatorio.
offer_urlstring

Es la URL de la página de ofertas del comercio. Se requiere para offer_category: OFFER_CATEGORY_BASE_OFFER.
tagsarray de enum
(OfferTag)

Son las etiquetas especiales asociadas con la oferta. Se usa para identificar ofertas especiales, como "Festive", "Top Rated", "Most booked", etcétera.
brand_idstring

Identifica la marca asociada con la oferta. Si no se establece, se usa la marca predeterminada.
availability_levelenum
(AvailabilityLevel)

Es el nivel de disponibilidad de la oferta.

OfferDetails

Nombre del campoTipoRequisitoDescripción
offer_display_textstring

Obligatorio

Es el texto de la oferta que el proveedor de la oferta desea mostrar a los clientes en la página de resultados de búsqueda. Ten en cuenta que es posible que esto no sea exactamente lo que se muestra a los usuarios, y que usemos otros metadatos para reescribirlo o reformularlo. Obligatorio.
oneOf
(offer_specification)

Obligatorio

Solo se puede establecer uno de los campos de este oneOf.
max_discount_valueobjeto
(Money)

Es el descuento máximo que se puede obtener. Por ejemplo, un 10% de descuento hasta USD 100.
min_spend_valueobjeto
(Money)

Es el valor de inversión mínimo para aprovechar el descuento. Por ejemplo, un 10% de descuento cuando el precio total es de USD 100 o más.
booking_costobjeto
(Money)

Es el costo para reservar esta oferta. Por ejemplo, USD 100 de descuento en la factura final cuando se reserva una mesa por USD 15.
booking_cost_unitenum
(FeeUnit)

Es la unidad del costo de la reserva. Por ejemplo, por persona o por transacción.
convenience_feeobjeto
(Fee)

booking_cost_adjustablebooleano

Indica si el costo de la reserva es ajustable, es decir, si se resta de la factura final. Por ejemplo: 30% de descuento en la cena con reserva. El costo de la reserva es de USD 15 y se aplicará a la factura final. Por lo tanto, la factura final es: Total invertido - 30% - USD 15
additional_feesarray de objetos
(AdditionalFee)

Son las tarifas adicionales que se cobran al usuario. Ejemplos: cargos por conveniencia, gestión, entrega, empaquetado, cargos de servicio, etcétera
offer_discount_typeenum
(OfferDiscountType)

Es el tipo de descuento.
gift_card_infoobjeto
(GiftCardInfo)

Son detalles específicos de las ofertas de tarjetas de regalo.

Dinero

Representa un importe de dinero con su tipo de moneda.

Nombre del campoTipoRequisitoDescripción
currency_codestring

Es el código de moneda de tres letras definido en ISO 4217.
unitsnúmero

La unidad entera del importe. Por ejemplo, si currencyCode es "USD", 1 unidad es un dólar estadounidense.
nanosnúmero

Número de unidades nano (10^-9) del importe. Debe ser un valor entre -999,999,999 y +999,999,999. Si units es positivo, nanos debe ser positivo o cero. Si units es cero, nanos puede ser positivo, cero o negativo. Si units es negativo, nanos debe ser negativo o cero. Por ejemplo, –$1.75 se representa como units=-1 y nanos=-750,000,000.

Tarifas

Nombre del campoTipoRequisitoDescripción
unitenum
(FeeUnit)

typeenum
(FeeType)

oneOf
(cost)

Solo se puede establecer uno de los campos de este oneOf.

MoneyRange

Nombre del campoTipoRequisitoDescripción
min_amountobjeto
(Money)

max_amountobjeto
(Money)

AdditionalFee

Nombre del campoTipoRequisitoDescripción
namestring

Obligatorio

Es el nombre de la tarifa adicional. Ejemplos: Comisión por servicio, tarifa de preparación, etcétera. Obligatorio.
feeobjeto
(Fee)

GiftCardInfo

Nombre del campoTipoRequisitoDescripción
oneOf
(denomination_type)

Solo se puede establecer uno de los campos en este oneOf.

FixedDenominations

Nombre del campoTipoRequisitoDescripción
amountsarray de objeto
(Money)

Es una lista de todas las denominaciones discretas disponibles (p.ej., [100, 500, 1000]).

OfferRestrictions

Nombre del campoTipoRequisitoDescripción
combinable_with_other_offersbooleano

Indica si esta oferta se puede combinar con otras. Cuando se establece como verdadero, los socios pueden especificar con qué ofertas se puede combinar esta oferta. Si se configuran combinable_offer_categories y combinable_offer_ids, cualquier oferta que coincida con una de las condiciones anteriores se podrá combinar.
combinable_offer_categoriesarray de enum
(OfferCategory)

Es la lista de tipos de ofertas con los que se puede combinar esta oferta. Por ejemplo, esta oferta se puede combinar con otros cupones. Si combinable_with_other_offers es verdadero y no se establece este campo, se podrán combinar todos los tipos.
combinable_offer_idsarray de cadenas

Es la lista de offer_ids con los que se puede combinar esta oferta. Algunas ofertas solo se pueden combinar con otros offer_ids específicos (se pueden considerar ofertas principales). Si combinable_with_other_offers es verdadero y este campo no está configurado, se podrán combinar todos los ID de la oferta.
inclusionsarray de objetos
(OfferCondition)

Lista de condiciones que se deben cumplir para que la oferta sea válida (p.ej., bebidas sin alcohol, comida).
exclusionsarray de objeto
(OfferCondition)

Lista de condiciones que invalidarían la oferta (p.ej., buffet, ofertas combinadas y cocteles).
min_guestnúmero

Es la cantidad mínima de personas necesarias para aprovechar la oferta. Nota: Este campo solo se aplica a las reservas de restaurantes y no se debe usar para otras verticales.
food_offer_restrictionsobjeto
(FoodOfferRestrictions)

Son restricciones específicas para las ofertas de comida.
max_redemption_countnúmero

Son las restricciones específicas de la cantidad de veces que se puede usar esta oferta. El valor de 0 especificaría que no hay límites. Por ejemplo, un valor de 3 significaría que el usuario puede utilizar esta oferta 3 veces.
max_total_discount_valueobjeto
(Money)

Es el descuento máximo que se puede aprovechar en varias transacciones de esta oferta.
special_conditionsarray de cadenas

Son las condiciones especiales de esta oferta que se deben mostrar al usuario. Ejemplos: "Solo válido para el pago en [área]", "No incluye pagos en línea", "El cupón de regalo SE PUEDE usar durante la oferta".

OfferCondition

Nombre del campoTipoRequisitoDescripción
descriptionstring

FoodOfferRestrictions

Nombre del campoTipoRequisitoDescripción
meal_typesarray de enum
(MealType)

Son los tipos de comida a los que se puede aplicar la oferta, como almuerzo o cena. Si no se configura, la oferta se puede aplicar a todos los tipos de comidas.
restricted_to_certain_coursesbooleano

Indica si la oferta solo se puede aplicar a ciertos cursos.

Cupón

Nombre del campoTipoRequisitoDescripción
textstring

Es el texto del cupón que el proveedor de la oferta quiere mostrar a los usuarios.
codestring

Obligatorio

Se requiere un código de cupón para canjear la oferta. Obligatorio.

PaymentInstrument

Nombre del campoTipoRequisitoDescripción
itemsarray de objeto
(PaymentInstrumentItem)

Obligatorio

Es la lista de instrumentos de pago que se pueden usar para aprovechar la oferta. Obligatorio.
provider_namestring

Nombre del proveedor del instrumento de pago. Puede ser un socio bancario, el nombre de un banco, etcétera. Por ejemplo: American Express, HDFC, ICICI.

PaymentInstrumentItem

Nombre del campoTipoRequisitoDescripción
typeenum
(PaymentInstrumentType)

Obligatorio

Es el tipo de instrumento de pago. Obligatorio.
namestring

Obligatorio

Es el nombre del elemento del instrumento de pago, como el nombre de la tarjeta de crédito. Por ejemplo, HDFC Infinia o American Express Platinum. Obligatorio.

Suscripción

Nombre del campoTipoRequisitoDescripción
namestring

Obligatorio

Es el nombre de la suscripción. Obligatorio.
subscription_auto_addedbooleano

Indica si la suscripción se agrega automáticamente cuando un usuario aprovecha esta oferta.
costobjeto
(Money)

Obligatorio

Es el costo de la suscripción. Obligatorio.
subscription_durationobjeto
(Duration)

Obligatorio

Indica durante cuánto tiempo es válida la suscripción con el valor de subscription_cost. Obligatorio.
terms_and_conditions_urlstring

URL de los Términos y Condiciones del socio relevantes para esta suscripción.

Duración

Nombre del campoTipoRequisitoDescripción
secondsnúmero

Son los segundos firmados del período. Debe ser de -315,576,000,000 a +315,576,000,000 inclusive. Nota: Estos límites se calculan de la siguiente manera: 60 s/min * 60 min/h * 24 h/día * 365.25 días/año * 10,000 años
nanosnúmero

Fracciones con signo de un segundo con una resolución de nanosegundos del intervalo de tiempo. Las duraciones de menos de un segundo se representan con un campo seconds de 0 y un campo nanos positivo o negativo. En el caso de las duraciones de un segundo o más, un valor distinto de cero para el campo nanos debe tener el mismo signo que el campo seconds. Deben ser valores de -999,999,999 a +999,999,999 inclusive.

Condiciones

Nombre del campoTipoRequisitoDescripción
urlstring

URL de los Términos y Condiciones del socio.
restricted_to_certain_usersbooleano

Indica si la oferta está restringida a ciertos usuarios.
terms_and_conditionsstring

Es el texto principal de los C.G. proporcionado por el socio.
additional_terms_and_conditionsarray de cadenas

Términos y condiciones adicionales a los principales del socio.

ValidityPeriod

Nombre del campoTipoRequisitoDescripción
valid_periodobjeto
(ValidityRange)

La marca de tiempo de inicio y finalización de la validez de la oferta. Estas horas deben representar días distintos, es decir, la hora de inicio debe ser las 00:00 (comienzo del día) y la hora de finalización debe ser las 00:00 (exclusiva) del día en que finaliza el período de validez.
time_of_dayarray de objetos
(TimeOfDayWindow)

Especifica el intervalo de tiempo válido en un día determinado y qué días están disponibles para la oferta. Para los períodos que cruzan la medianoche (p. ej., de las 10 p.m. a las 2 a.m.), usa ventanas separadas para cada día: una que finalice a las 11:59:59 p.m. y otra que comience a las 12:00 a.m. del día siguiente. Por ejemplo: Lunes: De 10 a.m. a 5 p.m. Martes: De 10 a.m. a 2 p.m. Martes: De 5 p.m. a 7 p.m. Miércoles, jueves, viernes, sábado y domingo: De 3 p.m. a 7 p.m. Si no se establece ninguno, significa que la oferta está disponible en todo momento dentro de valid_period.
time_exceptionsarray de objetos
(ValidTimeException)

Especifica excepciones a los parámetros valid_period y valid_time_of_week anteriores
date_exceptionsarray de objetos
(Date)

Especifica excepciones en días para los parámetros valid_period y time_of_day anteriores
validity_scopeenum
(ValidityScope)

Especifica el alcance del período de validez.
validity_duration_in_daysnúmero

Es la duración (en días) de la validez del cupón una vez que se compra.

ValidityRange

Es un rango de marcas de tiempo cerrado-abierto.

Nombre del campoTipoRequisitoDescripción
valid_from_timeobjeto
(Timestamp)

Obligatorio

La hora de inicio del rango (inclusive). Obligatorio.
valid_through_timeobjeto
(Timestamp)

Es la hora de finalización del rango (exclusiva). Si no se establece, significa que este período nunca termina. Opcional.

Marca de tiempo

Nombre del campoTipoRequisitoDescripción
secondsnúmero

Representa los segundos del horario UTC desde el tiempo Unix 1970-01-01T00:00:00Z. Debe estar entre -62135596800 y 253402300799 inclusive (lo que corresponde a 0001-01-01T00:00:00Z a 9999-12-31T23:59:59Z).
nanosnúmero

Fracciones no negativas de un segundo a una resolución de nanosegundos. Este campo es la parte de nanosegundos de la duración, no una alternativa a los segundos. Los valores de segundos negativos con fracciones deben seguir teniendo valores de nanosegundos no negativos que cuenten hacia adelante en el tiempo. Deben ser valores de 0 a 999,999,999 inclusive.

TimeOfDayWindow

El objeto TimeWindow es una entidad compuesta que describe una lista de ventanas en las que se puede realizar o completar el pedido del usuario.

Nombre del campoTipoRequisitoDescripción
time_windowsobjeto
(TimeOfDayRange)

Obligatorio

Es el período en el que se puede realizar o completar el pedido. Obligatorio.
day_of_weekarray de enum
(DayOfWeek)

Es la lista de días de la semana en los que se aplican los períodos. Si no se establece ninguno, significa que se aplica a todos los días de la semana. Opcional.
day_of_montharray de objeto
(DayOfMonthRange)

Son los días del mes en los que se aplican los períodos. Si no se establece ninguno, significa que se aplica a todos los días del mes. Opcional.

TimeOfDayRange

Es un período que incluye una fecha y hora de inicio y una fecha y hora de finalización.

Nombre del campoTipoRequisitoDescripción
open_timeobjeto
(TimeOfDay)

Es un valor de hora que indica la hora de inicio del día del intervalo (inclusive). Si no se configura, significa las 00:00:00. Opcional.
close_timeobjeto
(TimeOfDay)

Un valor de hora que indica la hora de finalización del día del rango (exclusivo). Si no se establece, significa que es 23:59:59. Opcional.

TimeOfDay

Nombre del campoTipoRequisitoDescripción
hoursnúmero

Horas de un día en formato de 24 horas. Debe ser mayor o igual que 0 y, por lo general, debe ser menor o igual que 23. Una API puede optar por permitir el valor "24:00:00" para situaciones como el horario de cierre de la empresa.
minutesnúmero

Minutos de una hora. Debe ser mayor o igual que 0 y menor o igual que 59.
secondsnúmero

Segundos de un minuto. Debe ser mayor o igual que 0 y, por lo general, debe ser menor o igual que 59. Una API puede permitir el valor 60 si permite segundos intercalares.
nanosnúmero

Fracciones de segundos, en nanosegundos. Debe ser mayor o igual que 0 y menor o igual que 999,999,999.

DayOfMonthRange

Es un rango de días del mes que se aplica a todos los meses del año.

Nombre del campoTipoRequisitoDescripción
valid_from_daynúmero

Obligatorio

Es el día de inicio del período (inclusive). Obligatorio.
valid_through_daynúmero

Es el día de finalización del período (inclusive). Si no se configura, significa que este rango representa un solo día (valid_from_day). Opcional.

ValidTimeException

Nombre del campoTipoRequisitoDescripción
exceptional_periodobjeto
(ValidityRange)

La marca de tiempo de inicio y finalización para la que la oferta no es válida. Estas horas deben representar días distintos, es decir, la hora de inicio debe ser las 00:00 (comienzo del día) y la hora de finalización debe ser las 00:00 (exclusiva) del día en que finaliza el período de excepción.

Fecha

Nombre del campoTipoRequisitoDescripción
yearnúmero

Año de la fecha. Debe ser entre 1 y 9999, o bien 0 para especificar una fecha sin año.
monthnúmero

Mes del año. Debe ser del 1 al 12 o 0 para especificar un año sin un mes ni un día.
daynúmero

Día del mes. Debe ser entre 1 y 31 y ser válido para el año y el mes o bien 0 para especificar un año solo o un año y un mes en los que el día no sea significativo.

OfferSource

NombreDescripción
OFFER_SOURCE_UNSPECIFIED
OFFER_SOURCE_AGGREGATOR

ActionType

Representa el modo de cumplimiento de la oferta. Si una oferta se puede compartir en varios modos de cumplimiento, se espera que se creen ofertas duplicadas para cada modo de cumplimiento.

NombreDescripción
ACTION_TYPE_UNSPECIFIED
ACTION_TYPE_FOOD_DELIVERYLa oferta se aplica a los servicios de entrega de comida.
ACTION_TYPE_FOOD_TAKEOUTLa oferta se aplica a los pedidos de comida para llevar o retirar.
ACTION_TYPE_DININGLa oferta es para comer en las instalaciones del restaurante.
ACTION_TYPE_APPOINTMENTLa oferta se aplica a los servicios de reserva de citas.
ACTION_TYPE_SHOPPING_IN_STORELa oferta se aplica a las compras sin conexión y en la tienda.

OfferMode

Especifica el método o canal a través del cual el usuario puede aprovechar la oferta.

NombreDescripción
OFFER_MODE_OTHERSe usa para los métodos de entrega que no se incluyen en otros modos específicos.
OFFER_MODE_WALK_INLa oferta está disponible para visitas en las instalaciones sin reserva previa.
OFFER_MODE_FREE_RESERVATIONLa oferta se aplica cuando un usuario realiza una reserva que no requiere una tarifa por adelantado.
OFFER_MODE_PAID_RESERVATIONLa oferta se aplica cuando un usuario realiza una reserva que requiere un pago por adelantado.
OFFER_MODE_ONLINE_ORDERLa oferta es válida para pedidos realizados a través de un sitio web o una plataforma digital.
OFFER_MODE_GIFT_CARD_PURCHASEIndica que la compra de una tarjeta de regalo es el paso principal requerido para adquirir la oferta.

OfferCategory

Es la categoría de la oferta. Una oferta base es una oferta estándar disponible para todos los clientes, como un 10% de descuento en la inversión superior a USD 100. Una oferta básica restringida por un cupón o un instrumento de pago tendrá establecidos los campos correspondientes. También tenemos ofertas de complementos, como ADD_ON_PAYMENT_OFFER. Estas ofertas se pueden agregar a otras para obtener descuentos adicionales.

NombreDescripción
OFFER_CATEGORY_UNSPECIFIEDNo se debe usar el valor de enumeración UNSPECIFIED o predeterminado en los feeds.
OFFER_CATEGORY_BASE_OFFER
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
OFFER_CATEGORY_ADD_ON_COUPON_OFFER
OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER
OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER

FeeUnit

NombreDescripción
FEE_UNIT_UNSPECIFIEDNo se debe usar el valor de enum UNSPECIFIED ni el predeterminado en los feeds.
FEE_UNIT_PER_GUEST
FEE_UNIT_PER_TRANSACTION

FeeType

NombreDescripción
FEE_TYPE_UNSPECIFIEDNo se debe usar el valor de enumeración UNSPECIFIED o predeterminado en los feeds.
FEE_TYPE_FIXED
FEE_TYPE_VARIABLE

OfferDiscountType

NombreDescripción
OFFER_DISCOUNT_TYPE_UNSPECIFIED
OFFER_DISCOUNT_TYPE_INSTANT_DISCOUNT
OFFER_DISCOUNT_TYPE_CASHBACK
OFFER_DISCOUNT_TYPE_REWARD_POINT

MealType

NombreDescripción
MEAL_TYPE_UNSPECIFIEDNo se debe usar el valor de enum UNSPECIFIED o predeterminado en los feeds.
MEAL_TYPE_BREAKFAST
MEAL_TYPE_LUNCH
MEAL_TYPE_DINNER

PaymentInstrumentType

NombreDescripción
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIEDNo se debe usar el valor de enumeración UNSPECIFIED o predeterminado en los feeds.
PAYMENT_INSTRUMENT_CREDIT_CARD
PAYMENT_INSTRUMENT_DEBIT_CARD
PAYMENT_INSTRUMENT_BANK_ACCOUNT
PAYMENT_INSTRUMENT_UPI
PAYMENT_INSTRUMENT_ONLINE_WALLET
PAYMENT_INSTRUMENT_NETBANKING

DayOfWeek

Representa un día de la semana.

NombreDescripción
DAY_OF_WEEK_UNSPECIFIEDNo se especifica el día de la semana.
MONDAYLunes
TUESDAYMartes
WEDNESDAYMiércoles
THURSDAYJueves
FRIDAYViernes
SATURDAYSábado
SUNDAYDomingo

ValidityScope

El alcance del período de validez, es decir, exactamente a qué acciones se aplica este período de validez.

NombreDescripción
VALIDITY_SCOPE_UNSPECIFIED
VALIDITY_SCOPE_CLAIM
VALIDITY_SCOPE_REDEEM

OfferTag

NombreDescripción
OFFER_TAG_UNSPECIFIEDNo se debe usar el valor de enum UNSPECIFIED o predeterminado en los feeds.
OFFER_TAG_NEW_YEAR_SPECIAL
OFFER_TAG_VALENTINES_SPECIAL

AvailabilityLevel

Indica el estado de stock o disponibilidad de una oferta.

NombreDescripción
AVAILABILITY_LEVEL_UNSPECIFIED
AVAILABILITY_LEVEL_LOWIndica que la oferta tiene poca disponibilidad. Se recomienda a los usuarios que la canjeen antes de que se agote el stock. Es posible que agreguemos los niveles MEDIO y ALTO más adelante.

offer_specification

El descuento puede ser un porcentaje o un valor fijo que se resta del valor total. Por ejemplo: 1. Un 10% de descuento en la factura final 2. USD 15 de descuento en un pedido Los comercios también pueden ofrecer descuentos personalizados, como "compra uno y llévate uno gratis", a través de los campos de especificación pertinentes. Obligatorio.

Nombre del campoTipoRequisitoDescripción
discount_percentnúmero

Es mutuamente excluyente con discount_value y other_offer_detail_text.

Es el porcentaje de la factura que se descuenta. [0, 100] Para las ofertas de 2x1 o de un 50% de descuento que se aplican a toda la comida (p.ej., buffet de 2x1, 2x1 en toda la cuenta, 2x1 en el menú fijo), este valor se puede establecer en 50.
discount_valueobjeto
(Money)

Es mutuamente excluyente con discount_percent y other_offer_detail_text.

Es el valor fijo del descuento.
other_offer_detail_textstring

Mutuamente excluyente con discount_percent, discount_value

Texto de formato libre para describir el descuento. En el caso de ofertas específicas de 1+1 (p.ej., 1+1 bebidas, +1 plato principal, 1+1 productos del menú seleccionados), estos detalles se deben describir aquí.

costo

Nombre del campoTipoRequisitoDescripción
amountobjeto
(Money)

Mutuamente excluyente con amount_range

amount_rangeobjeto
(MoneyRange)

Es mutuamente excluyente con amount.

denomination_type

Nombre del campoTipoRequisitoDescripción
fixed_denominationsobjeto
(FixedDenominations)

Mutuamente excluyente con custom_range

Se usa cuando la tarjeta de regalo está disponible en importes fijos específicos.
custom_rangeobjeto
(MoneyRange)

Es mutuamente excluyente con fixed_denominations.

Se usa cuando la marca permite que los usuarios elijan un valor nominal personalizado (flexible) dentro de un rango definido.

Carga del feed

El feed de ofertas se debe subir al servidor SFTP del feed de Generic. Sigue el tutorial sobre cómo usar el servidor SFTP de feeds genéricos para obtener instrucciones y usa el conjunto name establecido en google.offer en tu archivo de descriptor.

Frecuencia de carga

En general, Google espera 1 carga de feed por día. La frecuencia puede aumentar o disminuir según la frecuencia de las actualizaciones de ofertas de tu lado para garantizar una precisión alta y constante. Consulta con tu POC de Google.

Los datos tardarán unas horas en aparecer en Google.

Clasificación de ofertas

  • OFFER_CATEGORY_BASE_OFFER: Son ofertas que se pueden reclamar de forma independiente sin combinarse con ninguna otra oferta. Incluye lo siguiente:
    • Descuentos fijos en toda la factura (p.ej., 20% de descuento)
    • Ofertas de suscripción (p.ej., postre gratis con la membresía)
    • Ofertas de pago en los casos en que no haya otras ofertas básicas para el restaurante
    • Nota: Las ofertas de exención o reducción de tarifas en toda la plataforma no deben establecerse como ofertas base.
  • Ofertas de complemento: Son ofertas que requieren que se canjee una oferta básica. Estos son algunos de ellos:
    • OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER (p.ej., 10% de descuento adicional con una tarjeta de crédito específica)
    • OFFER_CATEGORY_ADD_ON_COUPON_OFFER (p.ej., bebida gratis con un código de cupón específico)
    • OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER (p.ej., 10% de descuento adicional para suscriptores)
    • OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER (p.ej., entrega gratuita o tarifa reducida)

Otras consideraciones:

  • Las ofertas de exención o reducción de tarifas en toda la plataforma no deben establecerse como ofertas base (OFFER_CATEGORY_BASE_OFFER). Solo deben establecerse como OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER para complementar otra oferta base activa.
  • Si un restaurante no tiene configurada una oferta básica, no se mostrarán las ofertas de complemento. Si no hay una oferta base, cualquier oferta de pago, suscripción o cupón que se pueda reclamar sin necesidad de agregarse a otra oferta debe etiquetarse como OFFER_CATEGORY_BASE_OFFER.
    • Según el tipo, se deben establecer los datos pertinentes para PaymentInstrument, Subscription o Coupon.
    • Los socios deben proporcionar 2 copias de cada una de estas ofertas para cubrir situaciones en las que funcionan como ofertas básicas y como ofertas de complemento. Luego, se puede establecer la copia de la oferta de complemento para varios restaurantes con entity_ids o add_on_offer_applicable_to_all_entities.
  • Cuando un restaurante tiene varias ofertas base que se pueden acumular, todas las ofertas base deben etiquetarse como OFFER_CATEGORY_BASE_OFFER, y las ofertas base que son ofertas de pago, suscripción o cupón deben enviarse, además, como el tipo de oferta de complemento correspondiente.
  • ValidityPeriod se debe usar para activar ofertas de complemento como ofertas básicas solo cuando no haya una oferta básica activa.
  • Consolidación de ofertas idénticas por instrumento de pago: Si varios instrumentos de pago comparten el mismo valor de descuento exacto (por ejemplo, las tarjetas de crédito, las tarjetas de débito y Net Banking ofrecen un 5% de descuento), agrúpalos en un solo objeto Offer consolidado en lugar de enviar ofertas duplicadas separadas. Para ello, completa la lista payment_instrument.items con todos los instrumentos de pago aplicables. Esto reduce el desorden del diseño en la interfaz de Google y evita posibles disminuciones en la clasificación debido a restricciones duplicadas excesivas.

Situaciones de ejemplo:

  • Un restaurante ofrece un 5% de descuento cuando se paga con una tarjeta de crédito específica y una bebida gratis con un código de cupón específico.

    • La oferta de un 5% de descuento con tarjeta de crédito se debe enviar en 2 copias, una etiquetada como OFFER_CATEGORY_BASE_OFFER y otra como OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER, con los detalles de PaymentInstrument incluidos.
    • La oferta de bebida gratis con un código de cupón se debe enviar como OFFER_CATEGORY_ADD_ON_COUPON_OFFER con los detalles de Coupon incluidos.
  • Un restaurante ofrece un 10% de descuento para los clientes sin reserva y un 5% de descuento cuando pagan con una tarjeta de crédito específica. Ambos descuentos se pueden combinar.

    • La oferta del 10% para clientes sin cita previa se debe etiquetar como OFFER_CATEGORY_BASE_OFFER.
    • La oferta de la tarjeta de crédito con un 5% de descuento debe tener 2 copias, una etiquetada como OFFER_CATEGORY_BASE_OFFER y otra como OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
  • Un restaurante ofrece un 10% de descuento solo para el almuerzo los días de semana y un 5% de descuento en cualquier momento cuando se paga con una tarjeta de crédito específica.

    • La oferta del 10% de descuento debe tener ValidityPeriod establecido para indicar que solo se aplica durante el horario de almuerzo del restaurante los días de semana.
    • La oferta de un 5% de descuento con tarjetas de crédito se debe enviar en 2 copias.
      • Una copia se debe etiquetar como OFFER_CATEGORY_BASE_OFFER con los detalles de PaymentInstrument incluidos. ValidityPeriod debe configurarse para excluir el horario de almuerzo de los días de semana cuando la oferta de 10% de descuento en el almuerzo esté activa
      • Una copia debe etiquetarse como OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER con los detalles de PaymentInstrument incluidos.
    • Todas las demás ofertas de pago de este restaurante deben etiquetarse como OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.

Proceso de desarrollo y lanzamiento

Durante la integración, el Partner Portal podrá ayudarte con información y comentarios basados en tu desarrollo. El proceso de desarrollo seguirá este flujo:

  • En primer lugar, la integración se desarrollará en el entorno de zona de pruebas. Debes usar una exportación de producción (o incluso datos de producción directamente) en el entorno de zona de pruebas de Google. Esto ayuda a garantizar que tu desarrollo detecte todos los casos extremos y permite que Google evalúe la calidad de los datos y te brinde una mejor asistencia en función de tu modelo de datos.
  • Una vez que ya subas los feeds completos de comercios, servicios y ofertas a diario y de forma coherente al entorno de zona de pruebas de Google, el equipo de Google los evaluará. Una vez que el equipo de Google proporcione la aprobación, podrás enviar tu código a producción y comenzar a enviar datos de producción al entorno de producción de Google.
  • Una vez que hayas probado completamente la integración de producción, el equipo de Google también lo hará. Una vez que se completen todas las pruebas, se lanzará tu integración.

Supervisión

Para garantizar una buena experiencia del usuario, Google verificará que las ofertas proporcionadas sean válidas, correctas y cumplan con nuestros criterios de política antes y después del lanzamiento. Para ello, Google utilizará una combinación de revisiones manuales y automáticas. Se podrá acceder al resultado de estas revisiones en el panel de ofertas del Action Center (solo en producción). El resultado de esta supervisión podría usarse para afectar la clasificación de las ofertas.

Asegúrate de que la página tarde menos de 5 segundos en cargarse por completo con las ofertas. De lo contrario, se considerará un error y se marcará como Bad link.

Verificaciones automatizadas (rastreadores)

El equipo de calidad de Google implementa rastreadores. Los rastreadores son secuencias de comandos que automatizan un navegador web para realizar algunos clics y extraer información de la oferta, solo con fines de prueba de calidad.

Cantidad de consultas

Por ejemplo, si decidimos enviar 5,000 verificaciones por día, significa que 5,000 veces al día (distribuidas de manera uniforme a lo largo del día, es decir, aproximadamente una cada 17 segundos), nuestro rastreador realiza todas las siguientes acciones que realizaría un usuario normal:

  • Comienza desde la Búsqueda de Google y haz clic en el vínculo del socio.
  • Busca la información de la oferta.
  • Si la oferta requiere una reserva, continuará hacia el flujo de reserva para confirmar que la oferta esté disponible en el horario especificado (no se realizará ninguna reserva).

Detección de web scrapers

Para asegurarte de que no se prohíba el acceso al extractor web (lo que podría llevarlo a concluir que las ofertas no están disponibles), asegúrate de que tu sistema permita que nuestro extractor web consulte tu página en todo momento. Para identificar nuestro rastreador web, sigue estos pasos:

  • El usuario-agente del web scraper contendrá la cadena "Google-Offers":
    • Ejemplo: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
  • También puedes verificar si las llamadas provienen de Google con un DNS inverso, como se recomienda en "Verifica Googlebot y otros rastreadores de Google". En nuestro caso específico, la resolución de DNS inversa sigue este patrón: google-proxy-***-***-***-***.google.com.

Comportamiento técnico

Almacenamiento en caché

Para reducir la carga en el sitio web del socio, nuestros rastreadores suelen configurarse para respetar todos los encabezados de almacenamiento en caché HTTP estándar presentes en la respuesta. Esto significa que, en el caso de los sitios web configurados correctamente, evitamos recuperar repetidamente el contenido que cambia con poca frecuencia (p.ej., las bibliotecas de JavaScript). Para obtener más detalles sobre cómo implementar el almacenamiento en caché, lee esta documentación sobre el almacenamiento en caché de HTTP.