Las tarifas que se envían a través de <OTA_HotelRateAmountNotifRQ>
se pueden modificar para incluir adultos y niños, además de la cantidad original de huéspedes de la tarifa. El mensaje ExtraGuestCharges
permite especificar cómo se deben calcular las tarifas para estos huéspedes adicionales y para qué habitaciones, planes de tarifas y fechas de estadía se deben aplicar los cargos.
Requisitos de capacidad
Los precios calculados a partir del mensaje ExtraGuestCharges
solo son válidos si se cumplen todos los requisitos de capacidad. Consulta Transacción (datos de propiedades) para obtener más información.
Solicitudes
Sintaxis
El mensaje ExtraGuestCharges
usa la siguiente sintaxis:
<?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>
Elementos y atributos
El mensaje ExtraGuestCharges
tiene los siguientes elementos y atributos:
Elemento o @Attribute | Casos | Tipo | Descripción |
---|---|---|---|
ExtraGuestCharges | 1 | Complex element | Es el elemento raíz de este mensaje. |
ExtraGuestCharges / @partner | 1 | string | La cuenta de socio de este mensaje. Este valor de cadena es el valor de Partner key que aparece en la
página Configuración de la cuenta de Hotel Center.
Nota: Si tienes un backend que proporciona feeds para varias cuentas, este valor debe coincidir con el valor del atributo |
ExtraGuestCharges / @id | 1 | string | Es un identificador único para este mensaje de solicitud. Este valor se muestra en el mensaje de respuesta. Los caracteres permitidos son a-z , A-Z , 0-9 , _ (guion bajo) y - (guion). |
ExtraGuestCharges / @timestamp | 1 | DateTime | La fecha y hora de creación de este mensaje. |
ExtraGuestCharges / HotelExtraGuestCharges | 0..n | HotelExtraGuestCharges | Es un contenedor para los cargos de una sola propiedad. |
ExtraGuestCharges / HotelExtraGuestCharges / @hotel_id | 1 | string | Es el identificador único de la propiedad. Este valor debe coincidir con el ID de hotel especificado con
<id> en el elemento <listing> del feed de lista de hoteles. El ID del hotel también se muestra en Hotel Center. |
ExtraGuestCharges / HotelExtraGuestCharges / @action | 0..1 | enum | Especifica cómo se aplica la actualización. Solo se admite overlay , y la opción predeterminada es superposición. Los cargos anteriores de esta propiedad se borran antes de que se aplique la actualización. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge | 0..99 | ExtraGuestCharge | Es un solo conjunto de cargos para una propiedad. Es posible que contenga restricciones sobre cómo se puede aplicar un cargo y cómo se calculan los cargos por edad o categoría de huésped. Cada |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets | 1 | AgeBrackets | Es un contenedor de intervalos de edad que se usa para calcular los cargos por edad o categoría de huésped. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge | 0..1 | AdultCharge | Es un contenedor para el cargo de un adulto adicional. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge / @amount | 0..1 | float | Es un valor decimal positivo que especifica el importe fijo que se cobrará por un adulto adicional. Este cargo usa la misma moneda que la especificada para las tarifas por noche. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets | 0..1 | ChildAgeBrackets | Contenedor para cargos secundarios adicionales. Estos intervalos de edad solo pueden abarcar el rango de 0 a 17 años inclusive. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket | 1..99 | ChildAgeBracket | Es un cargo que se aplica a niños de un rango de edad específico. Estos deben ordenarse de max_age más bajo a max_age más alto. El importe que se cobrará se puede especificar con amount , percentage o discount_amount . Se debe especificar exactamente uno de esos atributos para cada <ChildAgeBracket> .
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @max_age | 1 | integer | Es la edad máxima para la que se pueden aplicar los cargos especificados en <ChildAgeBracket> . La edad mínima es cero si no se especifica ningún otro <ChildAgeBracket> antes de este. De lo contrario, es uno mayor que la edad máxima del tramo anterior. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @exclude_from_capacity | 1 | boolean | Es un valor booleano que indica si un niño de esta franja etaria debe contarse en la capacidad total y la capacidad infantil de una habitación. Estas capacidades se pueden establecer con Transaction(Property Data). Por ejemplo, es posible que los bebés menores de cierta edad no deban incluirse en la capacidad infantil. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @amount | 0..1 | float | Es un valor decimal no negativo que especifica el importe fijo que se cobrará por un hijo o hija adicional en este intervalo. Este cargo usa la misma moneda que la especificada para las tarifas por noche. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @percentage | 0..1 | float | Es un valor decimal de 1 a 99 que especifica el porcentaje de un precio para adultos que se debe cobrar por un niño adicional en este tramo. Este cargo utiliza la misma moneda que la especificada para las tarifas por noche. Consulta el análisis en |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @discount_amount | 0..1 | float | Es un valor decimal positivo que especifica un importe de descuento fijo del precio para adultos por un niño adicional en este tramo. Este cargo utiliza la misma moneda que la especificada para las tarifas nocturnas. En general, el cargo por un menor en este tramo se calcula deduciendo el importe fijo del “precio unitario”. El precio por unidad se explica con más detalle en la sección del atributo |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @counts_as_base_occupant | 0..1 | string | Si se especifica el atributo El objetivo aquí es obtener un "precio por unidad" a partir del cual se pueda calcular el cargo real.
El valor de este atributo debe ser
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes | 0..1 | RoomTypes | Es un contenedor para una lista de tipos de habitaciones a los que se aplican los cargos.
Los cargos se aplican a cada <RoomType> especificado. Si no se especifica <RoomTypes> , los cargos se aplican a todas las habitaciones de la propiedad especificada. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType | 1..n | RoomType | Especifica un tipo de habitación. Un tipo de habitación se define en un elemento <RoomData> en un mensaje Transaction (Property Data) y se hace referencia a él con su valor <RoomID> . (El atributo InvTypeCode también hace referencia a su valor <RoomID> en los mensajes OTA_HotelRateAmountNotifRQ). |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType / @id | 1 | string | Es el identificador único del inventario (tipo de habitación). Este valor se asigna a <RoomID> en un mensaje de Transaction (datos de propiedad).
La cantidad máxima de caracteres permitida es 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans | 0..1 | RatePlans | Es un contenedor para una lista de planes de tarifas a los que se aplican los cargos.
Si no se especifica <RatePlans> , los cargos se aplican a todos los planes de tarifas. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans / RatePlan | 1..n | RatePlan | Especifica un plan de tarifas. Un plan de tarifas se define mediante una combinación de paquete, tarifas y disponibilidad, como se define en los mensajes Transaction (Property Data), OTA_HotelRateAmountNotifRQ y OTA_HotelAvailNotifRQ, y como lo identifica el PackageID. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans / RatePlan / @id | 1 | string | Es el identificador único del plan de tarifas. Este valor se asigna al valor de PackageID en <PackageData> en un mensaje de transacción (datos de propiedad) y en el atributo RatePlanCode en <StatusApplicationControl> en los mensajes <OTA_HotelRateAmountNotifRQ> y <OTA_HotelAvailNotifRQ> .
La cantidad máxima de caracteres permitida es 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates | 0..1 | StayDates | Es un contenedor para uno o más períodos que determinan cómo se aplican los cargos. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange | 1..99 | DateRange | Es un período que especifica las fechas en las que se debe aplicar la promoción. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @start | 0..1 | Date | Es la fecha de inicio (según la zona horaria de la propiedad) inclusive del período. Esta fecha debe ser anterior o igual a la fecha de end . Si no se especifica start , el rango de fechas es, en realidad, ilimitado en términos de una fecha de inicio. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @end | 0..1 | Date | Es la fecha de finalización (según la zona horaria de la propiedad) inclusive del período. Esta fecha debe ser la misma que la fecha de start o posterior. Si no se especifica end , el período es ilimitado en términos de una fecha de finalización. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @days_of_week | 0..1 | string | Son los días de la semana permitidos en el período. Si no se especifica, se permiten todos los días en el período. Cada carácter de la cadena especifica un día. Por ejemplo, "L-V" especifica que se permiten los días de la semana en el período. Los caracteres válidos son los siguientes:
Cualquier combinación de caracteres es válida. |
Ejemplos
Cargos para adultos
Los cargos por adultos adicionales solo se pueden expresar como importes fijos. En el siguiente ejemplo, se muestra un mensaje ExtraGuestCharges
que especifica los cargos para adultos:
<?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>
Estas son las tarifas correspondientes:
<?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>
Cuando un usuario busca cuatro adultos en Google, la tarifa total sería de 170 = 120 + 50.
120 proviene de la tasa de <BaseByGuestAmt>
con NumberOfGuests="3"
y 50 proviene de AdultCharge amount="50"
.
Cargos secundarios
Los cargos por niños se expresan en tramos de edad de hasta 17 años y pueden expresarse en importes fijos, porcentajes o descuentos.
En el siguiente ejemplo, se muestra un mensaje ExtraGuestCharges
que especifica los cargos secundarios:
<?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>
Estas son las tarifas correspondientes:
<?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
Restricciones de cargos
Todos los tipos de restricciones son opcionales y se puede usar cualquier combinación de ellas.
En el siguiente ejemplo, se muestra un mensaje ExtraGuestCharges
que especifica restricciones:
<?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>
El mensaje anterior especifica que se debe cobrar a los adultos por cualquier producto que tenga el tipo de habitación “queen” o “king” con el plan de tarifas “free-wifi” o “hot-breakfast” para las fechas del 1 al 14 de septiembre de 2020.
Cargos superpuestos
En esta sección, se muestra un ejemplo de un mensaje no válido que especifica diferentes cargos para las mismas combinaciones de fechas y productos.
<?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>
El mensaje anterior no es válido porque el primer <ExtraGuestCharge>
especifica que "queen" y "free-wifi" del 1 al 14 de septiembre deben cobrarles a los adultos adicionales USD 50. El segundo <ExtraGuestCharge>
especifica que cualquier opción de "queen" o "king" con cualquiera de "free-wifi" o "hot-breakfast" del 1 al 5 de septiembre debe cobrarles a los adultos adicionales USD 20.
Hay cargos superpuestos por “queen” y “free-wifi” del 1 al 5 de septiembre, y un conflicto entre si se debe cobrar 20 o 50 por un adulto adicional.
Respuestas
Sintaxis
El mensaje ExtraGuestChargesResponse
usa la siguiente sintaxis:
<?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>
Elementos y atributos
El mensaje ExtraGuestChargesResponse
tiene los siguientes elementos y atributos:
Elemento o @Attribute | Casos | Tipo | Descripción |
---|---|---|---|
ExtraGuestChargesResponse | 1 | Complex element | Es el elemento raíz que indica el éxito o los problemas de un mensaje de solicitud ExtraGuestCharges recibido. |
ExtraGuestChargesResponse / @timestamp | 1 | DateTime | La fecha y hora de creación de este mensaje. |
ExtraGuestChargesResponse / @id | 1 | string | El identificador único del mensaje ExtraGuestCharges asociado. |
ExtraGuestChargesResponse / @partner | 1 | string | La cuenta de socio de este mensaje. |
ExtraGuestChargesResponse / Success | 0..1 | Success | Indica que el mensaje ExtraGuestCharges se procesó correctamente sin advertencias, errores ni fallas.
|
ExtraGuestChargesResponse / Issues | 0..1 | Issues | Es un contenedor para uno o más problemas que se encontraron mientras se procesaba el mensaje ExtraGuestCharges .
|
ExtraGuestChargesResponse / Issues / Issue | 1..n | Issue | Es la descripción de una advertencia, un error o una falla que se encontró durante el procesamiento del mensaje ExtraGuestCharges . Puedes encontrar detalles sobre estos problemas en Mensajes de error sobre el estado del feed. |
ExtraGuestChargesResponse / Issues / Issue / @code | 1 | integer | Es el identificador del problema. |
ExtraGuestChargesResponse / Issues / Issue / @status | 1 | enum | El tipo de problema que se encontró Los valores válidos son |
Ejemplos
Listo
La siguiente es una respuesta a un mensaje ExtraGuestCharges
procesado correctamente.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</ExtraGuestChargesResponse>
Problemas
La siguiente es una respuesta a un mensaje ExtraGuestCharges
que no se procesó debido a errores.
<?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>