Promotions

Présentation

Cette API vous permet de spécifier les remises possibles. Parmi les promotions spécifiées, Google applique la promotion ou l'ensemble de promotions éligibles qui offrent le prix le plus bas. Si vous recherchez une API compatible avec des ajustements de prix arbitraires pouvant augmenter ou diminuer le prix lorsque les conditions sont remplies, envisagez notre API Rate Modifications. Notez que si les deux API sont présentes, les modifications de tarifs sont appliquées avant les promotions.

Demandes

Syntaxe

Le message Promotions utilise la syntaxe suivante:

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

Éléments et attributs

Le message Promotions contient les éléments et les attributs suivants:

Élément / @Attribut Occurrences Type Description
Promotions 1 Complex element Élément racine d'un message Promotions.
Promotions / @partner 1 string Compte partenaire pour ce message. Cette valeur de chaîne correspond à la valeur "Partner key" (Clé partenaire) indiquée sur la page Paramètres du compte dans Hotel Center.

Si vous avez un backend qui fournit des flux pour plusieurs comptes, cette valeur doit correspondre à la valeur de l'attribut ID spécifiée dans l'élément <RequestorID> de vos messages <OTA_HotelRateAmountNotifRQ> et <OTA_HotelAvailNotifRQ> pour le même compte.

Promotions / @id 1 string Identifiant unique pour ce message de demande. Cette valeur est renvoyée dans le message de réponse. Les caractères suivants sont autorisés : a-z, A-Z, 0-9, _ (trait de soulignement) et - (tiret).
Promotions / @timestamp 1 DateTime Date et heure de création de ce message.
Promotions / HotelPromotions 0..n HotelPromotions

Promotions pour un établissement. Chaque promotion s'applique à un seul établissement.

Sauf utilisation de <Stacking>, la promotion avec la plus grande remise est appliquée à la réservation lorsque plusieurs promotions sont éligibles.

Promotions / HotelPromotions / @hotel_id 1 string Identifiant unique de l'établissement. Cette valeur doit correspondre à l'identifiant de l'hôtel spécifié à l'aide de <id> dans l'élément <listing> du flux Hotel List Feed. L'identifiant de l'hôtel est également répertorié dans Hotel Center.
Promotions / HotelPromotions / @action 0..1 enum

Si cet attribut est spécifié, la valeur doit être "overlay". Dans ce cas, toutes les promotions stockées sont supprimées avant le stockage des promotions spécifiées dans le message actuel."overlay"

S'il n'est pas spécifié, chaque promotion spécifiée dans le message actuel est:

  • Added (si aucune des promotions stockées ne possède le même id) ;
  • Updated (si une promotion stockée a le même id)
  • Deleted (si une promotion stockée a le même id et que la valeur de l'attribut action pour la promotion spécifiée dans le message actuel est "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

Promotion unique pour un établissement. Notez que si action="overlay" et qu'aucun élément <Promotion> n'est spécifié, toutes les promotions pour l'établissement sont supprimées.

Si vous devez utiliser plus de 99 promotions, contactez votre responsable de compte technique (TAM).

Promotions / HotelPromotions / Promotion / @id 1 string Identifiant unique de la promotion. Le nombre maximal de caractères autorisés est de 40. Les caractères suivants sont autorisés : a-z, A-Z, 0-9, _ (trait de soulignement), - (tiret) et . (point).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Si cet attribut est spécifié, la valeur doit être delete. S'il n'est pas spécifié et qu'aucune promotion ayant le même id n'est stockée, cette promotion est stockée. Sinon, s'il n'est pas spécifié et qu'une promotion ayant le même id est stockée, la promotion existante est mise à jour.

Si delete est spécifié, la promotion stockée ayant le même id est supprimée. En cas d'utilisation de delete, n'incluez aucun élément enfant dans <Promotion>. De plus, delete n'est pas autorisé avec <HotelPromotions action="overlay"/>.

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates Conteneur pour une ou plusieurs plages qui définissent le moment auquel la réservation doit être effectuée pour que la promotion soit appliquée.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange Plage indiquant le moment auquel la réservation doit être effectuée pour que la promotion soit appliquée.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date ou DateTime

Date ou heure de début (en fonction du fuseau horaire de l'établissement), incluse, de la plage.

  • La date ou l'heure spécifiée par start doit être antérieure (ou identique) à la date ou l'heure spécifiée par end.
  • Si start n'est pas spécifié, la plage est en fait illimitée en ce qui concerne l'heure de début.
  • Si start est renseigné en tant que date "AAAA-MM-JJ", il est interprété comme une date et heure "AAAA-MM-JJT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date ou DateTime

Date de fin ou heure de fin (en fonction du fuseau horaire de l'établissement), incluse, de la plage.

  • La date ou l'heure spécifiée par end doit être postérieure (ou identique) à la date ou l'heure spécifiée par start.
  • Si end n'est pas spécifié, la plage est en fait illimitée en ce qui concerne l'heure de fin.
  • Si end est fourni sous la forme de date "AAAA-MM-JJ", il est interprété comme une date et heure "AAAA-MM-JJT23:59:59".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

Jours de la semaine autorisés dans la plage de dates. Si cet attribut n'est pas spécifié, tous les jours sont autorisés dans la plage de dates. Chaque caractère de la chaîne spécifie un jour. Par exemple, "MTWHF" indique que les jours de la semaine sont autorisés dans la plage de dates.

Caractères valides:

  • M pour lundi
  • T pour mardi
  • W pour mercredi
  • H pour jeudi
  • F pour vendredi
  • S pour samedi
  • U pour dimanche

Toute combinaison de caractères est valide.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow Spécifie la période pendant laquelle la réservation doit être effectuée par rapport à la date d'arrivée (en fonction du fuseau horaire de l'établissement). Par exemple, la période de réservation peut être définie sur au moins 7 jours, mais pas plus de 180 jours avant l'arrivée.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration Durée minimale avant l'arrivée où la réservation doit être effectuée pour que la promotion soit appliquée. Si cet attribut n'est pas spécifié ou si sa valeur est 0, il n'y a pas de minimum.

Les types de valeurs reconnus sont les suivants :

  • Entier:nombre de jours avant la date d'arrivée. Par exemple, une valeur 30 indique que la promotion ne s'applique qu'aux réservations effectuées au moins 30 jours avant la date d'arrivée.
  • Durée ISO 8601 (jours, heures et minutes) : nombre de jours (et éventuellement d'heures/minutes) avant la date d'arrivée. Par exemple, une valeur P30D indique que la promotion ne s'applique qu'aux réservations effectuées au moins 30 jours avant la date d'arrivée. La valeur P30DT6H nécessite une réservation avant le 30e jour avant l'arrivée, à 18h00 ou avant.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration Nombre maximal de jours avant l'arrivée où la réservation doit être effectuée pour que la promotion soit appliquée. Si cet attribut n'est pas spécifié ou si sa valeur est 0, il n'y a pas de maximum.

Les types de valeurs reconnus sont les suivants :

  • Entier:nombre de jours avant la date d'arrivée. Par exemple, une valeur de 30 indique que la promotion ne s'applique qu'aux réservations effectuées au plus tard 30 jours avant la date d'arrivée.
  • Durée ISO 8601 (jours, heures et minutes) : nombre de jours (et éventuellement d'heures/minutes) avant la date d'arrivée. Par exemple, une valeur de P30D indique que la promotion ne s'applique qu'aux réservations effectuées au plus tard 30 jours avant la date d'arrivée. La valeur P30DT6H nécessite une réservation à partir de 18h00 le 30e jour avant l'arrivée.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Définit les restrictions liées à la valeur maximale qu'un tarif peut atteindre après l'application des promotions.

Les promotions doivent toujours spécifier un <Discount> ou un <BestDailyDiscount>. Pour créer une promotion qui n'applique qu'un <Ceiling>, vous pouvez définir un <Discount> avec un percentage de 0.

Si l'empilement est configuré, plusieurs promotions avec <Ceiling> peuvent s'appliquer à un même séjour. Chaque promotion s'applique à son prix réduit, immédiatement suivi de son plafond. L'exemple suivant montre comment chaque plafond contribue au calcul de la promotion suivante dans la pile.

Exemple :

Fixer le tarif d'un séjour d'une nuit où AmountBeforeTax est égal à 100 et où deux promotions sont cumulées:

  1. Promotion avec le type d'empilement base, un fixed_amount de 25 et un plafond amount_per_night de 60
  2. Promotion avec type d'empilement second, fixed_amount de 25 et un plafond amount_per_night de 90

Voici l'ordre de calcul:

  1. La promotion base est appliquée en premier et réduit le prix de AmountBeforeTax à 75, mais le plafond le réduit ensuite à 60.
  2. La promotion second offre une remise de 60 à 35 € sur le AmountBeforeTax. Ce nombre est inférieur au plafond de 90 ; le deuxième plafond n'est donc pas appliqué. Le tarif final est de 35.

Le fait que 60 % soit un plafond global plus strict est sans importance, car il n'est valable que pour sa propre promotion. Il ne peut pas y avoir de plafond unique couvrant l'ensemble de la pile de promotions.

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

Montant maximal qu'un tarif par nuit peut atteindre après l'application de la remise.

Si un élément <Floor> est également spécifié, il doit être défini sur une valeur supérieure ou égale à l'attribut amount_per_night dans <Floor>.

amount_per_night est appliqué aux taxes et aux frais lorsqu'ils sont inclus dans le tarif par nuit à l'aide de AmountAfterTax, mais pas ceux spécifiés à l'aide de TaxFeeInfo.

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

Définit les restrictions concernant la valeur minimale qu'un tarif peut avoir après l'application des promotions.

Les promotions doivent toujours spécifier un <Discount> ou un <BestDailyDiscount>. Pour créer une promotion qui n'applique qu'un <Floor>, vous pouvez définir un <Discount> avec un percentage de 0.

La logique <Floor> s'applique toujours aux remises <FreeNights>, même si une remise 100% est appliquée à la nuit sans frais.

Si l'empilement est configuré, plusieurs promotions avec <Floor> peuvent s'appliquer à un même séjour. Chaque promotion s'applique à son prix réduit, immédiatement suivi de son prix plancher. L'exemple suivant montre comment chaque étage contribue au calcul de la promotion suivante dans la pile.

Exemple :

Fixer le tarif d'un séjour d'une nuit où AmountBeforeTax est égal à 100 et où deux promotions sont cumulées:

  1. Promotion avec le type d'empilement base, un fixed_amount de 25 et un amount_per_night de 90
  2. Promotion avec le type d'empilement second, fixed_amount de 25 et un amount_per_night de 60

Voici l'ordre de calcul:

  1. La promotion base est appliquée en premier et réduit le prix de AmountBeforeTax à 75, mais le plancher le fait passer à 90.
  2. La promotion second réduit le prix de la AmountBeforeTax de 90 à 65. Ce nombre est supérieur au niveau de plancher de 60. Le deuxième niveau n'est donc pas appliqué. Le tarif final est de 65.

Le fait que 90 % soit un plancher global plus strict est sans importance, car il n'est valide que pour sa propre promotion. Il ne peut pas y avoir de plancher unique couvrant l'ensemble de la pile de promotions.

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

Montant minimal auquel un tarif par nuit peut être défini après l'application de la remise.

Si un élément <Ceiling> est également spécifié, il doit être défini sur une valeur inférieure ou égale à l'attribut amount_per_night dans <Ceiling>.

amount_per_night est appliqué aux taxes et aux frais lorsqu'ils sont inclus dans le tarif par nuit à l'aide de AmountAfterTax, mais pas ceux spécifiés à l'aide de TaxFeeInfo.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates Conteneur pour une ou plusieurs plages de dates qui définissent le moment auquel l'arrivée doit avoir lieu pour que la promotion soit appliquée.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

Plage de dates indiquant le moment auquel l'arrivée doit avoir lieu pour que la promotion soit appliquée. Cet élément n'est pas obligatoire si vous supprimez une ou plusieurs promotions.

Le format YearlessDate est également accepté.

  • Si start ou end est une date sans année, les deux attributs doivent être renseignés avec une valeur sans année.
  • Les plages de dates sans année ne doivent pas se répéter à l'arrivée du Nouvel An. Représentez plutôt la plage en deux plages de dates adjacentes. Par exemple, {"12-29", "01-05"} peut être représenté par {"12-29", "12-31"} et {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate Date de début (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être antérieure ou identique à la date end. Si start n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de début.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate Date de fin (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être identique ou postérieure à la date start. Si end n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de fin.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

Jours de la semaine autorisés dans la plage de dates. Si cet attribut n'est pas spécifié, tous les jours sont autorisés dans la plage de dates. Chaque caractère de la chaîne spécifie un jour. Par exemple, "MTWHF" indique que les jours de la semaine sont autorisés dans la plage de dates.

Caractères valides:

  • M pour lundi
  • T pour mardi
  • W pour mercredi
  • H pour jeudi
  • F pour vendredi
  • S pour samedi
  • U pour dimanche

Toute combinaison de caractères est valide.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates Conteneur pour une ou plusieurs plages de dates qui définissent le moment auquel le départ doit avoir lieu pour que la promotion soit appliquée.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

Plage de dates indiquant le moment auquel le départ doit avoir lieu pour que la promotion soit appliquée. Cet élément n'est pas obligatoire si vous supprimez une ou plusieurs promotions.

Le format YearlessDate est également accepté.

  • Si l'un des attributs start ou end est une date sans année, les deux doivent être renseignés avec une valeur sans année.
  • Les plages de dates sans année ne doivent pas se répéter à l'arrivée du Nouvel An. Représentez plutôt la plage en deux plages de dates adjacentes. Par exemple, {"12-29", "01-05"} peut être représenté par {"12-29", "12-31"} et {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate Date de début (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être antérieure ou identique à la date end. Si start n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de début.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate Date de fin (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être identique ou postérieure à la date start. Si end n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de fin.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

Jours de la semaine autorisés dans la plage de dates. Si cet attribut n'est pas spécifié, tous les jours sont autorisés dans la plage de dates. Chaque caractère de la chaîne spécifie un jour. Par exemple, "MTWHF" indique que les jours de la semaine sont autorisés dans la plage de dates.

Caractères valides:

  • M pour lundi
  • T pour mardi
  • W pour mercredi
  • H pour jeudi
  • F pour vendredi
  • S pour samedi
  • U pour dimanche

Toute combinaison de caractères est valide.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices Conteneur permettant de répertorier les appareils des utilisateurs éligibles à la promotion. Si cet élément est spécifié, seuls les utilisateurs éligibles sur les appareils répertoriés bénéficient d'un tarif réduit. S'il n'est pas spécifié, le tarif réduit est proposé aux utilisateurs éligibles sur n'importe quel appareil.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device Définit un type d'appareil d'utilisateur éligible à la promotion.
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum Type d'appareil. La valeur doit être desktop, tablet ou mobile.
Promotions / HotelPromotions / Promotion / Discount 1 Discount

Vous devez spécifier un seul Discount ou BestDailyDiscount.

Indique la remise à appliquer pour cette promotion.

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

Vous devez spécifier exactement un seul des éléments suivants : percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

Valeur décimale comprise entre 0 et 100 indiquant le pourcentage de remise. Elle est appliquée à AmountAfterTax (ou à AmountBeforeTax si AmountAfterTax n'est pas spécifié).

Exemples :

  • Si AmountAfterTax est égal à 100 et que percentage est égal à 20, alors

    taux de promotion = AmountAfterTax * (1 - pourcentage de remise)

    80.00 = 100 * (1 - 0.2)

  • Si AmountBeforeTax est égal à 100, que percentage est égal à 20 et que TaxFeeInfo spécifie une taxe de 10, alors

    taux de promotion = AmountBeforeTax * (1 - pourcentage de remise) + taxe

    90.00 = 100 * (1 - 0.2) + 10

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

Vous devez spécifier exactement un seul des éléments suivants : percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

Valeur décimale comprise entre 0 et 100 indiquant le pourcentage de remise de base. Comme percentage, il est appliqué à AmountAfterTax (ou à AmountBeforeTax si AmountAfterTax n'est pas spécifié).

Contrairement à percentage, cette remise est toujours calculée en pourcentage des tarifs de base, quelles que soient les promotions précédentes appliquées dans l'ordre.

Exemple :

  • Supposons que deux promotions soient appliquées de manière séquentielle à un séjour d'une nuit au prix de 100 €. La première est une remise de 10 %, et la seconde est une remise de 10% sur le prix de base. Le tarif réduit sera alors de 80, car les deux promotions offrent une remise de 10. Notez que si la deuxième promotion était également une remise de pourcentage standard, le tarif réduit serait de 81, car la deuxième promotion offre une remise de 10% sur 90.
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

Vous devez spécifier exactement un seul des éléments suivants : percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

Montant fixe à soustraire de la somme des tarifs par nuit de AmountAfterTax (ou de la somme des tarifs par nuit AmountBeforeTax si AmountAfterTax n'est pas spécifié). Il est supposé être dans la même devise que les tarifs par nuit. Si ce nombre est supérieur à la somme des tarifs par nuit, la valeur obtenue est égale à zéro.

Exemples :

  • Si nous fixons le tarif d'un séjour d'une nuit où AmountBeforeTax est égal à 90, AmountAfterTax à 100 et fixed_amount à 20, alors

    taux de promotion = AmountAfterTax - remise fixe

    80.00 = 100 - 20

  • Si nous fixons le tarif d'un séjour d'une nuit où AmountBeforeTax est égal à 100, fixed_amount est égal à 20 et TaxFeeInfo indique une taxe de 8%, alors

    taux de promotion = (AmountBeforeTax - remise fixe) * (1 + pourcentage de taxe)

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

  • Si nous fixons le tarif d'un séjour d'une nuit où AmountBeforeTax est égal à 50, fixed_amount est égal à 60 et TaxFeeInfo indique une taxe de 10, alors

    taux de promotion = (AmountBeforeTax - remise fixe) * taxe

    10.00 = 0 + 10

  • Si nous fixons le tarif d'un séjour de trois nuits où les valeurs AmountAfterTax sont 100, 110 et 120, et où fixed_amount est égal à 150, alors

    taux de promotion = somme(AmountAfterTax) - (remise fixe)

    180.00 = (100 + 110 + 120) - 150

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

Vous devez spécifier exactement un seul des éléments suivants : percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

Remise fixe appliquée à chacun des tarifs par nuit AmountAfterTax (ou valeur N la plus basse si applied_nights est spécifié). Si AmountAfterTax n'est pas spécifié, la remise est appliquée à AmountBeforeTax. Il est supposé être dans la même devise que les tarifs par nuit. Si l'attribut fixed_amount_per_night est supérieur à un tarif par nuit, ce tarif est réduit à zéro. La remise ne peut pas générer un tarif négatif.

Exemples :

  • Si nous fixons le tarif d'un séjour de trois nuits où les valeurs AmountAfterTax sont 100, 110 et 120, et où fixed_amount_per_night est égal à 10, alors

    taux de promotion = somme(AmountBeforeTax - montant fixe de la remise)

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

  • Si nous fixons le tarif d'un séjour de trois nuits où les valeurs AmountAfterTax sont 10, 50 et 100, et où fixed_amount_per_night est égal à 20, alors

    taux de promotion = somme(AmountAfterTax - montant fixe de la remise)

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

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

Vous devez spécifier exactement un seul des éléments suivants : percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

Si des tarifs par nuit AmountAfterTax sont spécifiés, le prix du séjour, taxes et frais inclus, est défini sur la valeur spécifiée. Si AmountBeforeTax est spécifié, que AmountAfterTax soit spécifié ou non, le prix avant taxes du séjour est défini sur la valeur spécifiée. Il est supposé être dans la même devise que les tarifs par nuit.

Si AmountAfterTax est destiné à refléter une taxe en pourcentage, définir un prix fixe pour AmountBeforeTax peut entraîner des taxes et des frais inexacts. En règle générale, nous vous recommandons vivement d'utiliser TaxFeeInfo pour spécifier les taxes et les frais d'une propriété.

Exemples :

  • Si nous fixons le tarif d'un séjour d'une nuit où AmountBeforeTax est égal à 90, AmountAfterTax à 100 et fixed_price à 80, alors le tarif promotionnel est de 80.
  • Si nous fixons le tarif d'un séjour d'une nuit où AmountBeforeTax est égal à 100, fixed_amount est égal à 80 et TaxFeeInfo indique une taxe de 8%, alors

    taux de promotion = prix fixe * (1 + pourcentage de taxe)

    86,40 = 80 * 1,08

  • Si nous fixons le tarif d'un séjour de trois nuits où les valeurs AmountAfterTax sont 100, 110 et 120, et où fixed_amount est égal à 300, alors

    taux de promotion = 300

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

Vous devez spécifier exactement un seul des éléments suivants : percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

Si des tarifs par nuit AmountAfterTax sont spécifiés, le prix de chaque nuit du séjour, taxes et frais inclus, est défini sur la valeur spécifiée. Si AmountBeforeTax est spécifié, que AmountAfterTax soit spécifié ou non, le prix avant taxes pour chaque nuit de séjour est défini sur la valeur spécifiée. Il est supposé être dans la même devise que les tarifs par nuit.

Si AmountAfterTax est destiné à refléter une taxe en pourcentage, définir un prix fixe pour AmountBeforeTax peut entraîner des taxes et des frais inexacts. En règle générale, nous vous recommandons vivement d'utiliser TaxFeeInfo pour spécifier les taxes et les frais d'une propriété.

Si applied_nights est spécifié, le nouveau prix est appliqué aux N nuits les moins chères.

Exemples :

  • Si nous fixons le tarif d'un séjour de deux nuits où les valeurs AmountBeforeTax sont 90, 90, les valeurs AmountAfterTax sont 100, 100 et fixed_price est 80, le tarif promotionnel est 80 + 80 = 160.
  • Si nous fixons le tarif d'un séjour de deux nuits où AmountBeforeTax est égal à 100, fixed_amount à 80 et TaxFeeInfo indique une taxe de 8%, le tarif promotionnel est (80 + 80) * 1,08 = 172,8.
  • Si nous fixons le tarif d'un séjour de trois nuits où les valeurs AmountAfterTax sont 100, 110 et 120, et où fixed_amount est égal à 110, alors le tarif promotionnel est 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Cet attribut ne doit être utilisé qu'avec percentage ou fixed_amount_per_night.

Nombre de nuits auxquelles la remise est appliquée, en commençant par le tarif le plus bas. Il doit s'agir d'un entier compris entre 1 et 99. Si cet attribut n'est pas spécifié, la remise est appliquée à toutes les nuits.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Spécifie une remise sur certaines nuits d'un séjour lorsque la durée de séjour minimale est respectée. Les attributs de l'élément parent Discount ne sont pas autorisés si cet élément est utilisé.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

Nombre de nuits requises pour que la remise soit appliquée. Chaque remise s'applique à un segment distinct de nuits de séjour.

Par exemple, pour un séjour de 10 nuits où stay_nights est égal à 4 (et repeats est défini sur "true"), il existe deux segments de nuits de séjour: du 1er au 4e jour et du 5e au 8e jour. Les 9e et 10e jours ne font pas partie d'un segment de nuits de séjour.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer Nombre de nuits à tarif réduit dans chaque segment de nuits de séjour.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float Remise appliquée aux nuits avec remise. Si cette valeur est 50, chaque nuit sélectionnée bénéficie d'une remise de 50 %.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Doit être défini sur cheapest ou last. Si la valeur est last, les nuits à la fin du segment de séjour sont soumises à une remise. Si la valeur est cheapest, les nuits les moins chères du segment de nuits de séjour sont proposées avec une remise.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

Indique si la remise peut être appliquée à plusieurs segments de nuits de séjour. Si false, seul le segment de nuits de séjour au début de l'itinéraire est proposé avec remise. Si la valeur est true, tous les segments de nuits de séjour sont soumis à une remise.

Par exemple, si stay_nights est égal à 4 et que l'itinéraire comprend 10 nuits, si repeats est égal à true, deux segments sont proposés avec une remise (nuits 1 à 4 et nuits 5 à 8). Si repeats est égal à false, un seul segment est proposé avec une remise (nuits 1 à 4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Attribue un classement à cette promotion et l'inclut dans la sélection par classement, où seule la promotion ayant le classement le plus bas est sélectionnée pour être appliquée. Les valeurs doivent être comprises entre 1 et 99 inclus. Si plusieurs promotions partagent le même rang, l'une d'elles est sélectionnée et appliquée de manière arbitraire.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Vous devez spécifier un seul Discount ou BestDailyDiscount.

Spécifie une remise quotidienne pouvant être appliquée à une nuit de séjour. Contrairement à Discount, qui applique des remises à l'ensemble du séjour.

Chaque établissement peut avoir un seul groupe de promotions considérées comme "meilleures chaque jour". Cela signifie que pour chaque nuit de séjour, la promotion "meilleure quotidienne" éligible et offrant la remise la plus importante pour cette nuit est sélectionnée et peut être appliquée.

Stacking peut être spécifié avec BestDailyDiscount. Il doit être défini sur base ou none. Les remises "meilleures par jour" qui offrent la remise la plus élevée pour chaque nuit sont combinées et traitées comme une remise unique pour le séjour (Discount), tout en respectant le type de cumul configuré. Cette remise combinée est comparée à d'autres promotions <Réduction> éligibles et peut être cumulée avec elles afin de trouver la remise la plus intéressante. La combinaison de BestDailyDiscount ou un seul Discount, selon le prix le plus bas, est sélectionnée et appliquée pour le type d'empilement base.

StayDates peut être spécifié avec ce type de remise, mais application doit être défini sur overlap.

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

Vous devez indiquer exactement une seule des valeurs percentage, fixed_amount ou fixed_price.

Valeur décimale comprise entre 0 et 100 indiquant le pourcentage de remise. Elle est appliquée à AmountAfterTax (ou à AmountBeforeTax si AmountAfterTax n'est pas spécifié).

Exemples :

  • Si AmountAfterTax pour une nuit de séjour est égal à 100 et que percentage est égal à 20, alors

    taux de promotion = AmountAfterTax * (1 - pourcentage de remise)

    80.00 = 100 * (1 - 0.2)

  • Si AmountBeforeTax pour une nuit de séjour est égal à 100, que percentage est égal à 20 et que TaxFeeInfo spécifie une taxe de 10, alors

    taux de promotion = AmountBeforeTax * (1 - pourcentage de remise) + taxe

    90.00 = 100 * (1 - 0.2) + 10

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

Vous devez indiquer exactement une seule des valeurs percentage, fixed_amount ou fixed_price.

Montant fixe à soustraire d'un tarif par nuit AmountAfterTax (ou d'un tarif par nuit AmountBeforeTax si AmountAfterTax n'est pas spécifié). Il est supposé être dans la même devise que les tarifs par nuit. Si ce nombre est supérieur à la somme des tarifs par nuit, la valeur obtenue est égale à zéro.

Exemples :

  • Si AmountBeforeTax pour une seule nuit est égal à 90, que AmountAfterTax est égal à 100 et que fixed_amount est égal à 20, alors

    taux de promotion = AmountAfterTax - remise fixe

    80.00 = 100 - 20

  • Si AmountBeforeTax pour une seule nuit est égal à 100, que fixed_amount est égal à 20 et que TaxFeeInfo spécifie une taxe de 8%, alors

    taux de promotion = (AmountBeforeTax - remise fixe) * (1 + pourcentage de taxe)

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

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

Vous devez indiquer exactement une seule des valeurs percentage, fixed_amount ou fixed_price.

Si des tarifs par nuit AmountAfterTax sont spécifiés, le prix de la nuit de séjour, taxes et frais inclus, est défini sur la valeur spécifiée. Si AmountBeforeTax est spécifié, que AmountAfterTax soit spécifié ou non, le prix avant taxes du séjour est défini sur la valeur spécifiée. Il est supposé être dans la même devise que les tarifs par nuit.

Exemples :

  • Si AmountBeforeTax pour une seule nuit est égal à 90, que AmountAfterTax est égal à 100 et que fixed_price est égal à 80, le tarif promotionnel est de 80.
  • Si AmountBeforeTax pour une seule nuit est égal à 100, que fixed_amount est égal à 80 et que TaxFeeInfo spécifie une taxe de 8%, alors

    taux de promotion = prix fixe * (1 + pourcentage de taxe)

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Définit les restrictions liées au nombre de chambres qui doivent être disponibles pour que cette promotion soit appliquée. La remise n'est appliquée que pour les nuits qui respectent la contrainte. Non autorisé avec la remise fixed_amount. Notez que le nombre de chambres disponibles est spécifié avec OTA_HotelInvCountNotifRQ (InvCount) ou OTA_HotelAvailNotifRQ (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer Nombre minimal de chambres qui doivent être disponibles pour que la promotion soit appliquée au tarif par nuit. Si cet attribut n'est pas spécifié, il n'y a pas de minimum.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer Nombre maximal de chambres qui doivent être disponibles pour que la promotion soit appliquée au tarif par nuit. Si cet attribut n'est pas spécifié, il n'y a pas de maximum.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay Définit la plage de durée de séjour sur laquelle cette promotion peut être appliquée. La promotion n'est pas appliquée lorsque la durée du séjour est en dehors des limites minimale et maximale.
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer Nombre minimal de nuits autorisées dans le séjour pour que la promotion soit appliquée. Si cet attribut n'est pas spécifié, il n'y a pas de minimum.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer Nombre maximal de nuits autorisées dans le séjour pour que la promotion soit appliquée. Si cet attribut n'est pas spécifié, il n'y a pas de maximum.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

Conteneur d'une règle de tarif pour les membres qui déclenche un traitement spécifique de l'interface utilisateur pour la remise associée.

Cet élément ne doit pas être spécifié, sauf si <Discount> l'est également.

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

ID de la règle d'offre associée à un programme d'adhésion.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Spécifie la somme minimale des prix des chambres à la journée (à l'aide de la valeur la plus élevée de AmountBeforeTax ou AmountAfterTax) à dépasser pour que la promotion soit appliquée.
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer Valeur à dépasser pour que la promotion soit appliquée.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy Définit les restrictions liées aux occupations pour lesquelles cette promotion est appliquée. La promotion n'est pas appliquée lorsque le nombre de personnes est en dehors des limites minimale et maximale.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer Le nombre de personnes spécifié par l'utilisateur doit être au moins égal à cette valeur pour que la remise soit appliquée.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer Le nombre de personnes spécifié par l'utilisateur ne doit pas dépasser cette valeur pour que la remise soit appliquée.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Conteneur pour la liste des plans tarifaires auxquels la promotion s'applique. Si <RatePlans> n'est pas spécifié, la promotion s'applique à tous les plans tarifaires.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan 1..n RatePlan Spécifie un plan tarifaire. Un plan tarifaire est défini par la combinaison d'une formule, de tarifs et d'une disponibilité, telle que définie dans les messages Transaction (Données sur un établissement), OTA_HotelRateAmountNotifRQ et OTA_HotelAvailNotifRQ, et telle qu'identifiée par la valeur PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string Identifiant unique du plan tarifaire. Cette valeur correspond à la valeur PackageID dans l'élément <PackageData> d'un message Transaction (Données sur un établissement), ainsi que dans l'attribut RatePlanCode de l'élément <StatusApplicationControl> dans les messages <OTA_HotelRateAmountNotifRQ> et <OTA_HotelAvailNotifRQ>. Le nombre maximal de caractères autorisés est de 50.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes Conteneur pour la liste des types de chambres auxquels la promotion s'applique. La promotion est appliquée à chaque <RoomType> spécifié. Si <RoomTypes> n'est pas spécifié, la promotion s'applique à toutes les chambres.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType Spécifie un type de chambre. Un type de chambre est défini dans un élément <RoomData> d'un message Transaction (Données sur un établissement) et est référencé à l'aide de sa valeur <RoomID>. (Sa valeur <RoomID> est également référencée par l'attribut InvTypeCode dans les messages OTA_HotelRateAmountNotifRQ.)
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string Identifiant unique de l'inventaire (type de chambre). Cette valeur correspond à <RoomID> dans un message Transaction (Données sur un établissement). Le nombre maximal de caractères autorisés est de 50.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking Indique comment combiner les promotions. S'il n'est pas spécifié, le "type" est considéré comme base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

Selon ce paramètre, plusieurs promotions peuvent être appliquées à un même tarif:

  • any: se combine avec toute autre promotion (sauf none), mais l'ordre dans lequel les promotions doivent être appliquées n'est pas garanti.
  • base: la meilleure promotion base éligible est sélectionnée et appliquée en premier, avant les autres promotions. Il s'agissait auparavant de base_only.
  • second: la meilleure promotion second éligible est sélectionnée et appliquée après une promotion base (le cas échéant) et avant les promotions any.
  • none: ne peut pas se combiner avec d'autres promotions.

Parmi les combinaisons autorisées, l'ensemble de promotions qui offre la plus grande remise est appliqué au tarif.

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates Conteneur pour une ou plusieurs plages de dates qui déterminent le mode d'application de la promotion, par exemple pour prendre en compte les remises saisonnières.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

Décrit le mode d'application de la promotion.

Les valeurs valides sont les suivantes :

  • all: applique la promotion à chaque nuit du séjour si toutes les dates du séjour se superposent exactement aux dates de séjour définies.
  • any: applique la promotion à toutes les nuits du séjour si une date de celui-ci se superpose à une date de la plage de dates de séjour.
  • overlap: applique uniquement la promotion aux nuits du séjour qui se superposent à une date de la plage de dates de séjour.

Cet attribut doit toujours être spécifié.

  • Si <Discount> spécifie percentage et que application est défini sur all ou any, la remise est appliquée en tant que pourcentage du séjour total.
  • Si <Discount> spécifie percentage et que application est défini sur overlap, la remise est appliquée en tant que pourcentage des tarifs par nuit pour les nuits qui se chevauchent.
  • <Discount> spécifiant fixed_amount et application défini sur overlap n'est pas une combinaison valide.
  • <FreeNights> est compatible avec toutes les valeurs application. Notez que pour overlap, seules les nuits de séjour qui se chevauchent sont prises en compte pour les conditions requises pour la remise.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

Plage de dates indiquant les dates auxquelles la promotion doit être appliquée.

Le format YearlessDate est également accepté.

  • Si start ou end est une date sans année, les deux attributs doivent être renseignés avec une valeur sans année.
  • Les plages de dates sans année ne doivent pas se répéter à l'arrivée du Nouvel An. Représentez plutôt la plage en deux plages de dates adjacentes. Par exemple, {"12-29", "01-05"} peut être représenté par {"12-29", "12-31"} et {"01-01", "01-05"}.

Si vous souhaitez définir une plage StayDates pour autoriser la promotion à des jours spécifiques de la semaine, vous devez définir la date start sur la date actuelle sans end afin que la promotion n'expire pas.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate Date de début (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être antérieure ou identique à la date end. Si start n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de début.

Vous devez spécifier la valeur start si la valeur end n'est pas fournie.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate Date de fin (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être identique ou postérieure à la date start. Si end n'est pas spécifié, la plage de dates est en fait illimitée à partir de la date start.

Vous devez spécifier la valeur end si la valeur start n'est pas fournie.

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

Jours de la semaine autorisés dans la plage de dates. Si cet attribut n'est pas spécifié, tous les jours sont autorisés dans la plage de dates. Chaque caractère de la chaîne spécifie un jour. Par exemple, "MTWHF" indique que les jours de la semaine sont autorisés dans la plage de dates.

Caractères valides:

  • M pour lundi
  • T pour mardi
  • W pour mercredi
  • H pour jeudi
  • F pour vendredi
  • S pour samedi
  • U pour dimanche

Toute combinaison de caractères est valide.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Conteneur permettant de répertorier les positions géographiques (pays) des utilisateurs éligibles à la promotion. Si cet élément est spécifié, seuls les utilisateurs éligibles dans les pays répertoriés bénéficient d'un tarif réduit. S'il n'est pas spécifié, le tarif réduit est proposé aux utilisateurs éligibles de n'importe quel pays.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum Type de spécification UserCountries.

Les valeurs valides sont include et exclude.

Si le type UserCountries est défini sur include, la promotion s'applique aux utilisateurs des pays listés.

Si la valeur de type UserCountries est exclude, la promotion s'applique aux utilisateurs situés en dehors des pays listés.

Si le type UserCountries n'est pas défini, il est traité comme include et la promotion est appliquée aux utilisateurs des pays listés.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country Définit un pays dans lequel les utilisateurs sont éligibles à la promotion.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string Code pays CLDR, tel que DE ou FR. Notez que, pour certains pays, ce code est différent du code pays ISO à deux lettres. De plus, les codes de région CLDR ne sont pas acceptés.

Exemples

Vous pouvez indiquer jusqu'à 500 promotions par établissement. Consultez l'exemple "Supprimer une promotion" pour supprimer des promotions d'un établissement.

L'exemple suivant représente un message Promotions de base:

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


L'exemple suivant montre comment créer une remise si un excédent d'inventaire approche de la date d'arrivée:

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


L'exemple suivant montre comment supprimer une promotion pour un établissement:

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

L'exemple suivant montre comment supprimer toutes les promotions pour un établissement:

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



L'exemple suivant montre comment superposer <HotelPromotions> pour un établissement avec une ou plusieurs nouvelles promotions. Lorsque action="overlay", toutes les promotions stockées sont supprimées avant le stockage des promotions spécifiées dans le message actuel:

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

L'exemple suivant montre un cas où trois promotions différentes seraient appliquées (base, second et any). Notez que la promotion none ne sera pas appliquée, car les autres promotions offrent une remise plus intéressante. Si le prix d'origine était de 100 $, le prix réduit serait de 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>


L'exemple suivant montre un cas où la promotion none est utilisée, car la combinaison d'autres promotions offre une remise plus faible. Si le prix d'origine était de 100 $, le prix réduit sera de 75 $.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="10"/>
      <Stacking type="base"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="10"/>
      <Stacking type="any"/>
    </Promotion>
    <Promotion id="3">
      <Discount percentage="25"/>
      <Stacking type="none"/>
    </Promotion>
  </HotelPromotions>
</Promotions>



L'exemple suivant montre un cas où l'élément BookingWindow est utilisé avec ses limites de début et de fin définies en tant que type de durée ISO 8601. Cette restriction de période de réservation nécessite une réservation avant 18h00 le jour précédant l'arrivée et à partir de 12h00 le deuxième jour précédant l'arrivée.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingWindow min="P1DT6H" max="P2DT12H"/>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


L'exemple suivant montre un cas où l'élément BookingDates est utilisé avec les attributs start et end en tant que types DateTime. Cette restriction de date de réservation exige que la réservation soit effectuée entre le 01/07/2020 à 06:30 et le 02/07/2020 à 18:45.

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


L'exemple suivant montre un cas où l'élément CheckInDates contient des DateRanges qui comportent des champs start et end sans années. Dans cet exemple, la promotion s'applique aux dates d'arrivée comprises entre le 29 décembre et le 2 janvier, quelle que soit l'année. Les plages de dates sans année qui traversent la limite du Nouvel An ne sont pas valides. Par conséquent, la DateRange est exprimée en deux plages de dates 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>



L'exemple suivant propose une remise de 50% sur deux nuits pour chaque séjour de quatre nuits pour la période de réservation spécifiée. Pour un séjour de dix nuits, un total de quatre nuits sera proposé à 50 % de remise.

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

L'exemple suivant propose une remise de 50% sur une nuit pour chaque séjour de trois nuits pour les périodes de séjour spécifiées. Seules les nuits de séjour qui se chevauchent sont prises en compte pour bénéficier de la remise. Pour l'itinéraire suivant avec une arrivée le 01/01/2022 et un départ le 07/01/2022, les nuits d'hébergement éligibles et les remises sont appliquées comme suit.

  • 2022-01-01 (séjour)
  • 2022-01-02 (séjour)
  • 2022-01-03
  • 04/01/2022 (avec remise)
  • 2022-01-05 (séjour)
  • 2022-01-06 (séjour)
<?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>


L'exemple suivant propose deux remises, l'une de 20% et l'autre de 15 %. Lors de l'évaluation, seule la remise de 15% est appliquée, car elle a un rang inférieur.

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

L'exemple suivant propose une remise sur un séjour de deux nuits en appliquant BestDailyDiscount empilé avec 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>

Prenons l'exemple d'un séjour de deux nuits du 30 avril 2023 au 2 mai 2023. Pour le calcul, la combinaison des meilleures remises quotidiennes qui génère la remise la plus importante est déterminée en premier.

Pour la première nuit, la promotion "générale" est la seule à être éligible avec une remise fixe de 20 €.

Pour la deuxième nuit, la promotion "mai" offre une remise plus importante que la remise "générale". Ainsi, lorsque "peut-être" est sélectionné, le montant de la remise fixe est de 50.

Pour le séjour, la promotion "Fiesta" offre une remise de 5 € par nuit, soit 10 € au total. Il peut être cumulé avec la combinaison des meilleures remises quotidiennes, car le type de cumul de "fiesta" est défini sur any. S'il était défini sur base, seule la combinaison des meilleures remises quotidiennes ou la remise "fiesta" est appliquée. Pour en savoir plus, consultez la description de Stacking.

Au total, le prix du séjour bénéficie d'une remise de 20 + 50 + 10 = 80 €.

Réponses

Syntaxe

Le message PromotionsResponse utilise la syntaxe suivante:

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

Éléments et attributs

Le message PromotionsResponse inclut les éléments et les attributs suivants:

Élément / @Attribut Occurrences Type Description
PromotionsResponse 1 Complex element Élément racine indiquant le succès ou les problèmes liés à un message de requête Promotions reçu.
PromotionsResponse / @timestamp 1 DateTime Date et heure de création de ce message.
PromotionsResponse / @id 1 string Identifiant unique du message Promotions associé.
PromotionsResponse / @partner 1 string Compte partenaire pour ce message.
PromotionsResponse / Success 0..1 Success Indique que le message Promotions a été traité avec succès, sans avertissement, erreur ou échec.

Chaque message contient soit <Success>, soit <Issues>.

PromotionsResponse / Issues 0..1 Issues Conteneur pour un ou plusieurs problèmes rencontrés lors du traitement du message Promotions.

Chaque message contient soit <Success>, soit <Issues>.

PromotionsResponse / Issues / Issue 1..n Issue Description d'un avertissement, d'une erreur ou d'un échec survenu lors du traitement du message Promotions. Pour en savoir plus sur ces problèmes, consultez Messages d'erreur concernant l'état du flux.
PromotionsResponse / Issues / Issue / @code 1 integer Identifiant du problème.
PromotionsResponse / Issues / Issue / @status 1 enum

Type de problème rencontré.

Les valeurs valides sont warning, error et failure.

Exemples

Voici une réponse à un message Promotions correctement traité.

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

Voici une réponse à un message Promotions non traité en raison d'erreurs :

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