Les tarifs envoyés via <OTA_HotelRateAmountNotifRQ>
peuvent être modifiés pour tenir compte des adultes et des enfants en plus du nombre de personnes d'origine. Le message ExtraGuestCharges
permet de spécifier le mode de calcul des tarifs pour ces clients supplémentaires, ainsi que les chambres, les plans tarifaires et les dates de séjour auxquels leurs frais doivent s'appliquer.
Exigences concernant la capacité
Les prix calculés à partir du message ExtraGuestCharges
ne sont valides que si toutes les exigences de capacité sont satisfaites. Pour en savoir plus, consultez la section Transaction (Données sur un établissement).
Requêtes
Syntaxe
Le message ExtraGuestCharges
utilise la syntaxe suivante:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges partner="partner_account_name"
id="message_ID"
timestamp="timestamp">
<HotelExtraGuestCharges hotel_id="HotelID" action="[overlay]">
<ExtraGuestCharge>
<RatePlans>
<RatePlan id="PackageID_1"/>
<RatePlan id="PackageID_2"/>
</RatePlans>
<RoomTypes>
<RoomType id="RoomID_1"/>
<RoomType id="RoomID_2"/>
</RoomTypes>
<StayDates>
<DateRange start="YYYY-MM-DD" end="YYYY-MM-DD"
days_of_week="MTWHFSU_or_subset"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="float"/>
<ChildAgeBrackets>
<!-- The following are different ways child charges can be specified.
Use the option that matches your system. -->
<ChildAgeBracket max_age="integer" amount="float"
exclude_from_capacity="[true|false]"/>
<ChildAgeBracket max_age="integer" percentage="float"
exclude_from_capacity="[true|false]"
counts_as_base_occupant="[never|preferred|always]"/>
<ChildAgeBracket max_age="integer" discount_amount="float"
exclude_from_capacity="[true|false]"
counts_as_base_occupant="[never|preferred|always]"/>
</ChildAgeBrackets>
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Éléments et attributs
Le message ExtraGuestCharges
contient les éléments et les attributs suivants:
Élément / @Attribut | Occurrences | Type | Description |
---|---|---|---|
ExtraGuestCharges | 1 | Complex element | Élément racine de ce message. |
ExtraGuestCharges / @partner | 1 | string | Compte du partenaire pour ce message. Cette valeur de chaîne correspond à la valeur Partner key indiquée sur la page
Paramètres du compte dans Hotel Center.
Remarque:Si vous disposez d'un backend qui fournit des flux pour plusieurs comptes, cette valeur doit correspondre à la valeur de l'attribut |
ExtraGuestCharges / @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 - (trait d'union). |
ExtraGuestCharges / @timestamp | 1 | DateTime | Date et heure de création de ce message. |
ExtraGuestCharges / HotelExtraGuestCharges | 0..n | HotelExtraGuestCharges | Conteneur pour les frais d'un seul établissement. |
ExtraGuestCharges / HotelExtraGuestCharges / @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. |
ExtraGuestCharges / HotelExtraGuestCharges / @action | 0..1 | enum | Indique la manière dont la mise à jour est appliquée. Seul overlay est accepté. La superposition est utilisée par défaut. Tous les frais précédents pour cette propriété seront effacés avant l'application de la mise à jour. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge | 0..99 | ExtraGuestCharge | Un seul ensemble de frais pour un établissement. Cela peut contenir des restrictions sur la façon dont les frais peuvent être appliqués et sur le calcul des frais en fonction de l'âge ou de la catégorie de client. Chaque |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets | 1 | AgeBrackets | Conteneur de tranches d'âge permettant de calculer les frais en fonction de l'âge ou de la catégorie de client. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge | 0..1 | AdultCharge | Conteneur des frais pour un adulte supplémentaire. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge / @amount | 0..1 | float | Valeur décimale positive indiquant le montant fixe à facturer pour un adulte supplémentaire. Ces frais sont exprimés dans la même devise que celle spécifiée pour les tarifs par nuit. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets | 0..1 | ChildAgeBrackets | Conteneur pour des frais enfants supplémentaires. Ces tranches d'âge ne peuvent couvrir que la tranche d'âge comprise entre 0 et 17 ans (inclus). |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket | 1..99 | ChildAgeBracket | Frais qui s'appliquent aux enfants d'une tranche d'âge spécifique. Elles doivent être classées de la max_age la plus basse à la max_age la plus élevée. Le montant à débiter peut être spécifié à l'aide de amount , percentage ou discount_amount . Vous ne devez spécifier qu'un seul de ces attributs pour chaque <ChildAgeBracket> .
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @max_age | 1 | integer | Âge maximal pour lequel les frais spécifiés dans <ChildAgeBracket> peuvent s'appliquer. L'âge minimal est de zéro si aucun autre <ChildAgeBracket> n'est spécifié avant celui-ci. Sinon, il est supérieur d'une valeur à l'âge maximal de la tranche précédente. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @exclude_from_capacity | 1 | boolean | Valeur booléenne indiquant si un enfant de cette tranche d'âge doit être comptabilisé dans la capacité totale d'une chambre. Ces capacités peuvent être définies avec Transaction(Property Data). Par exemple, il est possible que les bébés n'ayant pas atteint un certain âge n'aient pas besoin d'être comptabilisés dans la capacité d'un enfant. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @amount | 0..1 | float | Valeur décimale non négative qui spécifie le montant fixe à facturer pour un enfant supplémentaire de cette tranche. Ces frais sont exprimés dans la même devise que celle spécifiée pour les tarifs par nuit. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @percentage | 0..1 | float | Valeur décimale comprise entre 1 et 99 indiquant le pourcentage d'un prix adulte devant être facturé pour un enfant supplémentaire de cette tranche. Ces frais sont exprimés dans la même devise que celle spécifiée pour les tarifs par nuit. Pour en savoir plus sur le calcul du prix adulte, consultez la section |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @discount_amount | 0..1 | float | Valeur décimale positive indiquant un montant de remise fixe sur le prix adulte pour un enfant supplémentaire de cette tranche. Ces frais sont exprimés dans la même devise que celle spécifiée pour le tarif par nuit. En général, les frais pour un enfant de cette tranche d'âge sont calculés en déduisant le montant fixe du "prix unitaire". Pour en savoir plus sur le prix unitaire, consultez la section consacrée à l'attribut |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @counts_as_base_occupant | 0..1 | string | Si l'attribut L'objectif ici est d'obtenir un "prix unitaire" à partir duquel les frais réels peuvent être calculés.
La valeur de cet attribut doit être
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes | 0..1 | RoomTypes | Conteneur pour la liste des types de chambres auxquels les frais s'appliquent.
Les frais sont appliqués à chaque <RoomType> spécifié. Si <RoomTypes> n'est pas spécifié, les frais s'appliquent à toutes les chambres de l'établissement spécifié. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / 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.) |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / 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. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans | 0..1 | RatePlans | Conteneur pour la liste des plans tarifaires auxquels les frais s'appliquent.
Si <RatePlans> n'est pas spécifié, les frais s'appliquent à tous les plans tarifaires. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / 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. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / 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 dans <StatusApplicationControl> dans les messages <OTA_HotelRateAmountNotifRQ> et <OTA_HotelAvailNotifRQ> .
Le nombre maximal de caractères autorisés est de 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates | 0..1 | StayDates | Conteneur pour une ou plusieurs plages de dates qui déterminent le mode d'application des frais. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange | 1..99 | DateRange | Plage de dates indiquant les dates auxquelles la promotion doit être appliquée. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @start | 0..1 | Date | 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. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @end | 0..1 | Date | 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. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / 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. |
Exemples
Frais pour adultes
Les frais pour les adultes supplémentaires ne peuvent être exprimés que sous forme de montants fixes. L'exemple suivant montre un message ExtraGuestCharges
qui spécifie les frais réservés aux adultes:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<StayDates />
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Voici les tarifs correspondants:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
EchoToken="12345678"
TimeStamp="2020-05-19T20:50:37-05:00"
Version="3.0">
<RateAmountMessages HotelCode="ABC">
<RateAmountMessage>
<StatusApplicationControl Start="2020-05-18"
End="2020-05-23"
InvTypeCode="RoomID_1"
RatePlanCode="PackageID_1"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100.00"
CurrencyCode="USD"
NumberOfGuests="1"/>
<BaseByGuestAmt AmountAfterTax="110.00"
CurrencyCode="USD"
NumberOfGuests="2"/>
<BaseByGuestAmt AmountAfterTax="120.00"
CurrencyCode="USD"
NumberOfGuests="3"/>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Lorsqu'un utilisateur recherche quatre adultes sur Google, le taux total est égal à 170 = 120 + 50.
120 provient du tarif <BaseByGuestAmt>
avec NumberOfGuests="3"
et 50 provient du AdultCharge amount="50"
.
Frais enfant
Les frais pour les enfants sont exprimés en tranches d'âge jusqu'à 17 ans et peuvent être exprimés en montants fixes, pourcentages ou remises.
L'exemple suivant montre un message ExtraGuestCharges
spécifiant les frais enfants:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<AgeBrackets>
<ChildAgeBrackets>
<ChildAgeBracket max_age="3" percentage="10"
counts_as_base_occupant="never" />
<ChildAgeBracket max_age="10" percentage="30"
counts_as_base_occupant="preferred"/>
<ChildAgeBracket max_age="17" discount_amount="10"
counts_as_base_occupant="always" />
</ChildAgeBrackets>
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Voici les tarifs correspondants:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
EchoToken="12345678"
TimeStamp="2020-05-19T20:50:37-05:00"
Version="3.0">
<RateAmountMessages HotelCode="ABC">
<RateAmountMessage>
<StatusApplicationControl Start="2020-05-18"
End="2020-05-23"
InvTypeCode="RoomID_1"
RatePlanCode="PackageID_1"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100.00"
CurrencyCode="USD"
NumberOfGuests="1"/>
<BaseByGuestAmt AmountAfterTax="110.00"
CurrencyCode="USD"
NumberOfGuests="2"/>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
```
1. Suppose you want the total price for 2 adults and 1 child of 2 years
of age.
Children aged 0-3 are never included in the rate's occupancy,
so here you should take the double occupancy rate and divide by 2 to
get the unit price. Then, multiply by the percentage rate and sum
with the rate to get the total price.
`unit price ` = 110 / 2 = 55
`total price` = 110 + 55 * 0.1 = 115.5
1. Suppose you want the total price for 1 adult and 2 children, both of 5
years of age.
Children aged 4-10 are preferably included in the rate's
occupancy. you should start by looking for a 3 adult rate since both
children are preferably included in the rate's occupancy. Since
that doesn't exist you should fall back to the 2 adult rate and then,
take this rate and divide by two to get the unit price. Finally,
multiply by the percentage rate and sum with the scaled rate to
get the total price.
`unit price` = 110 / 2 = 55
`total price` = 55 + 55 * 0.3 + 55 * 0.3 = 88
1. Suppose you want the total price for 1 adult and 1 child of 17
years of age.
Children aged 11-17 are always included in the rate's occupancy, so,
in this case, take the double occupancy rate and divide by 2 to get
the unit price. Then, deduct it by the discount amount and sum with
the scaled rate to get the total price.
`unit price` = 110 / 2 = 55
`total price` = 55 + (55 - 10) = 100
Restrictions relatives aux frais
Tous les types de restrictions sont facultatifs et vous pouvez en combiner plusieurs.
L'exemple suivant montre un message ExtraGuestCharges
qui spécifie des restrictions:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
<RoomType id="king" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
<RatePlan id="hot-breakfast" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-14"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Le message ci-dessus indique que les adultes doivent être facturés pour tout produit de type "queen" ou "king" avec l'offre "Wi-Fi gratuit" ou "petit-déjeuner chaud" entre le 1er et le 14 septembre 2020.
Chevauchement de frais
Cette section présente un exemple de message non valide spécifiant différents frais pour les mêmes combinaisons de dates et de produits.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-14"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
<RoomType id="king" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
<RatePlan id="hot-breakfast" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-05"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="20" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Le message ci-dessus n'est pas valide, car la première <ExtraGuestCharge>
spécifie que "queen" et "free-wifi" du 1er au 14 septembre devraient facturer 50 adultes supplémentaires. Le deuxième <ExtraGuestCharge>
spécifie que toute "reine" ou "roi" avec "Wi-Fi gratuit" ou "petit-déjeuner chaud" du 1er au 5 septembre devra facturer 20 adultes supplémentaires.
Les frais "reine" et "Wi-Fi gratuit" se chevauchent du 1er au 5 septembre, et il existe un conflit entre le fait de facturer 20 ou 50 € pour un adulte supplémentaire.
Réponses
Syntaxe
Le message ExtraGuestChargesResponse
utilise la syntaxe suivante:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues will be populated. -->
<Success/>
<Issues>
<Issue code="issue_code" status="issue_type">issue_description</Issue>
</Issues>
</ExtraGuestChargesResponse>
Éléments et attributs
Le message ExtraGuestChargesResponse
comporte les éléments et attributs suivants:
Élément / @Attribut | Occurrences | Type | Description |
---|---|---|---|
ExtraGuestChargesResponse | 1 | Complex element | Élément racine indiquant le succès ou les problèmes liés à un message de requête ExtraGuestCharges reçu. |
ExtraGuestChargesResponse / @timestamp | 1 | DateTime | Date et heure de création de ce message. |
ExtraGuestChargesResponse / @id | 1 | string | Identifiant unique du message ExtraGuestCharges associé. |
ExtraGuestChargesResponse / @partner | 1 | string | Compte du partenaire pour ce message. |
ExtraGuestChargesResponse / Success | 0..1 | Success | Indique que le message ExtraGuestCharges a bien été traité sans avertissement, erreur ni échec.
Chaque message contient soit |
ExtraGuestChargesResponse / Issues | 0..1 | Issues | Conteneur pour un ou plusieurs problèmes rencontrés lors du traitement du message ExtraGuestCharges .
Chaque message contient soit |
ExtraGuestChargesResponse / Issues / Issue | 1..n | Issue | Description d'un avertissement, d'une erreur ou d'un échec rencontré lors du traitement du message ExtraGuestCharges . Pour en savoir plus sur ces problèmes, consultez Messages d'erreur concernant l'état du flux. |
ExtraGuestChargesResponse / Issues / Issue / @code | 1 | integer | Identifiant du problème. |
ExtraGuestChargesResponse / 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 ExtraGuestCharges
correctement traité.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</ExtraGuestChargesResponse>
Problèmes
La réponse suivante est une réponse à un message ExtraGuestCharges
non traité en raison d'erreurs.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Issues>
<Issue code="1001" status="error">Example</Issue>
</Issues>
</ExtraGuestChargesResponse>