Promoções

Visão geral

Essa API permite especificar possíveis descontos. Das promoções especificadas, o Google aplica a promoção ou o conjunto de promoções qualificado que leva ao preço mais baixo. Se você está procurando uma API que ofereça suporte a ajustes de preço arbitrários que podem aumentar ou diminuir o preço quando as condições são satisfeitas, considere nossa API Rate Modifications. Se as duas APIs estiverem presentes, as modificações de taxa serão aplicadas antes das promoções.

Solicitações

Sintaxe

A mensagem Promotions usa a seguinte sintaxe:

<?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 e atributos

A mensagem de promoções tem os seguintes elementos e atributos:

Elemento / @Attribute Ocorrências Tipo Descrição
Promotions 1 Complex element O elemento raiz de uma mensagem de promoções.
Promotions / @partner 1 string A conta do parceiro para esta mensagem. Esse valor de string é o valor da "chave do parceiro" listado na página "Configurações da conta" da Central para Hotéis.

Se você tiver um back-end que fornece feeds para várias contas, esse valor precisa corresponder ao valor do atributo ID especificado no elemento <RequestorID> das mensagens <OTA_HotelRateAmountNotifRQ> e <OTA_HotelAvailNotifRQ> da mesma conta.

Promotions / @id 1 string Um identificador exclusivo para essa mensagem de solicitação. Esse valor é retornado na mensagem de resposta. Os caracteres permitidos são a-z, A-Z, 0-9, _ (sublinhado) e - (traço).
Promotions / @timestamp 1 DateTime A data e a hora de criação da mensagem.
Promotions / HotelPromotions 0..n HotelPromotions

Promoções de uma propriedade. Cada promoção se aplica a uma única propriedade.

A menos que <Stacking> seja usado, a promoção com o maior desconto será aplicada à reserva quando várias promoções estiverem qualificadas.

Promotions / HotelPromotions / @hotel_id 1 string O identificador exclusivo da propriedade. Esse valor precisa corresponder ao ID do hotel especificado usando <id> no elemento <listing> no feed de lista de hotéis. O ID do hotel também está listado na Central para Hotéis.
Promotions / HotelPromotions / @action 0..1 enum

Se especificado, o valor precisa ser "overlay". Quando o valor é "overlay", todas as promoções armazenadas são excluídas antes de armazenar as promoções especificadas na mensagem atual.

Se não for especificado, cada promoção especificada na mensagem atual será:

  • Added (se nenhuma das promoções armazenadas tiver o mesmo id)
  • Updated (se uma promoção armazenada tiver o mesmo id)
  • Deleted (se uma promoção armazenada tiver o mesmo id e o valor do atributo action da promoção especificado na mensagem atual for "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

Uma única promoção para uma propriedade. Se action="overlay" e <Promotion> não forem especificados, todas as promoções da propriedade serão excluídas.

Se você precisar usar mais de 99 promoções, entre em contato com seu gerente técnico de contas (TAM).

Promotions / HotelPromotions / Promotion / @id 1 string Um identificador exclusivo da promoção. O número máximo de caracteres permitidos é 40. Os caracteres permitidos são a-z, A-Z, 0-9, _ (sublinhado), - (traço) e . (ponto final).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Se especificado, o valor precisa ser delete. Se não for especificado e uma promoção com o mesmo id não for armazenada, ela será armazenada. Caso contrário, se não for especificado e uma promoção com o mesmo id for armazenada, a promoção atual será atualizada.

Se delete for especificado, a promoção armazenada com o mesmo id será excluída. Ao usar delete, não inclua elementos filhos em <Promotion>. Além disso, delete não é permitido em conjunto com <HotelPromotions action="overlay"/>.

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates Um contêiner para um ou mais intervalos que definem quando a reserva precisa ocorrer para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange Um intervalo que especifica quando a reserva precisa ocorrer para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date ou DateTime

A data ou a data e hora de início (com base no fuso horário da propriedade) do período.

  • A data ou a data e hora especificadas por start precisam ser anteriores (ou iguais) à data ou data e hora especificadas por end.
  • Se start não for especificado, o intervalo será ilimitado em termos de horário de início.
  • Se start for preenchido como a data "AAAA-MM-DD", ele será interpretado como a data/hora "AAAA-MM-DDT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date ou DateTime

A data ou a data e hora final (com base no fuso horário da propriedade) do período.

  • A data ou a data e hora especificadas por end precisam ser posteriores ou iguais à data ou data e hora especificadas por start.
  • Se end não for especificado, o intervalo será ilimitado em termos de um horário de término.
  • Se end for fornecido como a data "AAAA-MM-DD", ele será interpretado como a data e hora "AAAA-MM-DDT23:59:59".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

Os dias da semana permitidos no período. Se não for especificado, todos os dias serão permitidos no período. Cada caractere na string especifica um dia. Por exemplo, "MTWHF" especifica que os dias da semana são permitidos no período.

Os caracteres válidos são:

  • M para segunda-feira
  • T para terça-feira
  • W para quarta-feira
  • H para quinta-feira
  • F para sexta-feira
  • S para sábado
  • U para domingo

Qualquer combinação de caracteres é válida.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow Especifica o período em que a reserva precisa ocorrer em relação à data de check-in (com base no fuso horário da propriedade). Por exemplo, a janela de reserva pode ser definida para pelo menos 7 dias, mas não mais de 180 dias, antes do check-in.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration A duração mínima antes do check-in na reserva precisa ocorrer para que a promoção seja aplicada. Se esse valor não for especificado ou se o valor for 0, não haverá um mínimo.

Os tipos de valor válidos são:

  • Inteiro:o número de dias antes da data de check-in. Por exemplo, um valor de 30 indica que a promoção só se aplica a reservas feitas pelo menos 30 dias antes da data de check-in.
  • Duração ISO 8601 (dias, horas e minutos): o número de dias (e, opcionalmente, horas/minutos) antes da data de check-in. Por exemplo, um valor de P30D indica que a promoção só se aplica a reservas feitas pelo menos 30 dias antes da data de check-in. Um valor de P30DT6H exige reserva até às 18h do 30º dia antes da chegada.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration O número máximo de dias antes do check-in em que a reserva precisa ser feita para que a promoção seja aplicada. Se isso não for especificado ou se o valor for 0, não haverá um máximo.

Os tipos de valor válidos são:

  • Inteiro:o número de dias antes da data de check-in. Por exemplo, um valor de 30 indica que a promoção só se aplica a reservas com no máximo 30 dias de antecedência à data de check-in.
  • Duração ISO 8601 (dias, horas e minutos): o número de dias (e, opcionalmente, horas/minutos) antes da data de check-in. Por exemplo, um valor de P30D indica que a promoção só se aplica a reservas com no máximo 30 dias de antecedência à data de check-in. Um valor de P30DT6H exige reserva a partir das 18h do 30º dia antes da chegada.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Define restrições ao valor máximo que uma tarifa pode ter depois que as promoções são aplicadas.

As promoções precisam sempre especificar um <Discount> ou um <BestDailyDiscount>. Para criar uma promoção que aplique apenas um <Ceiling>, uma opção é definir um <Discount> com um percentage de 0.

Se a empilhamento estiver configurada, várias promoções com <Ceiling> poderão ser aplicadas a uma única estadia. Cada promoção aplicaria o desconto, imediatamente seguido pelo teto. O exemplo a seguir demonstra como cada limite contribui para o próximo cálculo de promoção na pilha.

Exemplo:

Definir o preço de uma estadia de 1 noite em que AmountBeforeTax é 100 e há uma pilha de duas promoções:

  1. Promoção com tipo de empilhamento base, um fixed_amount de 25 e um amount_per_night teto de 60
  2. Promoção com tipo de empilhamento second, fixed_amount de 25 e um limite amount_per_night de 90

Confira a ordem de cálculo:

  1. A promoção base é aplicada primeiro e oferece um desconto de 75% no AmountBeforeTax, mas o limite máximo é reduzido para 60.
  2. A promoção second oferece descontos de AmountBeforeTax de 60% para 35%. Esse valor está abaixo do limite de 90, então o segundo limite não é aplicado. A taxa final é 35.

O fato de 60 ser um limite geral mais rígido é irrelevante, já que ele é válido apenas para a própria promoção, e não pode haver um único limite que abranja toda a pilha de promoções.

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

O valor máximo que uma diária pode ter depois que o desconto é aplicado.

Se um elemento <Floor> também for especificado, ele precisará ser definido como um valor maior ou igual ao atributo amount_per_night em <Floor>.

amount_per_night é aplicado a tributos e taxas quando eles estão incluídos na tarifa noturna usando AmountAfterTax, mas não aqueles especificados usando TaxFeeInfo.

Promotions / HotelPromotions / Promotion / Floor 0..1 Floor

Define restrições ao valor mínimo que uma tarifa pode ter depois que as promoções são aplicadas.

As promoções precisam sempre especificar um <Discount> ou um <BestDailyDiscount>. Para criar uma promoção que aplique apenas um <Floor>, uma opção é definir um <Discount> com um percentage de 0.

A lógica de <Floor> ainda se aplica aos descontos de <FreeNights>, mesmo que a noite sem custo financeiro tenha um desconto de 100% aplicado a ela.

Se a empilhamento estiver configurada, várias promoções com <Floor> poderão ser aplicadas a uma única estadia. Cada promoção aplicaria o desconto, imediatamente seguido pelo preço mínimo. O exemplo a seguir demonstra como cada piso contribui para o próximo cálculo de promoção na pilha.

Exemplo:

Definir o preço de uma estadia de 1 noite em que AmountBeforeTax é 100 e há uma pilha de duas promoções:

  1. Promoção com tipo de empilhamento base, fixed_amount de 25 e um amount_per_night de 90
  2. Promoção com tipo de empilhamento second, fixed_amount de 25 e um amount_per_night mín. de 60

Confira a ordem de cálculo:

  1. A promoção base é aplicada primeiro e oferece um desconto de AmountBeforeTax para 75, mas o piso aumenta até 90.
  2. A promoção second oferece descontos de AmountBeforeTax de 90% para 65%. Esse valor está acima do piso de 60, então o segundo piso não é aplicado. A taxa final é 65.

O fato de 90 ser um piso geral mais rigoroso é irrelevante, já que ele é válido apenas para a própria promoção, e não pode haver um único piso que abranja toda a pilha de promoções.

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

O valor mínimo que uma diária pode ter depois que o desconto é aplicado.

Se um elemento <Ceiling> também for especificado, ele precisará ser definido como um valor menor ou igual ao atributo amount_per_night em <Ceiling>.

amount_per_night é aplicado a tributos e taxas quando eles estão incluídos na tarifa noturna usando AmountAfterTax, mas não aqueles especificados usando TaxFeeInfo.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates Um contêiner para um ou mais períodos que definem quando o check-in precisa ocorrer para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

Um período que especifica quando o check-in precisa ocorrer para que a promoção seja aplicada. Esse elemento não é necessário se você estiver excluindo uma ou mais promoções.

O formato YearlessDate também é aceito.

  • Se um dos start ou end for uma data sem ano, ambos precisarão ser preenchidos como datas sem ano.
  • Os períodos sem ano não podem se estender até o ano novo. Em vez disso, represente o intervalo como dois períodos adjacentes. Por exemplo, {"12-29", "01-05"} pode ser representado como {"12-29", "12-31"} e {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate A data de início (com base no fuso horário da propriedade) do período. Essa data precisa ser anterior ou igual à data de end. Se start não for especificado, o período será ilimitado em termos de data de início.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate A data de término (com base no fuso horário da propriedade) do período. Essa data precisa ser igual ou posterior à data de start. Se end não for especificado, o período será ilimitado em termos de data de término.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

Os dias da semana permitidos no período. Se não for especificado, todos os dias serão permitidos no período. Cada caractere na string especifica um dia. Por exemplo, "MTWHF" especifica que os dias da semana são permitidos no período.

Os caracteres válidos são:

  • M para segunda-feira
  • T para terça-feira
  • W para quarta-feira
  • H para quinta-feira
  • F para sexta-feira
  • S para sábado
  • U para domingo

Qualquer combinação de caracteres é válida.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates Um contêiner para um ou mais períodos que definem quando o check-out precisa ocorrer para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

Um período que especifica quando o check-out precisa ocorrer para que a promoção seja aplicada. Esse elemento não é necessário se você estiver excluindo uma ou mais promoções.

O formato YearlessDate também é aceito.

  • Se um dos valores start ou end for uma data sem ano, ambos precisarão ser preenchidos como datas sem ano.
  • Os períodos sem ano não podem se estender até o ano novo. Em vez disso, represente o intervalo como dois períodos adjacentes. Por exemplo, {"12-29", "01-05"} pode ser representado como {"12-29", "12-31"} e {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate A data de início (com base no fuso horário da propriedade) do período. Essa data precisa ser anterior ou igual à data de end. Se start não for especificado, o período será ilimitado em termos de data de início.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate A data de término (com base no fuso horário da propriedade) do período. Essa data precisa ser igual ou posterior à data de start. Se end não for especificado, o período será ilimitado em termos de data de término.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

Os dias da semana permitidos no período. Se não for especificado, todos os dias serão permitidos no período. Cada caractere na string especifica um dia. Por exemplo, "MTWHF" especifica que os dias da semana são permitidos no período.

Os caracteres válidos são:

  • M para segunda-feira
  • T para terça-feira
  • W para quarta-feira
  • H para quinta-feira
  • F para sexta-feira
  • S para sábado
  • U para domingo

Qualquer combinação de caracteres é válida.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices Contêiner para listar os dispositivos do usuário qualificados para a promoção. Se especificado, apenas os usuários qualificados nos dispositivos listados vão receber a tarifa com desconto. Se não for especificado, a tarifa com desconto será oferecida aos usuários qualificados em qualquer dispositivo.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device Define um tipo de dispositivo do usuário qualificado para a promoção.
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum Um tipo de dispositivo. O valor precisa ser desktop, tablet ou mobile.
Promotions / HotelPromotions / Promotion / Discount 1 Discount

É preciso especificar exatamente um entre Discount ou BestDailyDiscount.

Especifica o desconto a ser aplicado a essa promoção.

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

Exatamente um de percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é necessário.

Um valor decimal de 0 a 100 que especifica a porcentagem de desconto. Ele é aplicado a AmountAfterTax (ou AmountBeforeTax se AmountAfterTax não for especificado).

Exemplos:

  • Se AmountAfterTax for 100 e percentage for 20, então

    taxa de promoção = AmountAfterTax * (1 - porcentagem de desconto)

    80,00 = 100 * (1 - 0,2)

  • Se AmountBeforeTax for 100, percentage for 20 e TaxFeeInfo especificar um imposto de 10, então

    taxa de promoção = AmountBeforeTax * (1 - porcentagem de desconto) + tributos

    90,00 = 100 * (1 - 0,2) + 10

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

Exatamente um de percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é necessário.

Um valor decimal de 0 a 100 que especifica a porcentagem do desconto básico. Semelhante a percentage, ele é aplicado a AmountAfterTax (ou AmountBeforeTax se AmountAfterTax não for especificado).

Ao contrário de percentage, esse desconto é sempre calculado como uma porcentagem das taxas básicas, independentemente das promoções anteriores que foram aplicadas em sequência.

Exemplo:

  • Suponha que tenhamos duas promoções aplicadas em sequência a uma estadia de uma noite com preço de 100. O primeiro é um desconto percentual normal de 10%, e o segundo é um percentual de 10% do desconto básico. Nesse caso, a taxa com desconto será 80, já que ambas as promoções oferecem 10% de desconto. Se a segunda promoção também for um desconto percentual normal, a taxa com desconto será 81, já que a segunda promoção oferece 10% de desconto de 90.
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

Exatamente um de percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é necessário.

Um valor fixo a ser subtraído da soma das diárias de AmountAfterTax (ou da soma das diárias de AmountBeforeTax se AmountAfterTax não for especificado). O valor é considerado na mesma moeda das diárias. Se esse valor for maior que a soma das tarifas noturnas, o valor resultante será zero.

Exemplos:

  • Se o preço de uma estadia de uma noite for AmountBeforeTax 90, AmountAfterTax 100 e fixed_amount 20,

    taxa de promoção = AmountAfterTax - desconto fixo

    80,00 = 100 - 20

  • Se o preço de uma estadia de uma noite for AmountBeforeTax 100, fixed_amount 20 e TaxFeeInfo especificar um imposto de 8%,

    taxa de promoção = (AmountBeforeTax - desconto fixo) * (1 + taxa percentual)

    86,40 = (100 - 20) * 1,08

  • Se o preço de uma estadia de uma noite for AmountBeforeTax 50, fixed_amount 60 e TaxFeeInfo especificar um imposto de 10,

    taxa de promoção = (AmountBeforeTax - desconto fixo) * tributos

    10,00 = 0 + 10

  • Se estivermos definindo o preço de uma estadia de três noites em que os valores de AmountAfterTax são 100, 110 e 120 e fixed_amount é 150,

    taxa de promoção = soma(AmountAfterTax) - (desconto fixo)

    180,00 = (100 + 110 + 120) - 150

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

Exatamente um de percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é necessário.

Um desconto fixo aplicado a cada uma das tarifas noturnas de AmountAfterTax (ou a mais barata N se applied_nights for especificada). Se AmountAfterTax não for especificado, ele será aplicado a AmountBeforeTax. O valor é considerado na mesma moeda das diárias. Se fixed_amount_per_night for maior que uma diária, ela será reduzida a zero. O desconto não pode tornar uma diária negativa.

Exemplos:

  • Se estivermos definindo o preço de uma estadia de três noites em que os valores de AmountAfterTax são 100, 110 e 120, e o fixed_amount_per_night é 10,

    Taxa de promoção = soma(AmountBeforeTax - valor fixo de desconto)

    300,00 = ((100 - 10) + (110 - 10) + (120 - 10))

  • Se estivermos definindo o preço de uma estadia de três noites em que os valores de AmountAfterTax são 10, 50 e 100 e o fixed_amount_per_night é 20,

    Taxa de promoção = soma(AmountAfterTax - valor fixo de desconto)

    110,00 = (0 + (50 - 20) + (100 - 20))

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

Exatamente um de percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é necessário.

Se as tarifas noturnas de AmountAfterTax forem especificadas, o preço da estadia, incluindo tributos e taxas, será definido como o valor especificado. Se AmountBeforeTax for especificado, independentemente de AmountAfterTax ser especificado ou não, o preço antes dos impostos da estadia será definido como o valor especificado. O valor é considerado na mesma moeda das diárias.

Se AmountAfterTax for destinado a refletir uma taxa percentual, definir um preço fixo para AmountBeforeTax pode resultar em impostos e taxas incorretos. Em geral, é altamente recomendável usar TaxFeeInfo para especificar os tributos e as taxas de uma propriedade.

Exemplos:

  • Se o preço de uma estadia de uma noite for AmountBeforeTax 90, AmountAfterTax 100 e fixed_price 80, a taxa de promoção será 80.
  • Se o preço de uma estadia de uma noite for AmountBeforeTax 100, fixed_amount 80 e TaxFeeInfo especificar um imposto de 8%,

    taxa promocional = preço fixo * (1 + taxa percentual)

    86,40 = 80 * 1,08

  • Se estivermos definindo o preço de uma estadia de três noites em que os valores de AmountAfterTax são 100, 110 e 120 e fixed_amount é 300,

    taxa de promoção = 300

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

Exatamente um de percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é necessário.

Se as tarifas noturnas AmountAfterTax forem especificadas, o preço de cada noite de estadia, incluindo tributos e taxas, será definido como o valor especificado. Se AmountBeforeTax for especificado, independentemente de AmountAfterTax ser especificado ou não, o preço antes dos impostos para cada noite de estadia será definido como o valor especificado. Ele é presumido na mesma moeda das diárias.

Se AmountAfterTax for destinado a refletir uma taxa percentual, definir um preço fixo para AmountBeforeTax pode resultar em impostos e taxas incorretos. Em geral, é altamente recomendável usar TaxFeeInfo para especificar os tributos e as taxas de uma propriedade.

Se applied_nights for especificado, o novo preço será aplicado às N noites mais baratas.

Exemplos:

  • Se estivermos definindo o preço de uma estadia de duas noites em que os valores de AmountBeforeTax são 90, 90, os valores de AmountAfterTax são 100, 100 e o fixed_price é 80, a taxa de promoção é 80 + 80 = 160.
  • Se o preço de uma estadia de duas noites for AmountBeforeTax 100, 100, fixed_amount 80 e TaxFeeInfo especificar um imposto de 8%, a taxa de promoção será (80 + 80) * 1,08 = 172,8.
  • Se estivermos definindo o preço de uma estadia de três noites em que os valores de AmountAfterTax são 100, 110 e 120 e fixed_amount é 110, a taxa de promoção é 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Use apenas com percentage ou fixed_amount_per_night.

O número de noites em que o desconto é aplicado, começando pelo menos caro. Precisa ser um número inteiro de 1 a 99. Se não for especificado, o desconto será aplicado a todas as noites.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Especifica um desconto em determinadas noites de uma estadia quando um período mínimo de estadia é atendido. Atributos no elemento Discount pai não são permitidos se esse elemento for usado.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

Número de noites necessárias para que o desconto seja aplicado. Cada desconto é aplicado a um segmento separado de noites de estadia.

Por exemplo, para uma estadia de 10 noites em que stay_nights é 4 (e repeats é verdadeiro), há dois segmentos de noites de estadia: da primeira à quarta noite e da quinta à oitava noite. A nona e a décima noite não fazem parte de um segmento de noites de estadia.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer O número de noites com desconto em cada segmento de noites de estadia.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float O desconto aplicado às noites com desconto. Se esse valor for 50, cada noite selecionada terá 50% de desconto.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Precisa ser cheapest ou last. Se last, as noites no final do segmento de estadia terão desconto. Se cheapest, as noites mais baratas no segmento de estadias são descontadas.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

Se o desconto pode ser aplicado a vários segmentos de estadias Se false, apenas o segmento de noites de estadia no início do itinerário terá desconto. Se true, qualquer segmento de noites de estadia terá desconto.

Por exemplo, se stay_nights for 4 e o itinerário for de 10 noites, se repeats for true, dois segmentos terão desconto (noites 1 a 4 e 5 a 8). No entanto, se repeats for false, apenas um segmento terá desconto (noites 1 a 4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Atribui uma classificação a essa promoção e a inclui na seleção classificada, em que somente a promoção com a classificação mais baixa é selecionada para ser aplicada. Os valores precisam estar entre 1 e 99, inclusive. Se várias promoções tiverem a mesma classificação, uma delas será selecionada e aplicada de forma arbitrária.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

É preciso especificar exatamente um entre Discount ou BestDailyDiscount.

Especifica um desconto diário que pode ser aplicado a uma noite de estadia. Isso é diferente de Discount, que aplica descontos a estadias inteiras.

Cada propriedade pode ter um único grupo de promoções que são consideradas "melhores diárias". Isso significa que, para cada noite de estadia, a única promoção "melhor diária" que for qualificada e gerar o maior desconto para essa noite será selecionada e poderá ser aplicada.

Stacking pode ser especificado com BestDailyDiscount. Ele precisa ser definido como base ou none. Os descontos "diários" que geram o desconto mais alto para cada noite são combinados e tratados como um desconto de estadia única (ou seja, Discount), respeitando o tipo de acúmulo configurado. Esse desconto combinado é comparado a outras promoções <Discount> qualificadas e pode ser empilhado para encontrar a combinação que oferece o maior desconto. A combinação de BestDailyDiscount ou um único Discount, o que resultar no preço mais baixo, será selecionado e aplicado para o tipo de acúmulo base.

O StayDates pode ser especificado com esse tipo de desconto, mas o application precisa ser definido como overlap

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

É necessário incluir exatamente um destes campos: percentage, fixed_amount ou fixed_price.

Um valor decimal de 0 a 100 que especifica a porcentagem de desconto. Ele é aplicado a AmountAfterTax (ou AmountBeforeTax se AmountAfterTax não for especificado).

Exemplos:

  • Se AmountAfterTax para uma noite de estadia for 100 e percentage for 20, então

    taxa de promoção = AmountAfterTax * (1 - porcentagem de desconto)

    80,00 = 100 * (1 - 0,2)

  • Se AmountBeforeTax para uma noite de estadia for 100, percentage for 20 e TaxFeeInfo especificar um imposto de 10, então

    taxa de promoção = AmountBeforeTax * (1 - porcentagem de desconto) + tributos

    90,00 = 100 * (1 - 0,2) + 10

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

É necessário incluir exatamente um destes campos: percentage, fixed_amount ou fixed_price.

Um valor fixo a ser subtraído de uma diária de AmountAfterTax ou AmountBeforeTax, se AmountAfterTax não for especificado. O valor é considerado na mesma moeda das diárias. Se esse valor for maior que a soma das tarifas noturnas, o valor resultante será zero.

Exemplos:

  • Se AmountBeforeTax para uma única noite for 90, AmountAfterTax for 100 e fixed_amount for 20, então

    taxa de promoção = AmountAfterTax - desconto fixo

    80,00 = 100 - 20

  • Se AmountBeforeTax for 100, fixed_amount for 20 e TaxFeeInfo especificar um imposto de 8%, então

    taxa de promoção = (AmountBeforeTax - desconto fixo) * (1 + taxa percentual)

    86,40 = (100 - 20) * 1,08

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

É necessário incluir exatamente um destes campos: percentage, fixed_amount ou fixed_price.

Se as tarifas noturnas de AmountAfterTax forem especificadas, o preço da noite de estadia, incluindo tributos e taxas, será definido como o valor especificado. Se AmountBeforeTax for especificado, independentemente de AmountAfterTax ser especificado ou não, o preço antes dos impostos da estadia será definido como o valor especificado. O valor é considerado na mesma moeda das diárias.

Exemplos:

  • Se AmountBeforeTax para uma única noite for 90, AmountAfterTax for 100 e fixed_price for 80, a taxa de promoção será 80.
  • Se AmountBeforeTax for 100, fixed_amount for 80 e TaxFeeInfo especificar um tributo de 8%, então

    taxa promocional = preço fixo * (1 + taxa percentual)

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Define restrições sobre o número de quartos que precisam estar disponíveis para que essa promoção seja aplicada. O desconto é aplicado apenas às noites que atendem à restrição. Não permitido com o desconto de fixed_amount. O número de quartos disponíveis é especificado com OTA_HotelInvCountNotifRQ (InvCount) ou OTA_HotelAvailNotifRQ (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer O número mínimo de quartos que precisam estar disponíveis para que a promoção seja aplicada à diária. Se não for especificado, não haverá valor mínimo.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer O número máximo de quartos que precisam estar disponíveis para que a promoção seja aplicada à diária. Se não for especificado, não haverá valor máximo.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay Define os limites de duração da estadia em que esta promoção pode ser aplicada. A promoção não é aplicada quando a duração da estadia está fora dos limites mínimo e máximo.
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer O número mínimo de noites permitidas na estadia para que a promoção seja aplicada. Se não for especificado, não haverá valor mínimo.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer O número máximo de noites permitidas na estadia para que a promoção seja aplicada. Se não for especificado, não haverá valor máximo.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

Contêiner para uma regra de taxa de associação que aciona um tratamento de IU específico para o desconto associado.

Esse elemento não deve ser especificado, a menos que <Discount> também seja.

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

ID da regra de tarifação associada a um programa de associação.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Especifica a soma mínima das tarifas diárias dos quartos (usando o maior valor entre AmountBeforeTax ou AmountAfterTax) que precisa ser excedida para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer O valor que precisa ser excedido para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy Define as restrições de ocupações para as quais esta promoção é aplicada. A promoção não é aplicada quando a ocupação está fora dos limites mínimo e máximo.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer A ocupação especificada pelo usuário precisa ser pelo menos esse valor para que o desconto seja aplicado.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer A ocupação especificada pelo usuário precisa ser, no máximo, esse valor para que o desconto seja aplicado.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Contêiner para uma lista de planos de tarifas a que a promoção se aplica. Se <RatePlans> não for especificado, a promoção será aplicada a todos os planos de preços.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan 1..n RatePlan Especifica um plano de taxa. Um plano de tarifa é definido por uma combinação de pacote, tarifas e disponibilidade, conforme definido nas mensagens Transação (dados da propriedade), OTA_HotelRateAmountNotifRQ e OTA_HotelAvailNotifRQ, e identificado pelo PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string O identificador exclusivo do plano de tarifas. Esse valor é mapeado para o valor de PackageID em <PackageData> em uma mensagem Transaction (Property Data) e no atributo RatePlanCode em <StatusApplicationControl> nas mensagens <OTA_HotelRateAmountNotifRQ> e <OTA_HotelAvailNotifRQ>. O número máximo de caracteres permitidos é 50.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes Contêiner para uma lista de tipos de quartos a que a promoção se aplica. A promoção é aplicada a cada <RoomType> especificado. Se <RoomTypes> não for especificado, a promoção será aplicada a todos os quartos.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType Especifica um tipo de quarto. Um tipo de quarto é definido em um elemento <RoomData> em uma mensagem Transação (dados da propriedade) e é referenciado usando o valor <RoomID>. O valor <RoomID> também é referenciado pelo atributo InvTypeCode nas mensagens OTA_HotelRateAmountNotifRQ.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string O identificador exclusivo do inventário (tipo de quarto). Esse valor é mapeado para <RoomID> em uma mensagem de transação (dados da propriedade). O número máximo de caracteres permitidos é 50.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking Especifica como as promoções podem ser combinadas. Se não for especificado, o "type" será base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

Várias promoções podem ser aplicadas a uma única tarifa, dependendo desta configuração:

  • any: pode ser combinado com qualquer outra promoção (exceto none), mas a ordem em que as promoções precisam ser aplicadas não é garantida.
  • base: a melhor promoção base qualificada é selecionada e aplicada primeiro, antes de outras promoções. Esse recurso era chamado de base_only.
  • second: a melhor promoção qualificada de second é selecionada e aplicada após uma promoção de base (se aplicável) e antes das promoções de any.
  • none: não pode ser combinado com outras promoções.

Das combinações permitidas, o conjunto de promoções que gera o maior desconto é aplicado à tarifa.

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates Um contêiner para um ou mais períodos que determinam como a promoção é aplicada, como para acomodar descontos sazonais.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

Descreve como aplicar a promoção.

Os valores válidos são:

  • all: aplica a promoção a cada noite do itinerário se todas as datas do itinerário coincidirem com as datas da estadia.
  • any: aplica a promoção a todas as noites no itinerário se alguma data no itinerário se sobrepõe a uma data no período de estadia.
  • overlap: aplica a promoção apenas às noites do itinerário que se sobrepõem a uma data no período da estadia.

Esse atributo precisa ser sempre especificado.

  • Se <Discount> especificar percentage e application for definido como all ou any, o desconto será aplicado como uma porcentagem da estadia completa.
  • Se <Discount> especificar percentage e application for definido como overlap, o desconto será aplicado como uma porcentagem das tarifas noturnas para as noites sobrepostas.
  • <Discount> especificando fixed_amount e application definido como overlap é uma combinação inválida.
  • <FreeNights> aceita todos os valores application. Para overlap, apenas as noites de estadia sobrepostas são consideradas para os requisitos de desconto.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

Um período que especifica as datas em que a promoção será aplicada.

O formato YearlessDate também é aceito.

  • Se um dos start ou end for uma data sem ano, ambos precisarão ser preenchidos como datas sem ano.
  • Os períodos sem ano não podem se estender até o ano novo. Em vez disso, represente o intervalo como dois períodos adjacentes. Por exemplo, {"12-29", "01-05"} pode ser representado como {"12-29", "12-31"} e {"01-01", "01-05"}.

Se você quiser definir o intervalo StayDates para permitir a promoção em dias específicos da semana, defina a data start como a data atual sem end para que a promoção não expire.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate A data de início (com base no fuso horário da propriedade) do período. Essa data precisa ser anterior ou igual à data de end. Se start não for especificado, o período será ilimitado em termos de data de início.

Especifique o valor start se o valor end não for fornecido.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate A data de término (com base no fuso horário da propriedade) do período. Essa data precisa ser igual ou posterior à data de start. Se end não for especificado, o período será ilimitado a partir da data start.

Especifique o valor end se o valor start não for fornecido.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

Os dias da semana permitidos no período. Se não for especificado, todos os dias serão permitidos no período. Cada caractere na string especifica um dia. Por exemplo, "MTWHF" especifica que os dias da semana são permitidos no período.

Os caracteres válidos são:

  • M para segunda-feira
  • T para terça-feira
  • W para quarta-feira
  • H para quinta-feira
  • F para sexta-feira
  • S para sábado
  • U para domingo

Qualquer combinação de caracteres é válida.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Contêiner para listar os locais do usuário (países) qualificados para a promoção. Se especificado, apenas os usuários qualificados nos países listados vão receber a tarifa com desconto. Se não for especificado, a tarifa com desconto será oferecida aos usuários qualificados em qualquer país.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum O tipo de especificação de UserCountries.

Os valores válidos são include e exclude.

Se a UserCountries type estiver definida como include, a promoção será aplicada aos usuários dos países listados.

Se a type de UserCountries for exclude, a promoção vai se aplicar a usuários de fora dos países listados.

Se a type de UserCountries não for definida, ela será tratada como include, e a promoção será aplicada aos usuários dos países listados.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country Define um país em que os usuários podem participar da promoção.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string Um código de país CLDR, como DE ou FR. Para alguns países, o código de país do CLDR não é o mesmo que o código de país ISO de duas letras. Além disso, não há suporte para códigos de região CLDR.

Exemplos

Há um limite de 500 promoções por propriedade. Consulte o exemplo "Excluir uma promoção" para remover promoções de uma propriedade.

O exemplo a seguir mostra uma mensagem Promotions básica:

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


O exemplo a seguir mostra como criar um desconto se houver excesso de inventário próximo à data de chegada:

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


O exemplo a seguir mostra como excluir uma promoção de uma propriedade:

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

O exemplo a seguir mostra como excluir todas as promoções de uma propriedade:

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



O exemplo a seguir mostra como sobrepor <HotelPromotions> para uma propriedade com uma ou mais promoções novas. Quando action="overlay", todas as promoções armazenadas são excluídas antes de armazenar as promoções especificadas na mensagem atual:

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

O exemplo a seguir mostra um caso em que três promoções diferentes seriam aplicadas (base, second e any). A promoção none não seria aplicada, porque as outras oferecem um desconto melhor. Se o preço original for R $100, o preço com desconto será R $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>


O exemplo a seguir mostra um caso em que a promoção none é usada porque a combinação de outras promoções oferece um desconto menor. Se o preço original for US $100, o preço com desconto será US $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>



O exemplo a seguir mostra um caso em que o elemento BookingWindow é usado com os limites de início e término definidos como um tipo de duração ISO 8601. Essa restrição de janela de reserva exige que a reserva seja feita até 18h no dia anterior à chegada e a partir das 12h do segundo dia antes da chegada.

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


O exemplo a seguir mostra um caso em que o elemento BookingDates é usado com os atributos start e end como tipos DateTime. Essa restrição de data de agendamento exige que a reserva ocorra entre 06h30 de 01/07/2020 e 18h45 de 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>


O exemplo a seguir mostra um caso em que o elemento CheckInDates contém DateRanges com campos start e end sem anos. Neste exemplo, a promoção se aplica a datas de check-in entre 29/12 e 2/1, independentemente do ano. Intervalos de datas sem ano que ultrapassam a fronteira do ano novo são inválidos. Portanto, o DateRange é expresso como dois intervalos de datas adjacentes.

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



O exemplo a seguir oferece um desconto de 50% em duas noites para cada quatro noites de estadia no período especificado de reservas. Para um itinerário de dez noites, um total de quatro noites teria um desconto de 50%.

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

O exemplo a seguir oferece um desconto de 50% para cada três noites de estadia nos intervalos de datas de estadia especificados. Somente as noites de estadia sobrepostas são consideradas para se qualificar para o desconto. Para o itinerário a seguir com check-in em 01/01/2022 e check-out em 07/01/2022, as noites de estadia qualificadas e os descontos são aplicados da seguinte maneira.

  • 2022-01-01 (estadia)
  • 2022-01-02 (estadia)
  • 2022-01-03
  • 2022-01-04 (com desconto)
  • 2022-01-05 (estadia)
  • 2022-01-06 (estadia)
<?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>


O exemplo a seguir oferece dois descontos, um de 20% e outro de 15%. Durante a avaliação, apenas o desconto de 15% é aplicado porque tem uma classificação mais baixa.

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

O exemplo a seguir oferece descontos para uma estadia de duas noites aplicando BestDailyDiscount empilhada com um 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>

Considere uma estadia de duas noites de 30 de abril a 2 de maio de 2023. Para o cálculo, a combinação de melhores descontos diários que gera o maior desconto é encontrada primeiro.

Para a primeira noite, a promoção "geral" é o único valor qualificado com um desconto fixo de 20%.

Para a segunda noite, a promoção "pode" oferece um desconto maior do que o "geral". Portanto, quando "may" é selecionado, o valor do desconto fixo é 50.

Em seguida, para a estadia, a promoção "fiesta" tem descontos de 5 por noite, ou 10 no total. Ele pode ser combinado com a combinação dos melhores descontos diários porque "fiesta" tem o tipo de combinação definido como any. Se ele for definido como base, apenas a combinação dos melhores descontos diários ou o desconto "fiesta" será aplicado. Consulte a descrição de Stacking para mais informações.

No geral, o preço da estadia recebe um desconto de 20 + 50 + 10 = 80.

Respostas

Sintaxe

A mensagem PromotionsResponse usa a seguinte sintaxe:

<?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 e atributos

A mensagem PromotionsResponse tem os seguintes elementos e atributos:

Elemento / @Attribute Ocorrências Tipo Descrição
PromotionsResponse 1 Complex element O elemento raiz que indica o sucesso ou os problemas de uma mensagem de solicitação de promoções recebida.
PromotionsResponse / @timestamp 1 DateTime A data e a hora de criação da mensagem.
PromotionsResponse / @id 1 string O identificador exclusivo da mensagem de promoções associada.
PromotionsResponse / @partner 1 string A conta do parceiro para esta mensagem.
PromotionsResponse / Success 0..1 Success Indica que a mensagem de promoções foi processada sem alertas, erros ou falhas.

<Success> ou <Issues> está presente em cada mensagem.

PromotionsResponse / Issues 0..1 Issues Um contêiner para um ou mais problemas encontrados durante o processamento da mensagem de promoções.

<Success> ou <Issues> está presente em cada mensagem.

PromotionsResponse / Issues / Issue 1..n Issue A descrição de um aviso, erro ou falha encontrada durante o processamento da mensagem de promoções. Confira os detalhes sobre esses problemas em Mensagens de erro de status do feed.
PromotionsResponse / Issues / Issue / @code 1 integer O identificador do problema.
PromotionsResponse / Issues / Issue / @status 1 enum

O tipo de problema encontrado.

Os valores válidos são warning, error e failure.

Exemplos

Confira a seguir uma resposta para uma mensagem de promoções processada.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Success/>
</PromotionsResponse>

Confira a seguir uma resposta a uma mensagem de promoções não processada devido a erros.

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