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 éligible qui génère le prix le plus bas. Si vous recherchez une API compatible avec les ajustements de tarifs arbitraires pouvant augmenter ou diminuer le prix lorsque les conditions sont remplies, envisagez d'utiliser notre API dédiée aux modifications de tarifs. 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 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 de 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 autorisés sont 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 si <Stacking> est utilisé, 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'identifiant de l'hôtel est également indiqué dans Hotel Center.
Promotions / HotelPromotions / @action 0..1 enum

Si elle est spécifiée, 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 a le même id)
  • Deleted (si une promotion stockée a le même id et que la valeur de l'attribut action pour la promotion spécifiée dans le message actuel est "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

Promotion unique pour un établissement. Notez que si action="overlay" et qu'aucun élément <Promotion> n'est spécifié, toutes les promotions de 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 autorisés sont a-z, A-Z, 0-9, _ (trait de soulignement), - (tiret) et . (point).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Si elle est spécifiée, la valeur doit être delete. Si aucune valeur n'est spécifiée et qu'aucune promotion ayant le même id n'est stockée, elle l'est. Sinon, si aucune valeur n'est 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>. En outre, 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/heure (en fonction du fuseau horaire de la propriété), incluses, de la plage.

  • La date ou la date/heure spécifiées par start doit être antérieure (ou identique) à la date ou la date et à l'heure 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 de fin ou date/heure de fin (en fonction du fuseau horaire de la propriété), incluse, de la plage.

  • La date ou la date et l'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 en fait 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 elle 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 valides sont les suivants:

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

N'importe quelle 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 sept 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 aucune valeur n'est spécifiée 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 nécessite 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 aucune valeur n'est spécifiée 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 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 à partir de 18h00 le 30e jour avant l'arrivée.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

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

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

Si la pile est configurée, plusieurs promotions associées à l'attribut <Ceiling> peuvent s'appliquer à un seul séjour. Chaque promotion applique sa remise, immédiatement suivie de son plafond. L'exemple suivant montre comment chaque plafond contribue au prochain calcul des promotions dans la pile.

Exemple :

Définir le prix d'un séjour d'une nuit où AmountBeforeTax est égal à 100 et où deux promotions sont empilé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 le type d'empilement second, fixed_amount de 25 et un plafond amount_per_night de 90

Voici l'ordre de calcul:

  1. La promotion base est appliquée d'abord et réduit la AmountBeforeTax à 75, puis le plafond abaisse cette valeur à 60.
  2. La promotion second fait passer l'AmountBeforeTax de 60 à 35. Cette valeur est inférieure au plafond de 90 pouces. Le deuxième plafond n'est donc pas appliqué. Le tarif final est de 35.

Le fait que 60 soit un plafond global plus strict n'est pas pertinent, car il n'est valide que pour sa propre promotion, et 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é, cette valeur doit être définie sur une valeur supérieure ou égale à l'attribut amount_per_night dans <Floor>.

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

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

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

Les promotions doivent toujours spécifier la valeur <Discount> ou <BestDailyDiscount>. Par conséquent, pour créer une promotion qui n'applique qu'une valeur <Floor>, vous pouvez définir une <Discount> avec une propriété percentage définie 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 la pile est configurée, plusieurs promotions associées à l'attribut <Floor> peuvent s'appliquer à un seul séjour. Chaque promotion applique sa remise, immédiatement suivie de son prix plancher. L'exemple suivant montre comment chaque prix plancher contribue au prochain calcul des promotions dans la pile.

Exemple :

Définir le prix d'un séjour d'une nuit où AmountBeforeTax est égal à 100 et où deux promotions sont empilées:

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

Voici l'ordre de calcul:

  1. La promotion base est appliquée d'abord et applique une remise de AmountBeforeTax à 75, puis le prix plancher l'augmente jusqu'à 90.
  2. La promotion second fait passer l'AmountBeforeTax de 90 à 65. Au-dessus de l'étage de 60 étages, nous n'appliquons pas le deuxième étage. Le tarif final est de 65.

Le fait que 90 soit un prix plancher global plus strict n'est pas pertinent, car il n'est valable que pour sa propre promotion, et aucun étage ne peut s'appliquer à l'ensemble de la pile de promotions.

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

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

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

amount_per_night est appliqué aux taxes et aux frais lorsqu'ils sont inclus dans le tarif par nuit avec AmountAfterTax, mais pas à ceux spécifiés dans 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 valeurs doivent être renseignées sous forme de dates sans année.
  • Les plages de dates sans année ne doivent pas englober la nouvelle année. Utilisez plutôt 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 (basée sur le 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 (basée sur le 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 elle 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 valides sont les suivants:

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

N'importe quelle 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 valeurs doivent être renseignées sous forme de dates sans année.
  • Les plages de dates sans année ne doivent pas englober la nouvelle année. Utilisez plutôt 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 (basée sur le 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 (basée sur le 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 elle 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 valides sont les suivants:

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

N'importe quelle combinaison de caractères est valide.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices Conteneur permettant de lister les appareils des utilisateurs éligibles à la promotion. Si elle est spécifiée, seuls les utilisateurs éligibles sur les appareils listés bénéficient 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 pour 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

Une seule des options percentage, 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 percentage est égal à 20, alors

    taux de promotion = AmountAfterTax x (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) + taxes

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

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

Une seule des options percentage, 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 AmountAfterTax (ou de la somme des tarifs par nuit de AmountBeforeTax si AmountAfterTax n'est pas spécifié). Il est supposé ê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 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 à 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 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 options percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night est requise.

Une remise fixe appliquée à chacun des tarifs par nuit AmountAfterTax (ou la valeur N la moins chère si applied_nights est spécifié). Si AmountAfterTax n'est pas spécifié, il est appliqué à AmountBeforeTax. Il est supposé ê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 entraîner 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 remise)

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

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

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

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

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

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

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

Si AmountAfterTax doit refléter un pourcentage de taxe, la définition d'un prix fixe pour AmountBeforeTax peut entraîner des erreurs 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, le taux de promotion est de 80.
  • Si nous fixons le tarif d'un séjour d'une nuit où AmountBeforeTax est égal à 100, fixed_amount à 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 options percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night est requise.

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

Si AmountAfterTax doit refléter un pourcentage de taxe, la définition d'un prix fixe pour AmountBeforeTax peut entraîner des erreurs 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 ou 90, AmountAfterTax où les valeurs sont égales à 100 et 100, et où fixed_price est égal à 80, le taux de promotion est égal à 80 + 80 = 160.
  • Si nous fixons le tarif d'un séjour de deux nuits où AmountBeforeTax est égal à 100 ou 100, fixed_amount est égal à 80 et TaxFeeInfo indique une taxe de 8%, le taux de promotion est alors de (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 où fixed_amount est de 110, le taux de promotion est de 110 x 3 = 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 nuitées auxquelles la remise est appliquée, en commençant par le prix le moins cher. La valeur doit être un entier compris entre 1 et 99. Si aucune valeur n'est spécifiée, la remise est appliquée à toutes les nuits.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Spécifie une remise pour certaines nuits de séjour si 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 l'application de la remise. Chaque remise est appliquée à un segment distinct de nuits.

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 nuit: la 1re à la quatrième nuit, et la 5e à 8 nuits. Les 9 et 10 nuits ne font pas partie d'une plage de nuits.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer Nombre de nuits à prix réduit dans chaque segment de nuits.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float Remise appliquée aux nuitées avec remise. Si cette valeur est de 50, une remise de 50% est appliquée à 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 de nuits font l'objet d'une remise. Si la valeur est cheapest, les nuits les moins chères du segment de nuits font l'objet d'une remise.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

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

Par exemple, si stay_nights correspond à 4 et que le séjour dure 10 nuits, si la valeur de repeats est true, deux segments font l'objet d'une réduction (nuits de 1 à 4 et nuits de 5 à 8 nuits). Toutefois, si la valeur de repeats correspond à false, un seul tronçon est à prix réduit (nuits 1 à 4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Attribue un classement à cette promotion et active la sélection par classement, où seule la promotion ayant le rang le plus faible 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'entre elles est sélectionnée et appliquée arbitrairement.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Vous ne devez spécifier qu'une seule propriété Discount ou BestDailyDiscount.

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

Chaque établissement peut avoir un seul groupe de promotions considérées comme "meilleures journées". Cela signifie que pour chaque nuit de séjour, l'unique "meilleure promotion quotidienne" éligible et qui offre la remise la plus intéressante pour la nuit en question est sélectionnée et peut être appliquée.

Stacking ne peut pas être spécifié avec BestDailyDiscount. Les "meilleures remises quotidiennes" générant la remise la plus faible pour chaque nuit sont combinées et traitées comme une remise pour un seul séjour (c'est-à-dire Discount) avec le type d'empilement défini sur base. Cette remise combinée est comparée aux autres promotions <Discount> éligibles et peut être combinée afin de trouver celle ou la combinaison qui offre la remise la plus intéressante. La combinaison de BestDailyDiscount ou d'un seul Discount, selon la génération du prix le plus faible, 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

Une seule des options percentage, fixed_amount ou fixed_price 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 pour une nuit de séjour est égal à 100 et que percentage est égal à 20, alors

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

    80.00 = 100 * (1 - 0.2)

  • Si AmountBeforeTax pour un séjour 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 * (1 - 0,2) + 10

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

Une seule des options percentage, fixed_amount ou fixed_price est requise.

Montant fixe à soustraire d'un seul tarif par nuit de AmountAfterTax (ou d'un tarif par nuit de AmountBeforeTax si AmountAfterTax n'est pas spécifié). Il est supposé ê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 zéro.

Exemples :

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

    taux de promotion = AmountAfterTax - remise fixe

    80.00 = 100 - 20

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

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

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

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

Une seule des options percentage, fixed_amount ou fixed_price est requise.

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

Exemples :

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

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

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Définit les restrictions concernant le nombre de chambres qui doivent ê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é avec OTA_HotelInvCountNotifRC (InvCount) ou OTA_HotelAvailNotifRC (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer Nombre minimal de chambres devant être disponibles pour que la promotion soit appliquée au tarif par nuit. Si aucune valeur n'est spécifiée, il n'y a pas de minimum.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer Nombre maximal de chambres devant être disponibles pour que la promotion soit appliquée au tarif par nuit. Si aucune valeur n'est spécifiée, il n'y a pas de maximum.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay Définit la durée des limites de séjour pendant lesquelles cette promotion peut être appliquée. La promotion n'est pas appliquée lorsque la durée du séjour dépasse les 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 d'offres pour les membres 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> est également spécifié.

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

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

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Spécifie la somme minimale des prix de la chambre à la journée (selon la valeur la plus élevée : AmountBeforeTax ou AmountAfterTax) à dépasser pour que la promotion soit appliquée.
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer Valeur devant être dépassée pour que la promotion soit appliquée.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy Définit les restrictions sur le nombre de personnes pour lesquelles cette promotion est appliquée. La promotion n'est pas appliquée lorsque le nombre de personnes dépasse les 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 formules, de tarifs et de disponibilité, telle que définie dans les messages Transaction (Données sur un établissement), OTA_HotelRateAmountNotifRC et OTA_HotelAvailNotifRC, et telle qu'identifiée par le 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 (Données sur un établissement), 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_HotelRateAmountNotifRC.
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 supposé être base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

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

  • any: peut être associé à toute autre promotion (sauf none), mais l'ordre dans lequel les promotions doivent être appliquées n'est pas garanti.
  • base: la meilleure promotion base éligible est sélectionnée et appliquée en premier, avant les autres promotions. Il s'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 any promotions.
  • none: n'est pas cumulable avec d'autres promotions.

Parmi les combinaisons autorisées, l'ensemble de promotions offrant 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 chevauchent les dates de séjour.
  • 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: n'applique la promotion qu'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 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> 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 d'application de la promotion.

Le format YearlessDate est également accepté.

  • Si start ou end est une date sans année, les deux valeurs doivent être renseignées sous forme de dates sans année.
  • Les plages de dates sans année ne doivent pas englober la nouvelle année. Utilisez plutôt 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 (basée sur le 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 / StayDates / DateRange / @end 0..1 Date or YearlessDate Date de fin (basée sur le 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 / StayDates / DateRange / @days_of_week 0..1 string

Jours de la semaine autorisés dans la plage de dates. Si elle 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 valides sont les suivants:

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

N'importe quelle combinaison de caractères est valide.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Conteneur permettant de répertorier les emplacements (pays) des utilisateurs éligibles à la promotion. Si elle est spécifiée, seuls les utilisateurs éligibles dans les pays listés bénéficient 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 listés.

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

Si le type UserCountries n'est pas défini, il est considéré 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 peuvent voir 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. Par ailleurs, les codes de région CLDR ne sont pas acceptés.

Exemples

Message de base

L'exemple suivant illustre 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 si un inventaire excédentaire est proche 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 la propriété <HotelPromotions> pour un établissement avec une ou plusieurs nouvelles promotions. Si 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 différents types de superposition

Dans l'exemple suivant, trois promotions différentes seraient appliquées (base, second, any). Notez que la promotion none ne serait pas appliquée, car les autres promotions proposent 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>


Aucun type de empilement

Dans l'exemple suivant, la promotion none est utilisée, car la combinaison d'autres promotions permet d'obtenir une remise d'un faible montant. 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 illustre 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 période de réservation nécessite de réserver au plus tard à 18h la veille de l'arrivée et à 12h00 ou après le deuxième jour précédant l'arrivée.

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


Dates de réservation Limites Date/Heure

L'exemple suivant illustre un cas d'utilisation de l'élément BookingDates avec les attributs start et end en tant que types DateTime. Cette restriction de date de réservation nécessite que la réservation soit effectuée entre 6h30 le 01/07/2020 et 18h45 le 02/07/2020.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-07-01T06:30:00" end="2020-07-02T18:45:00"/>
      </BookingDates>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


Plages de dates sans année

L'exemple suivant illustre un cas où l'élément CheckInDates contient des DateRanges comportant 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/12, quelle que soit l'année. Les plages de dates sans année qui dépassent la limite de la nouvelle année 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

Dans l'exemple suivant, une remise de 50% est appliquée sur deux nuits pour chacune des quatre nuits réservées pendant la plage de dates de réservation spécifiée. Pour un séjour de dix nuits, une remise de 50 % est appliquée à quatre nuits au total.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
        <DateRange start="2022-01-01" end="2022-05-31"/>
      </BookingDates>
      <Discount>
        <FreeNights stay_nights="4" discount_nights="2" discount_percentage="50" night_selection="cheapest" repeats="true"/>
      </Discount>
    </Promotion>
  </HotelPromotions>
</Promotions>

L'exemple suivant propose une remise de 50% d'une nuit pour toutes les trois nuits passées pendant les plages de dates de séjour spécifiées. Seules les nuits de séjour qui se chevauchent sont prises en compte pour que la remise puisse être appliquée. Pour le séjour suivant avec arrivée le 01/01/2022 et départ le 07/01/2022, les nuits de séjour qualifiées 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 elle est moins bien classé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">
      <Discount percentage="15" rank="25"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="20" rank="50"/>
    </Promotion>
  </HotelPromotions>
</Promotions>

Meilleuresrécompensesquotidiennes

L'exemple suivant réduit un séjour de deux nuits en appliquant une BestDailyDiscount empilée avec une 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. Dans le calcul, la combinaison des meilleures remises quotidiennes qui offre la remise la plus élevée est prise en compte 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ée, la promotion "peut" 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" passe à 5 par nuit, soit 10 au total. Elle peut être combinée avec la combinaison des meilleures remises quotidiennes, car le type d'empilement de "fiesta" est défini sur any. S'il était défini 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.

"Globalement, le prix du séjour bénéficie d'une remise de 20 + 50 + 10 = 80 pour un 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 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 bien été traité 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

Réussite

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

Vous trouverez ci-dessous 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>