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 aptas que genera el precio más bajo. Si buscas una API que admita ajustes de tarifas arbitrarios que puedan aumentar o disminuir el precio cuando se cumplan 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 o @Attribute Casos Tipo Descripción
Promotions 1 Complex element Es el elemento raíz de un mensaje de promociones.
Promotions / @partner 1 string La cuenta de socio de este mensaje. Este valor de cadena es el valor de "Clave de socio" que aparece 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 La fecha y hora de creación de este mensaje.
Promotions / HotelPromotions 0..n HotelPromotions

Promociones de una propiedad. Cada promoción se aplica a una sola propiedad.

A menos que se use <Stacking>, la promoción con el descuento más alto se aplica a la reserva cuando varias promociones son aptas.

Promotions / HotelPromotions / @hotel_id 1 string Es el identificador único de la propiedad. Este valor debe coincidir con el ID de hotel especificado con <id> en el elemento <listing> del feed de lista de hoteles. El ID del hotel también se muestra en Hotel Center.
Promotions / HotelPromotions / @action 0..1 enum

Si se especifica, el valor debe ser "overlay". Cuando el valor es "overlay", se borran todas las promociones almacenadas antes de almacenar las promociones especificadas en el mensaje actual.

Si no se especifica, cada promoción especificada 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

Una sola promoción para una propiedad. Ten en cuenta que, si no se especifican action="overlay" y <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 para la promoción. La cantidad máxima de caracteres permitidos 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 actualiza 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 junto 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

Es la fecha de inicio o la fecha y hora de inicio (según la zona horaria de la propiedad) inclusive del período.

  • La fecha o la fecha y hora especificadas por start deben ser anteriores (o iguales) a la fecha o la fecha y hora especificadas por end.
  • Si no se especifica start, el rango es, en efecto, ilimitado en términos de una hora de inicio.
  • Si start se propaga como fecha "AAAA-MM-DD", se interpreta como fecha y hora "AAAA-MM-DDT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date o DateTime

Es la fecha o la fecha y hora de finalización (según la zona horaria de la propiedad) inclusive del período.

  • La fecha o la fecha y hora especificadas en end deben ser posteriores (o iguales) a la fecha o la fecha y hora especificadas en start.
  • Si no se especifica end, el rango es, en efecto, ilimitado en términos de una hora de finalización.
  • Si end se proporciona como fecha "AAAA-MM-DD", se interpreta como fecha y hora "AAAA-MM-DDT23:59:59".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

Los días de la semana permitidos en el período. Si no se especifica, se permiten todos los días en el período. Cada carácter de la cadena especifica un día. Por ejemplo, "L-V" especifica que se permiten los días de la semana 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 en el que se debe realizar la reserva en relación con la fecha de entrada (según la zona horaria de la propiedad). Por ejemplo, el período de reserva se puede establecer en al menos 7 días, pero no más de 180 días, antes del registro de entrada.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration La duración mínima antes del registro de entrada cuando se realiza la reserva debe ocurrir para que se aplique la promoción. Si no se especifica o su valor es 0, no hay un valor mínimo.

Los tipos de valor válidos son los siguientes:

  • 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 que se realizan al menos 30 días antes de la fecha de entrada.
  • Duración (días, horas y minutos) según la norma ISO 8601: 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 que se realizan 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 6:00 p.m. 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 de la fecha 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áximo.

Los tipos de valor válidos son los siguientes:

  • 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 con un máximo de 30 días antes de la fecha de entrada.
  • Duración (días, horas y minutos) según la norma ISO 8601: 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 con un máximo de 30 días antes de la fecha de entrada. Un valor de P30DT6H requiere una reserva a partir de las 6:00 p.m. del día 30 antes de la llegada.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Define restricciones sobre el valor máximo al que se puede establecer una tarifa después de aplicar las promociones.

Las promociones siempre deben especificar un <Discount> o un <BestDailyDiscount>. Por lo tanto, 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 el apilamiento, se pueden aplicar varias promociones con <Ceiling> a una sola estadía. Cada promoción aplicaría su descuento, seguido inmediatamente por su límite. En el siguiente ejemplo, se muestra cómo cada límite contribuye al siguiente cálculo de promoción en la pila.

Ejemplo:

Precios de 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 apilamiento base, un fixed_amount de 25 y un amount_per_night de techo de 60
  2. Promoción con tipo de apilamiento second, fixed_amount de 25 y un techo amount_per_night de 90

Este es el orden de cálculo:

  1. Primero, se aplica la promoción base y se descuenta el AmountBeforeTax a 75, pero luego el límite lo reduce a 60.
  2. La promoción second descuenta el AmountBeforeTax de 60 a 35. Esto está por debajo del límite superior de 90, por lo que no se aplica el segundo límite superior. La tasa 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 límite único que abarque toda la pila de promociones.

Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night 1 float

Es el importe máximo al que se puede establecer 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 tanto, 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 gratis tiene un descuento de 100% aplicado.

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

Ejemplo:

Precios de 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 apilamiento base, un fixed_amount de 25 y un amount_per_night mínimo de 90
  2. Promoción con tipo de apilamiento second, fixed_amount de 25 y un amount_per_night mínimo de 60

Este es el orden de cálculo:

  1. Primero se aplica la promoción base y se descuenta el AmountBeforeTax a 75, pero luego el piso lo aumenta a 90.
  2. La promoción second descuenta el AmountBeforeTax de 90 a 65. Esto está por encima del límite inferior de 60, por lo que no se aplica el segundo límite. La tasa final es 65.

El hecho de que 90 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 límite único que abarque toda la pila de promociones.

Promotions / HotelPromotions / Promotion / Floor / @amount_per_night 1 float

Es el importe mínimo al que se puede establecer una tarifa por noche después de aplicar el descuento.

Si también se especifica un elemento <Ceiling>, este se debe establecer 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 registrar la entrada 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 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 Es la 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, en realidad, 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 la misma que la fecha de start o posterior. Si no se especifica end, el período es ilimitado en términos de una fecha de finalización.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

Los días de la semana permitidos en el período. Si no se especifica, se permiten todos los días en el período. Cada carácter de la cadena especifica un día. Por ejemplo, "L-V" especifica que se permiten los días de la semana 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 el pago para que se aplique la promoción.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

Un período que especifique cuándo debe ocurrir la 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 start o end es una fecha sin año, ambas se deben propagar 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 Es la 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, en realidad, 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 la misma que la fecha de start o posterior. Si no se especifica end, el período es ilimitado en términos de una fecha de finalización.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

Los días de la semana permitidos en el período. Si no se especifica, se permiten todos los días en el período. Cada carácter de la cadena especifica un día. Por ejemplo, "L-V" especifica que se permiten los días de la semana 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 se les ofrece la tarifa con descuento a los usuarios aptos en los dispositivos enumerados. Si no se especifica, se les ofrece 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 que es 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 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 valores: 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 valores: 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 USD 100. El primero es un descuento porcentual normal del 10% y el segundo es un porcentaje del 10% del descuento base. Entonces, 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 valores: percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Es un importe fijo que se debe restar de la suma de las tarifas por noche de AmountAfterTax (o la suma de las tarifas por noche de AmountBeforeTax si no se especifica AmountAfterTax). Se supone que está en la misma moneda que las tarifas por noche. Si 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,

    tarifa 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,

    promotion rate = (AmountBeforeTax - fixed discount) * tax

    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,

    promotion rate = sum(AmountAfterTax) - (fixed discount)

    180.00 = (100 + 110 + 120) - 150

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

Se requiere exactamente uno de los siguientes valores: 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 AmountAfterTax tarifas por noche (o la N más económica si se especifica applied_nights). 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, esa tarifa 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 fixed_amount_per_night es 10,

    tarifa 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 fixed_amount_per_night es 20,

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

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

Si el objetivo de AmountAfterTax es reflejar un impuesto porcentual, establecer un precio fijo para AmountBeforeTax puede generar impuestos y tarifas imprecisos. En general, se recomienda usar TaxFeeInfo para especificar los impuestos y las tarifas de una propiedad.

Ejemplos:

  • 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 la promoción es 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%,

    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,

    promotion rate = 300

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

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

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

Si el objetivo de AmountAfterTax es reflejar un impuesto porcentual, establecer un precio fijo para AmountBeforeTax puede generar impuestos y tarifas imprecisos. En general, se recomienda usar TaxFeeInfo para especificar los impuestos y las tarifas de una propiedad.

Si se especifica applied_nights, el precio nuevo se aplica a las N 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, el porcentaje de promoción es 80 + 80 = 160.
  • 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%, el porcentaje de 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.

Es la cantidad de noches a las que se aplica el descuento, comenzando con la más económica. Debe ser un número entero entre 1 y 99. Si no se especifica, el descuento se aplica a todas las noches.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Especifica un descuento en ciertas noches de una estadía cuando se cumple una duración mínima de la estadía. No se permiten atributos en el elemento superior Discount si se usa este elemento.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

Cantidad de noches necesarias 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 la estadía: de la 1ª a la 4ª noche y de la 5ª a la 8ª noche; las noches 9 y 10 no forman parte de un segmento de noches de la 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 aplican descuentos a las noches al final del segmento de noches de estadía. Si es cheapest, se aplican descuentos a las noches más económicas del segmento de noches de la estadía.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

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 aplican descuentos a 2 segmentos (noches del 1 al 4 y del 5 al 8). Sin embargo, si repeats es false, solo se aplica un descuento a 1 segmento (noches del 1 al 4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Asigna una clasificación a esta promoción y la incluye en la selección por clasificación, en la que solo se selecciona la promoción con la clasificación más baja para que se aplique. Los valores deben estar entre 1 y 99 inclusive. Si varias promociones comparten la misma clasificación, se selecciona y aplica una de manera arbitraria.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Se debe especificar exactamente uno de 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 a diario". Esto significa que, para cada noche de la estadía, se selecciona y se puede aplicar la única promoción "mejor diaria" que sea apta y genere el descuento más alto para esa noche.

Se puede especificar Stacking con BestDailyDiscount. Debe establecerse en base o none. Los descuentos "mejores diarios" que proporcionan el descuento más bajo para cada noche se combinan y se consideran como un descuento de una sola estadía (es decir, Discount) y, al mismo tiempo, se respeta el tipo de apilamiento configurado. Este descuento combinado se compara con otras promociones aptas de <Discount> y se puede acumular con ellas para encontrar la combinación que proporcione el descuento más alto. 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.

Se puede especificar StayDates 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 debe restar de una sola tarifa por noche de AmountAfterTax (o de AmountBeforeTax si no se especifica AmountAfterTax). Se supone que está en la misma moneda que las tarifas por noche. Si 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

    tarifa 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 AmountAfterTax tarifas por noche, se establece el precio de la noche de la estadía, incluidos los impuestos y las tarifas, en el valor especificado. Si se especifica AmountBeforeTax, se establece el precio sin impuestos de la estadía en el valor especificado, independientemente de si se especifica AmountAfterTax. 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 las 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 la promoción se aplique a la tarifa por noche. Si no se especifica, no hay 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 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 valor mínimo.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer Es la cantidad máxima de noches permitidas en la estadía para que se aplique la promoción. Si no se especifica, no hay un máximo.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

Es un contenedor para una regla de tarifa de membresía que activa un tratamiento de IU específico para el descuento asociado.

No se debe especificar este elemento, a menos que también se especifique <Discount>.

Promotions / HotelPromotions / Promotion / MembershipRateRule / @id 1 string

Es el ID de la regla de tarifas asociada con un programa de membresía.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Especifica la suma mínima de las tarifas diarias de las habitaciones (se usa el valor más alto de AmountBeforeTax o 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 de ocupación 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.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer La ocupación especificada por el usuario debe ser de 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 mediante una combinación de paquete, tarifas y disponibilidad, como se define en los mensajes Transaction (Property Data), OTA_HotelRateAmountNotifRQ y OTA_HotelAvailNotifRQ, y como lo identifica 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 Transaction (Property Data) 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 los 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>. (El atributo InvTypeCode también hace referencia a su valor <RoomID> en los mensajes 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 Transaction (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: Se selecciona y aplica la mejor promoción second apta después de una promoción base (si corresponde) y antes de las promociones any.
  • none: No se puede combinar con otras promociones.

De las combinaciones permitidas, se aplica a la tarifa el conjunto de promociones que genera el descuento más alto.

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 adaptarse a los 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 estadía.

Siempre se debe especificar este atributo.

  • 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 debe 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 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 deseas establecer un período 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 Es la 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, en realidad, 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 la misma que la fecha de start o posterior. 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

Los días de la semana permitidos en el período. Si no se especifica, se permiten todos los días en el período. Cada carácter de la cadena especifica un día. Por ejemplo, "L-V" especifica que se permiten los días de la semana 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 de los usuarios (países) que son aptos para la promoción. Si se especifica, solo se les ofrece la tarifa con descuento a los usuarios que cumplan con los requisitos en los países indicados. Si no se especifica, se les 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 type de UserCountries está configurado como include, la promoción se aplica a los usuarios de los países enumerados.

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

Si no se establece el type de UserCountries, 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, para 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 "Cómo borrar 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 un 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>

Borrar 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>



Superposición de todas las promociones

En el siguiente ejemplo, se muestra cómo superponer <HotelPromotions> para una propiedad con una o más promociones nuevas. Cuando 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 de apilamiento diferentes

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 proporcionan un descuento mejor. Si el precio original fuera 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 Ninguno

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 fuera 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 se usa el elemento BookingWindow con sus límites de inicio y finalización definidos como un tipo de duración ISO 8601. Esta restricción del 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 segundo 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 fecha y hora 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 06:30 del 01/07/2020 y las 18:45 del 02/07/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 tiene 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 de año nuevo no son válidos, por lo que 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% por dos noches por cada cuatro noches que se permanezca en el período especificado de fechas de reserva. Para un itinerario de diez noches, se aplicaría un descuento del 50% a 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% por una noche por cada tres noches de estadía en los rangos de fechas de estadía especificados. Solo las noches de la estadía que se superponen cuentan para poder obtener el descuento. Para el siguiente itinerario con entrada el 1/1/2022 y salida el 7/1/2022, las noches de estadía calificadas y los descuentos se aplican de la siguiente manera.

  • 2022-01-01 (estancia)
  • 2022-01-02 (estancia)
  • 2022-01-03
  • 2022-01-04 (con descuento)
  • 2022-01-05 (estancia)
  • 2022-01-06 (estancia)
<?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 una clasificación más baja.

<?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 de una estadía de dos noches aplicando 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 de 2023 al 2 de mayo de 2023. Para el cálculo, primero se encuentra la combinación de los mejores descuentos diarios que genera el descuento más alto.

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 de “mayo” ofrece un descuento más alto que el descuento “general”. Por lo tanto, cuando se selecciona "may", el importe del descuento fijo es 50.

Luego, para la estadía, la promoción “fiesta” tiene un descuento de 5 por noche, o sea, 10 en total. Se puede combinar con la combinación de los mejores descuentos diarios porque "fiesta" tiene el tipo de apilamiento establecido en any. Si se estableciera en base, solo se aplicaría 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 o @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 La 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 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 promociones.

<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 encontró 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

El tipo de problema que se encontró

Los valores válidos son warning, error, y failure.

Ejemplos

Listo

La siguiente es 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

La siguiente es 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>