Descripción general
Esta API te permite especificar posibles descuentos. De las promociones especificadas, Google aplica la promoción o el conjunto de promociones aptos que generan el precio más bajo. Si buscas una API que admita ajustes de tarifas arbitrarios que puedan aumentar o disminuir el precio cuando se cumplen las condiciones, considera nuestra API de Rate Modifications. Ten en cuenta que, si ambas APIs están presentes, las modificaciones de tarifas se aplican antes que las promociones.
Solicitudes
Sintaxis
El mensaje Promotions usa la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
id="message_ID"
timestamp="timestamp">
<HotelPromotions hotel_id="HotelID" action="[overlay]">
<Promotion id="PromotionID" action="[delete]">
<BookingDates>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
</BookingDates>
<BookingWindow min="integer_or_duration" max="integer_or_duration"/>
<Ceiling amount_per_night="float"/>
<Floor amount_per_night="float"/>
<CheckinDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckoutDates>
<!-- Specify only one of percentage, percentage_of_base, fixed_amount,
fixed_amount_per_night, fixed_price, or fixed_price_per_night;
applied_nights is only used with percentage, fixed_amount_per_night,
and fixed_price_per_night. -->
<Discount percentage="float" percentage_of_base="float"
fixed_amount="float" fixed_amount_per_night="float"
fixed_price="float" fixed_price_per_night="float"
applied_nights="integer_1_to_99" rank="integer_1_to_99">
<!-- FreeNights may not be used in conjunction with attributes on Discount -->
<FreeNights stay_nights="integer" discount_nights="integer"
discount_percentage="float" night_selection="[cheapest|last]"
repeats="boolean"/>
</Discount>
<!-- Exactly one of Discount or BestDailyDiscount must be specified.
Specify only one of percentage, fixed_amount, or fixed_price. -->
<BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
<Devices>
<Device type="[desktop|tablet|mobile]"/>
</Devices>
<InventoryCount min="integer" max="integer"/>
<LengthOfStay min="integer" max="integer"/>
<MembershipRateRule id="RateRuleID"/>
<MinimumAmount before_discount="integer"/>
<Occupancy min="integer" max="integer"/>
<RatePlans>
<RatePlan id="PackageID_1"/>
<RatePlan id="PackageID_2"/>
</RatePlans>
<RoomTypes>
<RoomType id="RoomID_1"/>
<RoomType id="RoomID_2"/>
</RoomTypes>
<Stacking type="[any|base|none|second]"/>
<StayDates application="[all|any|overlap]">
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</StayDates>
<UserCountries type="[include|exclude]">
<Country code="country_code"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
Elementos y atributos
El mensaje de Promociones tiene los siguientes elementos y atributos:
| Elemento / @Attribute | Casos | Tipo | Descripción |
|---|---|---|---|
| Promotions | 1 | Complex element | Es el elemento raíz de un mensaje de promociones. |
| Promotions / @partner | 1 | string | Es la cuenta de socio de este mensaje. Este valor de cadena es el valor de "Clave de socio" que se indica en la
página Configuración de la cuenta de Hotel Center.
Si tienes un backend que proporciona feeds para varias cuentas, este valor debe coincidir con el valor del atributo |
| Promotions / @id | 1 | string | Es un identificador único para este mensaje de solicitud. Este valor se muestra en el mensaje de respuesta. Los caracteres permitidos son a-z, A-Z, 0-9, _ (guion bajo) y - (guion). |
| Promotions / @timestamp | 1 | DateTime | Fecha y hora de creación de este mensaje. |
| Promotions / HotelPromotions | 0..n | HotelPromotions | Son las promociones de una propiedad. Cada promoción se aplica a una sola propiedad. A menos que se use |
| Promotions / HotelPromotions / @hotel_id | 1 | string | Es el identificador único de la propiedad. Este valor debe coincidir con el ID del hotel especificado con
<id> en el elemento <listing> del feed de lista de hoteles. El ID del hotel también se indica en Hotel Center. |
| Promotions / HotelPromotions / @action | 0..1 | enum | Si se especifica, el valor debe ser Si no se especifica, cada promoción incluida en el mensaje actual es una de las siguientes:
|
| Promotions / HotelPromotions / Promotion | 0..99 | Promotion | Es una sola promoción para una propiedad. Ten en cuenta que, si no se especifican Si necesitas usar más de 99 promociones, comunícate con tu administrador técnico de cuentas (TAM). |
| Promotions / HotelPromotions / Promotion / @id | 1 | string | Es un identificador único de la promoción. La cantidad máxima de caracteres permitida es 40. Los caracteres permitidos son a-z, A-Z, 0-9, _ (guion bajo), - (guion) y . (punto). |
| Promotions /HotelPromotions / Promotion / @action | 0..1 | enum | Si se especifica, el valor debe ser Si se especifica |
| Promotions / HotelPromotions / Promotion / BookingDates | 0..1 | BookingDates | Es un contenedor para uno o más rangos que definen cuándo se debe realizar la reserva para que se aplique la promoción. |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange | 1..99 | DateRange | Es un rango que especifica cuándo se debe realizar la reserva para que se aplique la promoción. |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start | 0..1 | Date o DateTime | Fecha o fecha y hora de inicio (según la zona horaria de la propiedad), inclusive, del período.
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end | 0..1 | Date o DateTime | Fecha y hora de finalización (según la zona horaria de la propiedad), inclusive, del período.
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week | 0..1 | string | Son los días de la semana que se permiten en el período. Si no se especifica, se permiten todos los días del período. Cada carácter de la cadena especifica un día. Por ejemplo, "LMMJV" especifica que se permiten los días laborables en el período. Los caracteres válidos son los siguientes:
Cualquier combinación de caracteres es válida. |
| Promotions / HotelPromotions / Promotion / BookingWindow | 0..1 | BookingWindow | Especifica el período durante el cual debe realizarse la reserva en relación con la fecha de entrada (según la zona horaria de la propiedad). Por ejemplo, la ventana de reserva se puede establecer en un mínimo de 7 días y un máximo de 180 días antes del registro de entrada. |
| Promotions / HotelPromotions / Promotion / BookingWindow / @min | 0..1 | integer or duration | Es la duración mínima previa al registro de entrada en la que se debe realizar la reserva para que se aplique la promoción. Si no se especifica o su valor es 0, no hay un mínimo.
Los tipos de valor válidos son los siguientes:
|
| Promotions / HotelPromotions / Promotion / BookingWindow / @max | 0..1 | integer or duration | Es la cantidad máxima de días antes del registro de entrada en los que se debe realizar la reserva para que se aplique la promoción. Si no se especifica o su valor es 0, no hay un máximo.
Los tipos de valor válidos son los siguientes:
|
| Promotions / HotelPromotions / Promotion / Ceiling | 0..1 | Ceiling |
Define restricciones sobre el valor máximo que puede establecerse para una tarifa después de que se aplican las promociones. Las promociones siempre deben especificar un Si se configura la acumulación, se podrían aplicar varias promociones con Ejemplo: Precios para una estadía de 1 noche en la que
Este es el orden de cálculo:
El hecho de que 60 sea un límite general más estricto es irrelevante, ya que solo es válido para su propia promoción, y no puede haber un solo límite que abarque toda la pila de promociones. |
| Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float |
Es el importe máximo que se puede establecer para una tarifa por noche después de aplicar el descuento. Si también se especifica un elemento
|
| Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor |
Define restricciones sobre el valor mínimo al que se puede establecer una tarifa después de que se aplican las promociones. Las promociones siempre deben especificar un La lógica de Si se configura la acumulación, se podrían aplicar varias promociones con Ejemplo: Precios para una estadía de 1 noche en la que
Este es el orden de cálculo:
El hecho de que 90 sea un valor mínimo general más estricto es irrelevante, ya que solo es válido para su propia promoción, y no puede haber un solo valor mínimo que abarque toda la pila de promociones. |
| Promotions / HotelPromotions / Promotion / Floor / @amount_per_night | 1 | float |
Es el importe mínimo que se puede establecer para una tarifa por noche después de aplicar el descuento. Si también se especifica un elemento
|
| Promotions / HotelPromotions / Promotion / CheckinDates | 0..1 | CheckinDates | Es un contenedor para uno o más períodos que definen cuándo se debe realizar el registro para que se aplique la promoción. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange | 1..20 | DateRange | Es un período que especifica cuándo debe ocurrir la entrada para que se aplique la promoción. Este elemento no es obligatorio si borras una o más promociones. También se admite el formato YearlessDate.
|
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start | 0..1 | Date or YearlessDate | Fecha de inicio (según la zona horaria de la propiedad), inclusive, del período. Esta fecha debe ser anterior o igual a la fecha de end. Si no se especifica start, el rango de fechas es prácticamente ilimitado en términos de una fecha de inicio. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end | 0..1 | Date or YearlessDate | Es la fecha de finalización (según la zona horaria de la propiedad), inclusive, del período. Esta fecha debe ser igual o posterior a la fecha de start. Si no se especifica end, el período no tendrá una fecha de finalización. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week | 0..1 | string | Son los días de la semana que se permiten en el período. Si no se especifica, se permiten todos los días del período. Cada carácter de la cadena especifica un día. Por ejemplo, "LMMJV" especifica que se permiten los días laborables en el período. Los caracteres válidos son los siguientes:
Cualquier combinación de caracteres es válida. |
| Promotions / HotelPromotions / Promotion / CheckoutDates | 0..1 | CheckoutDates | Es un contenedor para uno o más períodos que definen cuándo se debe realizar la salida para que se aplique la promoción. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange | 1..20 | DateRange | Es un período que especifica cuándo debe ocurrir el registro de salida para que se aplique la promoción. Este elemento no es obligatorio si borras una o más promociones. También se admite el formato YearlessDate.
|
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start | 0..1 | Date or YearlessDate | Fecha de inicio (según la zona horaria de la propiedad), inclusive, del período. Esta fecha debe ser anterior o igual a la fecha de end. Si no se especifica start, el rango de fechas es prácticamente ilimitado en términos de una fecha de inicio. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end | 0..1 | Date or YearlessDate | Es la fecha de finalización (según la zona horaria de la propiedad), inclusive, del período. Esta fecha debe ser igual o posterior a la fecha de start. Si no se especifica end, el período no tendrá una fecha de finalización. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week | 0..1 | string | Son los días de la semana que se permiten en el período. Si no se especifica, se permiten todos los días del período. Cada carácter de la cadena especifica un día. Por ejemplo, "LMMJV" especifica que se permiten los días laborables en el período. Los caracteres válidos son los siguientes:
Cualquier combinación de caracteres es válida. |
| Promotions / HotelPromotions / Promotion / Devices | 0..1 | Devices | Es un contenedor para enumerar los dispositivos del usuario que son aptos para la promoción. Si se especifica, solo los usuarios que cumplan con los requisitos en los dispositivos enumerados recibirán la tarifa con descuento. Si no se especifica, se ofrecerá la tarifa con descuento a los usuarios aptos en cualquier dispositivo. |
| Promotions / HotelPromotions / Promotion / Devices / Device | 1..3 | Device | Define un tipo de dispositivo del usuario apto para la promoción. |
| Promotions / HotelPromotions / Promotion / Devices / Device / @type | 1 | enum | Es un tipo de dispositivo. El valor debe ser desktop, tablet o mobile. |
| Promotions / HotelPromotions / Promotion / Discount | 1 | Discount | Se debe especificar exactamente uno de los valores Especifica el descuento que se aplicará a esta promoción. |
| Promotions / HotelPromotions / Promotion / Discount / @percentage | 0..1 | float | Se requiere exactamente uno de los siguientes: Es un valor decimal de 0 a 100 que especifica el porcentaje de descuento.
Se aplica a Ejemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base | 0..1 | float | Se requiere exactamente uno de los siguientes: Es un valor decimal de 0 a 100 que especifica el porcentaje de descuento base. Al igual que A diferencia de Ejemplo:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount | 0..1 | float | Se requiere exactamente uno de los siguientes: Es un importe fijo que se restará de la suma de las tarifas nocturnas de Ejemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night | 0..1 | float | Se requiere exactamente uno de los siguientes: Es un descuento fijo que se aplica a cada una de las tarifas por noche (o a las N más económicas si se especifica Ejemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price | 0..1 | float | Se requiere exactamente uno de los siguientes: Si se especifican tarifas nocturnas de Si Ejemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night | 0..1 | float | Se requiere exactamente uno de los siguientes: Si se especifican tarifas por noche de Si Si se especifica Ejemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @applied_nights | 0..1 | integer | Esto solo debe usarse con Cantidad de noches a las que se aplica el descuento, comenzando por la menos costosa. Debe ser un número entero del 1 al 99. Si no se especifica, el descuento se aplica a todas las noches. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights | 0..1 | FreeNights | Especifica un descuento para ciertas noches de una estadía cuando se cumple con una duración mínima de la estadía. No se permiten atributos en el elemento Discount principal si se usa este elemento. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights | 1 | integer | Cantidad de noches requeridas para que se aplique el descuento. Cada descuento se aplica a un segmento independiente de noches de estadía. Por ejemplo, para una estadía de 10 noches en la que |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights | 1 | integer | Es la cantidad de noches con descuento dentro de cada segmento de noches de estadía. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage | 1 | float | Es el descuento que se aplica a las noches con descuento. Si este valor es 50, cada noche seleccionada tiene un 50% de descuento. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection | 1 | string | Debe ser cheapest o last. Si es last, se descuentan las noches al final del segmento de noches de estadía. Si es cheapest, se descuentan las noches más baratas dentro del segmento de noches de estadía. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats | 1 | boolean | Indica si el descuento se puede aplicar a varios segmentos de noches de estadía. Si es Por ejemplo, si |
| Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | Asigna un rango a esta promoción y la habilita para la selección clasificada, en la que solo se selecciona la promoción con el rango más bajo para que se aplique. Los valores deben estar entre 1 y 99, inclusive. Si varias promociones comparten el mismo rango, se seleccionará y aplicará una de manera arbitraria. |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount | 1 | Discount | Se debe especificar exactamente uno de los valores Especifica un descuento diario que se puede aplicar a una noche de estadía. Esto contrasta con Cada propiedad puede tener un solo grupo de promociones que se consideran "las mejores del día". Esto significa que, para cada noche de estadía, se selecciona y se puede aplicar la mejor promoción diaria única que sea apta y que genere el mayor descuento para esa noche.
|
| Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage | 0..1 | float | Se requiere exactamente uno de Es un valor decimal de 0 a 100 que especifica el porcentaje de descuento.
Se aplica a Ejemplos:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount | 0..1 | float | Se requiere exactamente uno de Es un importe fijo que se restará de una sola tarifa por noche Ejemplos:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price | 0..1 | float | Se requiere exactamente uno de Si se especifican tarifas nocturnas de Ejemplos:
|
| Promotions / HotelPromotions / Promotion / InventoryCount | 0..1 | InventoryCount | Define restricciones sobre la cantidad de habitaciones que deben estar disponibles para que se aplique esta promoción. El descuento se aplica solo a las noches que cumplen con la restricción. No se permite con el descuento de fixed_amount. Ten en cuenta que la cantidad de habitaciones disponibles se especifica con OTA_HotelInvCountNotifRQ (InvCount) o OTA_HotelAvailNotifRQ (BookingLimit). |
| Promotions / HotelPromotions / Promotion / InventoryCount / @min | 0..1 | integer | Es la cantidad mínima de habitaciones que deben estar disponibles para que se aplique la promoción a la tarifa por noche. Si no se especifica, no hay un valor mínimo. |
| Promotions / HotelPromotions / Promotion / InventoryCount / @max | 0..1 | integer | Es la cantidad máxima de habitaciones que deben estar disponibles para que la promoción se aplique a la tarifa por noche. Si no se especifica, no hay un límite máximo. |
| Promotions / HotelPromotions / Promotion / LengthOfStay | 0..1 | LengthOfStay | Define los límites de duración de la estadía dentro de los cuales se puede aplicar esta promoción. La promoción no se aplica cuando la duración de la estadía está fuera de los límites mínimos y máximos. |
| Promotions / HotelPromotions / Promotion / LengthOfStay / @min | 0..1 | integer | Es la cantidad mínima de noches permitidas en la estadía para que se aplique la promoción. Si no se especifica, no hay un mínimo. |
| Promotions / HotelPromotions / Promotion / LengthOfStay / @max | 0..1 | integer | Cantidad máxima de noches permitidas en la estadía para que se aplique la promoción. Si no se especifica, no hay un valor máximo. |
| Promotions / HotelPromotions / Promotion / MembershipRateRule | 0..1 | MembershipRateRule |
Es un contenedor para una regla de tarifa de membresía que activa un tratamiento específico de la IU para el descuento asociado. Este elemento no se debe especificar, a menos que también se especifique |
| Promotions / HotelPromotions / Promotion / MembershipRateRule / @id | 1 | string |
ID de la regla de tarifas asociada con un programa de membresías. |
| Promotions / HotelPromotions / Promotion / MinimumAmount | 0..1 | MinimumAmount | Especifica la suma mínima de las tarifas diarias de las habitaciones (con el valor más alto entre AmountBeforeTax y AmountAfterTax) que se debe superar para que se aplique la promoción. |
| Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount | 1 | integer | Es el valor que se debe superar para que se aplique la promoción. |
| Promotions / HotelPromotions / Promotion / Occupancy | 0..1 | Occupancy | Define las restricciones sobre las ocupaciones para las que se aplica esta promoción. La promoción no se aplica cuando la ocupación está fuera de los límites mínimos y máximos.
Las promociones se aplican a la tarifa del itinerario. No es posible establecer un descuento máximo por ocupante. |
| Promotions / HotelPromotions / Promotion / Occupancy / @min | 0..1 | integer | La ocupación especificada por el usuario debe ser, al menos, este valor para que se aplique el descuento. |
| Promotions / HotelPromotions / Promotion / Occupancy / @max | 0..1 | integer | La ocupación especificada por el usuario debe ser como máximo este valor para que se aplique el descuento. |
| Promotions / HotelPromotions / Promotion / RatePlans | 0..1 | RatePlans | Es un contenedor para una lista de planes de tarifas a los que se aplica la promoción.
Si no se especifica <RatePlans>, la promoción se aplica a todos los planes de tarifas. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan | 1..n | RatePlan | Especifica un plan de tarifas. Un plan de tarifas se define por una combinación de paquete, tarifas y disponibilidad, como se define en los mensajes de Transaction (Property Data), OTA_HotelRateAmountNotifRQ y OTA_HotelAvailNotifRQ, y como se identifica con el PackageID. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id | 1 | string | Es el identificador único del plan de tarifas. Este valor se asigna al valor de PackageID en <PackageData> en un mensaje de transacción (datos de propiedad) y en el atributo RatePlanCode en <StatusApplicationControl> en los mensajes <OTA_HotelRateAmountNotifRQ> y <OTA_HotelAvailNotifRQ>.
La cantidad máxima de caracteres permitida es 50. |
| Promotions / HotelPromotions / Promotion / RoomTypes | 0..1 | RoomTypes | Es un contenedor para una lista de tipos de habitaciones a los que se aplica la promoción.
La promoción se aplica a cada <RoomType>
especificado. Si no se especifica <RoomTypes>, la promoción se aplica a todas las habitaciones. |
| Promotions / HotelPromotions / Promotion / RoomTypes / RoomType | 1..n | RoomType | Especifica un tipo de habitación. Un tipo de habitación se define en un elemento <RoomData> en un mensaje Transaction (Property Data) y se hace referencia a él con su valor <RoomID>. (Su valor de <RoomID> también se menciona en el atributo InvTypeCode de los mensajes de OTA_HotelRateAmountNotifRQ). |
| Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id | 1 | string | Es el identificador único del inventario (tipo de habitación). Este valor se asigna a <RoomID> en un mensaje de transacción (datos de propiedad).
La cantidad máxima de caracteres permitida es 50. |
| Promotions / HotelPromotions / Promotion / Stacking | 0..1 | Stacking | Especifica cómo se pueden combinar las promociones. Si no se especifica, se supone que el "tipo" es base. |
| Promotions / HotelPromotions / Promotion / Stacking / @type | 1 | enum | Se pueden aplicar varias promociones a una sola tarifa según este parámetro de configuración:
De las combinaciones permitidas, se aplican a la tarifa el conjunto de promociones que genera el descuento más grande. |
| Promotions / HotelPromotions / Promotion / StayDates | 0..1 | StayDates | Es un contenedor para uno o más períodos que determinan cómo se aplica la promoción, por ejemplo, para incluir descuentos de temporada. |
| Promotions / HotelPromotions / Promotion / StayDates / @application | 1 | enum | Describe cómo se debe aplicar la promoción. Estos son los valores válidos:
Este atributo siempre se debe especificar.
|
| Promotions / HotelPromotions / Promotion / StayDates / DateRange | 1..99 | DateRange | Es un período que especifica las fechas en las que se aplicará la promoción. También se admite el formato YearlessDate.
Si quieres establecer un rango de |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start | 0..1 | Date or YearlessDate | Fecha de inicio (según la zona horaria de la propiedad), inclusive, del período. Esta fecha debe ser anterior o igual a la fecha de end. Si no se especifica start, el rango de fechas es prácticamente ilimitado en términos de una fecha de inicio.
Debes especificar el valor de |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end | 0..1 | Date or YearlessDate | Es la fecha de finalización (según la zona horaria de la propiedad), inclusive, del período. Esta fecha debe ser igual o posterior a la fecha de start. Si no se especifica end, el período es ilimitado a partir de la fecha start.
Debes especificar el valor de |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week | 0..1 | string | Son los días de la semana que se permiten en el período. Si no se especifica, se permiten todos los días del período. Cada carácter de la cadena especifica un día. Por ejemplo, "LMMJV" especifica que se permiten los días laborables en el período. Los caracteres válidos son los siguientes:
Cualquier combinación de caracteres es válida. |
| Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | Es un contenedor para enumerar las ubicaciones del usuario (países) que son aptas para la promoción. Si se especifica, solo los usuarios que cumplan con los requisitos en los países enumerados recibirán la tarifa con descuento. Si no se especifica, se ofrecerá la tarifa con descuento a los usuarios aptos de cualquier país. |
| Promotions / HotelPromotions / Promotion / UserCountries / @type | 0..1 | enum | Es el tipo de especificación de UserCountries.
Los valores válidos son Si el parámetro UserCountries Si UserCountries Si no se establece UserCountries |
| Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | Define un país en el que los usuarios son aptos para la promoción. |
| Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | Un código de país de CLDR, como DE o FR. Ten en cuenta que, en algunos países, el código de país del CLDR no es el mismo que el código de país ISO de 2 letras. Además, no se admiten los códigos de región de CLDR. |
Ejemplos
Hay un límite de 500 promociones por propiedad. Consulta el ejemplo "Borra una promoción" para quitar promociones de una propiedad.
Mensaje básico
En el siguiente ejemplo, se muestra un mensaje Promotions básico:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<BookingWindow min="7" max="330"/>
<CheckinDates>
<DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
</CheckoutDates>
<Devices>
<Device type="mobile"/>
<Device type="tablet"/>
</Devices>
<Discount percentage="20" applied_nights="2"/>
<LengthOfStay min="2" max="14"/>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<Stacking type="base"/>
<UserCountries>
<Country code="US"/>
<Country code="GB"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
Estado del inventario
En el siguiente ejemplo, se muestra cómo crear un descuento si hay exceso de inventario cerca de la fecha de llegada:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow max="7"/>
<Discount percentage="10"/>
<InventoryCount min="3"/>
</Promotion>
</HotelPromotions>
</Promotions>
Cómo borrar una promoción
En el siguiente ejemplo, se muestra cómo borrar una promoción de una propiedad:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1" action="delete"/>
</HotelPromotions>
</Promotions>
Borra todas las promociones
En el siguiente ejemplo, se muestra cómo borrar todas las promociones de una propiedad:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>
Superponer todas las promociones
En el siguiente ejemplo, se muestra cómo superponer <HotelPromotions> para una propiedad con una o más promociones nuevas. Cuando es action="overlay", se borran todas las promociones almacenadas antes de almacenar las promociones especificadas en el mensaje actual:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<Discount percentage="10"/>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<Stacking type="base"/>
</Promotion>
</HotelPromotions>
</Promotions>
3 tipos diferentes de apilamiento
En el siguiente ejemplo, se muestra un caso en el que se aplicarían tres promociones diferentes (base, second y any). Ten en cuenta que no se aplicaría la promoción none, ya que las otras promociones ofrecen un mejor descuento. Si el precio original era de USD 100, el precio con descuento sería de USD 72.90.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="10"/>
<Stacking type="base"/>
</Promotion>
<Promotion id="2">
<Discount percentage="10"/>
<Stacking type="second"/>
</Promotion>
<Promotion id="3">
<Discount percentage="10"/>
<Stacking type="any"/>
</Promotion>
<Promotion id="4">
<Discount percentage="25"/>
<Stacking type="none"/>
</Promotion>
</HotelPromotions>
</Promotions>
Tipo de apilamiento None
En el siguiente ejemplo, se muestra un caso en el que se usa la promoción none porque la combinación de otras promociones proporciona un descuento menor. Si el precio original era de USD 100, el precio con descuento sería de USD 75.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="10"/>
<Stacking type="base"/>
</Promotion>
<Promotion id="2">
<Discount percentage="10"/>
<Stacking type="any"/>
</Promotion>
<Promotion id="3">
<Discount percentage="25"/>
<Stacking type="none"/>
</Promotion>
</HotelPromotions>
</Promotions>
Límites de duración del período de reserva
En el siguiente ejemplo, se muestra un caso en el que el elemento BookingWindow se usa con sus límites de inicio y finalización definidos como un tipo de duración ISO 8601. Esta restricción de período de reserva requiere que se realice la reserva a más tardar a las 18:00 del día anterior a la llegada y a partir de las 12:00 del 2º día anterior a la llegada.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow min="P1DT6H" max="P2DT12H"/>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Límites de DateTime de las fechas de reserva
En el siguiente ejemplo, se muestra un caso en el que el elemento BookingDates se usa con los atributos start y end como tipos DateTime. Esta restricción de fecha de reserva requiere que la reserva se realice entre las 6:30 a.m. del 1/7/2020 y las 6:45 p.m. del 2/7/2020.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01T06:30:00" end="2020-07-02T18:45:00"/>
</BookingDates>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Períodos sin año
En el siguiente ejemplo, se muestra un caso en el que el elemento CheckInDates contiene DateRanges que tienen campos start y end sin años. En este ejemplo, la promoción se aplica a las fechas de entrada entre el 29/12 y el 2/1, independientemente del año. Los períodos sin año que cruzan el límite del año nuevo no son válidos, por lo que el DateRange se expresa como dos períodos adyacentes.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<CheckInDates>
<DateRange start="12-29" end="12-31"/>
<DateRange start="01-01" end="01-02"/>
</CheckInDates>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Descuento de FreeNights
En el siguiente ejemplo, se aplica un descuento del 50% a dos noches por cada cuatro noches de estadía para el rango especificado de fechas de reserva. En un itinerario de diez noches, se descontaría el 50% de un total de cuatro noches.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2022-01-01" end="2022-05-31"/>
</BookingDates>
<Discount>
<FreeNights stay_nights="4" discount_nights="2" discount_percentage="50" night_selection="cheapest" repeats="true"/>
</Discount>
</Promotion>
</HotelPromotions>
</Promotions>
En el siguiente ejemplo, se aplica un descuento del 50% a una noche por cada tres noches de estadía en los rangos de fechas de estadía especificados. Solo se tienen en cuenta las noches de estadía superpuestas para cumplir con los requisitos del descuento. Para el siguiente itinerario con entrada el 2022-01-01 y salida el 2022-01-07, las noches de estadía aptas y los descuentos se aplican de la siguiente manera.
- 2022-01-01 (estadía)
- 2022-01-02 (estadía)
- 2022-01-03
- 2022-01-04 (con descuento)
- 2022-01-05 (estadía)
- 2022-01-06 (estadía)
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<StayDates application="overlap">
<DateRange start="2022-01-01" end="2022-01-02"/>
<DateRange start="2022-01-04" end="2022-01-06"/>
</StayDates>
<Discount>
<FreeNights stay_nights="3" discount_nights="1" discount_percentage="50" night_selection="last" repeats="true"/>
</Discount>
</Promotion>
</HotelPromotions>
</Promotions>
Selección clasificada
En el siguiente ejemplo, se ofrecen dos descuentos: uno del 20% y otro del 15%. Durante la evaluación, solo se aplica el descuento del 15% porque tiene un rango inferior.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="15" rank="25"/>
</Promotion>
<Promotion id="2">
<Discount percentage="20" rank="50"/>
</Promotion>
</HotelPromotions>
</Promotions>
BestDailyDiscount
En el siguiente ejemplo, se aplica un descuento a una estadía de dos noches con BestDailyDiscount apilado con un Discount.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="HotelID" action="overlay">
<Promotion id="general">
<BestDailyDiscount fixed_amount="20"/>
</Promotion>
<Promotion id="may">
<BestDailyDiscount fixed_amount="50"/>
<StayDates application="overlap">
<DateRange start="2023-05-01" end="2023-05-31"/>
</StayDates>
</Promotion>
<Promotion id="fiesta">
<Discount fixed_amount_per_night="5"/>
<Stacking type="any"/>
</Promotion>
</HotelPromotions>
</Promotions>
Considera una estadía de dos noches, del 30 de abril al 2 de mayo de 2023. Para el cálculo, primero se encuentra la combinación de los mejores descuentos diarios que genera el mayor descuento.
Para la primera noche, la promoción "general" es el único importe apto con un descuento fijo de 20.
Para la segunda noche, la promoción "may" ofrece un descuento mayor que el descuento "general". Por lo tanto, cuando se selecciona "puede", el importe del descuento fijo es de 50.
Luego, para la estadía, la promoción de "fiesta" se descuenta a 5 por noche, o 10 en total. Se puede combinar con la combinación de los mejores descuentos diarios porque "fiesta" tiene el tipo de combinación establecido en any. Si se establece en base, solo se aplica la combinación de los mejores descuentos diarios o el descuento de "fiesta". Consulta la descripción de Stacking para obtener más información.
`En general, el precio de la estadía recibe un descuento de importe fijo de 20 + 50 + 10 = 80.
Respuestas
Sintaxis
El mensaje PromotionsResponse usa la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues are populated. -->
<Success/>
<Issues>
<Issue code="issue_code"
status="issue_type">
issue_description
</Issue>
</Issues>
</PromotionsResponse>
Elementos y atributos
El mensaje PromotionsResponse tiene los siguientes elementos y atributos:
| Elemento / @Attribute | Casos | Tipo | Descripción |
|---|---|---|---|
| PromotionsResponse | 1 | Complex element | Es el elemento raíz que indica el éxito o los problemas de un mensaje de solicitud de promociones recibido. |
| PromotionsResponse / @timestamp | 1 | DateTime | Fecha y hora de creación de este mensaje. |
| PromotionsResponse / @id | 1 | string | Es el identificador único del mensaje de promociones asociado. |
| PromotionsResponse / @partner | 1 | string | Es la cuenta de socio de este mensaje. |
| PromotionsResponse / Success | 0..1 | Success | Indica que el mensaje de Promociones se procesó correctamente sin advertencias, errores ni fallas.
|
| PromotionsResponse / Issues | 0..1 | Issues | Es un contenedor para uno o más problemas que se encontraron durante el procesamiento del mensaje de Promotions.
|
| PromotionsResponse / Issues / Issue | 1..n | Issue | Es la descripción de una advertencia, un error o una falla que se produjo durante el procesamiento del mensaje de Promociones. Puedes encontrar detalles sobre estos problemas en Mensajes de error sobre el estado del feed. |
| PromotionsResponse / Issues / Issue / @code | 1 | integer | Es el identificador del problema. |
| PromotionsResponse / Issues / Issue / @status | 1 | enum | Es el tipo de problema que se encontró. Los valores válidos son |
Ejemplos
Listo
A continuación, se muestra una respuesta a un mensaje de promociones procesado correctamente.
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</PromotionsResponse>
Problemas
A continuación, se muestra una respuesta a un mensaje de Promociones que no se procesó debido a errores.
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Issues>
<Issue code="1001" status="error">Example</Issue>
</Issues>
</PromotionsResponse>