Referencia de XML para el inventario de precios y habitaciones (transacciones)

En esta página, se proporciona una referencia para los mensajes de transacción basados en XML.

<Transaction>

El elemento raíz de un mensaje de transacción es <Transaction>. Es un contenedor de información descriptiva sobre habitaciones y paquetes, y precios y disponibilidad de habitaciones y paquetes.

El elemento <Transaction> aparece en el siguiente lugar de la jerarquía XML del mensaje de transacción:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Los mensajes que usan <Transaction> como elemento raíz requieren al menos un elemento secundario. Los mensajes de transacción pueden tener cualquier cantidad de elementos secundarios, siempre y cuando el tamaño total 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 Un identificador único para cada mensaje de transacción.
partner Optional string La cuenta de socio a la que corresponde el mensaje de transacción. Por lo general, lo usas si tu backend proporciona feeds de precios para varias cuentas de socios. Este valor de string es el valor de “Clave de socio” que aparece en la página Configuración de la cuenta de Hotel Center.
timestamp Required DateTime

El momento en que se envió el mensaje de transacción.

Se procesarán todos los mensajes enviados con una marca de tiempo en las últimas 24 horas y se descartarán los que no lo hayan hecho.

Los mensajes se procesan en orden de timestamp y no en el orden de recepción. Por ejemplo, una actualización de precio con una marca de tiempo de 2019-05-03 14:09:00 que se reciba después de un mensaje con una marca de tiempo de 2019-05-03 14:10:00 se procesará en orden, y se usará 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 ¿Obligatorio? Tipo Descripción
<PropertyDataSet> Optional* <PropertyDataSet>

Describe una habitación y paquetes de habitación específicos. Por lo general, lo usas en un mensaje de transacción independiente para definir valores compartidos para los paquetes de Room y reducir el tamaño de tus mensajes de transacción.

<Result> Optional* <Result>

Datos de precios para el itinerario de una habitación o un elemento <RoomBundle> que defina los paquetes de habitación y otros tipos de habitaciones para la propiedad. También se puede usar el elemento <Result> para quitar itinerarios del inventario.

* Se requiere al menos uno de los valores <PropertyDataSet> o <Result>.

Ejemplos

Datos de la habitación

En el siguiente ejemplo, se definen los datos de una habitación en un mensaje de transacció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>

Datos de precios

En el siguiente ejemplo, se definen los datos de precios en un mensaje de transacción:

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

Tarifas por noche

En el siguiente ejemplo, se definen los datos de precios de 1 a 7 noches a partir del 7 de junio de 2023:

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


Tarifas base y condicionales

En el siguiente ejemplo, se muestra un mensaje de transacción que contiene una tarifa base y una tarifa condicional:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-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>

Quitar inventario

En el siguiente ejemplo, se quitan del inventario varios inventarios (estadías de 1 noche para varias fechas diferentes) de un hotel:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-05-23T16:20:00-04:00" id="42">
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-23</Checkin>
    <Nights>1</Nights>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-24</Checkin>
    <Nights>1</Nights>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
  <!---Sending <Baserate> is optional with <Unavailable> -->
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-25</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">-1</Baserate>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
</Transaction>

<PropertyDataSet>

Es un contenedor para la información de la habitación y el paquete (o paquete de habitación) en un mensaje <Transaction>. Los valores establecidos en un hotel anulan los valores establecidos en un socio. Google almacena esta información para que no tengas que definirla cada vez que envíes actualizaciones de precios.

El elemento <PropertyDataSet> aparece en el siguiente lugar de la jerarquía XML del mensaje de transacción:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>  // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Para obtener más información, consulta los metadatos del paquete de habitación.

Sintaxis

El elemento <PropertyDataSet> usa 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 ¿Obligatorio? Tipo Descripción
<PackageData> Optional* <PackageData> Describe un paquete de habitación. Estos datos están asociados con un socio y un hotel, pero no con un itinerario. Este elemento es similar a <RoomData>, pero describe comodidades y términos que no forman parte de la descripción de la habitación física.

Puedes hacer referencia al ID del paquete en las actualizaciones de precios.

Para obtener más información, consulta los metadatos del paquete de habitación.

<Property> Required string El ID de un 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> Optional* <RoomData> Describe una habitación. Estos datos están asociados con un socio y un hotel, pero no con un itinerario.

Debes hacer referencia al ID de la habitación en las actualizaciones de precios.

* Se requiere al menos uno de los valores <PackageData> o <RoomData>.

Ejemplos

Datos de habitaciones y paquetes

En el siguiente ejemplo, se muestran los datos de habitaciones y paquetes en un <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íes los precios y la disponibilidad de esta habitación y el paquete de habitación, deberás hacer referencia a los IDs de la habitación y del paquete en los mensajes de precios. El resultado es que reduces en gran medida el tamaño de tus mensajes y la cantidad de errores que puedes encontrar debido a la duplicación de datos. Para obtener más información, consulta los metadatos del paquete de habitación.

<RoomData>

Define los metadatos de las habitaciones independientes del itinerario y, por extensión, los paquetes de habitación (ya que estos paquetes son habitaciones y comodidades adicionales). Usa <RoomData> para reducir la repetición de datos descriptivos en tu feed de precios.

El elemento <RoomData> aparece en el siguiente lugar de la jerarquía XML del mensaje de transacción:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Los elementos <RoomData> contienen información asociada con un socio y un hotel, pero no con un itinerario. Su propósito es incluir todos los datos que no son itinerarios.

El elemento <RoomData> es similar a <PackageData>, pero describe la habitación física en lugar de las comodidades y las condiciones de un paquete. Usas <RoomData> y <PackageData> en conjunto para proporcionar detalles sobre los paquetes de habitaciones. Para las habitaciones individuales que no forman parte de un paquete, usa solo <RoomData>.

Puedes definir los elementos <RoomData> y <PackageData> para la misma habitación o paquete de Room. Cuando Google muestre esa habitación o paquete en los resultados de la búsqueda, incluirá las descripciones de ambos, separadas por un guion.

Para obtener más información, consulta los metadatos del paquete de habitación.

Sintaxis

El elemento <RoomData> usa 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>
      <OccupancySettings>
        <MinOccupancy>min_number_of_occupants</MinOccupancy>
        <MinAge>min_age_of_occupants</MinAge>
      </OccupancySettings>

      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      <RoomFeatures>
        ...
      </RoomFeatures>
    </RoomData>
    ...
  </PropertyDataSet>
</Transaction>

Atributos

El elemento <RoomData> no tiene atributos.

Elementos secundarios

El elemento <RoomData> tiene los siguientes elementos secundarios:

Elemento secundario ¿Obligatorio? Tipo Descripción
<Capacity> Optional integer Corresponde a la cantidad máxima de huéspedes que puede alojar físicamente en una habitación. En el caso de una habitación, la capacidad es mayor o igual que la ocupación.

Cuando se especifica, este valor debe ser igual o mayor que el valor del elemento <Occupancy>, que es la cantidad prevista de huéspedes para una habitación en particular. Por ejemplo, la <Capacity> de un paquete grande puede ser 6, pero su <Occupancy> es 4.

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

<Description> Optional Object Una descripción detallada de la sala. Este elemento debe contener información que no se describe por otros elementos ni por el elemento <Name>. No debes usar todas las letras en mayúsculas para especificar la descripción de la habitación.

El elemento <Description> toma un solo elemento secundario, <Text>, que tiene los siguientes dos atributos obligatorios:

  • text: Una descripción detallada de la sala.
  • language: Es un código de idioma de dos letras, por ejemplo, fr.

Usa un elemento <Text> independiente para cada idioma en el que puedan aparecer tu anuncio o vínculo gratuito para reservar (con valores diferentes en los atributos language).

En el siguiente ejemplo, se muestran las versiones de la descripción de la habitación en inglés y francés:

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Name> Required string El nombre de la categoría de la habitación. Este valor debe coincidir con lo que aparece en la página de destino del hotel (anteriormente conocido como punto de venta). No establezcas el valor de este elemento en mayúsculas.

Este elemento toma un solo elemento secundario, <Text>, que tiene los siguientes dos atributos obligatorios:

  • text: Es el nombre de la sala.
  • language: Es un código de idioma de dos letras, por ejemplo, fr.

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

En el siguiente ejemplo, se muestran las versiones en inglés y francés del nombre de la habitación:

<Name>
  <Text text="Standard Double Room" language="en"/>
  <Text text="Le chambre double" language="fr"/>
</Name>
<Occupancy> Optional integer Indica la cantidad máxima de huéspedes a los que está destinada una sala. Por ejemplo, una suite grande puede tener capacidad física para 6 huéspedes (capacidad de 6 personas), pero solo está destinada a un máximo de 4 huéspedes.

Este valor debe ser menor o igual que el elemento <Capacity>, que es la cantidad de personas que la sala puede alojar físicamente.

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

<Occupancy> puede ir acompañado de <OccupancyDetails>, que especifica el tipo de invitados (adultos o niños). Consulta <OccupancyDetails> para obtener información sobre la sintaxis y la descripción de los elementos secundarios.

<OccupancySettings> Optional Object Son parámetros de configuración que pueden restringir o modificar los requisitos de ocupación de una habitación.

El elemento <OccupancySettings> toma los siguientes elementos secundarios:

  • <MinOccupancy>: Es la cantidad mínima de huéspedes que pueden alojarse en una habitación. Por ejemplo, si la estableces como 2, no se podrá reservar esta habitación para un solo huésped.

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

  • <MinAge>: La edad mínima de todos los huéspedes que se alojen en una habitación. Por ejemplo, si se establece como 18, solo se podrá reservar esta sala para grupos en los que todos los invitados sean mayores de 18 años.

    El valor de <MinAge> debe ser un número entero positivo entre 0 y 99, ambos inclusive.

<OccupancySettings>
  <MinOccupancy>2</MinOccupancy>
  <MinAge>16</MinAge>
</OccupancySettings>

No es necesario incluir todos los elementos secundarios.

<PhotoURL> Optional Object Una URL y una leyenda opcional para una foto de la habitación o el paquete de habitación determinados. Puedes especificar más de un <PhotoURL> para una habitación o un paquete de habitación. La URL de cada foto debe tener su propio <PhotoURL>.

Este elemento toma los siguientes elementos secundarios:

  • <URL>: Especifica la ubicación de la foto. La ubicación debe ser pública (no detrás de un firewall) y debe incluir el protocolo (por ejemplo, https://). Usa solo un <URL> por <PhotoURL>.
  • <Caption>: Define la leyenda de la foto. Este elemento toma un solo elemento secundario, <Text>, que tiene dos atributos obligatorios: text y language. El atributo text es la leyenda y el atributo language especifica un código de idioma de dos letras, como en.

Ejemplo:

<PhotoURL>
  <URL>https://www.example.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>
<PhotoURL>
  <URL>https://www.foo.com/static/bar/image5678.jpg</URL>
  <Caption>
    <Text text="Or, perhaps you prefer coffee." language="en"/>
    <Text text="Ou peut-être préférez-vous le café." language="fr"/>
  </Caption>
</PhotoURL>
<RoomFeatures> Optional <RoomFeatures> Contiene información sobre las características de la habitación.
<RoomID> Required string El ID único de la sala. Usa este ID para hacer coincidir los datos de la habitación con los bloques <Result> en tus actualizaciones de precios. Para obtener más información, consulta los metadatos del paquete de habitación. También puedes usar este ID para hacer referencia a la definición de una sala común en un solo mensaje de transacción cuando defines los datos de una habitación de forma intercalada.

Ejemplos

Datos de la habitación

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>

Metadatos de habitación y paquete

En el siguiente ejemplo, se definen los metadatos de habitación y 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>

Varios paquetes de habitaciones

En el siguiente ejemplo, se definen los metadatos de Room y Paquete para varios paquetes de Room:

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

<RoomFeatures>

Define los elementos encontrados en la sala.

El elemento <RoomFeatures> aparece en el siguiente lugar de la jerarquía XML del mensaje de transacción:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
            + <RoomFeatures>

Sintaxis

El elemento <RoomFeatures> usa la siguiente sintaxis:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    ...
    <RoomData>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle>
        <Beds>
           <Bed size="[single|semi_double|double|queen|king]">
             <Width unit="cm" number="width"/>
             <Length unit="cm" number="length"/>
           </Bed>
           <!-- Include with any additional beds. -->
        </Beds>
        <Suite/>
        <Capsule/>
        <Roomsharing>[shared|private]</Roomsharing>
        <Outdoor/>
        <MobilityAccessible/>
        <Smoking>[smoking|non_smoking]</Smoking>
        <BathAndToilet relation="[together|separate]">
          <Bath bathtub="[false|true]" shower="[false|true]"/>
          <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/>
        </BathAndToilet>
        <OpenAirBath/>
        <AirConditioning/>
        <Balcony/>
        <Views>
          <!-- (Optional) Defines the type of views from the room. -->
          <!-- Example: <OceanView/> -->
        </Views>

      </RoomFeatures>
      ...
    </RoomData>
    ...
  </PropertyDataSet>
</Transactions>

Atributos

El elemento <RoomFeatures> no tiene atributos.

Elementos secundarios

El elemento <RoomFeatures> tiene los siguientes elementos secundarios:

Elemento secundario ¿Obligatorio? Tipo Descripción
<JapaneseHotelRoomStyle> Optional enum

Indica el estilo de una habitación de hotel japonesa.

Estos son los valores válidos:

  • western: Una habitación de estilo occidental con camas.
  • japanese: Una habitación de estilo japonés con cama tipo futón.
  • japanese_western: Una habitación de estilo japonés occidental con camas de estilo occidental y futones de estilo japonés.
<Beds> Optional Object Contiene tantos <Bed> como la sala. Ten en cuenta que los futones japoneses no deberían contarse aquí.

Cada <Bed> tiene los siguientes atributos:

  • size (opcional): Los valores válidos son single, semi_double, double, queen y king.
Cada <Bed> tiene los siguientes elementos secundarios:
  • <Width> (opcional): Especifica el ancho de la cama. Debe tener el atributo unit con el valor cm y el atributo number con el ancho de la cama en centímetros enteros.
  • <Length> (opcional): Especifica la longitud de la cama. Debe tener el atributo unit con el valor cm y el atributo number con la longitud de la cama en centímetros enteros.
Ejemplo:
<Beds>
  <Bed size="double">
    <Width unit="cm" number="140"/>
    <Length unit="cm" number="195"/>
  </Bed>
  <Bed/> <!-- Size unknown -->
</Beds>
<Suite> Optional empty Proporciona este elemento cuando la habitación sea una suite.
<Capsule> Optional empty Proporciona este elemento cuando esta habitación sea una sala tipo cápsula.
<Roomsharing> Optional enum Indica si esta habitación se comparte con otros ocupantes, como otros huéspedes o propietarios. Los valores válidos son shared y private.
<Outdoor> Optional empty Proporciona este elemento cuando la habitación sea un alojamiento al aire libre que no tenga paredes fijas, plomería ni climatización. Por ejemplo, las habitaciones de hotel no son alojamiento al aire libre, mientras que los campamentos donde los huéspedes se hospedan en carpas y parques para autocaravanas en los que los huéspedes traen su propia casa rodante son alojamiento al aire libre.
<MobilityAccessible> Optional empty Proporciona este elemento cuando la sala sea accesible para personas con movilidad reducida.
<Smoking> Optional enum Indica si esta habitación es para no fumadores o para fumadores. Los valores válidos son non_smoking y smoking.
<BathAndToilet> Optional Object Contiene información sobre un baño y el baño de la habitación.

El atributo es:

  • relation (opcional): Indica cómo se colocan el baño y el inodoro entre sí. Los valores válidos son together (el baño y el inodoro se encuentran juntos en la misma habitación [p.ej., baño] uno al lado del otro) y separate (el baño y el inodoro tienen espacios exclusivos). Este atributo no se debe establecer cuando la habitación no tiene baño y también baño al mismo tiempo.

De manera opcional, el elemento toma los siguientes elementos secundarios:

  • <Bath> (opcional): La existencia de este elemento indica que la habitación tiene un baño.

    Los atributos son los siguientes:

    • bathtub (opcional): Indica que el baño tiene una bañera. Los valores válidos son 0 (o false) y 1 (o true).
    • shower (opcional): Indica que el baño tiene ducha. Los valores válidos son 0 (o false) y 1 (o true).
  • <Toilet> (opcional): La existencia de este elemento indica que esta habitación tiene un baño.

    Los atributos son los siguientes:

    • electronic_bidet (opcional): Indica que el inodoro tiene un bidé electrónico. Los valores válidos son 0 (o false) y 1 (o true).
    • mobility_accessible (opcional): Indica que el baño es accesible para personas con movilidad reducida. Los valores válidos son 0 (o false) y 1 (o true).

Ejemplo:

<BathAndToilet relation="separate">
  <Bath bathtub="1" shower="1"/>
  <Toilet
    electronic_bidet="1"
    mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath> Optional empty Proporciona este elemento cuando la habitación tenga baño privado al aire libre.
<AirConditioning> Optional empty Proporciona este elemento cuando la habitación tenga aire acondicionado.
<Balcony> Optional empty Proporciona este elemento cuando la habitación tenga balcón o terraza.
<Views> Optional Object Entre las opciones válidas, se incluyen las siguientes:

<AirportView/>
<BayView/>
<BeachView>/>
<CastleView/>
<CityView/>
<CountrysideView/>
<CourtyardView/>
<DuneView/>
<ForestView/>
<GardenView/>
<GolfCourseView/>
<HarborView/>
<LagoonView/>
<LakeView/>
<MarinaView/>
<MountainView/>
<NatureView/>
<OceanView/>
<ParkView/>
<PartialOceanView/>
<PisteView/>
<PoolView/>
<PyramidView/>
<RiverView/>
<StreetView/>

Ejemplos

JapaneseHotelRoomStyle no tiene un valor predeterminado. Si omites un valor, no se generará un error XML, pero tu ficha no se mostrará en los resultados de la búsqueda cuando el usuario filtre por el estilo de la habitación o las camas.

Dos camas individuales

En el siguiente ejemplo, se muestra cómo usar <RoomFeatures>:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
        <Beds> <!-- Two single beds -->
          <Bed size="single">
            <Width unit="cm" number="97"/>
            <Length unit="cm" number="195"/>
          </Bed>
          <Bed size="single">
            <Width unit="cm" number="97"/>
            <Length unit="cm" number="195"/>
          </Bed>
        </Beds>
        <Suite/>
        <Capsule/>
        <Roomsharing>private</Roomsharing>
        <Outdoor/>
        <MobilityAccessible/>
        <Smoking>non_smoking</Smoking>
        <BathAndToilet relation="separate">
          <Bath bathtub="1" shower="1"/>
          <Toilet electronic_bidet="1" mobility_accessible="1"/>
        </BathAndToilet>
        <OpenAirBath/>
        <AirConditioning/>
        <Balcony/>
        <Views>
          <LakeView/>
          <MarinaView/>
          <BeachView/>
          <ForestView/>
          <MountainView/>
          <NatureView/>
        </Views>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Dos camas dobles

El siguiente es un ejemplo de una habitación japonesa de estilo western con dos camas double.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
        <Beds> <!-- Two double beds-->
          <Bed size="double"></Bed>
          <Bed size="double"></Bed>
        </Beds>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>


Estilo japonés sin cama

El siguiente es un ejemplo de una habitación de estilo japonés sin cama. No se requiere información sobre la cama para la habitación de estilo japanese.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Wéstern japonés con cama

El siguiente es un ejemplo de una habitación de estilo japanese_western con una cama de tamaño king.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
        <Beds>
          <Bed size="king"></Bed>
        </Beds>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Si el socio no tiene la información sobre la cantidad de camas en las habitaciones japanese_western, sigue el ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

<PackageData>

Define los metadatos independientes del itinerario sobre los paquetes de habitaciones de una propiedad. Este elemento contiene información asociada con un socio y un hotel, pero no con un itinerario. Tiene como objetivo definir todos los datos no itinerarios una sola vez y hacer referencia a ellos desde los datos del itinerario.

El elemento <PackageData> aparece en el siguiente lugar de la jerarquía XML del mensaje de transacción:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

El elemento <PackageData> es similar a <RoomData>, pero describe características de tarifas y términos que no forman parte de la descripción de la sala física. Usas <RoomData> y <PackageData> en conjunto para proporcionar detalles sobre los paquetes de habitaciones y las funciones de tarifas. Para las habitaciones individuales que no forman parte de un paquete, usa solo <RoomData>.

Puedes definir los elementos <RoomData> y <PackageData> para la misma habitación o paquete de habitación. Cuando Google muestre esa habitación o paquete en los resultados de la búsqueda, incluirá las descripciones de ambos, separadas por un guion.

Si actualizas un solo elemento <PackageData> de una propiedad, debes actualizar todos los elementos <PackageData> y <RoomData> de la propiedad. Cada <PropertyDataSet> se considera todos los datos de la propiedad y reemplaza los datos existentes.

Para obtener más información, consulta los metadatos del paquete de habitación.

Sintaxis

El elemento <PackageData> usa 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"/>
      <ChargeCurrency>[deposit|hotel|installments|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>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      ...
      <Meals>
        <Breakfast
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
        <Dinner
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
      </Meals>
      <CheckinTime>checkin_time</CheckinTime>
      <CheckoutTime>checkout_time</CheckoutTime>
      <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 ¿Obligatorio? Tipo Descripción
<BreakfastIncluded> Optional boolean Especifica si este paquete incluye desayuno con la tarifa. Los valores válidos son 0 (o false) y 1 (o true).

Se recomienda que uses <Meals> en lugar de <BreakfastIncluded>.

<ChargeCurrency> Optional enum Cuándo y dónde el usuario paga una reserva. Este elemento usa la misma sintaxis que <ChargeCurrency> en un objeto <Result>.

El valor predeterminado es web.

<CheckinTime> Optional Time Hora de entrada más temprana posible La hora debe ser inferior a las 24:00 en la hora local del hotel.
<CheckoutTime> Optional Time Hora de salida más reciente posible en la hora local del hotel.
<Description> Optional Object Una descripción detallada del paquete. Este elemento debe contener información que no se describe por otros elementos ni por el elemento <Name>. No debes usar todas las letras en mayúsculas para especificar la descripción de la habitación.

El elemento <Description> toma un solo elemento secundario, <Text>, que tiene dos atributos obligatorios: text y language. El atributo text es la descripción, y el atributo language especifica un código de idioma de dos letras, como se muestra en el siguiente ejemplo:

<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 Si un paquete incluye acceso a Internet sin cargo, mientras que otros no incluirían ese tipo de comodidades No configures este elemento para los paquetes de habitación en un hotel que ofrece Internet gratis a todas las habitaciones. Este elemento no se aplica a la conexión a Internet por cable o inalámbrica en la habitación que no está disponible en las habitaciones de huéspedes. Los valores válidos son 0 (o false) y 1 (o true).
<Meals> Optional Object Contiene información sobre las comidas de este paquete.

El elemento <Meals> toma dos elementos secundarios opcionales, <Breakfast> y <Dinner>, que tienen los siguientes atributos:

  • included (obligatorio): Configúralo en 1 (o true) si la tarifa incluye desayuno y cena; de lo contrario, establécelo en 0 o false.
  • in_room (opcional): Establece esta opción en 1 (o true) si los huéspedes tienen la opción de desayunar o cenar en la habitación en la que se hospedan; de lo contrario, establécelo en 0 (o false).
  • in_private_space (opcional): Establece esta opción en 1 (o true) si los huéspedes tienen la opción de desayunar o cenar en un espacio (excepto en la habitación en la que se hospedan) donde puedan evitar el contacto con otros invitados; de lo contrario, establécelo en 0 (o false).
  • buffet (opcional): Establece este valor en 1 (o true) si el desayuno o la cena se sirve como buffet; de lo contrario, establécelo en 0 (o false).

Los atributos opcionales se usan solo cuando included es verdadero.

Para que los filtros de comida (no meals, breakfast only, dinner only y breakfast and dinner) funcionen, <Breakfast> y <Dinner> deben proporcionarse con el atributo included.

<Name> Required string El nombre del paquete. Este valor debe coincidir con lo que aparece en la página de destino del hotel. No uses todas las letras en mayúsculas de este elemento.

Este elemento toma un solo elemento secundario, <Text>, que tiene dos atributos, text y language. El atributo text es la descripción, y el atributo language especifica un código de idioma de dos letras, como se muestra en el siguiente ejemplo:

<Name>
  <Text text="Bed and Breakfast" language="en"/>
  <Text text="Lit et petit déjeuné" language="fr"/>
</Name>
<Occupancy> Optional integer La cantidad máxima de huéspedes a los que está dirigido un paquete de habitación. Por ejemplo, una suite grande puede albergar físicamente a 6 huéspedes, pero está destinada solo para 4 huéspedes.

Este valor debe ser menor o igual que el elemento <Capacity>, que es la cantidad de personas que la sala puede alojar físicamente.

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

Si especificas este elemento en <RoomBundle> y <PackageData>, el valor en <RoomBundle> tendrá prioridad.

Nota:

<Occupancy> puede ir acompañado de <OccupancyDetails>,que especifica el tipo de invitados (adultos o niños). Consulta <OccupancyDetails> para conocer la sintaxis y la descripción de los elementos secundarios.
<PackageID> Required string

El ID único del paquete. Usa este ID para hacer coincidir los datos del paquete de Room con los bloques <Result> de tus actualizaciones de precios. Para obtener más información, consulta los Metadatos del paquete de habitación.

También puedes usar este ID para hacer referencia a una definición común de paquete de Room que se usa en un solo mensaje de transacción cuando se definen los datos del paquete de Room en intercalado.

<ParkingIncluded> Optional boolean Indica si un paquete de habitación incluye estacionamiento sin cargo; de lo contrario, el estacionamiento sería un servicio pagado en este hotel. No especifiques un valor para este elemento en un hotel que ofrece estacionamiento gratuito.

Los valores válidos son 0 (o false) y 1 (o true). El valor predeterminado es false.

<PhotoURL> Optional Object (Igual que <PhotoURL> en <RoomData>, pero para el paquete (p.ej., fotos de comida).
<Refundable> Optional Object Permite mostrar una tarifa como completamente reembolsable o ofrecer una cancelación gratuita. Si no se proporciona, no se mostrará información sobre el reembolso. Una política de reembolso a nivel de <PackageData> anula la del nivel de <Result>. Una política de reembolso a nivel de <Rates> anula la del nivel de <PackageData>. Los precios reembolsables también se pueden destacar para los usuarios a través de opciones alternativas sin modificar directamente el esquema de tu mensaje de transacción. Obtén más información sobre estas opciones en la Política de tarifas reembolsables.

En el siguiente ejemplo, se muestra el elemento <Refundable> con todos sus atributos establecidos:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

Nota: Te recomendamos que configures todos los atributos. Se genera un mensaje de advertencia sobre el estado del feed cuando no se configuran uno o más atributos.

Si no configuras ningún atributo, la tarifa no se muestra como reembolsable. Los atributos son los siguientes:

  • available: (obligatorio) Configúralo en 1 o true para indicar si la tarifa permite un reembolso total; de lo contrario, configúralo en 0 o false.
  • refundable_until_days (obligatorio si available es true). Especifica la cantidad de días antes de la entrada en los que se puede solicitar un reembolso total. El valor de refundable_until_days debe ser un número entero entre 0 y 330, inclusive.
  • refundable_until_time: (Se recomienda especialmente si available es true). Especifica la última hora del día, en la hora local del hotel, en la que se respetará una solicitud de reembolso total. Se puede combinar con refundable_until_days para especificar, por ejemplo, que “los reembolsos están disponibles hasta las 4:00 p.m. dos días antes de la entrada”. Si no se configura refundable_until_time, el valor se establece de forma predeterminada en la medianoche.

    El valor de este atributo usa el formato Time.

Cuando configures los atributos, ten en cuenta lo siguiente:

  • Si no se establecen available o refundable_until_days, la tarifa no se muestra como reembolsable.
  • Si available es 0 o false, se ignoran los otros atributos. La tarifa no se muestra como reembolsable, incluso si se configuran uno o ambos atributos.
<MembershipBenefits Included> Optional boolean La tarifa incluye beneficios del nivel élite durante la estadía. Incluye los siguientes parámetros:
  • ProgramName: Nombre del programa de estado de élite
  • ProgramLevel: Indica el nivel del programa. Por ejemplo: "Oro".
  • NightlyValue (optional): Valor nocturno de los beneficios.
<CarRentalIncluded> Optional boolean La tarifa incluye el alquiler de automóvil gratuito por la duración de la estadía.
<MilesIncluded>> Optional boolean La tarifa incluye las millas de pasajero frecuente. Entre los parámetros, se incluyen los siguientes:
  • NumberofMiles: Cantidad de millas por itinerario.
  • Provider: Las millas de pasajero frecuente proporcionan.
<OnPropertyCredit> Optional boolean La tarifa incluye el crédito en la propiedad (F&B, complejo turístico, spa, etcétera). Parámetro:
  • Amount: Es el valor del crédito por itinerario, en la moneda local.
<AirportTransportationIncluded> Optional Object La tarifa incluye transporte gratuito desde y hacia un aeropuerto cercano. El atributo opcional direction especifica la direccionalidad del transporte. Entre los valores válidos, se incluyen los siguientes:
    from: Se proporciona transporte desde el aeropuerto a la propiedad. Este es el valor predeterminado si no se especifica ninguna dirección. to: Se proporciona transporte desde la propiedad hasta el aeropuerto. round_trip: Se proporciona transporte desde y hacia el aeropuerto.

Ejemplos

Paquete de habitación individual

En el siguiente ejemplo, se define un solo paquete de habitación, con una ocupación de 2 (un adulto y un niño) y desayuno:

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

Metadatos de Room y paquete

En el siguiente ejemplo, se definen los metadatos de habitación y 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>

Varios paquetes de habitaciones

En el siguiente ejemplo, se definen los metadatos de Room y Paquete para varios paquetes de Room:

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


Paquete de habitación con tarifas

En el siguiente ejemplo, se definen los metadatos de habitación y paquete para un paquete de habitación con funciones de tarifas:

<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>
      <AirportTransportationIncluded direction="from"/>
    </PackageData>
  </PropertyDataSet>

<!-- The actual list of prices -->
  <Result>
…
  </Result>
</Transaction>

Comidas y fotos

En el siguiente ejemplo, se definen los metadatos de habitaciones y paquetes correspondientes a comidas, fotos y horas de entrada y salida:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Meals Included" language="en"/>
      </Name>
      <PhotoURL>
        <Caption>
          <Text text="Breakfast" language="en"/>
          <Text text="朝食" language="ja"/>
        </Caption>
        <URL>http://example.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Meals>
        <!-- Guests can choose to have breakfast in their room or in another
        space to avoid contact with other guests. -->
        <Breakfast included="1" in_room="1" in_private_space="1"/>
        <Dinner included="1" buffet="1"/>
      </Meals>
      <CheckinTime>15:00</CheckinTime>
      <CheckoutTime>11:00</CheckoutTime>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Desayuno

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
      </Name>
      <PhotoURL>
        <Caption>
          <Text text="Breakfast" language="en"/>
          <Text text="朝食" language="ja"/>
        </Caption>
        <URL>http://example.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Meals>
        <Breakfast included="true"/>
        <!-- Dinner not included needs to be explicitly specified -->
        <Dinner included="false"/>
      </Meals>
      <CheckinTime>15:00</CheckinTime>
      <CheckoutTime>11:00</CheckoutTime>
    </PackageData>
  </PropertyDataSet>
</Transaction>

<Result>

Un contenedor para las actualizaciones de precios y disponibilidad en un mensaje <Transaction>.

El elemento <Result> aparece en el siguiente lugar de la jerarquía XML del mensaje de transacción:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Usa <Result> para establecer o actualizar los precios de las habitaciones y definir el inventario disponible. Los elementos definidos en este elemento suelen hacer referencia a metadatos independientes del itinerario sobre una habitación o un paquete (como una descripción o un conjunto de comodidades) definidos en <PackageData> y <RoomData>.

Por lo general, envías mensajes de transacción con actualizaciones de precios con mucha frecuencia. La frecuencia exacta en la que harás esto dependerá del modo de entrega.

Puedes usar <Result> en un mensaje de transacción para quitar itinerarios, como se describe en Cómo quitar inventario. Si quieres obtener más información sobre el uso de mensajes de transacción para actualizar precios y disponibilidad, consulta Cómo agregar y actualizar inventario.

Un solo mensaje de transacción puede incluir cualquier cantidad de elementos <Result>, siempre que el tamaño del mensaje no supere los 100 MB.

Sintaxis

El elemento <Result> usa 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|installments|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 reemplazarán los precios anteriores (no vencidos) presentes en la caché de Google. El atributo combinable te permite almacenar precios adicionales en la caché de Google sin borrar la información de precios anterior. Las respuestas de la consulta de precios en tiempo real con el contexto siempre tendrán este atributo configurado como true (independientemente de la respuesta de tu mensaje de transacción).

Elementos secundarios

El elemento <Result> tiene los siguientes elementos secundarios:

Elemento secundario ¿Obligatorio? Tipo Descripción
<AllowablePointsOfSale> Optional Object Hay una o más páginas de destino aptas para el hotel. Una página de destino es un sitio web que puede administrar el proceso de reserva del usuario final. Para incluir de manera explícita ciertas páginas de destino (y excluir otras), agrega uno o más elementos <AllowablePointsOfSale> que coincidan con el atributo id del elemento <PointOfSale> en el archivo de páginas de destino.

Si no incluyes este elemento, todas las páginas de destino definidas en el archivo de páginas de destino se considerarán aptas para usar en la reserva de la habitación. Para obtener más información, consulta Sintaxis del archivo de páginas de destino.

<Baserate> Optional float

El precio de la habitación por la estadía. El valor de este elemento debe reflejar lo siguiente:

  • En el caso de una habitación privada, establece la tarifa de ocupación doble más económica que ofreces.
  • Para una habitación compartida, deja el campo vacío y usa <RoomBundle>.
  • Indica la duración total de la estadía, no la tarifa promedio por noche.

Cuando la habitación no esté disponible para el itinerario, se debe omitir <Baserate> o establecerse en -1, y se debe especificar <Unavailable>, junto con los motivos conocidos de la falta de disponibilidad.

Para quitar un paquete de habitación, sigue las instrucciones que se indican en Cómo quitar un paquete de habitación.

<Baserate> no debe contener símbolos de agrupación de dígitos, como una coma (,) o un punto (.). Siempre separa las fracciones con un punto (.) como marca decimal. Por ejemplo, representa $1,200.40 de la siguiente manera:

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

El elemento <Baserate> toma los siguientes atributos opcionales:

  • all_inclusive: un valor booleano que indica si esta tarifa incluye impuestos y tarifas. En general, establece este valor en false para los usuarios finales de EE.UU. y Canadá, y proporciona valores para los elementos <Tax> y <OtherFees>. Si usas precios todo incluido, es posible que no cumplas con los requisitos para aparecer en las fichas si los precios no tienen impuestos y tarifas separados para los usuarios de EE.UU. y Canadá.

    Para los demás usuarios finales, generalmente se incluyen los impuestos y las tarifas en la tarifa base y se establece el valor del atributo all_inclusive en true. Para obtener más información, consulta la Política de impuestos y tarifas.

    El valor predeterminado es false.

  • currency: Es el código de moneda de tres letras. Por ejemplo, USD para dólares estadounidenses.
<ChargeCurrency> Optional enum Cuándo y dónde el usuario paga una reserva. Se puede utilizar en un mensaje de transacción en el elemento <Result> para el precio del hotel o en el bloque <PackageData> para un paquete de habitación.

Estos son los valores válidos:

  • web: Al usuario se le cobra en línea en el momento de la reserva. Este es el valor predeterminado. La página de destino real se define mediante el archivo de página de destino y puede verse afectada por la moneda, la ubicación, el idioma y otros factores del usuario.
  • hotel: Se le cobra al usuario cuando se registra en el hotel. Si el pago siempre se debe realizar en la moneda del hotel, establece el valor de <ChargeCurrency> en hotel. La página de destino real no se ve afectada por la moneda del usuario.
  • deposit: Se le cobra al usuario una parte inmediatamente y el resto se cobra más adelante, por lo general, cuando el usuario sale del hotel.
  • installments: Se le cobra al usuario una fracción inicial de la suma total pendiente y se espera que pague de forma rutinaria un saldo establecido durante un período fijo.

El valor predeterminado es web.

<Checkin> Required Date Es la fecha de entrada de un itinerario con el formato Fecha. La combinación del elemento <Nights> y el elemento <Checkin> constituye un itinerario.
<Custom[1‑5]> Optional string Define un campo personalizado que puedes usar para pasar datos adicionales asociados con un hotel. Puedes pasar hasta cinco valores personalizados con los siguientes nombres de elementos:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

Los elementos <Custom> te permiten pasar datos arbitrarios. Por ejemplo, puedes especificar un valor en este campo que el archivo de páginas de destino usará para crear una URL personalizada para una página de destino. Existe un límite de 200 caracteres por campo personalizado. Para obtener más información, consulta los archivos de páginas de destino .

Los elementos <Custom> proporcionados en el elemento <Rate> no se heredan en el elemento <RoomBundle>. Debes definir el atributo <Custom> por separado en cada <RoomBundle>.

<ExpirationTime> Optional DateTime La fecha y hora en las que el precio se considera vencido (mínimo de 3 horas).

Te recomendamos que no proporciones marcas de tiempo de vencimiento si no es fundamental para la estructura de precios.

Google no publica precios vencidos, y los itinerarios que tengan precios vencidos serán aptos para la consulta de precios en tiempo real.

<Nights> Required integer Es la cantidad de noches de un itinerario. El valor del elemento <Nights> debe ser un número entero positivo. La combinación de <Nights> y <Checkin> conforman un itinerario.
<OtherFees> Optional float Tarifas distintas de la tarifa base y los impuestos que influyen en el precio final de una habitación El elemento <OtherFees> toma un solo atributo obligatorio, currency, que define el código de moneda de tres letras de las tarifas. Por ejemplo, USD.

El elemento <OtherFees> es obligatorio si <Baserate> es mayor que cero.

<Occupancy> Optional integer Especifica la cantidad máxima de ocupantes. Cuando <Occupancy> aparece en <Result>, debe especificar 2 o más. <Occupancy>puede estar acompañado de <OccupancyDetails>, que especifica el tipo de invitados (adultos o niños). Consulta <OccupancyDetails> para obtener información sobre la sintaxis y la descripción de los elementos secundarios. Si no se proporciona el elemento <Occupancy>, la ocupación se establece de forma predeterminada como 2.

Nota: Comunícate con tu equipo de asistencia al cliente a fin de habilitar la función para enviar precios que no sean de ocupación doble.

<PackageID> Optional string El ID único del paquete para asignarlo a datos predefinidos del paquete. También se usa para propagar la variable de la página de destino PACKAGE-ID. Para obtener más información, consulta los Metadatos del paquete de habitación.
<Property> Required string Es el ID de un hotel afectado por los datos asociados (precio, itinerario, paquete de habitación o metadatos). El valor de este elemento debe ser una cadena. El valor de este elemento debe coincidir con la ficha <id> que definiste en el feed de lista de hoteles.
<Rates> Optional <Rates> Un contenedor para uno o más bloques <Rate>. Cada <Rate> en <Rates> define un precio diferente para la combinación de habitación/itinerario.

Usa el elemento <Rates> solo cuando haya varias tarifas para la misma combinación de itinerario y habitación. Por ejemplo, puedes definir varias tarifas para las tarifas condicionales, las tarifas privadas o las tarifas condicionales en los paquetes de habitación.

<Refundable> Optional Object Permite mostrar una tarifa como completamente reembolsable o ofrecer una cancelación gratuita. Si no se proporciona, no se mostrará información sobre el reembolso. Una política de reembolso a nivel de <PackageData> anula la del nivel de <Result>. Una política de reembolso a nivel de <Rates> anula la del nivel de <PackageData>. Los precios reembolsables también se pueden destacar para los usuarios a través de opciones alternativas sin modificar directamente el esquema de tu mensaje de transacción. Obtén más información sobre la política de tarifas reembolsables.

En el siguiente ejemplo, se muestra el elemento <Refundable> con todos sus atributos establecidos:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

Nota: Te recomendamos que configures todos los atributos. Se genera un mensaje de advertencia sobre el estado del feed cuando no se configuran uno o más atributos.

Si no configuras ningún atributo, la tarifa no se muestra como reembolsable. Los atributos son los siguientes:

  • available: (obligatorio) Configúralo en 1 (o true) para indicar si la tarifa permite un reembolso total; de lo contrario, establécelo en 0 (o false).
  • refundable_until_days (obligatorio si available es true). Especifica la cantidad de días antes de la entrada en los que se puede solicitar un reembolso total. El valor de refundable_until_days debe ser un número entero entre 0 y 330, inclusive.
  • refundable_until_time: (Se recomienda especialmente si available es true). Especifica la última hora del día, en la hora local del hotel, en la que se respetará una solicitud de reembolso total. Se puede combinar con refundable_until_days para especificar, por ejemplo, que “los reembolsos están disponibles hasta las 4:00 p.m. dos días antes de la entrada”. Si no se configura refundable_until_time, el valor se establece de forma predeterminada en la medianoche.

    El valor de este atributo usa el formato Time.

Cuando configures los atributos, ten en cuenta lo siguiente:

  • Si no se establecen available o refundable_until_days, la tarifa no se muestra como reembolsable.
  • Si available es 0 (o false), se ignoran los otros atributos. La tarifa no se muestra como reembolsable, incluso si se configuran uno o ambos atributos.
<RoomBundle> Optional <RoomBundle> Es un contenedor con información sobre las descripciones físicas con los precios de una habitación, el paquete de comodidades y algunos detalles de la política de compra del hotel y el itinerario determinados.

En general, usa este elemento para definir los precios de la habitación base y los diferentes tipos de habitaciones dentro de la misma propiedad. Si bien es posible definir descripciones intercaladas de paquetes de habitaciones, debes usar un mensaje de transacción independiente para definir esa información. Google almacenará los metadatos para que puedas hacer referencia a ellos en lugar de repetirlos en todas las actualizaciones de precios futuras.

<RoomID> Optional string El ID único de la habitación para asignarla a los datos predefinidos de la habitación. También se usa para propagar la variable de la página de destino PARTNER-ROOM-ID. Para obtener más información, consulta los Metadatos del paquete de habitación.
<Tax> Optional float Son los impuestos que se calculan para el precio final de una habitación. El elemento <Tax> toma un solo atributo obligatorio, currency, que define el código de moneda de tres letras para los impuestos. Por ejemplo, USD. El elemento <Tax> es obligatorio si <Baserate> es mayor que cero.
<Unavailable> Optional Object Indica que el itinerario no está disponible para reservas. Funciona como un contenedor con motivos más detallados por los que el itinerario no estaba disponible. Uno o más de los siguientes motivos de no disponibilidad pueden anidarse debajo de la etiqueta <Unavailable>:
  • <NoVacancy/>: No hay más habitaciones disponibles a la venta para una o más noches de la estadía.
  • <MinNightStay value=N/>: El itinerario fue inferior a la estadía mínima por noche de N para las fechas de la estadía.
  • <MaxNightStay value=N/>: El itinerario superó la cantidad máxima de noches para la estadía de N en las fechas de la estadía.
  • <MinAdvancePurchase value=N/>: El itinerario estuvo por debajo del período mínimo de reserva anticipada de N para las fechas de la estadía.
  • <MaxAdvancePurchase value=N/>: El itinerario superó el período máximo de reserva anticipada de N para las fechas de la estadía.
  • <ClosedToArrival/>: La propiedad no permite registrar la entrada en la fecha de llegada del itinerario.
  • <ClosedToDeparture/>: La propiedad no permite registrar la salida en la fecha de salida del itinerario.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/>: La propiedad está cerrada para toda la estadía o parte de ella. Los atributos recomendados first_open y first_closed especifican las primeras fechas mayores o iguales a la fecha de llegada para la que la propiedad está abierta o cerrada, respectivamente. En el caso de una propiedad que cierra después de la fecha de llegada, first_open debe ser igual a la fecha de llegada, y first_closed debe ser la fecha en la que se cierra la propiedad. En el caso de una propiedad que se cierra en la fecha de llegada, first_closed debe ser igual a la fecha de llegada, y first_opened debe ser la próxima fecha en la que la propiedad estará abierta.
  • <NotFetched/>: Las fuentes de datos posteriores no proporcionaron un precio para el itinerario.
  • <InvalidProperty/>: No se reconoció el identificador de propiedad solicitado.
  • <InvalidOccupancy/>: La propiedad no admite la ocupación solicitada.
  • <PriceIssue/>: Debido a un problema con el precio, no se envió.
  • <InternalError reason=""/>: Se produjo un error no enumerado. El atributo de motivo opcional puede informar el error como texto.
  • <OtherRestriction restriction=""/>: El itinerario no estaba disponible debido a una restricción de reserva no enumerada. El atributo de restricción opcional permite informar la restricción como texto.

Ejemplos

Ejemplo de varias propiedades

En el siguiente ejemplo, se define un itinerario y sus precios para dos 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 los detalles de la habitación, como una descripción, una foto y una leyenda, el nombre de la sala y su capacidad.

Puedes definir esa información una vez en un mensaje de transacción independiente que Google almacena. Luego, podrás hacer referencia a él en todas las actualizaciones posteriores de precios y de inventario. Para obtener más información, consulta los metadatos del paquete de habitación.

Ejemplo de tarifa múltiple

En el siguiente ejemplo, se define un solo itinerario y propiedad con varias tarifas para varias ocupaciones. El elemento <Rates> se puede usar para proporcionar precios de varias tarifas para una propiedad específica. El siguiente ejemplo también es útil para las propiedades de alquileres de vacaciones (VR):

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

Ejemplo no disponible

En el siguiente ejemplo, se define un itinerario cuya disponibilidad no se pudo recuperar de los canales descendentes, un segundo que está por debajo de la estadía mínima y ya se reservó para las fechas especificadas, y un tercero cuya propiedad se cierra en la fecha de llegada, pero que se abre durante el transcurso de la estadía:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Unavailable>
      <NotFetched/>
    </Unavailable>
  </Result>
  <Result>
    <Property>073313</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Unavailable>
      <NoVacancy/>
      <MinNightStay value=3/>
    </Unavailable>
  </Result>
  <Result>
    <Property>052213</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>10</Nights>
    <Unavailable>
      <PropertyClosed first_open="2018-06-15" first_closed="2018-06-10"/>
    </Unavailable>
  </Result>
</Transaction>

<Rates>

Un contenedor para uno o más bloques <Rate>. Cada <Rate> en <Rates> define un precio diferente para la combinación de habitación o itinerario.

Usa el elemento <Rates> solo cuando haya varias tarifas para la misma combinación de habitación o itinerario. Por ejemplo, puedes definir varias tarifas para tarifas condicionales, tarifas privadas o tarifas condicionales en paquetes de habitaciones.

El elemento <Rates> aparece en el siguiente lugar de la jerarquía XML del mensaje de transacción:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>         // Pricing and availability
        + <Rates>
        + <RoomBundle> (Can also contain <Rates>)
        + ...

Los valores establecidos en un <Rate> anulan los valores relacionados con el precio en el elemento superior <Result> o <RoomBundle>. Si no están configurados en <Rate>, heredarán su valor del elemento superior. Solo se hereda <AllowablePointsofSale> en el elemento <RoomBundle>.

Sintaxis

El elemento <Rates> usa 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|installments|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 Para las tarifas condicionales, este ID hace coincidir una tarifa con una definición del archivo de definición de reglas de tarifas. El límite de caracteres para este campo es de 40 caracteres.

Elementos secundarios

El elemento <Rates> tiene los siguientes elementos secundarios:

Elemento secundario ¿Obligatorio? Tipo Descripción
<AllowablePointsOfSale> Optional Object Hay una o más páginas de destino aptas para el hotel. Este elemento usa la misma sintaxis que <AllowablePointsOfSale> en <Result>.
<Baserate> Required float El precio de la habitación por la estadía. Este elemento usa la misma sintaxis que <Baserate> en <Result>.

Nota: No se puede definir el elemento secundario <Baserate> en <Rate> como no disponible.

<ChargeCurrency> Optional enum Cuándo y dónde el usuario paga una reserva. Este elemento usa la misma sintaxis que un <ChargeCurrency> en un <Result>.
<Custom[1‑5]> Optional string Campos personalizados que puedes usar para pasar datos adicionales asociados con un hotel a una página de destino. Este elemento usa la misma sintaxis que un <Custom[1‑5]> en un <Result>. Existe un límite de 200 caracteres por campo personalizado. Para obtener más información, consulta los archivos de páginas de destino.

Si se proporcionan elementos <Custom> en el elemento <Result>, no se heredan en el elemento <RoomBundle> y deben definirse por separado para cada <RoomBundle>. También se pueden incluir en <PackageData> si es necesario.

<ExpirationTime> Optional DateTime La fecha y la hora en que la tasa se considera vencida. Este elemento usa la misma sintaxis que un <ExpirationTime> en un <Result>.
<Occupancy> Optional integer

Especifica la cantidad máxima de ocupantes. <Occupancy> puede ir acompañado de <OccupancyDetails>, que especifica el tipo de invitados (adultos o niños). Consulta <OccupancyDetails> para conocer la sintaxis y la descripción de los elementos secundarios.

<OtherFees> Required float Tarifas distintas de la tarifa base y los impuestos que influyen en el precio final de una habitación Este elemento usa la misma sintaxis que <OtherFees> en un objeto <Result>.
<Refundable> Optional Object Permite mostrar una tarifa como completamente reembolsable o ofrecer una cancelación gratuita. Si no se proporciona, no se mostrará información sobre el reembolso. Una política de reembolso a nivel de <PackageData> anula la del nivel de <Result>. Una política de reembolso a nivel de <Rates> anula la del nivel de <PackageData>. Los precios reembolsables también se pueden destacar para los usuarios a través de opciones alternativas sin modificar directamente el esquema de tu mensaje de transacción. Obtén más información sobre estas opciones en la Política de tarifas reembolsables.

En el siguiente ejemplo, se muestra el elemento <Refundable> con todos sus atributos establecidos:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

Nota: Te recomendamos que configures todos los atributos. Se genera un mensaje de advertencia sobre el estado del feed cuando no se configuran uno o más atributos.

Si no configuras ningún atributo, la tarifa no se muestra como reembolsable. Los atributos son los siguientes:

  • available: (obligatorio) Configúralo en 1 (o true) para indicar si la tarifa permite un reembolso total; de lo contrario, establécelo en 0 (o false).
  • refundable_until_days (obligatorio si available es true). Especifica la cantidad de días antes de la entrada en los que se puede solicitar un reembolso total. El valor de refundable_until_days debe ser un número entero entre 0 y 330, inclusive.
  • refundable_until_time: (Se recomienda especialmente si available es true). Especifica la última hora del día, en la hora local del hotel, en la que se respetará una solicitud de reembolso total. Se puede combinar con refundable_until_days para especificar, por ejemplo, que “los reembolsos están disponibles hasta las 4:00 p.m. dos días antes de la entrada”. Si no se configura refundable_until_time, el valor se establece de forma predeterminada en la medianoche.

    El valor de este atributo usa el formato Time.

Cuando configures los atributos, ten en cuenta lo siguiente:

  • Si no se establecen available o refundable_until_days, la tarifa no se muestra como reembolsable.
  • Si available es 0 (o false), se ignoran los otros atributos. La tarifa no se muestra como reembolsable, incluso si se configuran uno o ambos atributos.
<Tax> Required float Son los impuestos que se calculan para el precio final de una habitación. Este elemento usa la misma sintaxis que la <Tax> en un <Result>.

Ejemplos

Tarifa base y tarifa condicional

En el siguiente ejemplo, se muestra un mensaje de transacción que contiene una tarifa base y una tarifa condicional:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-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>

Varias tarifas condicionales

En el siguiente ejemplo, se define una tarifa base y varias tarifas condicionales dentro de un <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>2</Nights>
    <!-- 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>

Define el precio y la disponibilidad de los paquetes de habitación como elemento secundario de <Result> en un mensaje <Transaction>. Define un elemento separado para cada combinación de paquete o itinerario. Para definir el paquete y las condiciones de los paquetes de habitaciones, usa <RoomData>.

El elemento <RoomBundle> aparece en el siguiente lugar de la jerarquía XML del mensaje de transacción:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Para obtener más información, consulta Cómo usar paquetes de habitaciones.

Sintaxis

El elemento <RoomBundle> usa 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 -->
      <ChargeCurrency>[deposit|hotel|installments|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>

Atributos

El elemento <RoomBundle> no tiene atributos.

Elementos secundarios

El elemento <RoomBundle> tiene los siguientes elementos secundarios:

Elemento secundario ¿Obligatorio? Tipo Descripción
<Baserate> Required float Define el precio del paquete de habitación para la estadía. Este elemento usa la misma sintaxis que <Baserate> en <Result>, con la siguiente excepción:
  • Cuando la habitación no esté disponible para el itinerario, quita el elemento <RoomBundle> para indicar que la habitación ya no está en el inventario. Para obtener más información, consulta Cómo quitar un paquete de Room.
<BreakfastIncluded> Optional boolean Especifica si este paquete de habitación incluye desayuno con la tarifa.
<ChargeCurrency> Optional enum Cuándo y dónde el usuario paga una reserva. Este elemento usa la misma sintaxis que <ChargeCurrency> en un objeto <Result>.

El valor predeterminado es web.

<Custom[1‑5]> Optional string Campos personalizados para pasar datos adicionales a las páginas de destino del paquete de habitación Estos elementos usan la misma sintaxis que <Custom[1-5]> en <Result>. Existe un límite de 200 caracteres por campo personalizado. Para obtener más información, consulta los archivos de páginas de destino.

Si se proporcionan elementos <Custom> en el elemento <Result>, no se heredan en el elemento <RoomBundle> y deben definirse por separado para cada <RoomBundle>. También se pueden incluir en <PackageData> si es necesario.

<InternetIncluded> Optional boolean Si un paquete de habitación incluye acceso a Internet sin cargo, los demás paquetes no incluirían ese servicio. No configures este elemento para los paquetes de habitación en un hotel que ofrece Internet gratis a todas las habitaciones. Este elemento no se aplica a la conexión a Internet por cable o inalámbrica en la habitación que no está disponible en las habitaciones de huéspedes.
<Occupancy> Required integer Corresponde a la cantidad máxima de huéspedes para los que se segmenta un paquete de habitación. Por ejemplo, una suite grande puede tener capacidad física para 6 huéspedes, pero el "Paquete de luna de miel" está destinado solo para 2 huéspedes.

Este valor debe ser menor o igual que <Capacity>, que es la cantidad de personas que la sala puede alojar físicamente.

Cuando definas la ocupación en tu URL de página de destino, usa las variables NUM-ADULTS y NUM-CHILDREN, como se describe en Usa variables y condiciones. El valor predeterminado es 2 adultos y 0 niños.

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

Notas:

  • Se recomienda marcar <Occupancy> para <RoomBundle> como obligatorio y, si se omite, arrojará un error 1097.
  • <Occupancy> proviene del objeto de datos en este orden: <RoomBundle>, <PackageData> y, luego, = <RoomData>. Si no hay ningún valor presente en ninguno de estos, el valor predeterminado es 2.
  • <Occupancy> puede ir acompañado de <OccupancyDetails>, que especifica el tipo de invitados (adultos o niños). Consulta <OccupancyDetails> para conocer la sintaxis y la descripción de los elementos secundarios.
  • Cuando configuras <Occupancy> en <RoomBundle> y <PackageData>, el valor en <RoomBundle> tiene prioridad.
<OtherFees> Required float Tarifas distintas de la tarifa base y los impuestos que influyen en el precio final de una habitación El elemento <OtherFees> toma un solo atributo obligatorio, currency, que define el código de moneda de tres letras de las tarifas. Por ejemplo, usa USD para dólares estadounidenses.
<PackageID> Optional (recommended) string El ID único de los datos del paquete. Usa este ID para hacer coincidir los datos del paquete de Room con lo que se envió en <PackageData>. Para obtener más información, consulta los metadatos del paquete de Room. También puedes usar este ID para hacer referencia a una definición común de paquete de Room que se usa en un solo mensaje de transacción cuando se definen los datos del paquete de Room en intercalado.
<ParkingIncluded> Optional boolean Indica si un paquete de habitación incluye estacionamiento sin cargo; de lo contrario, el estacionamiento sería un servicio pagado en este hotel. No especifiques un valor para este elemento en un hotel que ofrece estacionamiento gratuito.

Los valores válidos son 0 (o false) y 1 (o true). El valor predeterminado es false.

<RatePlanID> Optional string El ID del plan de tarifas representa el identificador único de una combinación de habitación y paquete. Por ejemplo, con un valor <RoomID> de 5 y un valor <PackageID> de ABC, puedes usar un valor de 5-ABC para <RatePlanID>. Te recomendamos que uses RatePlanID como una variable para crear la URL de tu página de destino dinámica (antes conocida como punto de venta).

Para obtener más información, consulta Usa variables y condiciones.

<Rates> Optional <Rates> Tarifas que anulan los valores predeterminados de este paquete de habitación. Este elemento usa la misma sintaxis que <Rates> en <Result>.
<Refundable> Optional Object Permite mostrar una tarifa como completamente reembolsable o ofrecer una cancelación gratuita. Si no se proporciona, no se mostrará información sobre el reembolso. Una política de reembolso a nivel de <PackageData> anula la del nivel de <Result>. Una política de reembolso a nivel de <Rates> anula la del nivel de <PackageData>. Los precios reembolsables también se pueden destacar para los usuarios a través de opciones alternativas sin modificar directamente el esquema de tu mensaje de transacción. Obtén más información sobre estas opciones en la Política de tarifas reembolsables.

En el siguiente ejemplo, se muestra el elemento <Refundable> con todos sus atributos establecidos:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

Nota: Te recomendamos que configures todos los atributos. Se genera un mensaje de advertencia sobre el estado del feed cuando no se configuran uno o más atributos.

Si no configuras ningún atributo, la tarifa no se muestra como reembolsable. Los atributos son los siguientes:

  • available: (obligatorio) Configúralo en 1 (o true) para indicar si la tarifa permite un reembolso total; de lo contrario, establécelo en 0 (o false).
  • refundable_until_days (obligatorio si available es true). Especifica la cantidad de días antes de la entrada en los que se puede solicitar un reembolso total. El valor de refundable_until_days debe ser un número entero entre 0 y 330, inclusive.
  • refundable_until_time: (Se recomienda especialmente si available es true). Especifica la última hora del día, en la hora local del hotel, en la que se respetará una solicitud de reembolso total. Se puede combinar con refundable_until_days para especificar, por ejemplo, que “los reembolsos están disponibles hasta las 4:00 p.m. dos días antes de la entrada”. Si no se configura refundable_until_time, el valor se establece de forma predeterminada en la medianoche.

    El valor de este atributo usa el formato Time.

Cuando configures los atributos, ten en cuenta lo siguiente:

  • Si no se establecen available o refundable_until_days, la tarifa no se muestra como reembolsable.
  • Si available es 0 (o false), se ignoran los otros atributos. La tarifa no se muestra como reembolsable, incluso si se configuran uno o ambos atributos.
<RoomID> Required string El ID único de los datos de la habitación. Usa este ID para que los datos del paquete de Room coincidan con los que enviaste en <RoomData>. Para obtener más información, consulta los metadatos del paquete de habitación. También puedes usar este ID para hacer referencia a la definición de una sala común en un solo mensaje de transacción cuando defines los datos de las habitaciones de forma intercalada.
<Tax> Required float Son los impuestos que se calculan para el precio final de una habitación. El elemento <Tax> toma un solo atributo obligatorio, currency, que define el código de moneda de tres letras para los impuestos. Por ejemplo, usa USD para dólares estadounidenses.

Ejemplos

Paquete de ocupación individual

En el siguiente ejemplo, se define una respuesta con un solo paquete de ocupación. Cuando un usuario selecciona 1 en el selector de ocupación, Google muestra el precio apto más bajo, independientemente de la ocupación.

Si no hay un precio de ocupación individual disponible, Google mostrará el precio más bajo para una ocupación doble. Ten en cuenta que los precios de una ocupación única no se consultan en vivo si se almacenan en caché los precios de ocupación doble o más para un itinerario.

En este ejemplo, se hace referencia a los metadatos predefinidos de habitaciones y paquetes 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>
    <!-- Single occupancy pricing will be specified in a room bundle below -->
    <Property>180054</Property>
    <Checkin>2017-10-07</Checkin>
    <Nights>2</Nights>
    <!-- Base Room Bundle -->
    <RoomBundle>
      <RoomID>060773</RoomID>
      <PackageID>P54321</PackageID>
      <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>


Dos o más ocupaciones

En el siguiente ejemplo, se define una respuesta que contiene dos o más ocupaciones.

En este ejemplo, se hace referencia a los metadatos predefinidos de habitaciones y paquetes 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>
    <Property>180054</Property>
    <Checkin>2017-10-07</Checkin>
    <Nights>2</Nights>
    <!-- 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>
      <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>


Varios paquetes de habitaciones

En el siguiente ejemplo, se configura la ocupación en varios paquetes de habitaciones para mostrar los posibles precios de habitaciones de hostal.

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

Varias tarifas condicionales

En el siguiente ejemplo, se define una tarifa base y varias tarifas condicionales dentro de un <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>2</Nights>
    <!-- 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>

<Occupancy> en un mensaje de transacción especifica la cantidad máxima de huéspedes para una habitación o un paquete. <OccupancyDetails> puede contener información adicional, como la cantidad y el tipo de huéspedes (adultos o niños).

Cuando <Occupancy> y <OccupancyDetails> aparecen dentro del elemento <Rates> de <Result> o <RoomBundle>, significa que la tarifa está restringida por los detalles de ocupación.

Sintaxis

Cuando aparece <OccupancyDetails>, siempre va precedido por <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 ¿Obligatorio? Tipo Descripción
<NumAdults> Required integer Indica la cantidad de invitados adultos. Mín.:1, Máx.:20.
<Children> Optional Object Es un contenedor para uno o más elementos <Child>.
<Child age> Optional integer La edad máxima de este publicador secundario, por ejemplo, <Child age="17">.

Ejemplos

En los siguientes ejemplos, se muestra cómo puede aparecer <OccupancyDetails> dentro de <Results>, <RoomBundle> o el elemento secundario <Rates>.

Respuesta del resultado

En el siguiente ejemplo, se define un itinerario y sus precios para una propiedad en respuesta a una consulta de precios en tiempo real en la que el usuario especificó la cantidad y los tipos de huéspedes. En este caso, los <OccupancyDetails> (2 adultos y un niño) se devuelven en <Result>.

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

Califica la respuesta

En el siguiente ejemplo, se define un itinerario y sus precios para 1 adulto y 1 secundario. Aquí, <OccupancyDetails> se muestran en el elemento <Rates> de <Result>.

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

Paquete de habitación

En el siguiente ejemplo, se define una ocupación de 2 adultos y 1 niño por dos noches, con una tarifa reembolsable. Aquí, <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>

Varios paquetes de habitaciones

En el siguiente ejemplo, se definen varias tarifas de <RoomBundle> que están restringidas a una ocupación de 2 adultos y 2 niños. Aquí, <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>