Promotions

Présentation

Cette API vous permet de spécifier des remises possibles. Parmi les promotions spécifiées, Google applique la promotion ou l'ensemble de promotions éligibles qui permettent d'obtenir le prix le plus bas. Si vous recherchez une API compatible avec les ajustements de tarif arbitraires permettant d'augmenter ou de diminuer le prix lorsque les conditions sont remplies, envisagez plutôt notre API Rate Modifications. Notez que si les deux API sont présentes, les modifications de tarifs 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, 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" 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 attributs suivants:

Élément / @Attribut Occurrences Type Description
Promotions 1 Complex element Élément racine d'un message promotionnel.
Promotions / @partner 1 string Compte du 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 disposez d'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 de ce message de requête. 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 - (trait d'union).
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 si vous utilisez <Stacking>, la promotion offrant 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 spécifié, la valeur doit être "overlay". Lorsque cette 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 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

Une seule promotion pour un établissement. Notez que si action="overlay" et qu'aucun attribut <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), - (trait d'union) et . (point).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Si spécifié, la valeur doit être delete. S'il n'est pas spécifié et qu'une promotion ayant le même id n'est pas stockée, elle est stockée. Sinon, si elle n'est pas spécifiée 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 avec le même id est supprimée. Lorsque vous utilisez 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 de début ou date et heure (en fonction du fuseau horaire de la propriété), incluse, de la plage.

  • La date ou la date/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 termes d'heure de début.
  • Si start est renseigné en tant que date "AAAA-MM-JJ", il est interprété comme la date et l'heure "AAAA-MM-JJT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date ou DateTime

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

  • La date ou la date/heure spécifiées par end doivent être postérieures (ou identiques) à celles spécifiées par start.
  • Si end n'est pas spécifié, la plage est effectivement illimitée en termes d'heure de fin.
  • Si end est fourni en tant que date "AAAA-MM-JJ", il est interprété comme la date et l'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 cette valeur n'est pas spécifiée, 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.

Les caractères suivants sont acceptés:

  • 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 au cours de 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 cette valeur n'est pas spécifiée ou si sa valeur est 0, aucun minimum n'est imposé.

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 nécessite une réservation au plus tard 18h 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 cette valeur n'est pas spécifiée ou si sa valeur est 0, il n'y a pas de valeur maximale.

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 nécessite une réservation au plus tard 18h le 30e jour avant l'arrivée.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Définit les restrictions sur la valeur maximale sur laquelle un tarif peut être défini après l'application des promotions.

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

Si l'empilement est configuré, plusieurs promotions avec <Ceiling> peuvent s'appliquer à un même séjour. Chaque promotion applique 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ù la valeur de AmountBeforeTax est de 100 et où il y a deux promotions:

  1. Promotion avec le type de pile base, un fixed_amount de 25 et un plafond amount_per_night de 60
  2. Promotion avec le type de pile 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 remet le AmountBeforeTax à 75, puis le plafond rebascule sur 60.
  2. La promotion second fait passer la valeur AmountBeforeTax de 60 à 35. Cette valeur est inférieure au plafond de 90 degrés. Le deuxième plafond n'est donc pas appliqué. Le tarif final est de 35.

Le fait que la valeur 60 constitue un plafond global plus strict n'a pas d'importance, car cette valeur n'est valable que pour sa propre promotion. De plus, 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 sur lequel un tarif par nuit peut être défini 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 à celle de l'attribut amount_per_night dans <Floor>.

amount_per_night s'applique aux taxes et aux frais lorsqu'ils sont inclus dans le tarif par nuit via AmountAfterTax, mais pas ceux spécifiés via TaxFeeInfo.

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

Définit les restrictions sur la valeur minimale à laquelle un tarif peut être défini après l'application des promotions.

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

La logique <Floor> s'applique toujours aux remises <FreeNights>, même si une remise de 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 applique sa remise, immédiatement suivie de son prix plancher. L'exemple suivant montre comment chaque étage contribue au calcul de la promotion suivante dans la pile.

Exemple :

Tarification d'un séjour d'une nuit où la valeur de AmountBeforeTax est de 100 et où il y a deux promotions:

  1. Promotion avec le type de pile base, une fixed_amount de 25 et un amount_per_night étage de 90
  2. Promotion avec un type de pile second, une fixed_amount de 25 et un prix plancher amount_per_night de 60

Voici l'ordre de calcul:

  1. La promotion base est appliquée en premier et remet le AmountBeforeTax à 75, puis le prix plancher l'augmente à 90.
  2. La promotion second fait passer AmountBeforeTax de 90 à 65. Cette valeur est supérieure au prix plancher de 60. Le deuxième étage n'est donc pas appliqué. Le tarif final est de 65.

Le fait que 90 soit un prix plancher global plus strict n'a pas d'importance, car il n'est valable que pour sa propre promotion. De plus, il ne peut pas y avoir un prix plancher unique couvrant l'ensemble de la pile de promotions.

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

Montant minimal sur lequel 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 à celle de l'attribut amount_per_night dans <Ceiling>.

amount_per_night s'applique aux taxes et aux frais lorsqu'ils sont inclus dans le tarif par nuit via AmountAfterTax, mais pas ceux spécifiés via 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 doivent être renseignées en tant que dates sans année.
  • Les plages de dates sans année ne doivent pas coïncider avec le Nouvel An. Représentez plutôt la période 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 / 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 effectivement illimitée en termes de 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 effectivement illimitée en termes de 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 cette valeur n'est pas spécifiée, 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.

Les caractères suivants sont acceptés:

  • 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 doivent être renseignées en tant que dates sans année.
  • Les plages de dates sans année ne doivent pas coïncider avec le Nouvel An. Représentez plutôt la période 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 effectivement illimitée en termes de 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 effectivement illimitée en termes de 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 cette valeur n'est pas spécifiée, 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.

Les caractères suivants sont acceptés:

  • 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 lister les appareils des utilisateurs éligibles à la promotion. S'il est spécifié, seuls les utilisateurs éligibles sur les appareils listés peuvent bénéficier du 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 ne devez spécifier qu'une seule propriété Discount ou BestDailyDiscount.

Indique la remise à appliquer pour cette promotion.

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

Vous devez indiquer percentage, 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 indique une taxe de 10, alors

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

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

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

Vous devez indiquer percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

Montant fixe à soustraire de la somme des tarifs par nuit 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 elle est supérieure à la somme des tarifs par nuit, la valeur obtenue est nulle.

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) * taxes

    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 que 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 indiquer percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

Remise fixe appliquée à chacun des tarifs par nuit AmountAfterTax (ou N le moins cher si applied_nights est spécifié). Si AmountAfterTax n'est pas spécifié, il est appliqué à AmountBeforeTax. Elle est supposée être dans la même devise que les tarifs par nuit. Si fixed_amount_per_night est supérieur à un tarif par nuit, ce tarif est réduit à zéro. La remise ne peut pas rendre le tarif par nuit 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 que fixed_amount_per_night est égal à 10, alors

    taux de promotion = somme(AmountBeforeTax - remise d'un montant fixe)

    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 égale à 20, alors

    taux de promotion = somme(AmountAfterTax - remise d'un montant fixe)

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

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

Vous devez indiquer percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

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

Si AmountAfterTax est destiné à refléter un pourcentage de taxe, la définition d'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 indiquer 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, le taux de promotion est alors 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 que fixed_amount est égal à 300, alors

    taux de promotion = 300

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

Vous devez indiquer percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night.

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

Si AmountAfterTax est destiné à refléter un pourcentage de taxe, la définition d'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 indiquer 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 prix 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 de 80, le taux de promotion est alors égal à 80 + 80 = 160.
  • Si nous fixons le tarif d'un séjour de deux nuits où AmountBeforeTax est égal à 100, 100, fixed_amount à 80 et TaxFeeInfo spécifie une taxe de 8%, le taux de promotion est alors (80 + 80) x 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 que fixed_amount est égal à 110, le taux de promotion est alors égal à 110 x 3, soit 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Il 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 la nuit la moins chère. La valeur doit être un entier compris entre 1 et 99. Si aucune valeur n'est spécifiée, la remise s'applique à toutes les nuits.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Spécifie une remise sur certaines nuits de séjour lorsqu'une durée minimale de séjour est atteinte. 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 nuitées requises pour que la remise soit appliquée. Chaque remise est appliquée à un segment distinct des nuitées.

Par exemple, pour un séjour de 10 nuits où stay_nights correspond à 4 (et repeats est défini sur "true"), il existe deux segments de nuits: la 1re à la quatrième, et la 5 à la huitième nuits. Les nuits 9 et 10 ne font pas partie d'un segment de séjours de nuits.

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

Indique si la remise peut être appliquée à plusieurs segments de nuits. Si la valeur est false, seul le segment des nuits de séjour au début du séjour fait l'objet d'une remise. Si la valeur est true, une remise est appliquée à n'importe quel segment de nuits de séjour.

Par exemple, si la valeur de stay_nights est de 4 et que l'itinéraire dure 10 nuits, si la valeur de repeats est true, alors deux segments font l'objet d'une remise (les nuits 1 à 4 et les nuits 5 à 8). Toutefois, si la valeur de repeats est false, un seul segment fait l'objet d'une remise (les nuits 1 à 4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Attribue un classement à cette promotion et active la sélection du classement, où seule la promotion associée au 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 ne devez spécifier qu'une seule propriété Discount ou BestDailyDiscount.

Spécifie une remise quotidienne qui peut être appliquée à une nuit de séjour. En revanche, Discount, qui applique des remises à des séjours entiers.

Chaque établissement peut proposer un seul groupe de promotions considérées comme les "meilleures offres du jour". Cela signifie que pour chaque nuit de séjour, la seule promotion "meilleure journée" éligible et qui offre la remise la plus importante pour cette nuit est sélectionnée et peut être appliquée.

Stacking ne peut pas être spécifié avec BestDailyDiscount. Les "meilleures remises quotidiennes" qui permettent de bénéficier de la remise la plus importante pour chaque nuit sont combinées et traitées comme une seule remise (par exemple, Discount) avec un type de pile défini sur base. Cette remise combinée est comparée à d'autres promotions <Discount> éligibles et peut être cumulée avec d'autres promotions afin de trouver celle ou la combinaison qui offre la remise la plus importante. La combinaison de BestDailyDiscount ou d'un seul Discount, selon le prix le plus bas, est sélectionnée et appliquée pour le type de pile 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 renseigner qu'une seule des conditions suivantes : 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 la valeur de AmountAfterTax pour une nuit de séjour est de 100 et que la valeur de percentage est de 20, alors

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

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

  • Si la valeur de AmountBeforeTax pour un séjour est de 100, que la valeur de percentage est de 20 et que TaxFeeInfo indique une taxe de 10, alors

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

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

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

Vous ne devez renseigner qu'une seule des conditions suivantes : percentage, fixed_amount ou fixed_price.

Montant fixe à soustraire d'un tarif par nuit unique AmountAfterTax (ou d'un 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 elle est supérieure à la somme des tarifs par nuit, la valeur obtenue est nulle.

Exemples :

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

    taux de promotion = AmountAfterTax - remise fixe

    80.00 = 100 - 20

  • Si la valeur de AmountBeforeTax pour une seule nuit est de 100, que la valeur de fixed_amount est de 20 et que TaxFeeInfo indique 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 renseigner qu'une seule des conditions suivantes : percentage, fixed_amount ou fixed_price.

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

Exemples :

  • Si AmountBeforeTax pour une seule nuit est égal à 90, AmountAfterTax est de 100 et fixed_price est égal à 80, le taux de promotion est alors de 80.
  • Si la valeur de AmountBeforeTax pour une seule nuit est de 100, que la valeur de fixed_amount est de 80 et que TaxFeeInfo indique 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 sur le nombre de chambres devant être disponibles pour que cette promotion soit appliquée. La remise n'est appliquée qu'aux nuits qui respectent la contrainte. Non autorisé avec la remise fixed_amount. Notez que le nombre de chambres disponibles est spécifié à l'aide des règles 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 valeur maximale.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay Définit la durée maximale de séjour pendant 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 valeur maximale.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

Conteneur pour une règle d'offres pour les adhésions qui déclenche un traitement spécifique dans 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 à la journée des chambres (en utilisant 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 du nombre de personnes auxquelles 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 une combinaison de séjours organisés, de tarifs et de disponibilités, telle que définie dans les messages Transaction (Données sur un établissement), OTA_HotelRateAmountNotifRQ et OTA_HotelAvailNotifRQ, et telle qu'identifiée par l'identifiant PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string Identifiant unique du plan tarifaire. Cette valeur correspond à la valeur PackageID dans <PackageData> dans un message Transaction (Property Data) et dans l'attribut RatePlanCode de <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

En fonction de ce paramètre, vous pouvez appliquer plusieurs promotions à un même tarif:

  • any: peut être combiné avec toute autre promotion (à l'exception de 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'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: non cumulable 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 comment la promotion doit être appliquée.

Les valeurs possibles sont les suivantes :

  • all: applique la promotion à chaque nuit du séjour si toutes les dates du séjour se chevauchent.
  • any: applique la promotion à toutes les nuits du séjour si une date du séjour chevauche une date de la plage de dates de séjour.
  • overlap: applique la promotion uniquement aux nuits du séjour qui chevauchent 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 complet.
  • Si <Discount> spécifie percentage et que application est défini sur overlap, la remise est appliquée sous forme de pourcentage des tarifs par nuit pour les nuitées qui se chevauchent.
  • <Discount> spécifiant fixed_amount et application défini sur overlap n'est pas une combinaison valide.
  • <FreeNights> accepte 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 doivent être renseignées en tant que dates sans année.
  • Les plages de dates sans année ne doivent pas coïncider avec le Nouvel An. Représentez plutôt la période 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 / 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 effectivement illimitée en termes de date de début.
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 effectivement illimitée en termes de date de fin.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

Jours de la semaine autorisés dans la plage de dates. Si cette valeur n'est pas spécifiée, 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.

Les caractères suivants sont acceptés:

  • 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 lister les emplacements géographiques des utilisateurs (pays) éligibles à la promotion. S'il est spécifié, seuls les utilisateurs éligibles dans les pays listés peuvent bénéficier du 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 répertoriés.

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

Si la propriété UserCountries type n'est pas définie, elle est traitée comme include, et la promotion est appliquée aux utilisateurs des pays répertoriés.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country Définit un pays dans lequel les utilisateurs peuvent bénéficier de la promotion.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string Un 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

Message de base

L'exemple suivant pré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>


Condition d'inventaire

L'exemple suivant montre comment créer une remise en cas d'inventaire excédentaire à l'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 d'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 <HotelPromotions> pour un établissement avec une ou plusieurs nouvelles promotions. Lorsque la valeur est 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 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>


Aucun type de superposition

L'exemple suivant montre un cas où la promotion none est utilisée, car la combinaison d'autres promotions permet d'obtenir une remise plus faible. Si le prix d'origine é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 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 en tant que type de durée ISO 8601. Cette restriction nécessite d'effectuer une réservation au plus tard à 18h le jour précédant l'arrivée et au plus tard à 12h 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 des dates 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 exige que les réservations aient lieu entre le 01/07/2020 à 6h30 et le 02/07/2020 à 18h45.

<?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 avec des champs start et end sans années. Dans cet exemple, la promotion s'applique aux dates d'arrivée comprises entre le 29/12 et le 02/01, quelle que soit l'année. Les plages de dates sans année qui dépassent la limite du nouvel an ne sont pas valides. Par conséquent, la plage de dates est 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 propose une remise de 50% sur deux nuits pour chaque séjour de quatre nuits pendant la plage de dates de réservation spécifiée. Pour un séjour de dix nuits, une remise de 50 % serait appliquée à un total de quatre 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="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>

Dans l'exemple suivant, une remise de 50% est appliquée à une nuit pour chaque séjour de trois nuits pendant 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 le séjour suivant avec arrivée le 01/01/2022 et départ le 07/01/2022, les nuits de séjour éligibles et les remises sont appliquées comme suit.

  • 01/01/2022 (séjour)
  • 02/01/2022 (séjour)
  • 2022-01-03
  • 04/01/2022 (prix réduit)
  • 05/01/2022 (séjour)
  • 06/01/2022 (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, l'une de 20% et l'autre de 15 %. Lors de l'évaluation, seule la remise de 15% est appliquée, car son classement est 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 réduit un séjour de deux nuits en appliquant une valeur BestDailyDiscount combinée à une valeur 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 entre le 30 avril 2023 et le 2 mai 2023. Pour le calcul, la combinaison des meilleures remises quotidiennes qui offre la remise la plus importante est trouvée en premier.

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 "peut" offre une remise plus importante que la remise "générale". Ainsi, lorsque l'option "Peut" est sélectionnée, le montant de la remise fixe est de 50.

Ensuite, pour le séjour, les remises "fiesta" sont de 5 par nuit, soit 10 au total. Elle peut être combinée avec la combinaison des meilleures remises quotidiennes, car le type de pile de "fiesta" est défini sur any. Si elle est définie sur base, seule la combinaison des meilleures remises quotidiennes ou de la remise "fiesta" est appliquée. Pour en savoir plus, consultez la description de Stacking.

'Au total, le prix du séjour reçoit une remise de 20 + 50 + 10 = 80 montant fixe.

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 comporte les éléments et 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 issu du message Promotions associé.
PromotionsResponse / @partner 1 string Compte du 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

La réponse ci-dessous est 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

La réponse suivante est 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>