Referencia de XML del precio y del inventario de habitaciones (mensajes Transaction)

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 timestamp y no por el orden en que se reciben. Por ejemplo, si llega una actualización de precios con una marca de tiempo de 2019-05-03 14:09:00 después de un mensaje que tiene una marca de tiempo de 2019-05-03 14:10:00, la actualización se procesará en primer lugar y se utilizará el precio del mensaje con la marca de tiempo de 2019-05-03 14:10:00.

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 <RoomBundle> por los que se definen las Configuraciones de habitación y otros tipos de habitaciones de la propiedad. El elemento <Result> también se puede usar para quitar itinerarios del inventario.

* 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 <Occupancy>, que representa el número previsto de huéspedes de una habitación concreta. Por ejemplo, el elemento <Capacity> de una suite grande puede ser 6, pero el elemento <Occupancy> puede ser 4.

El valor de <Capacity> debe ser un número entero positivo entre 1 y 20, ambos incluidos.

<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 <Description> admite un solo elemento secundario, <Text>, que tiene estos 2 atributos obligatorios:

  • text: descripción detallada de la habitación.
  • language: código de idioma de 2 letras (por ejemplo, "fr").

Usa un elemento <Text> independiente para cada idioma en el que pueda aparecer tu anuncio o enlace a reserva gratuito (con valores diferentes para los atributos language).

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, <Text>, que tiene estos 2 atributos obligatorios:

  • text: nombre de la habitación.
  • language: código de idioma de 2 letras (por ejemplo, "fr").

Usa un elemento <Text> independiente para cada idioma en el que pueda aparecer tu anuncio o enlace a reserva gratuito (con valores diferentes para los atributos language).

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 <Capacity>, que es el número de personas que pueden alojarse físicamente en la habitación.

El valor de <Occupancy> debe ser un número entero positivo entre 1 y 99, ambos incluidos.

El elemento <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>.

<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:

  • <URL>: indica la ubicación de la foto. Debe ser pública (no puede estar protegida por un cortafuegos) e incluir el protocolo (http://).
  • <Caption>: especifica el pie de la foto. Este elemento admite un único elemento secundario, <Text>, que tiene dos atributos obligatorios, text y language. El atributo text se corresponde con el pie de foto, y el atributo language especifica un código de idioma de 2 letras, como "en".

<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 <Occupancy>, que representa el número previsto de huéspedes de un paquete concreto. Por ejemplo, el elemento <Capacity> de una suite grande puede ser 6, pero el elemento <Occupancy> del "Paquete Luna de miel" es 2.

El valor de <Capacity> debe ser un número entero positivo entre 1 y 20, ambos incluidos.

Si especificas este elemento tanto en <RoomBundle> como en <PackageData>, el valor de <RoomBundle> tiene prioridad.

<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 web.

<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> admite un solo elemento secundario, <Text>, que tiene 2 atributos obligatorios, text y language. El atributo text corresponde a la descripción y el atributo language permite especificar un código de idioma de 2 letras, tal como se muestra en el ejemplo siguiente:


<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, <Text>, que tiene 2 atributos, text y language. El atributo text corresponde a la descripción y el atributo language permite especificar un código de idioma de 2 letras, tal como se muestra en el ejemplo siguiente:


<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 <Capacity>, que es el número de personas que pueden alojarse físicamente en la habitación.

El valor de <Occupancy> debe ser un número entero positivo entre 1 y 99, ambos incluidos.

Si especificas este elemento tanto en <RoomBundle> como en <PackageData>, el valor de <RoomBundle> tiene prioridad.

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 0 (o false) y 1 (o true). El valor predeterminado es false.

<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> con todos sus atributos definidos:


<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:

  • available (obligatorio): asigna los valores 1 o true para indicar que la tarifa admite un reembolso completo. De lo contrario, asigna los valores 0 o false.
  • refundable_until_days (obligatorio si available se configura como true): especifica el número de días que deben transcurrir antes de la fecha de entrada para poder solicitar un reembolso completo. El valor de refundable_until_days debe ser un número entero entre 0 y 330, ambos incluidos.
  • refundable_until_time (muy recomendable si available se configura como true): especifica la hora límite (hora local del hotel) hasta la que se aceptará una solicitud de reembolso completo. Se puede combinar con refundable_until_days para indicar, por ejemplo, que "los reembolsos se pueden solicitar hasta las 16:00, 2 días antes de la fecha de entrada". Si no se define refundable_until_time, el valor predeterminado es la medianoche.

    En el valor de este atributo se usa este formato de tiempo.

Cuando configures los atributos, ten en cuenta lo siguiente:

  • Si no se definen available ni refundable_until_days, el precio no se muestra como reembolsable.
  • Si available se configura como 0 o false, el resto de los atributos se ignoran. La tarifa no se muestra como reembolsable aunque se definan uno de los otros atributos o los dos.
<MembershipBenefits
Included>
Optional Boolean Indica si la tarifa incluye acceso a las ventajas del estado Élite durante la estancia. Incluye los siguientes parámetros:
  • ProgramName: nombre del programa del estado Élite.
  • ProgramLevel: nivel del programa (por ejemplo, "Oro").
  • NightlyValue (optional): valor por noche de las ventajas.
<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:
  • NumberofMiles: número de millas por itinerario.
  • Provider: proveedor de las millas de viajero frecuente.
<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:
  • Amount: el valor del crédito por itinerario, en la moneda local.

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 se trata de una habitación privada, indica la tarifa de la habitación doble más económica que ofrezcas.
  • Si es una habitación compartida, deja este elemento en blanco y usa <RoomBundle>.
  • La duración total de la estancia, no la tarifa promedio por noche.

Si la habitación no está disponible para el itinerario, establece el valor del elemento <Baserate> en "-1" para indicar que ya no está en el inventario. En estos casos, no recibirás consultas de precios en tiempo real. Sin embargo, si no se proporciona ningún elemento <Baserate>, sí se enviarán consultas de precios en tiempo real.

Para quitar una Configuración de habitación, sigue estas instrucciones.

El elemento <Baserate> no puede incluir símbolos de agrupación de dígitos, como coma (,) o punto (.). Utiliza siempre el punto (.) para separar decimales. Por ejemplo, para representar "1200,40 USD" debes hacerlo así:


<Baserate currency="USD">1200.40</Baserate>

En el elemento <Baserate> se aceptan los siguientes atributos opcionales:

  • all_inclusive: valor booleano que indica si esta tarifa incluye impuestos y comisiones. En general, debes asignar el valor "false" a los usuarios finales de Canadá y EE. UU., y proporcionar valores para los elementos <Tax> y <OtherFees>. Si utilizas precios con todo incluido, es posible que no puedas aparecer en las fichas de Canadá y EE. UU. si no desglosas los impuestos y las comisiones.

    Para el resto de los usuarios finales, los impuestos y las comisiones se incluyen normalmente en la tarifa base y se asigna el valor "true" al atributo all_inclusive. Para obtener más información, consulta nuestra Política de Impuestos y Comisiones.

    El valor predeterminado es "false".

  • currency: código de moneda de 3 letras. Por ejemplo, "USD" para el dólar estadounidense.
<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:

  • "web": el usuario abona el pago online en el momento de hacer la reserva. Este es el valor predeterminado. La página de destino queda definida por el archivo de páginas de destino y puede verse afectada por la moneda, la ubicación o el idioma del usuario, entre otros factores.
  • "hotel": el usuario abona el pago cuando se registra en el hotel. Si el pago siempre se debe hacer en la moneda del hotel, asigna el valor "hotel" a <ChargeCurrency>. La moneda del usuario no tiene ningún impacto en la página de destino.
  • "deposit": el usuario abona una parte en el momento y el resto más tarde, normalmente cuando termina su estancia en el hotel.
  • "installment": el usuario abona una parte inicial de la suma total pendiente, y debe pagar periódicamente un importe fijo durante un periodo determinado.

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:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

Los elementos <Custom> te permiten proporcionar datos arbitrarios. Por ejemplo, puedes especificar un valor en este campo que luego utilizará el archivo de páginas de destino para crear la URL personalizada de una página de destino. 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 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 <OtherFees> es obligatorio si <Baserate> es mayor que cero.

<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.
<Rates> 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 <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.

<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> con todos sus atributos definidos:


<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:

  • available (obligatorio): asigna los valores 1 o true para indicar que la tarifa admite un reembolso completo. De lo contrario, asigna los valores 0 o false.
  • refundable_until_days (obligatorio si available se configura como true): especifica el número de días que deben transcurrir antes de la fecha de entrada para poder solicitar un reembolso completo. El valor de refundable_until_days debe ser un número entero entre 0 y 330, ambos incluidos.
  • refundable_until_time (muy recomendable si available se configura como true): especifica la hora límite (hora local del hotel) hasta la que se aceptará una solicitud de reembolso completo. Se puede combinar con refundable_until_days para indicar, por ejemplo, que "los reembolsos se pueden solicitar hasta las 16:00, 2 días antes de la fecha de entrada". Si no se define refundable_until_time, el valor predeterminado es la medianoche.

    En el valor de este atributo se usa este formato de tiempo.

Cuando configures los atributos, ten en cuenta lo siguiente:

  • Si no se definen available ni refundable_until_days, el precio no se muestra como reembolsable.
  • Si available se configura como 0 o false, el resto de los atributos se ignoran. La tarifa no se muestra como reembolsable aunque se definan uno de los otros atributos o los dos.
<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 <Baserate> de <Rate> no se puede definir como no disponible (-1).

<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. <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.

<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> con todos sus atributos definidos:


<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:

  • available (obligatorio): asigna los valores 1 o true para indicar que la tarifa admite un reembolso completo. De lo contrario, asigna los valores 0 o false.
  • refundable_until_days (obligatorio si available se configura como true): especifica el número de días que deben transcurrir antes de la fecha de entrada para poder solicitar un reembolso completo. El valor de refundable_until_days debe ser un número entero entre 0 y 330, ambos incluidos.
  • refundable_until_time (muy recomendable si available se configura como true): especifica la hora límite (hora local del hotel) hasta la que se aceptará una solicitud de reembolso completo. Se puede combinar con refundable_until_days para indicar, por ejemplo, que "los reembolsos se pueden solicitar hasta las 16:00, 2 días antes de la fecha de entrada". Si no se define refundable_until_time, el valor predeterminado es la medianoche.

    En el valor de este atributo se usa este formato de tiempo.

Cuando configures los atributos, ten en cuenta lo siguiente:

  • Si no se definen available ni refundable_until_days, el precio no se muestra como reembolsable.
  • Si available se configura como 0 o false, el resto de los atributos se ignoran. La tarifa no se muestra como reembolsable aunque se definan uno de los otros atributos o los dos.
<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 <Occupancy>, que representa el número previsto de huéspedes de un paquete concreto. Por ejemplo, el elemento <Capacity> de una suite grande puede ser 6, pero el elemento <Occupancy> del "Paquete Luna de miel" es 2.

El valor de <Capacity> debe ser un número entero positivo entre 1 y 20, ambos incluidos.

Si especificas este elemento tanto en <RoomBundle> como en <PackageData>, el valor de <RoomBundle> tiene prioridad.

<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 web.

<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 <Capacity>, que es el número de personas que pueden alojarse físicamente en la habitación.

Cuando definas la ocupación en la URL de tu página de destino, utiliza las variables NUM-ADULTS y NUM-CHILDREN, tal como se describe en este artículo sobre cómo usar variables y condiciones. El valor predeterminado es "2" para los adultos y "0" para los niños.

El valor de <Occupancy> debe ser un número entero positivo entre 1 y 99, ambos incluidos.

Notas:

  • <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 especificas <Occupancy> tanto en <RoomBundle> como en <PackageData>, el valor de <RoomBundle> tiene prioridad.
<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 0 (o false) y 1 (o true). El valor predeterminado es false.

<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> con todos sus atributos definidos:


<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:

  • available (obligatorio): asigna los valores 1 o true para indicar que la tarifa admite un reembolso completo. De lo contrario, asigna los valores 0 o false.
  • refundable_until_days (obligatorio si available se configura como true): especifica el número de días que deben transcurrir antes de la fecha de entrada para poder solicitar un reembolso completo. El valor de refundable_until_days debe ser un número entero entre 0 y 330, ambos incluidos.
  • refundable_until_time (muy recomendable si available se configura como true): especifica la hora límite (hora local del hotel) hasta la que se aceptará una solicitud de reembolso completo. Se puede combinar con refundable_until_days para indicar, por ejemplo, que "los reembolsos se pueden solicitar hasta las 16:00, 2 días antes de la fecha de entrada". Si no se define refundable_until_time, el valor predeterminado es la medianoche.

    En el valor de este atributo se usa este formato de tiempo.

Cuando configures los atributos, ten en cuenta lo siguiente:

  • Si no se definen available ni refundable_until_days, el precio no se muestra como reembolsable.
  • Si available se configura como 0 o false, el resto de los atributos se ignoran. La tarifa no se muestra como reembolsable aunque se definan uno de los otros atributos o los dos.
<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>