Présentation
Cette API vous permet de spécifier les remises possibles. Parmi les promotions spécifiées, Google applique la promotion ou l'ensemble de promotions éligibles qui conduit au prix le plus bas. Si vous recherchez une API qui prend en charge les ajustements de taux arbitraires pouvant augmenter ou diminuer le prix lorsque les conditions sont remplies, envisagez d'utiliser notre API Rate Modifications. Notez que si les deux API sont présentes, les modifications du tarif sont appliquées avant les promotions.
Requêtes
Syntaxe
Le message Promotions utilise la syntaxe suivante :
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
id="message_ID"
timestamp="timestamp">
<HotelPromotions hotel_id="HotelID" action="[overlay]">
<Promotion id="PromotionID" action="[delete]">
<BookingDates>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
</BookingDates>
<BookingWindow min="integer_or_duration" max="integer_or_duration"/>
<Ceiling amount_per_night="float"/>
<Floor amount_per_night="float"/>
<CheckinDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckoutDates>
<!-- Specify only one of percentage, percentage_of_base, fixed_amount,
fixed_amount_per_night, fixed_price, or fixed_price_per_night;
applied_nights is only used with percentage, fixed_amount_per_night,
and fixed_price_per_night. -->
<Discount percentage="float" percentage_of_base="float"
fixed_amount="float" fixed_amount_per_night="float"
fixed_price="float" fixed_price_per_night="float"
applied_nights="integer_1_to_99" rank="integer_1_to_99">
<!-- FreeNights may not be used in conjunction with attributes on Discount -->
<FreeNights stay_nights="integer" discount_nights="integer"
discount_percentage="float" night_selection="[cheapest|last]"
repeats="boolean"/>
</Discount>
<!-- Exactly one of Discount or BestDailyDiscount must be specified.
Specify only one of percentage, fixed_amount, or fixed_price. -->
<BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
<Devices>
<Device type="[desktop|tablet|mobile]"/>
</Devices>
<InventoryCount min="integer" max="integer"/>
<LengthOfStay min="integer" max="integer"/>
<MembershipRateRule id="RateRuleID"/>
<MinimumAmount before_discount="integer"/>
<Occupancy min="integer" max="integer"/>
<RatePlans>
<RatePlan id="PackageID_1"/>
<RatePlan id="PackageID_2"/>
</RatePlans>
<RoomTypes>
<RoomType id="RoomID_1"/>
<RoomType id="RoomID_2"/>
</RoomTypes>
<Stacking type="[any|base|none|second]"/>
<StayDates application="[all|any|overlap]">
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</StayDates>
<UserCountries type="[include|exclude]">
<Country code="country_code"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
Éléments et attributs
Le message Promotions contient les éléments et les attributs suivants :
| Élément / @Attribut | Occurrences | Type | Description |
|---|---|---|---|
| Promotions | 1 | Complex element | Élément racine d'un message Promotions. |
| Promotions / @partner | 1 | string | Compte partenaire pour ce message. Cette valeur de chaîne correspond à la valeur "Partner key" (Clé partenaire) indiquée sur la page
Paramètres du compte dans Hotel Center.
Si vous avez un backend qui fournit des flux pour plusieurs comptes, cette valeur doit correspondre à la valeur de l'attribut |
| Promotions / @id | 1 | string | Identifiant unique pour ce message de demande. Cette valeur est renvoyée dans le message de réponse. Les caractères suivants sont autorisés : a-z, A-Z, 0-9, _ (trait de soulignement) et - (tiret). |
| Promotions / @timestamp | 1 | DateTime | Date et heure de création de ce message. |
| Promotions / HotelPromotions | 0..n | HotelPromotions | Promotions pour un établissement. Chaque promotion s'applique à un seul établissement. Sauf utilisation de |
| Promotions / HotelPromotions / @hotel_id | 1 | string | Identifiant unique de l'établissement. Cette valeur doit correspondre à l'identifiant de l'hôtel spécifié à l'aide de
<id> dans l'élément <listing> du flux Hotel List Feed. L'ID de l'hôtel est également indiqué dans Hotel Center. |
| Promotions / HotelPromotions / @action | 0..1 | enum | Si cet attribut est spécifié, la valeur doit être S'il n'est pas spécifié, chaque promotion spécifiée dans le message actuel est :
|
| Promotions / HotelPromotions / Promotion | 0..99 | Promotion | Promotion unique pour un établissement. Notez que si Si vous devez utiliser plus de 99 promotions, contactez votre responsable de compte technique (TAM). |
| Promotions / HotelPromotions / Promotion / @id | 1 | string | Identifiant unique de la promotion. Le nombre maximal de caractères autorisés est de 40. Les caractères suivants sont autorisés : a-z, A-Z, 0-9, _ (trait de soulignement), - (tiret) et . (point). |
| Promotions /HotelPromotions / Promotion / @action | 0..1 | enum | Si cet attribut est spécifié, la valeur doit être Si |
| Promotions / HotelPromotions / Promotion / BookingDates | 0..1 | BookingDates | Conteneur pour une ou plusieurs plages qui définissent le moment auquel la réservation doit être effectuée pour que la promotion soit appliquée. |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange | 1..99 | DateRange | Plage indiquant le moment auquel la réservation doit être effectuée pour que la promotion soit appliquée. |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start | 0..1 | Date ou DateTime | Date ou date et heure de début (en fonction du fuseau horaire de l'établissement), incluses, de la plage.
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end | 0..1 | Date ou DateTime | Date ou date et heure de fin (en fonction du fuseau horaire de l'établissement), incluses, de la plage.
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week | 0..1 | string | Jours de la semaine autorisés dans la plage de dates. Si cet attribut n'est pas spécifié, tous les jours sont autorisés dans la plage de dates. Chaque caractère de la chaîne spécifie un jour. Par exemple, "MTWHF" indique que les jours de la semaine sont autorisés dans la plage de dates. Caractères valides :
Toute combinaison de caractères est valide. |
| Promotions / HotelPromotions / Promotion / BookingWindow | 0..1 | BookingWindow | Spécifie la période pendant laquelle la réservation doit être effectuée par rapport à la date d'arrivée (en fonction du fuseau horaire de l'établissement). Par exemple, la période de réservation peut être définie sur au moins 7 jours, mais pas plus de 180 jours avant l'arrivée. |
| Promotions / HotelPromotions / Promotion / BookingWindow / @min | 0..1 | integer or duration | Durée minimale avant l'arrivée où la réservation doit être effectuée pour que la promotion soit appliquée. Si cet attribut n'est pas spécifié ou si sa valeur est 0, il n'y a pas de minimum.
Les types de valeurs reconnus sont les suivants :
|
| Promotions / HotelPromotions / Promotion / BookingWindow / @max | 0..1 | integer or duration | Nombre maximal de jours avant l'arrivée où la réservation doit être effectuée pour que la promotion soit appliquée. Si cet attribut n'est pas spécifié ou si sa valeur est 0, il n'y a pas de maximum.
Les types de valeurs reconnus sont les suivants :
|
| Promotions / HotelPromotions / Promotion / Ceiling | 0..1 | Ceiling |
Définit les restrictions liées à la valeur maximale à laquelle un tarif peut être défini après l'application de promotions. Les promotions doivent toujours spécifier un Si le cumul est configuré, plusieurs promotions avec Exemple : Tarification d'un séjour d'une nuit où
Voici l'ordre de calcul :
Le fait que 60 % soit un plafond global plus strict n'a pas d'importance, car il n'est valable que pour sa propre promotion. Il ne peut pas y avoir de plafond unique qui s'applique à l'ensemble de la pile de promotions. |
| Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float |
Montant maximal auquel un tarif par nuit peut être défini après l'application de la remise. Si un élément
|
| Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor |
Définit les restrictions liées à la valeur minimale à laquelle un tarif peut être défini après l'application de promotions. Les promotions doivent toujours spécifier un La logique Si le cumul est configuré, plusieurs promotions avec Exemple : Tarification d'un séjour d'une nuit où
Voici l'ordre de calcul :
Le fait que 90 € soit un plancher global plus strict n'a aucune importance, car il n'est valable que pour sa propre promotion. Il ne peut pas exister de plancher unique qui s'applique à l'ensemble de la pile de promotions. |
| Promotions / HotelPromotions / Promotion / Floor / @amount_per_night | 1 | float |
Montant minimal auquel un tarif par nuit peut être défini après l'application de la remise. Si un élément
|
| 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é.
|
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start | 0..1 | Date or YearlessDate | Date de début (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être antérieure ou identique à la date end. Si start n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de début. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end | 0..1 | Date or YearlessDate | Date de fin (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être identique ou postérieure à la date start. Si end n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de fin. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week | 0..1 | string | Jours de la semaine autorisés dans la plage de dates. Si cet attribut n'est pas spécifié, tous les jours sont autorisés dans la plage de dates. Chaque caractère de la chaîne spécifie un jour. Par exemple, "MTWHF" indique que les jours de la semaine sont autorisés dans la plage de dates. Caractères valides :
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é.
|
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start | 0..1 | Date or YearlessDate | Date de début (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être antérieure ou identique à la date end. Si start n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de début. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end | 0..1 | Date or YearlessDate | Date de fin (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être identique ou postérieure à la date start. Si end n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de fin. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week | 0..1 | string | Jours de la semaine autorisés dans la plage de dates. Si cet attribut n'est pas spécifié, tous les jours sont autorisés dans la plage de dates. Chaque caractère de la chaîne spécifie un jour. Par exemple, "MTWHF" indique que les jours de la semaine sont autorisés dans la plage de dates. Caractères valides :
Toute combinaison de caractères est valide. |
| Promotions / HotelPromotions / Promotion / Devices | 0..1 | Devices | Conteneur permettant de répertorier les appareils des utilisateurs éligibles à la promotion. Si cet élément est spécifié, seuls les utilisateurs éligibles sur les appareils répertoriés bénéficient d'un tarif réduit. S'il n'est pas spécifié, le tarif réduit est proposé aux utilisateurs éligibles sur n'importe quel appareil. |
| Promotions / HotelPromotions / Promotion / Devices / Device | 1..3 | Device | Définit un type d'appareil utilisateur éligible à la promotion. |
| Promotions / HotelPromotions / Promotion / Devices / Device / @type | 1 | enum | Type d'appareil. La valeur doit être desktop, tablet ou mobile. |
| Promotions / HotelPromotions / Promotion / Discount | 1 | Discount | Vous devez spécifier Indique la remise à appliquer pour cette promotion. |
| Promotions / HotelPromotions / Promotion / Discount / @percentage | 0..1 | float | Une seule des valeurs Valeur décimale comprise entre 0 et 100 indiquant le pourcentage de remise.
Elle est appliquée à Exemples :
|
| Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base | 0..1 | float | Une seule des valeurs Valeur décimale comprise entre 0 et 100 indiquant le pourcentage de remise de base. Semblable à Contrairement à Exemple :
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount | 0..1 | float | Une seule des valeurs Montant fixe à soustraire de la somme des tarifs par nuit de Exemples :
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night | 0..1 | float | Une seule des valeurs Remise fixe appliquée à chacun des tarifs par nuit Exemples :
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price | 0..1 | float | Une seule des valeurs Si des tarifs par nuit Si Exemples :
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night | 0..1 | float | Une seule des valeurs Si des tarifs par nuit Si Si Exemples :
|
| Promotions / HotelPromotions / Promotion / Discount / @applied_nights | 0..1 | integer | Cet attribut ne doit être utilisé qu'avec Nombre de nuits auxquelles la remise est appliquée, en commençant par le tarif le plus bas. Il doit s'agir d'un entier compris entre 1 et 99. Si cet attribut n'est pas spécifié, la remise est appliquée à toutes les nuits. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights | 0..1 | FreeNights | Spécifie une remise pour certaines nuits d'un séjour lorsque la durée de séjour minimale est respectée. Les attributs de l'élément parent Discount ne sont pas autorisés si cet élément est utilisé. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights | 1 | integer | Nombre de nuits requis pour que la remise soit appliquée. Chaque remise s'applique à un segment distinct de nuits de séjour. Par exemple, pour un séjour de 10 nuits où |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights | 1 | integer | Nombre de nuits à prix réduit dans chaque segment de nuits de séjour. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage | 1 | float | Remise appliquée aux nuits à prix réduit. Si cette valeur est définie sur 50, chaque nuit sélectionnée bénéficie d'une remise de 50 %. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection | 1 | string | La valeur doit être définie sur cheapest ou last. Si la valeur est last, les nuits à la fin du segment de séjour sont remisées. Si la valeur est cheapest, les nuits les moins chères du segment de nuits de séjour sont remisées. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats | 1 | boolean | Indique si la remise peut être appliquée à plusieurs segments de nuitées. Si la valeur est Par exemple, si |
| Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | Attribue un rang à cette promotion et l'inclut dans la sélection par classement, où seule la promotion ayant le rang le plus bas est sélectionnée pour être appliquée. Les valeurs doivent être comprises entre 1 et 99 inclus. Si plusieurs promotions partagent le même rang, l'une d'elles est sélectionnée et appliquée de manière arbitraire. |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount | 1 | Discount | Vous devez spécifier Spécifie une remise quotidienne pouvant être appliquée à une nuit de séjour. Cela diffère de Chaque propriété peut disposer d'un seul groupe de promotions considérées comme les "meilleures promotions du jour". Cela signifie que pour chaque nuit de séjour, la meilleure promotion quotidienne éligible offrant la plus grande remise pour cette nuit est sélectionnée et peut être appliquée.
|
| Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage | 0..1 | float | Vous ne devez indiquer qu'une seule des options Valeur décimale comprise entre 0 et 100 indiquant le pourcentage de remise.
Elle est appliquée à Exemples :
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount | 0..1 | float | Vous ne devez indiquer qu'une seule des options Montant fixe à soustraire d'un seul tarif par nuit de Exemples :
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price | 0..1 | float | Vous ne devez indiquer qu'une seule des options Si des tarifs par nuit Exemples :
|
| Promotions / HotelPromotions / Promotion / InventoryCount | 0..1 | InventoryCount | Définit les restrictions liées au nombre de chambres qui doivent être disponibles pour que cette promotion soit appliquée. La remise n'est appliquée que pour les nuits qui respectent la contrainte. Non autorisé avec la remise fixed_amount. Notez que le nombre de chambres disponibles est spécifié avec OTA_HotelInvCountNotifRQ (InvCount) ou OTA_HotelAvailNotifRQ (BookingLimit). |
| Promotions / HotelPromotions / Promotion / InventoryCount / @min | 0..1 | integer | Nombre minimal de chambres qui doivent être disponibles pour que la promotion soit appliquée au tarif par nuit. Si cet attribut n'est pas spécifié, il n'y a pas de minimum. |
| Promotions / HotelPromotions / Promotion / InventoryCount / @max | 0..1 | integer | Nombre maximal de chambres qui doivent être disponibles pour que la promotion soit appliquée au tarif par nuit. Si cet attribut n'est pas spécifié, il n'y a pas de maximum. |
| Promotions / HotelPromotions / Promotion / LengthOfStay | 0..1 | LengthOfStay | Définit la plage de durée de séjour sur laquelle cette promotion peut être appliquée. La promotion n'est pas appliquée lorsque la durée du séjour est en dehors des limites minimale et maximale. |
| Promotions / HotelPromotions / Promotion / LengthOfStay / @min | 0..1 | integer | Nombre minimal de nuits autorisées dans le séjour pour que la promotion soit appliquée. Si cet attribut n'est pas spécifié, il n'y a pas de minimum. |
| Promotions / HotelPromotions / Promotion / LengthOfStay / @max | 0..1 | integer | Nombre maximal de nuits autorisées dans le séjour pour que la promotion soit appliquée. Si cet attribut n'est pas spécifié, il n'y a pas de maximum. |
| Promotions / HotelPromotions / Promotion / MembershipRateRule | 0..1 | MembershipRateRule |
Conteneur pour une règle de tarif pour les membres qui déclenche un traitement spécifique dans l'UI pour la remise associée. Cet élément ne doit pas être spécifié, sauf si |
| Promotions / HotelPromotions / Promotion / MembershipRateRule / @id | 1 | string |
ID de la règle tarifaire associée à un programme de fidélité. |
| Promotions / HotelPromotions / Promotion / MinimumAmount | 0..1 | MinimumAmount | Spécifie la somme minimale des prix des chambres à la journée (à l'aide de la valeur la plus élevée de AmountBeforeTax ou AmountAfterTax) à dépasser pour que la promotion soit appliquée. |
| Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount | 1 | integer | Valeur à dépasser pour que la promotion soit appliquée. |
| Promotions / HotelPromotions / Promotion / Occupancy | 0..1 | Occupancy | Définit les restrictions liées aux taux d'occupation pour lesquels cette promotion est appliquée. La promotion n'est pas appliquée lorsque l'occupation est en dehors des limites minimale et maximale.
Les promotions s'appliquent au tarif de l'itinéraire. Il n'est pas possible de définir une remise maximale par occupant. |
| Promotions / HotelPromotions / Promotion / Occupancy / @min | 0..1 | integer | L'occupation spécifiée par l'utilisateur doit être au moins égale à cette valeur pour que la remise soit appliquée. |
| Promotions / HotelPromotions / Promotion / Occupancy / @max | 0..1 | integer | L'occupation spécifiée par l'utilisateur doit être inférieure ou égale à cette valeur pour que la remise soit appliquée. |
| Promotions / HotelPromotions / Promotion / RatePlans | 0..1 | RatePlans | Conteneur pour la liste des plans tarifaires auxquels la promotion s'applique.
Si <RatePlans> n'est pas spécifié, la promotion s'applique à tous les plans tarifaires. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan | 1..n | RatePlan | Spécifie un plan tarifaire. Un plan tarifaire est défini par la combinaison d'une formule, de tarifs et d'une disponibilité, telle que définie dans les messages Transaction (Données sur un établissement), OTA_HotelRateAmountNotifRQ et OTA_HotelAvailNotifRQ, et telle qu'identifiée par la valeur PackageID. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id | 1 | string | Identifiant unique du plan tarifaire. Cette valeur correspond à la valeur PackageID dans l'élément <PackageData> d'un message Transaction (Données sur un établissement), ainsi que dans l'attribut RatePlanCode de l'élément <StatusApplicationControl> dans les messages <OTA_HotelRateAmountNotifRQ> et <OTA_HotelAvailNotifRQ>.
Le nombre maximal de caractères autorisés est de 50. |
| Promotions / HotelPromotions / Promotion / RoomTypes | 0..1 | RoomTypes | Conteneur pour la liste des types de chambres auxquels la promotion s'applique.
La promotion est appliquée à chaque <RoomType> spécifié. Si <RoomTypes> n'est pas spécifié, la promotion s'applique à toutes les chambres. |
| Promotions / HotelPromotions / Promotion / RoomTypes / RoomType | 1..n | RoomType | Spécifie un type de chambre. Un type de chambre est défini dans un élément <RoomData> d'un message Transaction (Données sur un établissement) et est référencé à l'aide de sa valeur <RoomID>. (Sa valeur <RoomID> est également référencée par l'attribut InvTypeCode dans les messages OTA_HotelRateAmountNotifRQ.) |
| Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id | 1 | string | Identifiant unique de l'inventaire (type de chambre). Cette valeur correspond à <RoomID> dans un message Transaction (Données sur un établissement).
Le nombre maximal de caractères autorisés est de 50. |
| Promotions / HotelPromotions / Promotion / Stacking | 0..1 | Stacking | Indique comment combiner les promotions. S'il n'est pas spécifié, le "type" est considéré comme base. |
| Promotions / HotelPromotions / Promotion / Stacking / @type | 1 | enum | Selon ce paramètre, plusieurs promotions peuvent être appliquées à un même tarif :
Parmi les combinaisons autorisées, l'ensemble de promotions qui offre la plus grande remise est appliqué au tarif. |
| Promotions / HotelPromotions / Promotion / StayDates | 0..1 | StayDates | Conteneur pour une ou plusieurs plages de dates qui déterminent le mode d'application de la promotion, par exemple pour prendre en compte les remises saisonnières. |
| Promotions / HotelPromotions / Promotion / StayDates / @application | 1 | enum | Décrit le mode d'application de la promotion. Les valeurs valides sont les suivantes :
Cet attribut doit toujours être spécifié.
|
| 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 vous souhaitez définir la plage |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start | 0..1 | Date or YearlessDate | Date de début (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être antérieure ou identique à la date end. Si start n'est pas spécifié, la plage de dates est en fait illimitée en ce qui concerne la date de début.
Vous devez spécifier la valeur |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end | 0..1 | Date or YearlessDate | Date de fin (en fonction du fuseau horaire de l'établissement), incluse, de la plage de dates. Cette date doit être identique ou postérieure à la date start. Si end n'est pas spécifié, la plage de dates est en fait illimitée à partir de la date start.
Vous devez spécifier la valeur |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week | 0..1 | string | Jours de la semaine autorisés dans la plage de dates. Si cet attribut n'est pas spécifié, tous les jours sont autorisés dans la plage de dates. Chaque caractère de la chaîne spécifie un jour. Par exemple, "MTWHF" indique que les jours de la semaine sont autorisés dans la plage de dates. Caractères valides :
Toute combinaison de caractères est valide. |
| Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | Conteneur permettant de répertorier les positions géographiques (pays) des utilisateurs éligibles à la promotion. Si cet élément est spécifié, seuls les utilisateurs éligibles dans les pays répertoriés bénéficient d'un tarif réduit. S'il n'est pas spécifié, le tarif réduit est proposé aux utilisateurs éligibles de n'importe quel pays. |
| Promotions / HotelPromotions / Promotion / UserCountries / @type | 0..1 | enum | Type de spécification UserCountries.
Les valeurs valides sont Si UserCountries Si UserCountries Si UserCountries |
| Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | Définit un pays dans lequel les utilisateurs sont éligibles à la promotion. |
| Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | Code pays CLDR, tel que DE ou FR. Notez que, pour certains pays, le code pays CLDR est différent du code pays ISO à deux lettres. De plus, les codes de région CLDR ne sont pas acceptés. |
Exemples
Vous pouvez indiquer jusqu'à 500 promotions par établissement. Consultez l'exemple "Supprimer une promotion" pour supprimer des promotions d'un établissement.
Message de base
L'exemple ci-dessous représente un message Promotions de base :
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<BookingWindow min="7" max="330"/>
<CheckinDates>
<DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
</CheckoutDates>
<Devices>
<Device type="mobile"/>
<Device type="tablet"/>
</Devices>
<Discount percentage="20" applied_nights="2"/>
<LengthOfStay min="2" max="14"/>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<Stacking type="base"/>
<UserCountries>
<Country code="US"/>
<Country code="GB"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
État de l'inventaire
L'exemple suivant montre comment créer une remise si un excédent d'inventaire approche de la date d'arrivée :
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow max="7"/>
<Discount percentage="10"/>
<InventoryCount min="3"/>
</Promotion>
</HotelPromotions>
</Promotions>
Supprimer une promotion
L'exemple suivant montre comment supprimer une promotion pour un établissement :
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1" action="delete"/>
</HotelPromotions>
</Promotions>
Supprimer toutes les promotions
L'exemple suivant montre comment supprimer toutes les promotions pour un établissement :
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>
Superposer toutes les promotions
L'exemple suivant montre comment superposer l'élément <HotelPromotions> pour un établissement avec une ou plusieurs nouvelles promotions. Lorsque action="overlay", toutes les promotions stockées sont supprimées avant le stockage des promotions spécifiées dans le message actuel :
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<Discount percentage="10"/>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<Stacking type="base"/>
</Promotion>
</HotelPromotions>
</Promotions>
3 types d'empilement différents
L'exemple suivant montre un cas où trois promotions différentes seraient appliquées (base, second, any). Notez que la promotion none ne serait pas appliquée, car les autres promotions offrent une meilleure remise. Si le prix d'origine était de 100 $, le prix réduit serait de 72,90 $.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="10"/>
<Stacking type="base"/>
</Promotion>
<Promotion id="2">
<Discount percentage="10"/>
<Stacking type="second"/>
</Promotion>
<Promotion id="3">
<Discount percentage="10"/>
<Stacking type="any"/>
</Promotion>
<Promotion id="4">
<Discount percentage="25"/>
<Stacking type="none"/>
</Promotion>
</HotelPromotions>
</Promotions>
Type d'empilement "Aucun"
L'exemple suivant montre un cas où la promotion none est utilisée, car la combinaison d'autres promotions offre une remise moins importante. Si le prix initial était de 100 $, le prix réduit serait de 75 $.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="10"/>
<Stacking type="base"/>
</Promotion>
<Promotion id="2">
<Discount percentage="10"/>
<Stacking type="any"/>
</Promotion>
<Promotion id="3">
<Discount percentage="25"/>
<Stacking type="none"/>
</Promotion>
</HotelPromotions>
</Promotions>
Limites de la durée de la période de réservation
L'exemple suivant montre un cas où l'élément BookingWindow est utilisé avec ses limites de début et de fin définies comme un type de durée ISO 8601. Cette restriction de période de réservation exige que la réservation soit effectuée au plus tard à 18h00 la veille de l'arrivée et au plus tôt à 12h00 le deuxième jour avant l'arrivée.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow min="P1DT6H" max="P2DT12H"/>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Limites de date et d'heure de réservation
L'exemple suivant montre un cas où l'élément BookingDates est utilisé avec les attributs start et end en tant que types DateTime. Cette restriction de date de réservation exige que la réservation ait lieu entre 6h30 le 1er juillet 2020 et 18h45 le 2 juillet 2020.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01T06:30:00" end="2020-07-02T18:45:00"/>
</BookingDates>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Plages de dates sans année
L'exemple suivant montre un cas où l'élément CheckInDates contient des DateRanges dont les champs start et end ne comportent pas d'année. Dans cet exemple, la promotion s'applique aux dates d'arrivée comprises entre le 29/12 et le 2/1, quelle que soit l'année. Les plages de dates sans année qui franchissent la limite de la nouvelle année ne sont pas valides. La plage de dates est donc exprimée sous la forme de deux plages de dates adjacentes.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<CheckInDates>
<DateRange start="12-29" end="12-31"/>
<DateRange start="01-01" end="01-02"/>
</CheckInDates>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Remise FreeNights
L'exemple suivant applique une remise de 50 % sur deux nuits pour chaque tranche de quatre nuits passées pendant la période de réservation spécifiée. Pour un séjour de dix nuits, quatre nuits au total bénéficieraient d'une remise de 50 %.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2022-01-01" end="2022-05-31"/>
</BookingDates>
<Discount>
<FreeNights stay_nights="4" discount_nights="2" discount_percentage="50" night_selection="cheapest" repeats="true"/>
</Discount>
</Promotion>
</HotelPromotions>
</Promotions>
L'exemple suivant accorde une remise de 50 % sur une nuit pour chaque tranche de trois nuits passées dans l'hôtel, pour les plages de dates de séjour spécifiées. Seules les nuits de séjour qui se chevauchent sont prises en compte pour bénéficier de la remise. Pour l'itinéraire suivant avec une arrivée le 01/01/2022 et un départ le 07/01/2022, les nuits éligibles et les remises sont appliquées comme suit.
- 2022-01-01 (séjour)
- 2022-01-02 (séjour)
- 2022-01-03
- 2022-01-04 (remise)
- 2022-01-05 (séjour)
- 2022-01-06 (séjour)
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<StayDates application="overlap">
<DateRange start="2022-01-01" end="2022-01-02"/>
<DateRange start="2022-01-04" end="2022-01-06"/>
</StayDates>
<Discount>
<FreeNights stay_nights="3" discount_nights="1" discount_percentage="50" night_selection="last" repeats="true"/>
</Discount>
</Promotion>
</HotelPromotions>
</Promotions>
Sélection classée
L'exemple suivant propose deux remises : une de 20 % et une autre de 15 %. Lors de l'évaluation, seule la remise de 15 % est appliquée, car elle a un rang inférieur.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="15" rank="25"/>
</Promotion>
<Promotion id="2">
<Discount percentage="20" rank="50"/>
</Promotion>
</HotelPromotions>
</Promotions>
BestDailyDiscount
L'exemple suivant applique une remise de BestDailyDiscount cumulée avec un Discount pour un séjour de deux nuits.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="HotelID" action="overlay">
<Promotion id="general">
<BestDailyDiscount fixed_amount="20"/>
</Promotion>
<Promotion id="may">
<BestDailyDiscount fixed_amount="50"/>
<StayDates application="overlap">
<DateRange start="2023-05-01" end="2023-05-31"/>
</StayDates>
</Promotion>
<Promotion id="fiesta">
<Discount fixed_amount_per_night="5"/>
<Stacking type="any"/>
</Promotion>
</HotelPromotions>
</Promotions>
Prenons l'exemple d'un séjour de deux nuits, du 30 avril 2023 au 2 mai 2023. Pour le calcul, la combinaison des meilleures remises quotidiennes permettant d'obtenir la remise la plus importante est d'abord identifiée.
Pour la première nuit, la promotion "générale" est le seul montant éligible avec une remise fixe de 20.
Pour la deuxième nuit, la promotion "mai" offre une remise plus importante que la remise "générale". Ainsi, lorsque "peut" est sélectionné, le montant de la remise fixe est de 50.
Ensuite, pour le séjour, la promotion "fiesta" accorde une remise de 5 € par nuit, soit 10 € au total. Elle peut être cumulée avec la combinaison des meilleures remises quotidiennes, car le type de cumul de "fiesta" est défini sur any. Si elle est définie sur base, seule la combinaison des meilleures remises quotidiennes ou la remise "fiesta" est appliquée. Pour en savoir plus, consultez la description de Stacking.
`Au total, le prix du séjour bénéficie d'une remise fixe de 20 + 50 + 10 = 80.
Réponses
Syntaxe
Le message PromotionsResponse utilise la syntaxe suivante :
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues are populated. -->
<Success/>
<Issues>
<Issue code="issue_code"
status="issue_type">
issue_description
</Issue>
</Issues>
</PromotionsResponse>
Éléments et attributs
Le message PromotionsResponse inclut les éléments et les attributs suivants :
| Élément / @Attribut | Occurrences | Type | Description |
|---|---|---|---|
| PromotionsResponse | 1 | Complex element | Élément racine indiquant le succès ou les problèmes liés à un message de requête Promotions reçu. |
| PromotionsResponse / @timestamp | 1 | DateTime | Date et heure de création de ce message. |
| PromotionsResponse / @id | 1 | string | Identifiant unique du message Promotions associé. |
| PromotionsResponse / @partner | 1 | string | Compte partenaire pour ce message. |
| PromotionsResponse / Success | 0..1 | Success | Indique que le message Promotions a été traité avec succès, sans avertissement, erreur ni échec.
Chaque message contient soit |
| PromotionsResponse / Issues | 0..1 | Issues | Conteneur pour un ou plusieurs problèmes rencontrés lors du traitement du message Promotions.
Chaque message contient soit |
| 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 |
Exemples
Opération réussie
Voici une réponse à un message Promotions correctement traité :
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</PromotionsResponse>
Problèmes
Voici une réponse à un message Promotions non traité en raison d'erreurs :
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Issues>
<Issue code="1001" status="error">Example</Issue>
</Issues>
</PromotionsResponse>