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 conduit au prix le plus bas. Si vous recherchez une API qui prend en charge les ajustements de taux arbitraires pouvant augmenter ou diminuer le prix lorsque les conditions sont remplies, envisagez d'utiliser notre API Rate Modifications. Notez que si les deux API sont présentes, les modifications du tarif sont appliquées avant les promotions.

Requêtes

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'ID de l'hôtel est également indiqué dans Hotel Center.
Promotions / HotelPromotions / @action 0..1 enum

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

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 contient 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 date et heure de début (en fonction du fuseau horaire de l'établissement), incluses, de la plage.

  • La date ou la date et heure spécifiées par start doivent être antérieures (ou identiques) à celles spécifiées 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é au format de date "AAAA-MM-JJ", il est interprété comme date et heure "AAAA-MM-JJT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date ou DateTime

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

  • La date ou la date et heure spécifiées par end doivent être ultérieures (ou identiques) à celles spécifiées 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 au format de date "AAAA-MM-JJ", il est interprété comme la 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, la 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, la 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 exige une réservation au plus tard à 18h00 le 30e jour avant l'arrivée.
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, la valeur 30 indique que la promotion ne s'applique qu'aux réservations effectuées au plus 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, la valeur P30D indique que la promotion ne s'applique qu'aux réservations effectuées au plus 30 jours avant la date d'arrivée. La valeur P30DT6H exige 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 à laquelle un tarif peut être défini après l'application de 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 le cumul est configuré, plusieurs promotions avec <Ceiling> peuvent s'appliquer à un même séjour. Chaque promotion appliquerait sa remise, immédiatement suivie de son plafond. L'exemple suivant montre comment chaque plafond contribue au calcul de la promotion suivante dans la pile.

Exemple :

Tarification 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, une fixed_amount de 25 et un plafond amount_per_night de 60
  2. Promotion avec un type d'empilement second, une valeur fixed_amount de 25 et un plafond amount_per_night de 90

Voici l'ordre de calcul :

  1. La promotion de base est appliquée en premier et réduit le AmountBeforeTax à 75, mais le plafond le ramène ensuite à 60.
  2. La promotion second réduit le AmountBeforeTax de 60 à 35. Cette valeur est inférieure au plafond de 90, donc le deuxième plafond n'est pas appliqué. Le taux final est de 35.

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

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

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

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

amount_per_night s'applique aux taxes et 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 liées à la valeur minimale à laquelle un tarif peut être défini après l'application de 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 le cumul est configuré, plusieurs promotions avec <Floor> peuvent s'appliquer à un même séjour. Chaque promotion appliquerait sa remise, immédiatement suivie de son prix plancher. L'exemple suivant montre comment chaque palier contribue au calcul de la promotion suivante dans la pile.

Exemple :

Tarification 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, une fixed_amount de 25 et un plancher amount_per_night de 90
  2. Promotion avec le type d'empilement second, fixed_amount de 25 et un plancher amount_per_night de 60

Voici l'ordre de calcul :

  1. La promotion de base est appliquée en premier et réduit le AmountBeforeTax à 75, mais le plancher le remonte ensuite à 90.
  2. La promotion second réduit le prix de AmountBeforeTax de 90 à 65. Cette valeur est supérieure au plancher de 60. Le deuxième plancher n'est donc pas appliqué. Le taux final est de 65.

Le fait que 90 € soit un plancher global plus strict n'a aucune importance, car il n'est valable que pour sa propre promotion. Il ne peut pas exister de plancher unique qui s'applique à 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é, sa valeur doit être inférieure ou égale à celle de l'attribut amount_per_night dans <Ceiling>.

amount_per_night s'applique aux taxes et 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 chevaucher la nouvelle année. À la place, représentez la plage sous forme de 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 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 chevaucher la nouvelle année. À la place, représentez la plage sous la forme de 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 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 Discount ou BestDailyDiscount.

Indique la remise à appliquer pour cette promotion.

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

Une seule des valeurs percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night est requise.

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

Une seule des valeurs percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night est requise.

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

Contrairement à percentage, cette remise est toujours calculée en pourcentage des tarifs de base, quels que soient les promotions précédentes qui ont été appliquées successivement.

Exemple :

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

Une seule des valeurs percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night est requise.

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é). Elle est supposée ê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

Une seule des valeurs percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night est requise.

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. Elle est supposée ê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 que 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

Une seule des valeurs percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night est requise.

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é, le prix hors taxes du séjour est défini sur la valeur spécifiée, que AmountAfterTax soit spécifié ou non. Elle est supposée être dans la même devise que les tarifs par nuit.

Si AmountAfterTax est censé refléter un pourcentage de taxe, définir un prix fixe pour AmountBeforeTax peut entraîner des taxes et des frais inexacts. En général, nous vous recommandons vivement d'utiliser TaxFeeInfo pour spécifier les taxes et les frais d'un établissement.

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

Une seule des valeurs percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night est requise.

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

Si AmountAfterTax est censé refléter un pourcentage de taxe, définir un prix fixe pour AmountBeforeTax peut entraîner des taxes et des frais inexacts. En général, nous vous recommandons vivement d'utiliser TaxFeeInfo pour spécifier les taxes et les frais d'un établissement.

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 et 90, les valeurs AmountAfterTax sont 100 et 100, et fixed_price est égal à 80, alors le tarif promotionnel est de 80 + 80 = 160.
  • Si nous fixons le tarif d'un séjour de deux nuits où AmountBeforeTax est égal à 100, 100 ; fixed_amount est égal à 80 et TaxFeeInfo indique une taxe de 8 %, alors 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 de 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 pour 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 requis 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 : les nuits 1 à 4 et les nuits 5 à 8. Les nuits 9 et 10 ne font pas partie d'un segment de nuits de séjour.

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

Indique si la remise peut être appliquée à plusieurs segments de nuitées. Si la valeur est false, seule la partie des nuits de séjour au début de l'itinéraire bénéficie d'une remise. Si la valeur est true, toute tranche de nuitées est remisée.

Par exemple, si stay_nights est égal à 4 et que l'itinéraire est de 10 nuits, alors, si repeats est égal à true, deux segments sont concernés par la remise (nuits 1 à 4 et nuits 5 à 8). En revanche, si repeats est égal à false, un seul segment est concerné par la remise (nuits 1 à 4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Attribue un rang à cette promotion et l'inclut dans la sélection par classement, où seule la promotion ayant le rang 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 Discount ou BestDailyDiscount.

Spécifie une remise quotidienne pouvant être appliquée à une nuit de séjour. Cela diffère de Discount, qui applique des remises à l'ensemble des séjours.

Chaque propriété peut disposer d'un seul groupe de promotions considérées comme les "meilleures promotions du jour". Cela signifie que pour chaque nuit de séjour, la meilleure promotion quotidienne éligible offrant la plus grande remise pour cette nuit est sélectionnée et peut être appliquée.

Stacking peut être spécifié avec BestDailyDiscount. Elle doit être définie sur base ou none. Les "meilleures remises quotidiennes" offrant la remise la plus importante pour chaque nuit sont combinées et traitées comme une remise unique sur le séjour (c'est-à-dire Discount), tout en respectant le type de cumul configuré. Cette remise combinée est comparée à d'autres promotions <Discount> éligibles et peut être cumulée avec celles-ci pour trouver celle ou la combinaison qui offre la remise la plus importante. La combinaison de BestDailyDiscount ou un seul Discount, selon ce qui donne 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 ne devez indiquer qu'une seule des options 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 ne devez indiquer qu'une seule des options percentage, fixed_amount ou fixed_price.

Montant fixe à soustraire d'un seul tarif par nuit de AmountAfterTax (ou du tarif par nuit de AmountBeforeTax si AmountAfterTax n'est pas spécifié). Elle est supposée ê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 nuit est égal à 90, AmountAfterTax à 100 et fixed_amount à 20, alors

    taux de promotion = AmountAfterTax - remise fixe

    80.00 = 100 - 20

  • Si AmountBeforeTax pour une 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 ne devez indiquer qu'une seule des options percentage, fixed_amount ou fixed_price.

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

Exemples :

  • Si AmountBeforeTax pour une nuit est égal à 90, AmountAfterTax à 100 et fixed_price à 80, alors le taux de promotion est de 80.
  • Si AmountBeforeTax pour une 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 pour une règle de tarif pour les membres qui déclenche un traitement spécifique dans l'UI 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 tarifaire associée à un programme de fidélité.

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 taux d'occupation pour lesquels cette promotion est appliquée. La promotion n'est pas appliquée lorsque l'occupation est en dehors des limites minimale et maximale.

Les promotions s'appliquent au tarif de l'itinéraire. Il n'est pas possible de définir une remise maximale par occupant.

Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer L'occupation spécifiée par l'utilisateur doit être au moins égale à cette valeur pour que la remise soit appliquée.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer L'occupation spécifiée par l'utilisateur doit être inférieure ou égale à 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 : peut être combiné 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. Cette méthode s'appelait auparavant 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 la promotion uniquement 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 de 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 chevaucher la nouvelle année. À la place, représentez la plage sous forme de 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 la plage StayDates pour autoriser la promotion certains jours 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 UserCountries type est défini sur include, la promotion s'applique aux utilisateurs des pays listés.

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

Si UserCountries type 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, le code pays CLDR 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.

Message de base

L'exemple ci-dessous 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>


État de l'inventaire

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>


Supprimer une promotion

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>

Supprimer toutes les 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>



Superposer toutes les promotions

L'exemple suivant montre comment superposer l'élément <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>

3 types d'empilement différents

L'exemple suivant montre un cas où trois promotions différentes seraient appliquées (base, second, any). Notez que la promotion none ne serait pas appliquée, car les autres promotions offrent une meilleure remise. 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>


Type d'empilement "Aucun"

L'exemple suivant montre un cas où la promotion none est utilisée, car la combinaison d'autres promotions offre une remise moins importante. Si le prix initial était de 100 $, le prix réduit serait 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>



Limites de la durée de la période de réservation

L'exemple suivant montre un cas où l'élément BookingWindow est utilisé avec ses limites de début et de fin définies comme un type de durée ISO 8601. Cette restriction de période de réservation exige que la réservation soit effectuée au plus tard à 18h00 la veille de l'arrivée et au plus tôt à 12h00 le deuxième jour avant 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>


Limites de date et d'heure de réservation

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 ait lieu entre 6h30 le 1er juillet 2020 et 18h45 le 2 juillet 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>


Plages de dates sans année

L'exemple suivant montre un cas où l'élément CheckInDates contient des DateRanges dont les champs start et end ne comportent pas d'année. Dans cet exemple, la promotion s'applique aux dates d'arrivée comprises entre le 29/12 et le 2/1, quelle que soit l'année. Les plages de dates sans année qui franchissent la limite de la nouvelle année ne sont pas valides. La plage de dates est donc exprimée sous la forme de 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>



Remise FreeNights

L'exemple suivant applique une remise de 50 % sur deux nuits pour chaque tranche de quatre nuits passées pendant la période de réservation spécifiée. Pour un séjour de dix nuits, quatre nuits au total bénéficieraient d'une remise 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>

L'exemple suivant accorde une remise de 50 % sur une nuit pour chaque tranche de trois nuits passées dans l'hôtel, pour les plages de dates 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 éligibles et les remises sont appliquées comme suit.

  • 2022-01-01 (séjour)
  • 2022-01-02 (séjour)
  • 2022-01-03
  • 2022-01-04 (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>


Sélection classée

L'exemple suivant propose deux remises : une de 20 % et une 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>

BestDailyDiscount

L'exemple suivant applique une remise de BestDailyDiscount cumulée avec un Discount pour un séjour de deux nuits.

<?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 permettant d'obtenir la remise la plus importante est d'abord identifiée.

Pour la première nuit, la promotion "générale" est le seul montant é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" est sélectionné, le montant de la remise fixe est de 50.

Ensuite, pour le séjour, la promotion "fiesta" accorde une remise de 5 € par nuit, soit 10 € au total. Elle peut être cumulée avec la combinaison des meilleures remises quotidiennes, car le type de cumul de "fiesta" est défini sur any. Si elle est définie 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 fixe 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 ni é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

Opération réussie

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>

Problèmes

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>