Les tarifs envoyés via <OTA_HotelRateAmountNotifRQ>
peuvent être modifiés pour tenir compte des adultes et des enfants en plus du nombre de clients initial. 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 les frais doivent s'appliquer.
Exigences de capacité
Les prix calculés à partir du message ExtraGuestCharges
ne sont valides que si toutes les exigences de capacité sont remplies. 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 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 - (tiret). |
ExtraGuestCharges / @timestamp | 1 | DateTime | Date et heure de création de ce message. |
ExtraGuestCharges / HotelExtraGuestCharges | 0..n | HotelExtraGuestCharges | Conteneur pour les frais d'une seule propriété. |
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'identifiant de l'hôtel est également indiqué dans Hotel Center. |
ExtraGuestCharges / HotelExtraGuestCharges / @action | 0..1 | enum | Indique le mode d'application de la mise à jour. Seule la valeur overlay est acceptée. La valeur par défaut est la superposition. Tous les frais précédemment facturés pour cet établissement sont effacés avant l'application de la mise à jour. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge | 0..99 | ExtraGuestCharge | Un seul ensemble de frais pour une propriété. Cela peut contenir des restrictions sur le mode d'application des frais et sur leur calcul par âge ou par catégorie d'invités. Chaque |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets | 1 | AgeBrackets | Conteneur des tranches d'âge permettant de calculer les frais par âge ou par catégorie d'invités. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge | 0..1 | AdultCharge | Conteneur pour les frais pour un adulte supplémentaire. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge / @amount | 0..1 | float | Valeur décimale positive qui spécifie le montant forfaitaire à 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 les frais enfants supplémentaires. Ces tranches d'âge ne peuvent inclure que la tranche d'âge 0-17 ans inclus. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket | 1..99 | ChildAgeBracket | Frais applicables aux enfants d'une tranche d'âge spécifique. Les valeurs doivent être classées de la valeur max_age la plus basse à la valeur max_age la plus élevée. Le montant à facturer peut être spécifié à l'aide de amount , percentage ou discount_amount . Un seul de ces attributs doit être spécifié pour chaque <ChildAgeBracket> .
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @max_age | 1 | integer | Âge maximal auquel les frais spécifiés dans <ChildAgeBracket> peuvent s'appliquer. L'âge minimal est de zéro si aucune autre valeur <ChildAgeBracket> n'est spécifiée avant celle-ci. Sinon, il est supérieur à 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 pris en compte dans la capacité totale et la capacité d'accueil enfant d'une salle. Ces capacités peuvent être définies avec Transaction(Property Data). Par exemple, les bébés en dessous d'un certain âge n'ont pas forcément besoin d'être comptabilisés dans la capacité 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 dans 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 du prix adulte à facturer pour un enfant supplémentaire dans cette tranche. Ces frais sont exprimés dans la même devise que celle spécifiée pour les tarifs par nuit. Consultez la discussion sous |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @discount_amount | 0..1 | float | Valeur décimale positive qui spécifie un montant de remise fixe sur le prix adulte pour un enfant supplémentaire dans cette tranche. Ces frais sont exprimés dans la même devise que celle spécifiée pour les tarifs par nuit. En général, les frais facturés pour un enfant compris dans cette tranche sont calculés en déduisant le montant forfaitaire du "prix unitaire". Le prix unitaire est expliqué plus en détail dans la section sur l'attribut |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @counts_as_base_occupant | 0..1 | string | Si l'attribut L'objectif 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 des 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 le type de chambre. Un type de chambre est défini dans un élément <RoomData> d'un message Transaction (Données sur un établissement) et est référencé à l'aide de sa valeur <RoomID> . (Sa valeur <RoomID> est également référencée par l'attribut InvTypeCode dans les messages OTA_HotelRateAmountNotifRC.) |
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 des 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 formules, de tarifs et de disponibilités, comme défini dans les messages Transaction (Données sur un établissement), OTA_HotelRateAmountNotifRC et OTA_HotelAvailNotifRC, et tel qu'identifié par le paramètre 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 de <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 déterminant le mode d'application des frais. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange | 1..99 | DateRange | Plage de dates indiquant les dates d'application de la promotion. |
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 en réalité illimitée par rapport à la 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 en réalité 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 aucune valeur n'est 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. Caractères valides:
Toute combinaison de caractères est valide. |
Exemples
Frais pour adultes
Les frais facturés 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 des frais pour 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 tarif total est de 170 = 120 + 50.
120 vient du tarif <BaseByGuestAmt>
avec NumberOfGuests="3"
, et 50 vient du tarif AdultCharge amount="50"
.
Frais enfant
Les frais pour les enfants sont indiqués par tranche d'âge jusqu'à 17 ans, et peuvent être exprimés sous forme de montants fixes, de pourcentages ou de remises.
L'exemple suivant montre un message ExtraGuestCharges
spécifiant des 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 utiliser n'importe quelle combinaison de ceux-ci.
L'exemple suivant montre un message ExtraGuestCharges
spécifiant 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 tout produit associé au type de chambre "queen" ou "king" avec un forfait "free-wifi" ou "hot-friend" doit être facturé aux adultes pour la période du 1er septembre 2020 au 14 septembre 2020.
Frais qui se chevauchent
Cette section présente un exemple de message non valide spécifiant des frais différents 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 le premier <ExtraGuestCharge>
spécifie que les mots "reine" et "Wi-Fi gratuit" du 1er au 14 septembre doivent facturer 50 ans pour les adultes supplémentaires. Le second <ExtraGuestCharge>
spécifie que les mots "reine" ou "roi" avec l'une des valeurs "free-wifi" ou "hot- indiquent" du 1er au 5 septembre doivent facturer 20 adultes supplémentaires.
Les tarifs pour "reine" et "Wi-Fi gratuit" du 1er au 5 septembre se chevauchent, et il existe un conflit entre le tarif de 20 et 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 les 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 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 survenu 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
Envoi terminé
Voici 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
Voici 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>