Promociones

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 ID especificado en el elemento <RequestorID> de tus mensajes <OTA_HotelRateAmountNotifRQ> y <OTA_HotelAvailNotifRQ> para la misma cuenta.

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 <Stacking>, se aplicará a la reserva la promoción con el mayor descuento cuando haya varias promociones aptas.

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 "overlay". Cuando el valor es "overlay", todas las promociones almacenadas se borran antes de almacenar las promociones especificadas en el mensaje actual.

Si no se especifica, cada promoción incluida en el mensaje actual es una de las siguientes:

  • Added (si ninguna de las promociones almacenadas tiene el mismo id)
  • Updated (si una promoción almacenada tiene el mismo id)
  • Deleted (si una promoción almacenada tiene el mismo id y el valor del atributo action para la promoción especificada en el mensaje actual es "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

Es una sola promoción para una propiedad. Ten en cuenta que, si no se especifican action="overlay" ni <Promotion>, se borrarán todas las promociones de la propiedad.

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 delete. Si no se especifica y no se almacena una promoción con el mismo id, se almacena esta promoción. De lo contrario, si no se especifica y se almacena una promoción con el mismo id, se actualizará la promoción existente.

Si se especifica delete, se borra la promoción almacenada con el mismo id. Cuando uses delete, no incluyas ningún elemento secundario en <Promotion>. Además, delete no se permite en conjunto con <HotelPromotions action="overlay"/>.

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.

  • La fecha o fecha y hora especificadas por start deben ser anteriores (o iguales) a la fecha o fecha y hora especificadas por end.
  • Si no se especifica start, el rango es ilimitado en términos de hora de inicio.
  • Si start se completa como la fecha "AAAA-MM-DD", se interpreta como la fecha y hora "AAAA-MM-DDT00:00:00".
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.

  • La fecha o fecha y hora especificadas por end deben ser posteriores (o iguales) a la fecha o fecha y hora especificadas por start.
  • Si no se especifica end, el rango es ilimitado en términos de hora de finalización.
  • Si end se proporciona como la fecha "AAAA-MM-DD", se interpreta como la fecha y hora "AAAA-MM-DDT23:59:59".
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:

  • M para el lunes
  • T para el martes
  • W para el miércoles
  • H para el jueves
  • F para el viernes
  • S para el sábado
  • U para el domingo

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:

  • Número entero: Es la cantidad de días antes de la fecha de entrada. Por ejemplo, un valor de 30 indica que la promoción solo se aplica a las reservas realizadas al menos 30 días antes de la fecha de entrada.
  • Duración según ISO 8601 (días, horas y minutos): Es la cantidad de días (y, de manera opcional, horas o minutos) antes de la fecha de entrada. Por ejemplo, un valor de P30D indica que la promoción solo se aplica a las reservas realizadas al menos 30 días antes de la fecha de entrada. Un valor de P30DT6H requiere que se realice la reserva a más tardar a las 18:00 del día 30 antes de la llegada.
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:

  • Número entero: Es la cantidad de días antes de la fecha de entrada. Por ejemplo, un valor de 30 indica que la promoción solo se aplica a las reservas realizadas hasta 30 días antes de la fecha de entrada.
  • Duración según ISO 8601 (días, horas y minutos): Es la cantidad de días (y, de manera opcional, horas o minutos) antes de la fecha de entrada. Por ejemplo, un valor de P30D indica que la promoción solo se aplica a las reservas realizadas hasta 30 días antes de la fecha de entrada. Un valor de P30DT6H requiere la reserva a partir de las 18:00 del día 30 antes de la llegada.
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 <Discount> o un <BestDailyDiscount>, por lo que, para crear una promoción que solo aplique un <Ceiling>, una opción es establecer un <Discount> con un percentage de 0.

Si se configura la acumulación, se podrían aplicar varias promociones con <Ceiling> a una sola estadía. Cada promoción aplicaría su descuento, seguido inmediatamente de su límite. En el siguiente ejemplo, se muestra cómo cada límite contribuye al siguiente cálculo de la promoción en la pila.

Ejemplo:

Precios para una estadía de 1 noche en la que AmountBeforeTax es 100 y hay una pila de dos promociones:

  1. Promoción con tipo de acumulación base, un fixed_amount del 25 y un límite máximo amount_per_night del 60
  2. Promoción con tipo de acumulación second, fixed_amount de 25 y un límite máximo amount_per_night de 90

Este es el orden de cálculo:

  1. Primero, se aplica la promoción de base y se descuenta el AmountBeforeTax a 75, pero, luego, el límite lo reduce a 60.
  2. La promoción second aplica un descuento al AmountBeforeTax, que pasa de 60 a 35. Este valor es inferior al límite máximo de 90, por lo que no se aplica el segundo límite. La tarifa final es 35.

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 <Floor>, este debe establecerse en un valor mayor o igual que el atributo amount_per_night en <Floor>.

amount_per_night se aplica a los impuestos y las tarifas cuando se incluyen en la tarifa por noche con AmountAfterTax, pero no a los que se especifican con TaxFeeInfo.

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 <Discount> o un <BestDailyDiscount>, por lo que, para crear una promoción que solo aplique un <Floor>, una opción es establecer un <Discount> con un percentage de 0.

La lógica de <Floor> aún se aplica a los descuentos de <FreeNights>, incluso si la noche gratuita tiene un descuento de 100% aplicado.

Si se configura la acumulación, se podrían aplicar varias promociones con <Floor> a una sola estadía. Cada promoción aplicaría su descuento, seguido inmediatamente de su precio mínimo. El siguiente ejemplo muestra cómo cada piso contribuye al siguiente cálculo de promoción en la pila.

Ejemplo:

Precios para una estadía de 1 noche en la que AmountBeforeTax es 100 y hay una pila de dos promociones:

  1. Promoción con tipo de acumulación base, un fixed_amount de 25 y un valor mínimo amount_per_night de 90
  2. Promoción con tipo de acumulación second, fixed_amount de 25 y un límite inferior amount_per_night de 60

Este es el orden de cálculo:

  1. Primero, se aplica la promoción de base y se descuenta el AmountBeforeTax a 75, pero, luego, el precio mínimo lo eleva a 90.
  2. La promoción second aplica un descuento al AmountBeforeTax, que pasa de 90 a 65. Este valor está por encima del límite inferior de 60, por lo que no se aplica el segundo piso. La tasa final es 65.

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 <Ceiling>, este debe establecerse en un valor menor o igual que el atributo amount_per_night en <Ceiling>.

amount_per_night se aplica a los impuestos y las tarifas cuando se incluyen en la tarifa por noche con AmountAfterTax, pero no a los que se especifican con TaxFeeInfo.

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.

  • Si una de las fechas de start o end no tiene año, se deben propagar y definir como fechas sin año.
  • Los períodos sin año no deben abarcar el Año Nuevo. En su lugar, representa el período como dos períodos adyacentes. Por ejemplo, {"12-29", "01-05"} se puede representar como {"12-29", "12-31"} y {"01-01", "01-05"}.
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:

  • M para el lunes
  • T para el martes
  • W para el miércoles
  • H para el jueves
  • F para el viernes
  • S para el sábado
  • U para el domingo

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.

  • Si una de las fechas de start o end no tiene año, ambas deben propagarse como fechas sin año.
  • Los períodos sin año no deben abarcar el Año Nuevo. En su lugar, representa el período como dos períodos adyacentes. Por ejemplo, {"12-29", "01-05"} se puede representar como {"12-29", "12-31"} y {"01-01", "01-05"}.
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:

  • M para el lunes
  • T para el martes
  • W para el miércoles
  • H para el jueves
  • F para el viernes
  • S para el sábado
  • U para el domingo

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 Discount o BestDailyDiscount.

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: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Es un valor decimal de 0 a 100 que especifica el porcentaje de descuento. Se aplica a AmountAfterTax (o AmountBeforeTax si no se especifica AmountAfterTax).

Ejemplos:

  • Si AmountAfterTax es 100 y percentage es 20, entonces

    tasa de promoción = AmountAfterTax * (1 - porcentaje de descuento)

    80.00 = 100 * (1 - 0.2)

  • Si AmountBeforeTax es 100, percentage es 20 y TaxFeeInfo especifica un impuesto de 10, entonces

    tasa de promoción = AmountBeforeTax * (1 - porcentaje de descuento) + impuestos

    90.00 = 100 * (1 - 0.2) + 10

Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base 0..1 float

Se requiere exactamente uno de los siguientes: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Es un valor decimal de 0 a 100 que especifica el porcentaje de descuento base. Al igual que percentage, se aplica a AmountAfterTax (o AmountBeforeTax si no se especifica AmountAfterTax).

A diferencia de percentage, este descuento siempre se calcula como un porcentaje de las tarifas base, independientemente de las promociones anteriores que se hayan aplicado en secuencia.

Ejemplo:

  • Supongamos que tenemos dos promociones que se aplican en secuencia a una estadía de una noche con un precio de 100. El primero es un descuento porcentual normal del 10% y el segundo es un descuento porcentual del 10% del precio base. Luego, la tarifa con descuento será de 80, ya que ambas promociones quitan 10. Ten en cuenta que, si la segunda promoción también fuera un descuento porcentual normal, la tarifa con descuento sería de 81, ya que la segunda promoción descuenta el 10% de 90.
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

Se requiere exactamente uno de los siguientes: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Es un importe fijo que se restará de la suma de las tarifas nocturnas de AmountAfterTax (o de la suma de las tarifas nocturnas de AmountBeforeTax si no se especifica AmountAfterTax). Se supone que está en la misma moneda que las tarifas por noche. Si este valor es mayor que la suma de las tarifas por noche, el valor resultante es cero.

Ejemplos:

  • Si establecemos el precio de una estadía de 1 noche en la que AmountBeforeTax es 90, AmountAfterTax es 100 y fixed_amount es 20, entonces

    tasa de promoción = AmountAfterTax - descuento fijo

    80.00 = 100 - 20

  • Si establecemos el precio de una estadía de 1 noche en la que AmountBeforeTax es 100, fixed_amount es 20 y TaxFeeInfo especifica un impuesto del 8%, entonces

    tasa de promoción = (AmountBeforeTax - descuento fijo) * (1 + impuesto porcentual)

    86.40 = (100 - 20) * 1.08

  • Si establecemos el precio de una estadía de 1 noche en la que AmountBeforeTax es 50, fixed_amount es 60 y TaxFeeInfo especifica un impuesto de 10, entonces

    tasa de promoción = (AmountBeforeTax - descuento fijo) * impuesto

    10.00 = 0 + 10

  • Si establecemos el precio de una estadía de 3 noches en la que los valores de AmountAfterTax son 100, 110 y 120, y fixed_amount es 150, entonces

    tasa de promoción = suma(AmountAfterTax) - (descuento fijo)

    180.00 = (100 + 110 + 120) - 150

Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night 0..1 float

Se requiere exactamente uno de los siguientes: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

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 applied_nights).AmountAfterTax Si no se especifica AmountAfterTax, se aplica a AmountBeforeTax. Se supone que está en la misma moneda que las tarifas por noche. Si fixed_amount_per_night es mayor que una tarifa por noche, esta se reduce a cero. El descuento no puede hacer que una tarifa por noche sea negativa.

Ejemplos:

  • Si establecemos el precio de una estadía de 3 noches en la que los valores de AmountAfterTax son 100, 110 y 120, y el valor de fixed_amount_per_night es 10, entonces

    tasa de promoción = suma(AmountBeforeTax - descuento de importe fijo)

    300.00 = ((100 - 10) + (110 - 10) + (120 - 10))

  • Si establecemos el precio de una estadía de 3 noches en la que los valores de AmountAfterTax son 10, 50 y 100, y el valor de fixed_amount_per_night es 20, entonces

    tasa de promoción = suma(AmountAfterTax - descuento de importe fijo)

    110.00 = (0 + (50 - 20) + (100 - 20))

Promotions / HotelPromotions / Promotion / Discount / @fixed_price 0..1 float

Se requiere exactamente uno de los siguientes: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Si se especifican tarifas nocturnas de AmountAfterTax, se establece el precio de la estadía, incluidos los impuestos y las tarifas, en el valor especificado. Si se especifica AmountBeforeTax, independientemente de si se especifica AmountAfterTax, se establece el precio antes de impuestos de la estadía en el valor especificado. Se supone que está en la misma moneda que las tarifas por noche.

Si AmountAfterTax tiene la intención de reflejar un porcentaje de impuestos, establecer un precio fijo para AmountBeforeTax puede generar impuestos y comisiones inexactos. En general, se recomienda usar TaxFeeInfo para especificar los impuestos y las comisiones de una propiedad.

Ejemplos:

  • Por ejemplo, si establecemos el precio de una estadía de 1 noche en la que AmountBeforeTax es 90, AmountAfterTax es 100 y fixed_price es 80, la tarifa de promoción será de 80.
  • Si establecemos el precio de una estadía de 1 noche en la que AmountBeforeTax es 100, fixed_amount es 80 y TaxFeeInfo especifica un impuesto del 8%, entonces

    tasa de promoción = precio fijo * (1 + porcentaje de impuestos)

    86.40 = 80 * 1.08

  • Si establecemos el precio de una estadía de 3 noches en la que los valores de AmountAfterTax son 100, 110 y 120, y fixed_amount es 300, entonces

    promotion rate = 300

Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night 0..1 float

Se requiere exactamente uno de los siguientes: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Si se especifican tarifas por noche de AmountAfterTax, se establece el precio para cada noche de la estadía, incluidos los impuestos y las tarifas, en el valor especificado. Si se especifica AmountBeforeTax, independientemente de si se especifica AmountAfterTax, se establece el precio antes de impuestos para cada noche de estadía en el valor especificado. Se supone que está en la misma moneda que las tarifas por noche.

Si AmountAfterTax tiene la intención de reflejar un porcentaje de impuestos, establecer un precio fijo para AmountBeforeTax puede generar impuestos y comisiones inexactos. En general, se recomienda usar TaxFeeInfo para especificar los impuestos y las comisiones de una propiedad.

Si se especifica applied_nights, el precio nuevo se aplica a las noches más económicas.

Ejemplos:

  • Si establecemos el precio de una estadía de 2 noches en la que los valores de AmountBeforeTax son 90 y 90; los valores de AmountAfterTax son 100 y 100; y fixed_price es 80, la tarifa de promoción es 80 + 80 = 160.
  • Por ejemplo, si establecemos el precio de una estadía de 2 noches en la que AmountBeforeTax es 100, 100; fixed_amount es 80 y TaxFeeInfo especifica un impuesto del 8%, la tarifa de la promoción es (80 + 80) * 1.08 = 172.8.
  • Si establecemos el precio de una estadía de 3 noches en la que los valores de AmountAfterTax son 100, 110 y 120, y fixed_amount es 110, la tarifa de promoción es 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Esto solo debe usarse con percentage o fixed_amount_per_night.

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 stay_nights es 4 (y repeats es verdadero), hay dos segmentos de noches de estadía: de la 1ª a la 4ª noche y de la 5ª a la 8ª noche. La 9ª y la 10ª noche no forman parte de un segmento de noches de estadía.

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 false, solo se aplica el descuento al segmento de noches de estadía al comienzo del itinerario. Si es true, se aplica un descuento a cualquier segmento de noches de estadía.

Por ejemplo, si stay_nights es 4 y el itinerario es de 10 noches, si repeats es true, se descuentan 2 segmentos (noches 1 a 4 y noches 5 a 8); pero, si repeats es false, solo se descuenta 1 segmento (noches 1 a 4).

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 Discount o BestDailyDiscount.

Especifica un descuento diario que se puede aplicar a una noche de estadía. Esto contrasta con Discount, que aplica descuentos a estadías completas.

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.

Stacking se puede especificar con BestDailyDiscount. Debe establecerse en base o none. Los descuentos de "mejor tarifa diaria" que generan el mayor descuento para cada noche se combinan y se tratan como un solo descuento de estadía (es decir, Discount) respetando el tipo de acumulación configurado. Este descuento combinado se compara con otras promociones de <Discount> aptas y se puede acumular con ellas para encontrar la que proporcione el mayor descuento o la combinación que lo haga. Se selecciona y aplica la combinación de BestDailyDiscount o un solo Discount, lo que genere el precio más bajo, para el tipo de apilamiento base.

StayDates se puede especificar con este tipo de descuento, pero application debe establecerse en overlap.

.
Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage 0..1 float

Se requiere exactamente uno de percentage, fixed_amount o fixed_price.

Es un valor decimal de 0 a 100 que especifica el porcentaje de descuento. Se aplica a AmountAfterTax (o AmountBeforeTax si no se especifica AmountAfterTax).

Ejemplos:

  • Si AmountAfterTax para una noche de estadía es 100 y percentage es 20, entonces

    tasa de promoción = AmountAfterTax * (1 - porcentaje de descuento)

    80.00 = 100 * (1 - 0.2)

  • Si AmountBeforeTax para una noche de estadía es 100, percentage es 20 y TaxFeeInfo especifica un impuesto de 10, entonces

    tasa de promoción = AmountBeforeTax * (1 - porcentaje de descuento) + impuestos

    90.00 = 100 * (1 - 0.2) + 10

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount 0..1 float

Se requiere exactamente uno de percentage, fixed_amount o fixed_price.

Es un importe fijo que se restará de una sola tarifa por noche AmountAfterTax (o de la tarifa por noche AmountBeforeTax si no se especifica AmountAfterTax). Se supone que está en la misma moneda que las tarifas por noche. Si este valor es mayor que la suma de las tarifas por noche, el valor resultante es cero.

Ejemplos:

  • Si AmountBeforeTax para una sola noche es 90, AmountAfterTax es 100 y fixed_amount es 20, entonces

    tasa de promoción = AmountAfterTax - descuento fijo

    80.00 = 100 - 20

  • Si AmountBeforeTax para una sola noche es 100, fixed_amount es 20 y TaxFeeInfo especifica un impuesto del 8%, entonces

    tasa de promoción = (AmountBeforeTax - descuento fijo) * (1 + impuesto porcentual)

    86.40 = (100 - 20) * 1.08

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price 0..1 float

Se requiere exactamente uno de percentage, fixed_amount o fixed_price.

Si se especifican tarifas nocturnas de AmountAfterTax, se establece el precio de la noche de estadía, incluidos los impuestos y las tarifas, en el valor especificado. Si se especifica AmountBeforeTax, independientemente de si se especifica AmountAfterTax, se establece el precio antes de impuestos de la estadía en el valor especificado. Se supone que está en la misma moneda que las tarifas por noche.

Ejemplos:

  • Si AmountBeforeTax para una sola noche es 90, AmountAfterTax es 100 y fixed_price es 80, la tarifa de promoción es 80.
  • Si AmountBeforeTax para una sola noche es 100, fixed_amount es 80 y TaxFeeInfo especifica un impuesto del 8%, entonces

    tasa de promoción = precio fijo * (1 + porcentaje de impuestos)

    86.40 = 80 * 1.08

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 <Discount>.

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:

  • any: Se puede combinar con cualquier otra promoción (excepto none), pero no se garantiza el orden en el que se deben aplicar las promociones.
  • base: La mejor promoción apta de base se selecciona y aplica primero, antes que otras promociones. Anteriormente, se llamaba base_only.
  • second: La mejor promoción apta de second se selecciona y se aplica después de una promoción de base (si corresponde) y antes de las promociones de any.
  • none: No se puede combinar con otras promociones.

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:

  • all: Aplica la promoción a cada noche del itinerario si todas las fechas del itinerario se superponen con las fechas de la estadía.
  • any: Aplica la promoción a todas las noches del itinerario si alguna fecha del itinerario se superpone con una fecha del período de la estadía.
  • overlap: Aplica la promoción solo a las noches del itinerario que se superponen con una fecha del período de la estadía.

Este atributo siempre se debe especificar.

  • Si <Discount> especifica percentage y application se establece en all o any, el descuento se aplica como un porcentaje de la estadía completa.
  • Si <Discount> especifica percentage y application se establece en overlap, el descuento se aplica como un porcentaje de las tarifas por noche para las noches superpuestas.
  • <Discount> que especifica fixed_amount y application establecido en overlap es una combinación no válida.
  • <FreeNights> admite todos los valores de application. Ten en cuenta que, para overlap, solo se consideran las noches de estadía superpuestas para los requisitos de descuento.
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 una de las fechas de start o end no tiene año, se deben propagar y definir como fechas sin año.
  • Los períodos sin año no deben abarcar el Año Nuevo. En su lugar, representa el período como dos períodos adyacentes. Por ejemplo, {"12-29", "01-05"} se puede representar como {"12-29", "12-31"} y {"01-01", "01-05"}.

Si quieres establecer un rango de StayDates para permitir la promoción en días específicos de la semana, debes establecer la fecha start como la fecha actual sin end para que la promoción no venza.

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 start si no se proporciona el valor de end.

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 end si no se proporciona el valor de start.

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:

  • M para el lunes
  • T para el martes
  • W para el miércoles
  • H para el jueves
  • F para el viernes
  • S para el sábado
  • U para el domingo

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 include y exclude.

Si el parámetro UserCountries type se configura como include, la promoción se aplica a los usuarios de los países enumerados.

Si UserCountries type es exclude, la promoción se aplica a los usuarios que no se encuentran en los países enumerados.

Si no se establece UserCountries type, se considera como include y la promoción se aplica a los usuarios de los países enumerados.

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.

<Success> o <Issues> están presentes en cada mensaje.

PromotionsResponse / Issues 0..1 Issues Es un contenedor para uno o más problemas que se encontraron durante el procesamiento del mensaje de Promotions.

<Success> o <Issues> están presentes en cada mensaje.

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 warning, error, y failure.

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>