Visão geral
Com essa API, você pode especificar possíveis descontos. Das promoções especificadas, o Google aplica a promoção ou o conjunto de promoções qualificados que resultam no menor preço. Se você estiver procurando uma API que ofereça suporte a ajustes de taxa arbitrários que podem aumentar ou diminuir o preço quando as condições forem atendidas, considere a 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ção. |
| Promotions / @partner | 1 | string | A conta de parceiro desta mensagem. Esse valor de string é a "Chave do parceiro" listada na
página "Configurações da conta" da Central para Hotéis.
Se você tiver um back-end que forneça feeds para várias contas, esse valor precisará corresponder ao valor do atributo |
| Promotions / @id | 1 | string | Um identificador exclusivo para esta 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 desta mensagem. |
| Promotions / HotelPromotions | 0..n | HotelPromotions | Promoções de uma propriedade. Cada promoção se aplica a uma única propriedade. A menos que |
| 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> do 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 Se não for especificado, cada promoção na mensagem atual será:
|
| Promotions / HotelPromotions / Promotion | 0..99 | Promotion | Uma única promoção para uma propriedade. Se 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 Se |
| Promotions / HotelPromotions / Promotion / BookingDates | 0..1 | BookingDates | Um contêiner para um ou mais intervalos que definem quando a reserva precisa ser feita para que a promoção seja aplicada. |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange | 1..99 | DateRange | Um intervalo que especifica quando a reserva precisa ser feita para que a promoção seja aplicada. |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start | 0..1 | Date ou DateTime | A data ou data e hora de início (com base no fuso horário da propriedade), inclusive, do período.
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end | 0..1 | Date ou DateTime | A data ou data e hora de término (com base no fuso horário da propriedade), inclusive, do período.
|
| 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:
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 em que a reserva precisa ser feita
para que a promoção seja aplicada. Se não for especificado ou se o valor for 0, não haverá um mínimo.
Os tipos de valor válidos são:
|
| 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 não for especificado ou se o valor for 0, não haverá valor máximo.
Os tipos de valor válidos são:
|
| Promotions / HotelPromotions / Promotion / Ceiling | 0..1 | Ceiling |
Define restrições no valor máximo que uma tarifa pode ter depois que as promoções são aplicadas. As promoções sempre precisam especificar um Se o acúmulo estiver configurado, várias promoções com
Exemplo: Preço de uma estadia de uma noite em que
Esta é a ordem de cálculo:
O fato de 60 ser um limite máximo geral mais restrito é irrelevante, já que ele é válido apenas para a própria promoção, e não pode haver um limite máximo único que abranja toda a pilha de promoções. |
| Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float |
O valor máximo que uma tarifa noturna pode ter depois da aplicação do desconto. Se um elemento
|
| Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor |
Define restrições no valor mínimo que uma tarifa pode ser definida depois que as promoções são aplicadas. As promoções sempre precisam especificar um A lógica de Se o acúmulo estiver configurado, várias promoções com
Exemplo: Preço de uma estadia de uma noite em que
Esta é a ordem de cálculo:
O fato de 90 ser um limite mínimo geral mais restrito é irrelevante, já que ele é válido apenas para a própria promoção, e não pode haver um único limite mínimo 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 após a aplicação do desconto. Se um elemento
|
| 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 é obrigatório se você estiver excluindo uma ou mais promoções. O formato YearlessDate também é compatível.
|
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start | 0..1 | Date or YearlessDate | A data de início (com base no fuso horário da propriedade), inclusive, 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), inclusive, do período. Essa data precisa ser igual ou posterior à data de start. Se end não for especificado, o período será efetivamente 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:
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 pagamento precisa ser feito para que a promoção seja aplicada. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange | 1..20 | DateRange | Um período especificando quando o check-out precisa ocorrer para que a promoção seja aplicada. Esse elemento não é obrigatório se você estiver excluindo uma ou mais promoções. O formato YearlessDate também é compatível.
|
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start | 0..1 | Date or YearlessDate | A data de início (com base no fuso horário da propriedade), inclusive, 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), inclusive, do período. Essa data precisa ser igual ou posterior à data de start. Se end não for especificado, o período será efetivamente 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:
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, somente os usuários qualificados nos dispositivos listados vão receber a tarifa com desconto. Se não for especificado, os usuários qualificados em qualquer dispositivo vão receber a taxa com desconto. |
| Promotions / HotelPromotions / Promotion / Devices / Device | 1..3 | Device | Define um tipo de dispositivo do usuário que está 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 de Especifica o desconto a ser aplicado a esta promoção. |
| Promotions / HotelPromotions / Promotion / Discount / @percentage | 0..1 | float | É necessário exatamente um dos seguintes campos: Um valor decimal de 0 a 100 que especifica o desconto percentual.
Ele é aplicado a Exemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base | 0..1 | float | É necessário exatamente um dos seguintes campos: Um valor decimal de 0 a 100 que especifica a porcentagem do desconto
básico. Semelhante a Ao contrário de Exemplo:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount | 0..1 | float | É necessário exatamente um dos seguintes campos: Um valor fixo a ser subtraído da soma das diárias de Exemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night | 0..1 | float | É necessário exatamente um dos seguintes campos: Um desconto fixo aplicado a cada uma das Exemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price | 0..1 | float | É necessário exatamente um dos seguintes campos: Se as tarifas por noite de Se Exemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night | 0..1 | float | É necessário exatamente um dos seguintes campos: Se as tarifas por noite de Se Se Exemplos:
|
| Promotions / HotelPromotions / Promotion / Discount / @applied_nights | 0..1 | integer | Isso só deve ser usado com
O número de noites a que o desconto é aplicado, começando pela mais barata. 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 uma duração mínima de estadia é atendida. Não é permitido usar atributos no elemento Discount pai 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 |
| 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 o 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 noites de estadia serão descontadas. Se cheapest, as noites mais baratas dentro do segmento de noites de estadia vão receber desconto. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats | 1 | boolean | Se o desconto pode ser aplicado a vários segmentos de
noites de estadia. Se Por exemplo, se |
| Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | Atribui uma classificação a essa promoção e a ativa na seleção classificada, em que apenas 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 arbitrariamente. |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount | 1 | Discount | É preciso especificar exatamente um de Especifica um desconto diário que pode ser aplicado a uma noite de estadia. Isso é diferente de Cada propriedade pode ter um único grupo de promoções consideradas "melhores do dia". Isso significa que, para cada noite de estadia, a melhor promoção diária única que se qualifica e oferece o maior desconto para essa noite é selecionada e pode ser aplicada.
|
| Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage | 0..1 | float | É necessário incluir exatamente um destes campos: Um valor decimal de 0 a 100 que especifica o desconto percentual.
Ele é aplicado a Exemplos:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount | 0..1 | float | É necessário incluir exatamente um destes campos: Um valor fixo a ser subtraído de uma única diária de Exemplos:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price | 0..1 | float | É necessário incluir exatamente um destes campos: Se as tarifas por noite de Exemplos:
|
| Promotions / HotelPromotions / Promotion / InventoryCount | 0..1 | InventoryCount | Define restrições no número de quartos que precisam estar disponíveis para que a promoção seja aplicada. O desconto é aplicado apenas às noites que atendem à restrição. Não é permitido com o
desconto 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 à tarifa por noite. 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 tarifa de assinatura que aciona um tratamento específico da interface para o desconto associado. Esse elemento não deve ser especificado, a menos que
|
| Promotions / HotelPromotions / Promotion / MembershipRateRule / @id | 1 | string |
ID da regra de tarifação associada a um programa de assinatura. |
| Promotions / HotelPromotions / Promotion / MinimumAmount | 0..1 | MinimumAmount | Especifica a soma mínima das tarifas diárias dos quartos (usando o maior valor de 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 restrições para as ocupações em que esta promoção é
aplicada. A promoção não é aplicada quando a ocupação está fora dos limites mínimos e máximos.
As promoções se aplicam à tarifa do itinerário. Não é possível definir um desconto máximo por ocupante. |
| 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 taxas a que a promoção se aplica.
Se <RatePlans> não for especificado, a promoção será aplicada a todos os planos de taxas. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan | 1..n | RatePlan | Especifica um plano de taxa. Um plano de tarifas é definido por uma combinação de pacote, tarifas e disponibilidade, conforme definido nas mensagens Transaction (Property Data), 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 PackageID em <PackageData> em uma mensagem de transação (dados da propriedade) 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 quarto 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á considerado base. |
| Promotions / HotelPromotions / Promotion / Stacking / @type | 1 | enum | Várias promoções podem ser aplicadas a uma única tarifa, dependendo desta configuração:
Das combinações permitidas, o conjunto de promoções que gera o maior desconto é aplicado à taxa. |
| 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 a promoção deve ser aplicada. Os valores válidos são:
Esse atributo precisa ser sempre especificado.
|
| 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 é compatível.
Se você quiser definir o intervalo |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start | 0..1 | Date or YearlessDate | A data de início (com base no fuso horário da propriedade), inclusive, 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 |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end | 0..1 | Date or YearlessDate | A data de término (com base no fuso horário da propriedade), inclusive, 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 |
| 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:
Qualquer combinação de caracteres é válida. |
| Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | Contêiner para listar os locais (países) dos usuários que se qualificam para a promoção. Se especificado, somente os usuários qualificados nos países listados vão receber a taxa com desconto. Se não for especificado, a taxa 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 UserCountries.
Os valores válidos são Se o UserCountries Se o UserCountries Se o UserCountries |
| Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | Define um país em que os usuários se qualificam para a promoção. |
| Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | Um código de país CLDR, como DE ou FR. Em alguns países, o código CLDR não é o mesmo que o código ISO de duas letras. Além disso, os códigos de região CLDR não são aceitos. |
Exemplos
Há um limite de 500 promoções por propriedade. Consulte o exemplo "Excluir uma promoção" para remover promoções de uma propriedade.
Mensagem básica
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>
Condição do inventário
O exemplo a seguir mostra como criar um desconto se houver excesso de inventário perto da 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>
Excluir uma promoção
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>
Excluir todas as promoções
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>
Sobrepor todas as promoções
O exemplo a seguir mostra como sobrepor <HotelPromotions> para uma propriedade
com uma ou mais novas promoções. 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>
Três tipos diferentes de empilhamento
O exemplo a seguir mostra um caso em que três promoções diferentes seriam aplicadas (base, second, any). Observe que a promoção none não seria aplicada porque as outras oferecem um desconto melhor. Se o preço original fosse de R $100, o valor com desconto seria de 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>
Nenhum tipo de empilhamento
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 era de US $100, o preço com desconto seria de 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>
Limites de duração da janela de reserva
O exemplo a seguir mostra um caso em que o elemento BookingWindow
é usado com os limites de início e fim definidos como um tipo de duração
ISO 8601. Essa restrição de janela de reserva exige que a reserva seja feita até as 18h do 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>
Limites de data e hora de reserva
O exemplo a seguir mostra um caso em que o elemento BookingDates
é usado com atributos start e end como tipos
DateTime. Essa restrição de data de reserva exige que a reserva seja feita entre 06:30 de 01/07/2020 e 18:45 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>
Períodos sem ano
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 é válida para datas de check-in entre 29/12 e 2/1, independentemente do ano. Intervalos de datas sem ano que cruzam o limite 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>
Desconto FreeNights
O exemplo a seguir oferece um desconto de 50% em duas diárias a cada quatro diárias reservadas no período especificado. 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 próximo exemplo oferece um desconto de 50% em uma noite a cada três noites de estadia nos intervalos de datas especificados. Apenas as noites de estadia que se sobrepõem contam para a qualificação do desconto. Para o itinerário a seguir, com check-in em 2022-01-01 e check-out em 2022-01-07, as diárias qualificadas e os descontos são aplicados da seguinte forma.
- 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>
Seleção classificada
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 menor.
<?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
O exemplo a seguir oferece um desconto em uma estadia de duas noites aplicando BestDailyDiscount combinado 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 de 2023 a 2 de maio de 2023. Para o cálculo, primeiro encontramos a combinação dos melhores descontos diários que gera o maior desconto.
Na primeira noite, a promoção "geral" é o único valor qualificado com um desconto fixo de 20.
Na segunda noite, a promoção "maio" oferece um desconto maior do que o desconto "geral". Portanto, quando "may" é selecionado, o valor do desconto fixo é 50.
Depois, para a estadia, a promoção "fiesta" dá um desconto 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 fosse definido como base, apenas a combinação dos melhores descontos diários ou o desconto "fiesta" seria aplicado. Consulte a descrição de
Stacking para mais informações.
`No geral, o preço da estadia recebe um desconto de valor fixo 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 desta mensagem. |
| PromotionsResponse / @id | 1 | string | O identificador exclusivo da mensagem de promoções associada. |
| PromotionsResponse / @partner | 1 | string | A conta de parceiro desta mensagem. |
| PromotionsResponse / Success | 0..1 | Success | Indica que a mensagem de promoções foi processada sem alertas, erros ou falhas.
|
| PromotionsResponse / Issues | 0..1 | Issues | Um contêiner para um ou mais problemas encontrados ao processar a
mensagem de promoções.
|
| PromotionsResponse / Issues / Issue | 1..n | Issue | A descrição de um aviso, erro ou falha encontrada ao processar a mensagem de promoções. Confira os detalhes desses problemas em Mensagens de erro do 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 |
Exemplos
Sucesso
Confira a seguir uma resposta a uma mensagem de promoções processada com sucesso.
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</PromotionsResponse>
Problemas
A seguir, há uma resposta a uma mensagem de promoções que não foi 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>