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