En esta página se proporciona una referencia de los mensajes Transaction basados en XML.
<Transaction>
<Transaction>
es el elemento raíz de un mensaje Transaction. Se trata de un contenedor de información descriptiva sobre las habitaciones y los paquetes, o sobre los precios y la disponibilidad de esas habitaciones y paquetes.
El elemento <Transaction>
ocupa el siguiente lugar en la jerarquía de un mensaje Transaction basado en XML:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Los mensajes que utilizan <Transaction>
como elemento raíz necesitan al menos un elemento secundario. Los mensajes Transaction pueden tener tantos elementos secundarios como se quiera, siempre y cuando el tamaño del mensaje no supere los 100 MB.
Sintaxis
El elemento <Transaction>
usa la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="timestamp" id="transaction_ID"> <!-- Defines data about a room or package (Room Bundle) --> <PropertyDataSet> ... </PropertyDataSet> <!-- Updates/sets prices and availability for rooms and Room Bundles --> <!-- (Also removes itineraries from inventory) --> <Result> ... </Result> </Transaction>
Atributos
El elemento <Transaction>
tiene los siguientes atributos:
Atributo | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
id |
Required | String | Identificador único de cada mensaje Transaction. |
partner |
Optional | String | Cuenta del partner a la que se envía el mensaje Transaction. Se suele utilizar si el backend proporciona feeds de precios de varias cuentas de partner. El valor de esta cadena es "Clave del partner", que aparece en la página Configuración de la cuenta de Hotel Center. |
timestamp |
Required | DateTime | Hora a la que se envió el mensaje Transaction. Se procesarán todos los mensajes que se envíen con una marca de tiempo incluida en las 24 horas anteriores. De lo contrario, los mensajes se descartarán. Los mensajes se procesan según su atributo |
Elementos secundarios
El elemento <Transaction>
tiene los siguientes elementos secundarios:
Elemento secundario | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
<PropertyDataSet> |
Opcional* | <PropertyDataSet> |
Describe habitaciones y Configuraciones de habitación específicas. Este elemento se suele utilizar en un mensaje Transaction independiente para definir los valores compartidos de las Configuraciones de habitación y reducir así el tamaño de los mensajes Transaction. |
<Result> |
Opcional* | <Result> |
Datos de los precios del itinerario de una habitación o un elemento |
* Se requiere al menos uno de los dos, ya sea <PropertyDataSet> o <Result> . |
Ejemplos
Ejemplo 1
El siguiente ejemplo corresponde a un mensaje Transaction sencillo donde se definen los datos de una habitación:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <PropertyDataSet> <Property>1234</Property> <RoomData> <RoomID>5440OF</RoomID> <Name> <Text text="Single King Bed Room" language="en"/> <Text text="Simple Lit de Roi" language="fr"/> </Name> <Description> <Text text="One king bed with pillowtop mattresses, 300-thread-count linens, and down comforters (bedspreads). City view. 300 square feet. Desk with rolling chair. Multi-line phone with voice mail. Cable/satellite TV with complimentary HBO and pay movies." language="en"/> <Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/> </Description> <PhotoURL> <Caption> <Text text="Bathroom View" language="en"/> <Text text="La salle de baines" language="fr"/> </Caption> <URL>http://www.foo.com/static/bar/image1234.jpg</URL> </PhotoURL> <Capacity>4</Capacity> </RoomData> </PropertyDataSet> </Transaction>
Ejemplo 2
El siguiente ejemplo corresponde a un mensaje Transaction sencillo donde se definen los datos de los precios:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-23T16:20:00-04:00" id="42"> <Result> <Property>060773</Property> <RoomID>RoomType101</RoomID> <PackageID>Package101</PackageID> <Checkin>2018-06-10</Checkin> <Nights>2</Nights> <Baserate currency="USD">278.33</Baserate> <Tax currency="USD">25.12</Tax> <OtherFees currency="USD">2.00</OtherFees> <AllowablePointsOfSale> <PointOfSale id="site1"/> </AllowablePointsOfSale> </Result> <Result> <Property>052213</Property> <RoomID>RoomType101</RoomID> <PackageID>Package101</PackageID> <Checkin>2018-06-10</Checkin> <Nights>2</Nights> <Baserate currency="USD">299.98</Baserate> <Tax currency="USD">26.42</Tax> <OtherFees currency="USD">2.00</OtherFees> <AllowablePointsOfSale> <PointOfSale id="otto"/> <PointOfSale id="simon"/> </AllowablePointsOfSale> </Result> </Transaction>
Ejemplo 3
En el siguiente ejemplo se definen los datos de los precios de una estancia de entre 1 y 7 noches, a partir del 7 de junio del 2018:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-08-24T16:20:00-04:00" id="42"> <Result> <Property>1234</Property> <Checkin>2018-06-07</Checkin> <Nights>1</Nights> <Baserate currency="USD">209.99</Baserate> <Tax currency="USD">25.12</Tax> <OtherFees currency="USD">2.00</OtherFees> </Result> <Result> <Property>1234</Property> <Checkin>2018-06-07</Checkin> <Nights>2</Nights> <Baserate currency="USD">419.98</Baserate> <Tax currency="USD">25.12</Tax> <OtherFees currency="USD">2.00</OtherFees> </Result> <Result> <Property>1234</Property> <Checkin>2018-06-07</Checkin> <Nights>3</Nights> <Baserate currency="USD">614.97</Baserate> <Tax currency="USD">21.12</Tax> <OtherFees currency="USD">2.00</OtherFees> </Result> <Result> <Property>1234</Property> <Checkin>2018-06-07</Checkin> <Nights>4</Nights> <Baserate currency="USD">819.96</Baserate> <Tax currency="USD">21.12</Tax> <OtherFees currency="USD">2.00</OtherFees> </Result> <Result> <Property>1234</Property> <Checkin>2018-06-07</Checkin> <Nights>5</Nights> <Baserate currency="USD">999.95</Baserate> <Tax currency="USD">21.12</Tax> <OtherFees currency="USD">2.00</OtherFees> </Result> <Result> <Property>1234</Property> <Checkin>2018-06-07</Checkin> <Nights>6</Nights> <Baserate currency="USD">1193.94</Baserate> <Tax currency="USD">21.12</Tax> <OtherFees currency="USD">2.00</OtherFees> </Result> <Result> <Property>1234</Property> <Checkin>2018-06-07</Checkin> <Nights>7</Nights> <Baserate currency="USD">1259.93</Baserate> <Tax currency="USD">21.12</Tax> <OtherFees currency="USD">2.00</OtherFees> </Result> </Transaction>
Ejemplo 4
El siguiente ejemplo corresponde a un mensaje Transaction que contiene una tarifa base y una tarifa condicional:
<?xml version="1.0" encoding="UTF-8" ?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <Result> <Property>1234</Property> <Checkin>2018-06-10</Checkin> <Nights>1</Nights> <Baserate currency="USD">200.00</Baserate> <Tax currency="USD">20.00</Tax> <OtherFees currency="USD">1.00</OtherFees> <Rates> <!-- The rate_rule_id is required when using conditional rates --> <Rate rate_rule_id="mobile"> <!-- Override base rate and taxes for conditional rates --> <Baserate currency="USD">180.00</Baserate> <Tax currency="USD">18.00</Tax> <!-- NOTE: OtherFees is inherited from the above setting --> <Custom1>ratecode123</Custom1> </Rate> </Rates> </Result> </Transaction>
Ejemplo 5
En el siguiente ejemplo se eliminan varios inventarios (en este caso, estancias de 1 noche en varias fechas diferentes) de un hotel:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <Result> <Property>1123581321</Property> <Checkin>2018-06-07</Checkin> <Nights>1</Nights> <Baserate currency="USD">-1</Baserate> <Tax currency="USD">0</Tax> <OtherFees currency="USD">0</OtherFees> </Result> <Result> <Property>1123581321</Property> <Checkin>2018-06-08</Checkin> <Nights>1</Nights> <Baserate currency="USD">-1</Baserate> <Tax currency="USD">0</Tax> <OtherFees currency="USD">0</OtherFees> </Result> <Result> <Property>1123581321</Property> <Checkin>2018-06-09</Checkin> <Nights>1</Nights> <Baserate currency="USD">-1</Baserate> <Tax currency="USD">0</Tax> <OtherFees currency="USD">0</OtherFees> </Result> </Transaction>
<PropertyDataSet>
Se trata de un contenedor de información sobre las habitaciones y los paquetes (o sobre las Configuraciones de habitación) en un mensaje <Transaction>
. Los valores del hotel anulan los del partner.
Google almacena esta información para que no tengas que definirla cada vez que envíes actualizaciones de precios.
El elemento <PropertyDataSet>
ocupa el siguiente lugar en la jerarquía de un mensaje Transaction basado en XML:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación.
Sintaxis
El elemento <PropertyDataSet>
utiliza la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> <!-- (Required) ID that matches the Hotel List Feed --> <Property>hotel_ID</Property> <!-- (Optional) Defines metadata about a room --> <RoomData> ... </RoomData> <!-- (Optional) Defines package metadata to be paired with rooms (Room Bundles) --> <PackageData> ... </PackageData> </PropertyDataSet> ... </Transaction>
Atributos
El elemento <PropertyDataSet>
no tiene atributos.
Elementos secundarios
El elemento <PropertyDataSet>
tiene los siguientes elementos secundarios:
Elemento secundario | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
<PackageData> |
Opcional* | <PackageData> |
Describe una Configuración de habitación. Estos datos están asociados a un partner y un hotel, pero no a un itinerario. Este elemento es similar a <RoomData> , pero describe servicios y términos que no forman parte de la descripción de la habitación en sí.
Debes hacer referencia al ID del paquete en las actualizaciones de precios que envíes. Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación. |
<Property> |
Required | String | ID del hotel al que se aplican los datos asociados. El valor de este elemento debe ser una cadena que coincida con la ficha <id> de tu feed de lista de hoteles.
|
<RoomData> |
Opcional* | <RoomData> |
Describe una habitación. Estos datos están asociados a un partner y un hotel, pero no a un itinerario.
Debes hacer referencia al ID de la habitación en las actualizaciones de precios que envíes. |
* Se requiere al menos uno de los dos, ya sea <PackageData> o <RoomData> . |
Ejemplos
Ejemplo 1
En el siguiente ejemplo se muestran datos de una habitación y de un paquete dentro de un elemento <PropertyDataSet>
:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <PropertyDataSet> <Property>180054</Property> <RoomData> <RoomID>060773</RoomID> <Name> <Text text="Single Bed Room" language="en"/> <Text text="Chambre single" language="fr"/> </Name> <Description> <Text text="Non-smoking" language="en"/> <Text text="Pas de fumiers" language="fr"/> </Description> <PhotoURL> <Caption> <Text text="Living area" language="en"/> <Text text="Le chambre" language="fr"/> </Caption> <URL>http://www.foo.com/static/bar/image1234.jpg</URL> </PhotoURL> </RoomData> <PackageData> <PackageID>P54321</PackageID> <Name> <Text text="Breakfast Included" language="en"/> <Text text="Avec le petit déjeuner" language="fr"/> </Name> <Description> <Text text="Includes a delightful array of jams and jellies." language="en"/> <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/> </Description> <BreakfastIncluded>1</BreakfastIncluded> </PackageData> </PropertyDataSet> </Transaction>
Cuando envías datos sobre los precios y la disponibilidad de las habitaciones o de Configuraciones de habitación concretas, estás haciendo referencia a los IDs de esas habitaciones y paquetes en tus mensajes de precios. Por tanto, disminuyen considerablemente el tamaño de los mensajes y el número de errores que podrían surgir debido a datos duplicados. Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación.
<RoomData>
Define metadatos de habitaciones que no dependen del itinerario y, por extensión, también de las Configuraciones de habitación (ya que las Configuraciones de habitación son habitaciones que incluyen servicios adicionales). Usa <RoomData>
para no repetir datos descriptivos en tu feed de precios.
El elemento <RoomData>
ocupa el siguiente lugar en la jerarquía de un mensaje Transaction basado en XML:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
En los elementos <RoomData>
se incluye información asociada a un partner y un hotel, pero no a un itinerario. Se usa para todos los datos que no están relacionados con el itinerario.
El elemento <RoomData>
es similar a <PackageData>
, pero describe la habitación en sí en vez de los servicios y los términos de un paquete. Puedes utilizar <RoomData>
y <PackageData>
conjuntamente para proporcionar información sobre las Configuraciones de habitación. En el caso de las habitaciones individuales que no estén incluidas en ningún paquete, utiliza solo <RoomData>
.
Puedes definir los elementos <RoomData>
y <PackageData>
para una misma habitación o Configuración de habitación. Cuando Google muestre esa habitación o paquete en los resultados de búsqueda, incluirá las descripciones de ambos, separadas por un guion.
Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación.
Sintaxis
El elemento <RoomData>
utiliza la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> ... <RoomData> <RoomID>room_ID</RoomID> <Name> <Text text="room_name" language="language_code"/> ... </Name> <Description> <Text text="room_description" language="language_code"/> ... </Description> <Capacity>max_number_of_occupants</Capacity> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults, children, or seniors --></OccupancyDetails> <PhotoURL> <Caption> <Text text="photo_description" language="language_code"/> ... </Caption> <URL>photo_location</URL> </PhotoURL> </RoomData> ... </PropertyDataSet> </Transaction>
Atributos
El elemento <RoomData>
no tiene atributos.
Elementos secundarios
El elemento <RoomData>
tiene los siguientes elementos secundarios:
Elemento secundario | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
<Capacity> |
Optional | Integer | Número máximo de huéspedes que pueden alojarse físicamente en una habitación. La capacidad de una habitación es mayor o igual que su ocupación.
Cuando se especifica, este valor debe ser igual o mayor que el valor del elemento El valor de |
<Description> |
Optional | Object | Descripción detallada de una habitación. La información de este elemento no debe aparecer en ningún otro elemento, ni tampoco en <Name> . No utilices solo mayúsculas cuando escribas la descripción de la habitación.
El elemento
Usa un elemento En el siguiente ejemplo se muestran las versiones en francés e inglés de la descripción de una habitación: <Description> <Text text="Two queen-sized beds" language="en"/> <Text text="Deux lits de la reine" language="fr"/> </Description> |
<Name> |
Required | String | Nombre de la categoría de una habitación. Este valor debe coincidir con el que aparece en la página de destino del hotel (antes conocida como "punto de venta"). No establezcas un valor para este elemento que tenga todas las letras en mayúscula.
Este elemento admite un solo elemento secundario,
Usa un elemento En el siguiente ejemplo se muestran las versiones en francés y en inglés del nombre de una habitación: <Name> <Text text="Standard Double Room" language="en"/> <Text text="Le chambre double" language="fr"/> </Name> |
<Occupancy> |
Optional | Integer | Número máximo de huéspedes para los que está diseñada una habitación.
Por ejemplo, en una suite grande podrían alojarse físicamente 6 personas (capacidad = 6), pero está diseñada para un máximo de 4.
Este valor debe ser menor o igual que el del elemento El valor de El elemento |
<PhotoURL> |
Optional | Object | URL y pie de foto opcional de una habitación o Configuración de habitación concretas. Puedes especificar más de un elemento <PhotoURL> para una habitación o configuración de habitación.
Este elemento acepta los siguientes elementos secundarios:
<PhotoURL> <URL>http://www.foo.com/static/bar/image1234.jpg</URL> <Caption> <Text text="A bright and breezy way to enjoy your mornin' cuppa tea." language="en"/> <Text text="Une façon lumineuse et aérée pour profiter de votre journée tasse de thé." language="fr"/> </Caption> </PhotoURL> |
<RoomID> |
Required | String | ID único de una habitación. Utilízalo para emparejar los datos de la habitación con los bloques de <Result> en tus actualizaciones de precios. Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación. También puedes usar este ID para hacer referencia a una definición de habitación común en un mensaje Transaction cuando definas inserciones de datos de esa habitación. |
Ejemplos
Ejemplo 1
En el siguiente ejemplo se definen los datos de una habitación:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <PropertyDataSet> <Property>1234</Property> <RoomData> <RoomID>5440OF</RoomID> <Name> <Text text="Single King Bed Room" language="en"/> <Text text="Simple Lit de Roi" language="fr"/> </Name> <Description> <Text text="One king bed with pillowtop mattresses, 300-thread-count linens, and down comforters (bedspreads). City view. 300 square feet. Desk with rolling chair. Multi-line phone with voice mail. Cable/satellite TV with complimentary HBO and pay movies." language="en"/> <Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/> </Description> <PhotoURL> <Caption> <Text text="Bathroom View" language="en"/> <Text text="La salle de baines" language="fr"/> </Caption> <URL>http://www.foo.com/static/bar/image1234.jpg</URL> </PhotoURL> <Capacity>4</Capacity> </RoomData> </PropertyDataSet> </Transaction>
Ejemplo 2
En el siguiente ejemplo se definen los metadatos de una habitación y un paquete:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <PropertyDataSet> <Property>180054</Property> <RoomData> <RoomID>060773</RoomID> <Name> <Text text="Single Bed Room" language="en"/> <Text text="Chambre single" language="fr"/> </Name> <Description> <Text text="Non-smoking" language="en"/> <Text text="Pas de fumiers" language="fr"/> </Description> <PhotoURL> <Caption> <Text text="Living area" language="en"/> <Text text="Le chambre" language="fr"/> </Caption> <URL>http://www.foo.com/static/bar/image1234.jpg</URL> </PhotoURL> </RoomData> <PackageData> <PackageID>P54321</PackageID> <Name> <Text text="Breakfast Included" language="en"/> <Text text="Avec le petit déjeuner" language="fr"/> </Name> <Description> <Text text="Includes a delightful array of jams and jellies." language="en"/> <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/> </Description> <BreakfastIncluded>1</BreakfastIncluded> </PackageData> </PropertyDataSet> </Transaction>
Ejemplo 3
En el siguiente ejemplo se definen los metadatos de una habitación y un paquete de varias Configuraciones de habitación:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <!-- A transaction message with room types result. --> <PropertyDataSet> <Property>12345</Property> <RoomData> <RoomID>single</RoomID> <Name> <Text text="Single room" language="en"/> <Text text="Chambre simple" language="fr"/> </Name> <Description> <Text text="A single room" language="en"/> <Text text="Le chambre simple" language="fr"/> </Description> <PhotoURL> <Caption> <Text text="Living area" language="en"/> <Text text="Le chambre" language="fr"/> </Caption> <URL>http://www.foo.com/static/bar/image1234.jpg</URL> </PhotoURL> <PhotoURL> <URL>http://www.foo.com/static/bar/image1235.jpg</URL> </PhotoURL> <Capacity>2</Capacity> </RoomData> <RoomData> <RoomID>double</RoomID> <Name> <Text text="Double room" language="en"/> <Text text="Chambre double" language="fr"/> </Name> <Occupancy>1</Occupancy> </RoomData> <PackageData> <PackageID>refundbreakfast</PackageID> <Name> <Text text="Refundable Room with Breakfast" language="en"/> <Text text="Chambre remboursable avec le petit déjeuner" language="fr"/> </Name> <Description> <Text text="Continental Breakfast" language="en"/> <Text text="Petit déjeuner continental" language="fr"/> </Description> <ChargeCurrency>hotel</ChargeCurrency> <Refundable available="1" refundable_until_days="3"/> <BreakfastIncluded>1</BreakfastIncluded> </PackageData> <PackageData> <PackageID>prepaid</PackageID> <Name> <Text text="Nonrefundable" language="en"/> <Text text="Non remboursable" language="fr"/> </Name> <Description> <Text text="Blah blah blad" language="en"/> <Text text="Le blah blah blad" language="fr"/> </Description> <Occupancy>2</Occupancy> <ChargeCurrency>web</ChargeCurrency> <Refundable available="0"/> </PackageData> </PropertyDataSet> </Transaction>
<PackageData>
Define metadatos que no dependen del itinerario para las Configuraciones de habitación de una propiedad. Este elemento contiene información asociada a un partner y un hotel, pero no a un itinerario. Se usa para definir una sola vez todos los datos que no estén relacionados con el itinerario, de forma que se pueda hacer referencia a ellos desde los datos del itinerario.
El elemento <PackageData>
ocupa el siguiente lugar en la jerarquía de un mensaje Transaction basado en XML:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
El elemento <PackageData>
es similar a <RoomData>
, pero describe las características y los términos de la tarifa que no forman parte de la descripción de la habitación en sí. Utiliza <RoomData>
y <PackageData>
conjuntamente para proporcionar información sobre las Configuraciones de habitación y las características de la tarifa. En el caso de las habitaciones individuales que no estén incluidas en ningún paquete, utiliza solo <RoomData>
.
Puedes definir los elementos <RoomData>
y <PackageData>
para una misma habitación o Configuración de habitación. Cuando Google muestre esa habitación o paquete en los resultados de búsqueda, incluirá las descripciones de ambos, separadas por un guion.
Si actualizas un solo elemento <PackageData>
de una propiedad, debes actualizar los elementos <PackageData>
y <RoomData>
de esa propiedad.
Los elementos <PropertyDataSet>
se entienden como todos los datos sobre la propiedad y sobrescriben la información que ya haya.
Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación.
Sintaxis
El elemento <PackageData>
utiliza la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<PropertyDataSet ... >
<PackageData>
<PackageID>package_ID</PackageID>
<Name>
<Text text="package_name" language="language_code"/>
...
</Name>
<Description>
<Text text="package_description" language="language_code"/>
...
</Description>
<Refundable available="[false|true]" refundable_until_days="number_of_days"
refundable_until_time="time"/>
<Capacity>max_number_of_occupants</Capacity>
<ChargeCurrency>[deposit|hotel|installment|web]</ChargeCurrency>
<Occupancy>max_number_of_intended_occupants</Occupancy>
<OccupancyDetails><!-- optional info about the types of guests,
whether adults or children --></OccupancyDetails>
<!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
<BreakfastIncluded>boolean_value</BreakfastIncluded>
<InternetIncluded>boolean_value</InternetIncluded>
<ParkingIncluded>boolean_value</ParkingIncluded>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Special Rewards">
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum">
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<!-- a PackageID with a MilesIncluded
rate feature -->
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en">
</Name>
<ChargeCurrency>hotel </ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>1000 </NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines">
</Provider>
</MilesIncluded>
</PackageData>
...
...
</PropertyDataSet>
...
</Transaction>
Atributos
El elemento <PackageData>
no tiene atributos.
Elementos secundarios
El elemento <PackageData>
tiene los siguientes elementos secundarios:
Elemento secundario | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
<BreakfastIncluded> |
Optional | Boolean | Especifica si la Configuración de habitación incluye o no el desayuno en la tarifa. Los valores válidos son 0 (o "false") y 1 (o "true"). |
<Capacity> |
Optional | Integer | Número máximo de personas que pueden alojarse físicamente según una Configuración de habitación. Cuando se especifica, este valor debe ser igual o mayor que el valor del elemento El valor de Si especificas este elemento tanto en |
<ChargeCurrency> |
Optional | Enum | Define cuándo abona el usuario la reserva y dónde. Este elemento utiliza la misma sintaxis que <ChargeCurrency> en un <Result> .
El valor predeterminado es |
<Description> |
Optional | Object | Descripción detallada del paquete. La información de este elemento no debe aparecer en ningún otro elemento, ni tampoco en <Name> . No utilices solo mayúsculas cuando escribas la descripción de una habitación.
El elemento <Description> <Text text="Two breakfast buffet certificates for each night of stay." language="en"/> <Text text="Deux certificats petit-déjeuner buffet pour chaque nuit de séjour." language="fr"/> </Description> |
<InternetIncluded> |
Optional | Boolean | Indica si en una Configuración de habitación está incluido el acceso a Internet gratuito, cuando en otras configuraciones no se incluya este servicio. No incluyas este elemento en las Configuraciones de habitación de un hotel que ofrezca acceso gratuito a Internet en todas las habitaciones. Este elemento no se aplica al servicio de Internet por cable o inalámbrico que no esté disponible en las habitaciones de los huéspedes. Los valores válidos son 0 (o "false") y 1 (o "true"). |
<Name> |
Required | String | Nombre de la categoría de una habitación. Este valor debe coincidir con el que aparezca en la página de destino del hotel. No establezcas un valor para este elemento que tenga todas las letras en mayúscula.
Este elemento admite un único elemento secundario, <Name> <Text text="Bed and Breakfast" language="en"/> <Text text="Lit et petit déjeuné" language="fr"/> </Name> |
<Occupancy> |
Optional | Integer | Número máximo de huéspedes para los que está diseñada una Configuración de habitación.
Por ejemplo, en una suite grande podrían alojarse físicamente 6 personas, pero está diseñada para un máximo de 4.
Este valor debe ser menor o igual que el del elemento El valor de Si especificas este elemento tanto en Nota: <Occupancy> puede ir acompañado de <OccupancyDetails> , que especifica el tipo de huéspedes (adultos o niños). Consulta la sintaxis y la descripción de los elementos secundarios en <OccupancyDetails> .
|
<PackageID> |
Required | String | ID único de un paquete. Utilízalo para emparejar los datos de una Configuración de habitación con los bloques de <Result> en tus actualizaciones de precios. Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación.
También puedes usar este ID para hacer referencia a una definición de Configuración de habitación común en un mensaje Transaction cuando definas inserciones de datos de esa Configuración de habitación. |
<ParkingIncluded> |
Optional | Boolean | Indica si una Configuración de habitación incluye aparcamiento gratuito cuando, por lo general, es un servicio de pago en ese hotel. No asignes ningún valor a este elemento en hoteles que ofrezcan aparcamiento gratuito.
Los valores válidos son |
<Refundable> |
Optional | Object | Permite indicar si una tarifa admite reembolsos completos o cancelaciones gratuitas. Si no se proporciona, no aparecerá información sobre reembolsos.
Si se define una política de reembolsos a nivel de <PackageData> , se anula cualquier política de este tipo a nivel de <Result> . Si se define una política de reembolsos a nivel de <Rates> , se anula cualquier política de este tipo a nivel de <PackageData> . Los precios reembolsables también se pueden destacar para los usuarios mediante opciones alternativas, sin tener que modificar directamente el esquema de los mensajes Transaction. Más información sobre estas opciones
En el ejemplo siguiente se muestra el elemento <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Nota: Te recomendamos que configures todos los atributos. Cuando no se definen uno o varios de los atributos, se genera un mensaje de advertencia sobre el estado del feed. Si no se configura ningún atributo, la tarifa no se muestra como reembolsable. Los atributos son los siguientes:
Cuando configures los atributos, ten en cuenta lo siguiente:
|
<MembershipBenefits |
Optional | Boolean | Indica si la tarifa incluye acceso a las ventajas del estado Élite durante la estancia. Incluye los siguientes parámetros:
|
<CarRentalIncluded> |
Optional | Boolean | Indica si la tarifa incluye alquiler de coche gratuito durante la estancia. |
<MilesIncluded> |
Optional | Boolean | Indica si la tarifa incluye millas de viajero frecuente. Entre los parámetros se incluyen los siguientes:
|
<OnPropertyCredit> |
Optional | Boolean | Indica si la tarifa incluye crédito para gastar en la propiedad (alimentos y bebidas no alcohólicas, resort, spa, etc.). Parámetro:
|
Ejemplos
Ejemplo 1
El siguiente ejemplo corresponde a una sola Configuración de habitación, con una ocupación de 2 personas (un adulto y un niño/a) y desayuno incluido:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <PropertyDataSet> <Property>1234</Property> <PackageData> <Occupancy>2</Occupancy> <OccupancyDetails> <NumAdults>1</NumAdults> <Children> <Child age="17"/> </Children> </OccupancyDetails> <PackageID>P54321</PackageID> <Name> <Text text="Breakfast Included" language="en"/> <Text text="Avec le petit déjeuner" language="fr"/> </Name> <Description> <Text text="Two certificates for continental breakfast will be provided." language="en"/> <Text text="Deux certificats pour le petit déjeuner continental seront fournis." language="fr"/> </Description> <BreakfastIncluded>1</BreakfastIncluded> </PackageData> </PropertyDataSet> </Transaction>
Ejemplo 2
En el siguiente ejemplo se definen los metadatos de una habitación y un paquete:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <PropertyDataSet> <Property>180054</Property> <RoomData> <RoomID>060773</RoomID> <Name> <Text text="Single Bed Room" language="en"/> <Text text="Chambre single" language="fr"/> </Name> <Description> <Text text="Non-smoking" language="en"/> <Text text="Pas de fumiers" language="fr"/> </Description> <PhotoURL> <Caption> <Text text="Living area" language="en"/> <Text text="Le chambre" language="fr"/> </Caption> <URL>http://www.foo.com/static/bar/image1234.jpg</URL> </PhotoURL> </RoomData> <PackageData> <PackageID>P54321</PackageID> <Name> <Text text="Breakfast Included" language="en"/> <Text text="Avec le petit déjeuner" language="fr"/> </Name> <Description> <Text text="Includes a delightful array of jams and jellies." language="en"/> <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/> </Description> <BreakfastIncluded>1</BreakfastIncluded> </PackageData> </PropertyDataSet> </Transaction>
Ejemplo 3
En el siguiente ejemplo se definen los metadatos de una habitación y un paquete de varias Configuraciones de habitación:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <!-- A transaction message with room types result. --> <PropertyDataSet> <Property>12345</Property> <RoomData> <RoomID>single</RoomID> <Name> <Text text="Single room" language="en"/> <Text text="Chambre simple" language="fr"/> </Name> <Description> <Text text="A single room" language="en"/> <Text text="Le chambre simple" language="fr"/> </Description> <PhotoURL> <Caption> <Text text="Living area" language="en"/> <Text text="Le chambre" language="fr"/> </Caption> <URL>http://www.foo.com/static/bar/image1234.jpg</URL> </PhotoURL> <PhotoURL> <URL>http://www.foo.com/static/bar/image1235.jpg</URL> </PhotoURL> <Capacity>2</Capacity> </RoomData> <RoomData> <RoomID>double</RoomID> <Name> <Text text="Double room" language="en"/> <Text text="Chambre double" language="fr"/> </Name> <Occupancy>1</Occupancy> </RoomData> <PackageData> <PackageID>refundbreakfast</PackageID> <Name> <Text text="Refundable Room with Breakfast" language="en"/> <Text text="Chambre remboursable avec le petit déjeuner" language="fr"/> </Name> <Description> <Text text="Continental Breakfast" language="en"/> <Text text="Petit déjeuner continental" language="fr"/> </Description> <ChargeCurrency>hotel</ChargeCurrency> <Refundable available="1" refundable_until_days="3"/> <BreakfastIncluded>1</BreakfastIncluded> </PackageData> <PackageData> <PackageID>prepaid</PackageID> <Name> <Text text="Nonrefundable" language="en"/> <Text text="Non remboursable" language="fr"/> </Name> <Description> <Text text="Blah blah blad" language="en"/> <Text text="Le blah blah blad" language="fr"/> </Description> <Occupancy>2</Occupancy> <ChargeCurrency>web</ChargeCurrency> <Refundable available="0"/> </PackageData> </PropertyDataSet> </Transaction>
Ejemplo 4
En el siguiente ejemplo se definen los metadatos de una habitación y un paquete de una Configuración de habitación, donde se indican las características de la tarifa:
<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID"> <PropertyDataSet> <Property>12345</Property> <RoomData> ... </RoomData> <!-- definitions of PackageData types including rate features --> <PackageData> <PackageID>room_with_addl_benefits</PackageID> <Name> <Text text="Acme Hotels 2017 Promotion Package" language="en"/> </Name> <ChargeCurrency>hotel</ChargeCurrency> <BreakfastIncluded>1</BreakfastIncluded> <MembershipBenefitsIncluded> <ProgramName> <Text language="en" text="Marriott Rewards"/> </ProgramName> <ProgramLevel> <Text language="en" text="Platinum"/> </ProgramLevel> </MembershipBenefitsIncluded> <OnPropertyCredit> <Amount currency="USD">123.45</Amount> </OnPropertyCredit> </PackageData> <PackageData> <PackageID>room_with_miles</PackageID> <Name> <Text text="Room with Bundled Miles" language="en"/> </Name> <ChargeCurrency>hotel</ChargeCurrency> <MilesIncluded> <NumberOfMiles>1000</NumberOfMiles> <Provider> <Text language="en" text="United Airlines"/> </Provider> </MilesIncluded> </PackageData> </PropertyDataSet> <!-- The actual list of prices --> <Result> … </Result> </Transaction>
<Result>
Se trata de un contenedor de actualizaciones de precios y disponibilidades en un mensaje de <Transaction>
.
El elemento <Result>
ocupa el siguiente lugar en la jerarquía de un mensaje Transaction basado en XML:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Utiliza <Result>
para definir o actualizar los precios de las habitaciones y especificar los inventarios disponibles. Los elementos definidos en este elemento normalmente hacen referencia a los metadatos de una habitación o un paquete que no dependen del itinerario (como una descripción o un conjunto de servicios) y que se definen en <PackageData>
y <RoomData>
.
Por lo general, se suelen enviar mensajes Transaction con actualizaciones de precios con mucha frecuencia. El método y la frecuencia exactos dependen del modo de envío que utilices.
Puedes usar <Result>
en un mensaje Transaction para quitar itinerarios, tal como se describe en este artículo sobre cómo quitar inventarios.
Para obtener más información sobre cómo usar los mensajes Transaction para actualizar los precios y la disponibilidad, consulta este artículo sobre cómo añadir y actualizar inventarios.
En un solo mensaje Transaction puedes incluir tantos elementos <Result>
como quieras, siempre y cuando el tamaño del mensaje no supere los 100 MB.
Sintaxis
El elemento <Result>
utiliza la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <!-- Required --> <Property>hotel_ID</Property> <!-- Required --> <Checkin>YYYY-MM-DD</Checkin> <!-- Required --> <Nights>number_of_nights</Nights> <Baserate currency="currency_code">price</Baserate> <!-- Only required when <Baserate> contains a real price --> <Tax currency="currency_code">tax_amount</Tax> <!-- Only required when <Baserate> contains a real price --> <OtherFees currency="currency_code">fee_amount</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <RoomID>room_ID</RoomID> <PackageID>package_ID</PackageID> <ExpirationTime>expiration_time</ExpirationTime> <ChargeCurrency>[deposit|hotel|installment|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <!-- For Baserate, occupancy value must be greater than or equal to 2. If a value is not provided for occupancy, it defaults to 2. --> <OccupancyDetails>occupancy_info</OccupancyDetails> <Rates>...</Rates> <RoomBundle>...</RoomBundle> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> ... </AllowablePointsOfSale> <Custom[1-5]>custom_value</Custom[1-5]> </Result> ... </Transaction>
Atributos
El elemento <Result>
tiene los siguientes atributos:
Atributo | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
mergeable |
Optional | Boolean | De forma predeterminada, los precios nuevos de un par específico de hotel e itinerario sobrescriben los precios anteriores (es decir, los vigentes) que están presentes en la caché de Google. El atributo mergeable te permite almacenar precios adicionales en la caché de Google sin tener que eliminar la información anterior. En las consultas de precios en tiempo real con respuestas contextuales, este atributo siempre tendrá el valor true (independientemente de la respuesta del mensaje Transaction). |
Elementos secundarios
El elemento <Result>
tiene los siguientes elementos secundarios:
Elemento secundario | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
<AllowablePointsOfSale> |
Optional | Object | Una o más páginas de destino del hotel que cumplen los requisitos. Una página de destino es un sitio web donde los usuarios finales pueden gestionar el proceso de reserva. Para incluir explícitamente determinadas páginas de destino (y excluir otras), añade uno o más elementos <AllowablePointsOfSale> que coincidan con el atributo id del elemento <PointOfSale> del archivo de páginas de destino.
Si no incluyes este elemento, se considerará que todas las páginas de destino definidas en el archivo correspondiente cumplen los requisitos para poder usarse a la hora de reservar habitaciones. Para obtener más información, consulta este artículo sobre la sintaxis de los archivos de páginas de destino. |
<Baserate> |
Optional | Float | Precio de la habitación según la estancia. El valor de este elemento debe reflejar lo siguiente:
Si la habitación no está disponible para el itinerario, establece el valor del elemento Para quitar una Configuración de habitación, sigue estas instrucciones. El elemento <Baserate currency="USD">1200.40</Baserate> En el elemento
|
<ChargeCurrency> |
Optional | Enum | Define cuándo abona el usuario la reserva y dónde. Este elemento se puede usar en un mensaje Transaction en el elemento <Result> del precio del hotel o en el bloque <PackageData> de una Configuración de habitación.
Estos son los valores válidos:
El valor predeterminado es "web". |
<Checkin> |
Required | Date | Fecha de entrada de un itinerario, donde se utiliza este formato de fecha. La combinación de los elementos <Nights> y <Checkin> conforma un itinerario. |
<Custom[1‑5]> |
Optional | String | Permite definir un campo personalizado para transferir datos adicionales asociados a un hotel. Puedes transmitir hasta 5 valores personalizados con los siguientes nombres de elemento:
Los elementos |
<ExpirationTime> |
Optional | DateTime | Fecha y hora en las que se considera que el precio ha caducado (3 horas como mínimo).
Te recomendamos que no proporciones marcas de tiempo de caducidad si no son esenciales para tu estructura de precios. |
<Nights> |
Required | Integer | Número de noches de un itinerario. El valor del elemento <Nights> debe ser un número entero positivo.
La combinación de <Nights> y <Checkin> conforma un itinerario. |
<OtherFees> |
Optional | Float | Comisiones al margen de la tarifa base y los impuestos que influyen en el precio final de una habitación. El elemento <OtherFees> utiliza un único atributo obligatorio, currency , con el que puedes definir el código de moneda de 3 letras para las comisiones. Por ejemplo, "USD".
El elemento |
<Occupancy> |
Optional | Integer | Número máximo de huéspedes.
Cuando <Occupancy> aparece debajo de <Result> , se debe especificar "2" como mínimo. El elemento <Occupancy> puede ir acompañado de <OccupancyDetails> , que especifica el tipo de huéspedes (adultos o niños). Consulta <OccupancyDetails> para obtener más información sobre su sintaxis y la descripción de sus elementos secundarios. Si no se proporciona el elemento <Occupancy> , el valor predeterminado de la ocupación es "2".
|
<PackageID> |
Optional | String | ID único de un paquete para asignarlo a los datos de paquete predefinidos. También se utiliza para rellenar la variable de la página de destino PACKAGE-ID. Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación. |
<Property> |
Required | String | ID de un hotel al que afectan los datos asociados (precio, itinerario, Configuración de habitación o metadatos). El valor de este elemento debe ser una cadena. El valor de este elemento debe coincidir con el elemento <id> que hayas definido en tu feed de lista de hoteles.
|
|
Optional | <Rates> |
Se trata de un contenedor de uno o más bloques <Rate> . Cada <Rate> de <Rates> define un precio diferente para cada combinación de habitación e itinerario.
Utiliza el elemento |
<Refundable> |
Optional | Object | Permite indicar si una tarifa admite reembolsos completos o cancelaciones gratuitas. Si no se proporciona, no aparecerá información sobre reembolsos.
Si se define una política de reembolsos a nivel de <PackageData> , se anula cualquier política de este tipo a nivel de <Result> . Si se define una política de reembolsos a nivel de <Rates> , se anula cualquier política de este tipo a nivel de <PackageData> . Los precios reembolsables también se pueden destacar para los usuarios mediante opciones alternativas, sin tener que modificar directamente el esquema de los mensajes Transaction. Más información sobre estas opciones
En el ejemplo siguiente se muestra el elemento <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Nota: Te recomendamos que configures todos los atributos. Cuando uno o varios de los atributos no se definen, se genera un mensaje de advertencia sobre el estado del feed. Si no se define ningún atributo, la tarifa no se muestra como reembolsable. Los atributos son los siguientes:
Cuando configures los atributos, ten en cuenta lo siguiente:
|
<RoomBundle> |
Optional | <RoomBundle> |
Contenedor de información sobre descripciones físicas de una habitación (incluido el precio), paquetes de servicios y algunos datos sobre la política de compras del hotel y el itinerario en cuestión.
En general, puedes usar este elemento para definir el precio base de una habitación y de los distintos tipos de habitaciones de la misma propiedad. Aunque es posible definir inserciones de descripciones de Configuración de habitación, deberías usar un mensaje Transaction independiente para establecer esta información. Google almacenará los metadatos para que puedas hacer referencia a ellos en futuras actualizaciones de precios, en vez de tener que repetirlos. |
<RoomID> |
Optional | String | ID único de una habitación para asignarlo a los datos de habitación predefinidos. También se utiliza para rellenar la variable de página de destino PARTNER-ROOM-ID. Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación. |
<Tax> |
Optional | Float | Impuestos que se calculan para el precio final de una habitación.
El elemento <Tax> utiliza un único atributo obligatorio, currency , con el que se puede definir el código de moneda de 3 letras para los impuestos. Por ejemplo, "USD". El elemento <Tax> es obligatorio si <Baserate> es mayor que cero. |
Ejemplos
Ejemplo con varias propiedades
En el siguiente ejemplo se define un itinerario y los precios de 2 propiedades:
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-23T16:20:00-04:00" id="42"> <Result> <Property>060773</Property> <RoomID>RoomType101</RoomID> <PackageID>Package101</PackageID> <Checkin>2018-06-10</Checkin> <Nights>2</Nights> <Baserate currency="USD">278.33</Baserate> <Tax currency="USD">25.12</Tax> <OtherFees currency="USD">2.00</OtherFees> <AllowablePointsOfSale> <PointOfSale id="site1"/> </AllowablePointsOfSale> </Result> <Result> <Property>052213</Property> <RoomID>RoomType101</RoomID> <PackageID>Package101</PackageID> <Checkin>2018-06-10</Checkin> <Nights>2</Nights> <Baserate currency="USD">299.98</Baserate> <Tax currency="USD">26.42</Tax> <OtherFees currency="USD">2.00</OtherFees> <AllowablePointsOfSale> <PointOfSale id="otto"/> <PointOfSale id="simon"/> </AllowablePointsOfSale> </Result> </Transaction>
En este ejemplo no se muestran detalles sobre la habitación, como descripción, imagen, título, nombre o capacidad.
Esta información la puedes definir una sola vez en un mensaje Transaction independiente, que Google almacenará. Luego, puedes hacer referencia a ella en todas las actualizaciones de precios e inventarios posteriores. Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación.
Ejemplo con varias tarifas
En el siguiente ejemplo se define un único itinerario y una sola propiedad con varias tarifas para distintas ocupaciones. El elemento <Rates>
se puede utilizar para indicar los precios de una propiedad específica que tenga varias tarifas. El siguiente ejemplo también es útil para las propiedades de alquiler vacacional.
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2020-07-23T16:20:00-04:00" id="42"> <Result> <Property>1234</Property> <Checkin>2021-01-13</Checkin> <Nights>9</Nights> <Baserate currency="USD">3196.1</Baserate> <Tax currency="USD">559.49</Tax> <OtherFees currency="USD">543.34</OtherFees> <Occupancy>2</Occupancy> <Rates> <Rate> <Baserate currency="USD">3196.1</Baserate> <Tax currency="USD">559.49</Tax> <OtherFees currency="USD">543.34</OtherFees> <Occupancy>1</Occupancy> </Rate> <Rate> <Baserate currency="USD">3196.1</Baserate> <Tax currency="USD">559.49</Tax> <OtherFees currency="USD">543.34</OtherFees> <Occupancy>3</Occupancy> </Rate> <Rate> <Baserate currency="USD">3196.1</Baserate> <Tax currency="USD">559.49</Tax> <OtherFees currency="USD">543.34</OtherFees> <Occupancy>4</Occupancy> </Rate> <Rate> <Baserate currency="USD">3196.1</Baserate> <Tax currency="USD">559.49</Tax> <OtherFees currency="USD">543.34</OtherFees> <Occupancy>5</Occupancy> </Rate> <Rate> <Baserate currency="USD">3196.1</Baserate> <Tax currency="USD">559.49</Tax> <OtherFees currency="USD">543.34</OtherFees> <Occupancy>6</Occupancy> </Rate> </Rates> </Result> </Transaction>
<Rates>
Se trata de un contenedor de uno o más bloques <Rate>
. Cada <Rate>
de <Rates>
define un precio diferente para cada combinación de habitación e itinerario.
Utiliza el elemento <Rates>
solo cuando haya varias tarifas para la misma combinación de habitación e itinerario. Por ejemplo, puedes definir varias tarifas para las tarifas condicionales, privadas o condicionales de las Configuraciones de habitación.
El elemento <Rates>
ocupa el siguiente lugar en la jerarquía de un mensaje Transaction basado en XML:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
(Can also contain<Rates>
) + ...
Los valores configurados en un elemento <Rate>
anulan los valores relacionados con los precios en los elementos <Result>
o <RoomBundle>
principales. Si no se definen en <Rate>
, heredan el valor del elemento principal.
Sintaxis
El elemento <Rates>
utiliza la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <Rates> <Rate rate_rule_id="rate_rule_id"> <Baserate currency="currency_code">price</Baserate> <Tax currency="currency_code">tax_amount</Tax> <OtherFees currency="currency_code">fee_amount</OtherFees> <ExpirationTime>expiration_time</ExpirationTime> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <ChargeCurrency>[deposit|hotel|installment|web]</ChargeCurrency> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> </AllowablePointsOfSale> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> ... <Custom[1-5]>custom_value</Custom[1-5]> </Rate> ... </Rates> </Result> ... </Transaction>
Atributos
El elemento <Rates>
tiene los siguientes atributos:
Atributo | ¿Es obligatorio? | Descripción |
---|---|---|
rate_rule_id |
Optional | En el caso de las tarifas condicionales, este ID empareja las tarifas con las definiciones de tu archivo de definiciones de reglas de tarifas. Este campo no puede tener más de 40 caracteres. |
Elementos secundarios
El elemento <Rates>
tiene los siguientes elementos secundarios:
Elemento secundario | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
<AllowablePointsOfSale> |
Optional | Object | Una o más páginas de destino del hotel que cumplen los requisitos. Este elemento utiliza la misma sintaxis que <AllowablePointsOfSale> en <Result> . |
<Baserate> |
Required | Float | Precio de la habitación según la estancia. Este elemento utiliza la misma sintaxis que <Baserate> en <Result> .
Nota: El elemento secundario |
<ChargeCurrency> |
Optional | Enum | Define cuándo abona el usuario la reserva y dónde. Este elemento utiliza la misma sintaxis que <ChargeCurrency> en <Result> . |
<Custom[1‑5]> |
Optional | String | Campos personalizados que puedes usar para transferir datos adicionales sobre un hotel a una página de destino. Este elemento utiliza la misma sintaxis que <Custom[1‑5]> en <Result> . Hay un límite de 200 caracteres por campo personalizado. Para obtener más información, consulta este artículo sobre los archivos de páginas de destino. |
<ExpirationTime> |
Optional | DateTime | Fecha y hora en las que se considera que la tarifa ha caducado. Este elemento utiliza la misma sintaxis que <ExpirationTime> en <Result> . |
<Occupancy> |
Optional | Integer | Número máximo de huéspedes.
|
<OtherFees> |
Required | Float | Comisiones al margen de la tarifa base y los impuestos que influyen en el precio final de una habitación. Este elemento utiliza la misma sintaxis que <OtherFees> en <Result> . |
<Refundable> |
Optional | Object | Permite indicar si una tarifa admite reembolsos completos o cancelaciones gratuitas. Si no se proporciona, no aparecerá información sobre reembolsos.
Si se define una política de reembolsos a nivel de <PackageData> , se anula cualquier política de este tipo a nivel de <Result> . Si se define una política de reembolsos a nivel de <Rates> , se anula cualquier política de este tipo a nivel de <PackageData> . Los precios reembolsables también se pueden destacar para los usuarios mediante opciones alternativas, sin tener que modificar directamente el esquema de los mensajes Transaction. Más información sobre estas opciones
En el ejemplo siguiente se muestra el elemento <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Nota: Te recomendamos que configures todos los atributos. Cuando no se definen uno o varios de los atributos, se genera un mensaje de advertencia sobre el estado del feed. Si no se configura ningún atributo, la tarifa no se muestra como reembolsable. Los atributos son los siguientes:
Cuando configures los atributos, ten en cuenta lo siguiente:
|
<Tax> |
Required | Float | Impuestos que se calculan para el precio final de una habitación. Este elemento utiliza la misma sintaxis que <Tax> en <Result> . |
Ten en cuenta que <Rates>
utiliza los mismos elementos secundarios que <Result>
, excepto <Checkin>
, <Nights>
, <Property>
, <RoomBundle>
y <RoomID>
.
Ejemplos
Ejemplo 1
El siguiente ejemplo corresponde a un mensaje Transaction que contiene una tarifa base y una tarifa condicional:
<?xml version="1.0" encoding="UTF-8" ?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <Result> <Property>1234</Property> <Checkin>2018-06-10</Checkin> <Nights>1</Nights> <Baserate currency="USD">200.00</Baserate> <Tax currency="USD">20.00</Tax> <OtherFees currency="USD">1.00</OtherFees> <Rates> <!-- The rate_rule_id is required when using conditional rates --> <Rate rate_rule_id="mobile"> <!-- Override base rate and taxes for conditional rates --> <Baserate currency="USD">180.00</Baserate> <Tax currency="USD">18.00</Tax> <!-- NOTE: OtherFees is inherited from the above setting --> <Custom1>ratecode123</Custom1> </Rate> </Rates> </Result> </Transaction>
Ejemplo 2
En el siguiente ejemplo se definen una tarifa base y varias tarifas condicionales dentro de un elemento <RoomBundle>
:
<?xml version="1.0" encoding="UTF-8" ?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <Result> <Property>1234</Property> <Checkin>2018-06-10</Checkin> <Nights>2</Nights> <!-- Any attribute listed below will not be inherited between bundles or baserates. --> <!-- The baserate attribute is optional. --> <!-- If a baserate is provided, the pricing must match a specific roombundle price provided below. --> <Baserate currency="USD">300.00</Baserate> <Tax currency="USD">30.00</Tax> <OtherFees currency="USD">2.00</OtherFees> <!-- When Google receives new room bundle information for an itinerary, all previous room bundle pricing is dropped from Google's cache. Thus, if you want to delete a specific room bundle from Google's cache, you may do so by simply not providing that specific room bundle in subsequent transaction messages. --> <RoomBundle> ... <!-- RoomID is required, PackageID is recommended. --> <RoomID>5</RoomID> <PackageID>ABC</PackageID> <!-- Baserate is required. --> <Baserate currency="USD">275.00</Baserate> <Tax currency="USD">27.50</Tax> <OtherFees currency="USD">2.00</OtherFees> <!-- RatePlanID is optional and represents the unique identifier for a room and package data combination. We strongly recommend using RatePlanID as a variable to build your dynamic landing page (formerly Point of Sale) URL. For details, see Using Variables and Conditions. --> <RatePlanID>5-ABC</RatePlanID> <!-- Occupancy is mandatory for RoomBundle elements. --> <!-- Elements below will get inherited to nested rate elements. --> <Occupancy>2</Occupancy> <OccupancyDetails> <NumAdults>2</NumAdults> </OccupancyDetails> <InternetIncluded>1</InternetIncluded> <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. --> <ChargeCurrency>web</ChargeCurrency> <Custom1>ratebasic</Custom1> <!-- Neither rate overrides Custom2. --> <Custom2>ratebasic</Custom2> <Rates> <Rate rate_rule_id="mobile"> <Baserate currency="USD">258.33</Baserate> <Tax currency="USD">25.83</Tax> <OtherFees currency="USD">1.00</OtherFees> <!-- The value below overrides ChargeCurrency from roombundle. --> <ChargeCurrency>hotel</ChargeCurrency> <!-- The value below overrides Custom1 from roombundle. --> <Custom1>ratecode321</Custom1> <!-- Custom2 is inherited from roombundle. --> </Rate> <Rate rate_rule_id="us_or_gb"> <Baserate currency="USD">268.33</Baserate> <Tax currency="USD">26.83</Tax> <OtherFees currency="USD">1.00</OtherFees> <!-- The value below overrides Custom1 from roombundle. --> <Custom1>ratecode432</Custom1> <!-- Custom2 is inherited from roombundle. --> </Rate> </Rates> </RoomBundle> </Result> </Transaction>
<RoomBundle>
Se trata de un elemento secundario de <Result>
que define los precios y la disponibilidad de las Configuraciones de habitación en un mensaje <Transaction>
. Debes definir un elemento independiente para cada combinación de paquete e itinerario. Para definir el paquete y los términos de las Configuraciones de habitación, usa <RoomData>
.
El elemento <RoomBundle>
ocupa el siguiente lugar en la jerarquía de un mensaje Transaction basado en XML:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Consulta más información en este artículo sobre cómo usar las Configuraciones de habitación.
Sintaxis
El elemento <RoomBundle>
utiliza la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <RoomBundle> <!-- Required unless specified inline under<RoomData>
--> <RoomID>room_ID</RoomID> <!-- Required<PackageData>
--> <PackageID>package_ID</PackageID> <!-- Required --> <Baserate currency="currency_code">price</Baserate> <!-- Required --> <Tax currency="currency_code">taxes</Tax> <!-- Required --> <OtherFees currency="currency_code">other_fees</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <!-- Required --> <Capacity>max_number_of_occupants</Capacity> <ChargeCurrency>[deposit|hotel|installment|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> <BreakfastIncluded>boolean_value</BreakfastIncluded> <InternetIncluded>boolean_value</InternetIncluded> <ParkingIncluded>boolean_value</ParkingIncluded> <RatePlanID>rate_plan_ID</RatePlanID> <Rates>...</Rates> <Custom1>custom_value_1</Custom1> <Custom2>custom_value_2</Custom2> <Custom3>custom_value_3</Custom3> <Custom4>custom_value_4</Custom4> <Custom5>custom_value_5</Custom5> </RoomBundle> ... </Result> </Transaction>
También puedes definir <PackageData>
o <RoomData>
dentro de <RoomBundle>
. Sin embargo, esta opción es menos eficiente que la de definirlos por separado y hacer referencia a ellos con <RoomID>
y <PackageID>
, por lo que no se recomienda.
Atributos
El elemento <RoomBundle>
no tiene atributos.
Elementos secundarios
El elemento <RoomBundle>
tiene los siguientes elementos secundarios:
Elemento secundario | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
<Baserate> |
Required | Float | Permite definir el precio de una Configuración de habitación según la estancia. Este elemento usa la misma sintaxis que <Baserate> en <Result> , con la siguiente excepción:
|
<BreakfastIncluded> |
Optional | Boolean | Especifica si la Configuración de habitación incluye o no el desayuno en la tarifa. |
<Capacity> |
Optional | Integer | Número máximo de personas que pueden alojarse físicamente según una Configuración de habitación. Cuando se especifica, este valor debe ser igual o mayor que el valor del elemento El valor de Si especificas este elemento tanto en |
<ChargeCurrency> |
Optional | Enum | Define cuándo abona el usuario la reserva y dónde. Este elemento utiliza la misma sintaxis que <ChargeCurrency> en un <Result> .
El valor predeterminado es |
<Custom[1‑5]> |
Optional | String | Campos personalizados para transferir datos adicionales sobre la Configuración de habitación a las páginas de destino. Estos elementos utilizan la misma sintaxis que <Custom[1-5]> en <Result> . Hay un límite de 200 caracteres por campo personalizado. Para obtener más información, consulta este artículo sobre los archivos de páginas de destino. |
<InternetIncluded> |
Optional | Boolean | Indica si en una Configuración de habitación está incluido el acceso a Internet gratuito, cuando en otras configuraciones no se incluya este servicio. No incluyas este elemento en las Configuraciones de habitación de un hotel que ofrezca acceso gratuito a Internet en todas las habitaciones. Este elemento no se aplica al servicio de Internet por cable o inalámbrico que no esté disponible en las habitaciones de los huéspedes. |
<Occupancy> |
Required | Integer | Número máximo de huéspedes para los que está diseñada la Configuración de habitación. Por ejemplo, en una suite grande podrían alojarse físicamente 6 personas, pero el "Paquete Luna de miel" está diseñado únicamente para 2 huéspedes.
Este valor debe ser menor o igual que el del elemento Cuando definas la ocupación en la URL de tu página de destino, utiliza las variables El valor de Notas:
|
<OtherFees> |
Required | Float | Comisiones al margen de la tarifa base y los impuestos que influyen en el precio final de una habitación. El elemento <OtherFees> utiliza un único atributo obligatorio, currency , con el que puedes definir el código de moneda de 3 letras para las comisiones. Por ejemplo, "USD" para el dólar estadounidense. |
<PackageID> |
Optional (recommended) | String | ID único de los datos de un paquete. Utilízalo para emparejar los datos de una Configuración de habitación con los que se han enviado en <PackageData> . Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación. También puedes usar este ID para hacer referencia a una definición de Configuración de habitación común en un mensaje Transaction cuando definas inserciones de datos de esa Configuración de habitación. |
<ParkingIncluded> |
Optional | Boolean | Indica si una Configuración de habitación incluye aparcamiento gratuito cuando, por lo general, es un servicio de pago en ese hotel. No asignes ningún valor a este elemento en hoteles que ofrezcan aparcamiento gratuito.
Los valores válidos son |
<RatePlanID> |
Optional | String | ID del plan de tarifas que representa el identificador único de una combinación de habitación y paquete. Por ejemplo, si <RoomID> tiene el valor "5" y <PackageID> , el valor "ABC", puedes usar el valor "5-ABC" para <RatePlanID> . Te recomendamos que utilices el elemento RatePlanID como variable para crear la URL de la página de destino (antes conocida como "punto de venta") dinámica.
Consulta más información en este artículo sobre cómo usar variables y condiciones. |
<Rates> |
Optional | <Rates> |
Tarifas que anulan los valores predeterminados de una Configuración de habitación. Este elemento utiliza la misma sintaxis que <Rates> en <Result> . |
<Refundable> |
Optional | Object | Permite indicar si una tarifa admite reembolsos completos o cancelaciones gratuitas. Si no se proporciona, no aparecerá información sobre reembolsos.
Si se define una política de reembolsos a nivel de <PackageData> , se anula cualquier política de este tipo a nivel de <Result> . Si se define una política de reembolsos a nivel de <Rates> , se anula cualquier política de este tipo a nivel de <PackageData> . Los precios reembolsables también se pueden destacar para los usuarios mediante opciones alternativas, sin tener que modificar directamente el esquema de los mensajes Transaction. Más información sobre estas opciones
En el ejemplo siguiente se muestra el elemento <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Nota: Te recomendamos que configures todos los atributos. Cuando uno o varios de los atributos no se definen, se genera un mensaje de advertencia sobre el estado del feed. Si no se define ningún atributo, la tarifa no se muestra como reembolsable. Los atributos son los siguientes:
Cuando configures los atributos, ten en cuenta lo siguiente:
|
<RoomID> |
Required | String | ID único de los datos de una habitación. Utilízalo para emparejar los datos de una Configuración de habitación con los que hayas enviado en <RoomData> .
Para obtener más información, consulta el artículo sobre metadatos de Configuración de habitación.
También puedes usar este ID para hacer referencia a una definición de habitación común en un mensaje Transaction cuando definas inserciones de datos de esa habitación. |
<Tax> |
Required | Float | Impuestos que se calculan para el precio final de una habitación.
El elemento <Tax> utiliza un único atributo obligatorio, currency , con el que se puede definir el código de moneda de 3 letras para los impuestos. Por ejemplo, "USD" para el dólar estadounidense. |
Ejemplos
Ejemplo 1
En el siguiente ejemplo se define una respuesta con un paquete de ocupación de una persona.
Cuando un usuario elige 1
en el selector de ocupación, Google muestra el precio disponible más bajo, independientemente de la ocupación.
Si no hay precios disponibles para una ocupación de una sola persona, Google mostrará el precio de ocupación más bajo para 2 personas. Los precios para una ocupación de una persona no se pueden consultar en tiempo real si hay precios para 2 o más personas almacenados en caché relativos a un itinerario.
En este ejemplo se hace referencia a los metadatos de una habitación y un paquete predefinidos con los elementos <RoomID>
y <PackageID>
.
Usa los elementos <RoomData>
y <PackageData>
para definir esa información.
<!-- Efficient method of defining Room Bundles--> <!----- Occupancy of 1 example -----> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678"> <!-- Part1: Define RoomData and PackageData in PropertyDataSet --> <!-- Note: Once defined it does not have to be repeated for future Transaction Messages. PropertyDataSets can also be defined and sent in their own Transaction Message separately from pricing. Google can be configured to pull just PropertyDataSets once per day (or on a predefined frequency). --> <PropertyDataSet> <Property>180054</Property> <!-- Can be reused by multiple Room Bundles --> <RoomData> <RoomID>060773</RoomID> <Name> <Text text="Single Queen Room - Non-Smoking" language="en"/> <Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/> </Name> <!-- Room can accommodate up to 4, but package data specifies occupancy between 1 to 4 --> <Capacity>4</Capacity> </RoomData> <RoomData> <RoomID>436233</RoomID> <Name> <Text text="Premium King Room - Non-Smoking" language="en"/> <Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/> </Name> <Capacity>4</Capacity> </RoomData> <!-- Can be reused by multiple Room Bundles --> <PackageData> <PackageID>P11111</PackageID> <Occupancy>1</Occupancy> <ChargeCurrency>web</ChargeCurrency> <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> <ParkingIncluded>1</ParkingIncluded> <InternetIncluded>1</InternetIncluded> </PackageData> <PackageData> <PackageID>P54321</PackageID> <Occupancy>2</Occupancy> <ChargeCurrency>web</ChargeCurrency> <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> <ParkingIncluded>1</ParkingIncluded> <InternetIncluded>1</InternetIncluded> </PackageData> <PackageData> <PackageID>P12345</PackageID> <Occupancy>4</Occupancy> <ChargeCurrency>web</ChargeCurrency> <Refundable available="1" refundable_until_days="1" refundable_until_time="18:00:00"/> <ParkingIncluded>1</ParkingIncluded> <InternetIncluded>1</InternetIncluded> </PackageData> </PropertyDataSet> <!-- Efficient method of defining Room Bundles --> <!-- Part 2: Reference RoomData and PackageData through ID --> <Result> <!-- Note: The default baserate must still show lowest price for double occupancy or more. --> <!-- Single occupancy pricing will be specified in a room bundle below --> <Property>180054</Property> <Checkin>2017-10-07</Checkin> <Nights>2</Nights> <!-- The Baserate, Tax, and OtherFees elements below are optional. If provided, these elements much match at least one room bundle pricing below --> <Baserate currency="USD">199.99</Baserate> <Tax currency="USD">25.12</Tax> <OtherFees currency="USD">2.00</OtherFees> <Occupancy>2</Occupancy> <OccupancyDetails> <NumAdults>2</NumAdults> </OccupancyDetails> <!-- Base Room Bundle --> <RoomBundle> <RoomID>060773</RoomID> <PackageID>P54321</PackageID> <!-- Price for 2 ("occupancy") is repeated and matches baserates and attributes provided above --> <Baserate currency="USD">199.99</Baserate> <Tax currency="USD">25.12</Tax> <OtherFees currency="USD">2.00</OtherFees> <RatePlanID>060773-P54321</RatePlanID> </RoomBundle> <RoomBundle> <RoomID>060773</RoomID> <PackageID>P11111</PackageID> <!-- Price for 1 ("occupancy") is the lowest price and will be displayed --> <Baserate currency="USD">174.99</Baserate> <Tax currency="USD">22.08</Tax> <OtherFees currency="USD">2.00</OtherFees> <RatePlanID>060773-P11111</RatePlanID> </RoomBundle> <!-- Premium Room Bundle --> <RoomBundle> <RoomID>436233</RoomID> <PackageID>P12345</PackageID> <!-- Price for 4 ("occupancy"), any eligible room bundle with 1 or more occupancy will be displayed--> <Baserate currency="USD">298.88</Baserate> <Tax currency="USD">42.12</Tax> <OtherFees currency="USD">10.00</OtherFees> <RatePlanID>436233-P12345</RatePlanID> </RoomBundle> <!-- ..Continue providing all available RoomBundle rates under matched property for 1 or more occupancies..--> </Result> </Transaction>
Ejemplo 2
En el siguiente ejemplo se define una respuesta que contiene una ocupación de 2 o más huéspedes.
En este ejemplo se hace referencia a los metadatos de una habitación y un paquete predefinidos con los elementos <RoomID>
y <PackageID>
. Usa los elementos <RoomData>
y <PackageData>
para definir esa información.
<!-- Efficient method of defining Room Bundles--> <!----- Occupancy of 3 example -----> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678"> <!-- Efficient method of defining Room Bundles--> <!-- Part1: Define RoomData and PackageData in PropertyDataSet --> <PropertyDataSet> <Property>180054</Property> <!-- Can be reused by multiple Room Bundles --> <RoomData> <RoomID>060773</RoomID> <Name> <Text text="Single Queen Room - Non-Smoking" language="en"/> <Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/> </Name> <!-- Room can accommodate up to 4, but package data specifies occupancy between 1 to 4 --> <Capacity>4</Capacity> </RoomData> <RoomData> <RoomID>436233</RoomID> <Name> <Text text="Premium King Room - Non-Smoking" language="en"/> <Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/> </Name> <Capacity>4</Capacity> </RoomData> <!-- Can be reused by multiple Room Bundles --> <PackageData> <PackageID>P33333</PackageID> <Occupancy>3</Occupancy> <ChargeCurrency>web</ChargeCurrency> <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> <ParkingIncluded>1</ParkingIncluded> <InternetIncluded>1</InternetIncluded> </PackageData> <PackageData> <PackageID>P12345</PackageID> <Occupancy>4</Occupancy> <ChargeCurrency>web</ChargeCurrency> <Refundable available="1" refundable_until_days="1" refundable_until_time="18:00:00"/> <ParkingIncluded>1</ParkingIncluded> <InternetIncluded>1</InternetIncluded> </PackageData> </PropertyDataSet> <Result> <!-- Note: The default baserate must still show lowest price for double occupancy or more. --> <Property>180054</Property> <Checkin>2017-10-07</Checkin> <Nights>2</Nights> <!-- Any attribute listed below will not be inherited between bundles or baserates --> <Baserate currency="USD">499.99</Baserate> <Tax currency="USD">55.12</Tax> <OtherFees currency="USD">22.00</OtherFees> <Occupancy>3</Occupancy> <OccupancyDetails> <NumAdults>3</NumAdults> </OccupancyDetails> <!-- Efficient method of defining Room Bundles --> <!-- Part 2: Reference RoomData and PackageData through ID --> <!-- Base Room Bundle --> <RoomBundle> <!-- Baserate above and attributes must match atleast one room bundle below --> <RoomID>060773</RoomID> <PackageID>P33333</PackageID> <!-- Price for 2 ("occupancy") is repeated and matches baserates and attributes provided above --> <Baserate currency="USD">499.99</Baserate> <Tax currency="USD">55.12</Tax> <OtherFees currency="USD">22.00</OtherFees> </RoomBundle> <!-- Premium Room Bundle --> <RoomBundle> <RoomID>436233</RoomID> <PackageID>P12345</PackageID> <!-- Lowest price for 3 ("occupancy"), shown below, will be displayed --> <Baserate currency="USD">598.88</Baserate> <Tax currency="USD">62.12</Tax> <OtherFees currency="USD">30.00</OtherFees> </RoomBundle> <!-- ..Continue providing all available RoomBundle rates under matched property for 2 or more occupancies..--> </Result> </Transaction>
Ejemplo 3
En el siguiente ejemplo, se define la ocupación en varias Configuraciones de habitación para mostrar los posibles precios de las habitaciones de un albergue.
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <!-- Suite Room Bundle --> <RoomBundle> <RoomID>suite1</RoomID> <PackageID>standard</PackageID> <Occupancy>2</Occupancy> <!-- Price for room --> <Baserate currency="USD">80.00</Baserate> <Tax currency="USD">5.12</Tax> <OtherFees currency="USD">2.00</OtherFees> <RoomData> <Name> <Text text="Suite for 2" language="en"/> </Name> </RoomData> </RoomBundle> <!-- Small Dorm Room Bundle --> <RoomBundle> <RoomID>small_dorm</RoomID> <PackageID>economy</PackageID> <Occupancy>1</Occupancy> <!-- Price per bed --> <Baserate currency="USD">35.00</Baserate> <Tax currency="USD">3.50</Tax> <OtherFees currency="USD">2.00</OtherFees> <RoomData> <Name> <Text text="1 bed in small dorm" language="en"/> </Name> </RoomData> </RoomBundle> <!-- Large Dorm Room Bundle --> <RoomBundle> <RoomID>large_dorm</RoomID> <PackageID>economy</PackageID> <Occupancy>1</Occupancy> <!-- Price per bed --> <Baserate currency="USD">20.00</Baserate> <Tax currency="USD">2.50</Tax> <OtherFees currency="USD">2.00</OtherFees> <RoomData> <Name> <Text text="1 bed in large dorm" language="en"/> </Name> </RoomData> </RoomBundle> ... </Result> </Transaction>
Ejemplo 4
En el siguiente ejemplo se definen una tarifa base y varias tarifas condicionales dentro de un elemento <RoomBundle>
:
<?xml version="1.0" encoding="UTF-8" ?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <Result> <Property>1234</Property> <Checkin>2018-06-10</Checkin> <Nights>2</Nights> <!-- Any attribute listed below will not be inherited between bundles or baserates. --> <!-- The baserate attribute is optional. --> <!-- If a baserate is provided, the pricing must match a specific roombundle price provided below. --> <Baserate currency="USD">300.00</Baserate> <Tax currency="USD">30.00</Tax> <OtherFees currency="USD">2.00</OtherFees> <!-- When Google receives new room bundle information for an itinerary, all previous room bundle pricing is dropped from Google's cache. Thus, if you want to delete a specific room bundle from Google's cache, you may do so by simply not providing that specific room bundle in subsequent transaction messages. --> <RoomBundle> ... <!-- RoomID is required, PackageID is recommended. --> <RoomID>5</RoomID> <PackageID>ABC</PackageID> <!-- Baserate is required. --> <Baserate currency="USD">275.00</Baserate> <Tax currency="USD">27.50</Tax> <OtherFees currency="USD">2.00</OtherFees> <!-- RatePlanID is optional and represents the unique identifier for a room and package data combination. We strongly recommend using RatePlanID as a variable to build your dynamic landing page (formerly Point of Sale) URL. For details, see Using Variables and Conditions. --> <RatePlanID>5-ABC</RatePlanID> <!-- Occupancy is mandatory for RoomBundle elements. --> <!-- Elements below will get inherited to nested rate elements. --> <Occupancy>2</Occupancy> <OccupancyDetails> <NumAdults>2</NumAdults> </OccupancyDetails> <InternetIncluded>1</InternetIncluded> <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. --> <ChargeCurrency>web</ChargeCurrency> <Custom1>ratebasic</Custom1> <!-- Neither rate overrides Custom2. --> <Custom2>ratebasic</Custom2> <Rates> <Rate rate_rule_id="mobile"> <Baserate currency="USD">258.33</Baserate> <Tax currency="USD">25.83</Tax> <OtherFees currency="USD">1.00</OtherFees> <!-- The value below overrides ChargeCurrency from roombundle. --> <ChargeCurrency>hotel</ChargeCurrency> <!-- The value below overrides Custom1 from roombundle. --> <Custom1>ratecode321</Custom1> <!-- Custom2 is inherited from roombundle. --> </Rate> <Rate rate_rule_id="us_or_gb"> <Baserate currency="USD">268.33</Baserate> <Tax currency="USD">26.83</Tax> <OtherFees currency="USD">1.00</OtherFees> <!-- The value below overrides Custom1 from roombundle. --> <Custom1>ratecode432</Custom1> <!-- Custom2 is inherited from roombundle. --> </Rate> </Rates> </RoomBundle> </Result> </Transaction>
<OccupancyDetails>
El elemento <Occupancy>
de un mensaje Transaction indica el número máximo de huéspedes de una habitación o un paquete. <OccupancyDetails>
puede contener información adicional, como el número y el tipo de huéspedes (adultos o niños).
Cuando <Occupancy>
y <OccupancyDetails>
aparecen en el elemento <Rates>
de <Result>
o <RoomBundle>
, significa que la tarifa está limitada por los detalles de ocupación.
Sintaxis
Cuando aparece <OccupancyDetails>
, siempre va precedido de <Occupancy>
. Ten en cuenta la siguiente sintaxis:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <NumAdults>number_of_adults</NumAdults> <Children> <Child age=age_of_one_child_guest/> <Child age=age_of_one_child_guest/> </Children> </OccupancyDetails> </Result> </Transaction>
Elementos secundarios
El elemento <OccupancyDetails>
tiene los siguientes elementos secundarios:
Elemento secundario | ¿Es obligatorio? | Tipo | Descripción |
---|---|---|---|
<NumAdults> |
Required | Integer | Número de huéspedes adultos (1 como mínimo y 20 como máximo). |
<Children> |
Optional | Integer | Indica si alguno de los huéspedes es un niño/a. |
<Child "age"> |
Optional | Integer | Edad máxima de cada niño/a. |
Ejemplos
En los siguientes ejemplos se muestra cómo puede aparecer <OccupancyDetails>
en los elementos <Results>
o <RoomBundle>
, o en el elemento secundario <Rates>
.
Ejemplo 1
En el siguiente ejemplo se define un itinerario de una propiedad y su precio, en respuesta a una consulta de precios en tiempo real en la que el usuario ha especificado el número y el tipo de huéspedes. En este caso, <Result>
devuelve <OccupancyDetails>
-- 2 adultos y 1 niño/a.
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-23T16:20:00-04:00" id="42"> <Result> <Property>060773</Property> <RoomID>RoomType101</RoomID> <PackageID>Package101</PackageID> <Checkin>2018-06-10</Checkin> <Nights>2</Nights> <Baserate currency="USD">278.33</Baserate> <Tax currency="USD">25.12</Tax> <OtherFees currency="USD">2.00</OtherFees> <AllowablePointsOfSale> <PointOfSale id="site1"/> </AllowablePointsOfSale> <Occupancy>3</Occupancy> <OccupancyDetails> <NumAdults>2</NumAdults> <Children> <Child age="17"/> </Children> </OccupancyDetails> </Result> </Transaction>
Ejemplo 2
En el siguiente ejemplo se define un itinerario y su precio para 1 adulto y 1 niño/a. En este caso, el elemento <Rates>
de <Result>
devuelve <OccupancyDetails>
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2018-04-18T11:27:45-04:00"> <Result> <Property>8251</Property> <Checkin>2018-06-20</Checkin> <Nights>1</Nights> <Baserate currency="USD">62.18</Baserate> <Tax currency="USD">2.45</Tax> <OtherFees currency="USD">0.00</OtherFees> <Rates> <Rate rate_rule_id="rule-951"> <Occupancy>2</Occupancy> <OccupancyDetails> <NumAdults>1</NumAdults> <Children> <Child age="17"/> </Children> </OccupancyDetails> <Baserate currency="USD">42.61</Baserate> <Tax currency="USD">5.70</Tax> <OtherFees currency="USD">0.00</OtherFees> <Custom1>abc4</Custom1> <AllowablePointsOfSale> <PointOfSale id="yourhotelpartnersite.com"/> </AllowablePointsOfSale> </Rate> </Rates> </Result> </Transaction>
Ejemplo 3
En el siguiente ejemplo se define una ocupación de 2 adultos y 1 niño/a para una estancia de 2 noches, con una tarifa reembolsable. En este caso, el elemento <OccupancyDetails>
aparece dentro de <RoomBundle>
.
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-23T16:20:00-04:00" id="42"> <Result> <Property>6781291</Property> <Checkin>2017-08-05</Checkin> <Nights>2</Nights> ... <RoomBundle> <RoomID>10291</RoomID> <RatePlanID>564739</RatePlanID> <PackageID>564739</PackageID> <Occupancy>3</Occupancy> <OccupancyDetails> <NumAdults>2</NumAdults> <Children> <Child age="17"/> </Children> </OccupancyDetails> <ChargeCurrency>web</ChargeCurrency> <Refundable available="true" refundable_until_days="1" refundable_until_time="23:59:00" /> <Baserate currency="USD">185.34</Baserate> <Tax currency="USD">37.06</Tax> <OtherFees currency="USD">2.22</OtherFees> </RoomBundle> </Result> </Transaction>
Ejemplo 4
En el siguiente ejemplo se definen varias tarifas de <RoomBundle>
que están limitadas a una ocupación de 2 adultos y 2 niños. En este caso, <OccupancyDetails>
aparece en el elemento <Rates>
de <RoomBundle>
<?xml version="1.0" encoding="UTF-8"?> <Transaction timestamp="2017-07-18T16:20:00-04:00" id="42"> <Result> <Property>1234</Property> <Checkin>2018-06-10</Checkin> <Nights>2</Nights> <Baserate currency="USD">275.00</Baserate> <Tax currency="USD">27.50</Tax> <OtherFees currency="USD">0</OtherFees> <RoomBundle> <RoomID>5</RoomID> <PackageID>STD</PackageID> <Baserate currency="USD">275.00</Baserate> <Tax currency="USD">27.50</Tax> <OtherFees currency="USD">0</OtherFees> <InternetIncluded>1</InternetIncluded> <ChargeCurrency>web</ChargeCurrency> <Custom1>ratebasic</Custom1> <Custom2>ratebasic</Custom2> <Occupancy>4</Occupancy> <OccupancyDetails> <NumAdults>2</NumAdults> <Children> <Child age="17"/> <Child age="17"/> </Children> </OccupancyDetails> <Rates> <Rate rate_rule_id="mobile"> <Baserate currency="USD">258.33</Baserate> <Tax currency="USD">25.83</Tax> <OtherFees currency="USD">1.00</OtherFees> <ChargeCurrency>hotel</ChargeCurrency> <Custom1>ratecode321</Custom1> </Rate> <Rate rate_rule_id="us_or_gb"> <Baserate currency="USD">268.33</Baserate> <Tax currency="USD">26.83</Tax> <OtherFees currency="USD">1.00</OtherFees> <Custom1>ratecode432</Custom1> </Rate> </Rates> </RoomBundle> </Result> </Transaction>