Цены и усилители; Справочник XML по инвентаризации помещений (транзакции)

На этой странице представлена ​​справочная информация по транзакционным сообщениям в формате XML.

<Transaction>

Корневым элементом сообщения Transaction является <Transaction> . Он представляет собой контейнер для описательной информации о номерах и пакетах услуг, а также о ценах и наличии номеров и пакетов услуг.

Элемент <Transaction> располагается в следующем месте в иерархии XML-сообщений транзакций:

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

Сообщения, в которых в качестве корневого элемента используется <Transaction> , должны иметь как минимум один дочерний элемент. Сообщения транзакций могут иметь любое количество дочерних элементов, при условии, что общий размер сообщения не превышает 100 МБ.

Синтаксис

Элемент <Transaction> использует следующий синтаксис:

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

Атрибуты

Элемент <Transaction> имеет следующие атрибуты:

Атрибут Необходимый? Тип Описание
id Required нить Уникальный идентификатор для каждого сообщения транзакции.
partner Optional string Партнерский аккаунт, для которого предназначено сообщение о транзакции. Обычно это используется, если ваша внутренняя система предоставляет данные о ценах для нескольких партнерских аккаунтов. Это строковое значение соответствует значению "Ключ партнера", указанному на странице настроек аккаунта в Hotel Center.
timestamp Required DateTime

Момент времени отправки сообщения о транзакции.

Все сообщения, отправленные с отметкой времени в течение последних 24 часов, будут обработаны, а те, которые не были обработаны, будут отклонены.

Сообщения обрабатываются в порядке timestamp , а не в порядке их получения. Например, обновление цены с меткой времени 2019-05-03 14:09:00 , полученное после сообщения с меткой времени 2019-05-03 14:10:00 всё равно будет обработано в порядке очереди, и будет использована цена из сообщения с меткой времени 2019-05-03 14:10:00 .

Дочерние элементы

Элемент <Transaction> имеет следующие дочерние элементы:

Дочерний элемент Необходимый? Тип Описание
<PropertyDataSet> Optional* <PropertyDataSet>

Описывает конкретный номер и пакеты номеров. Обычно этот элемент используется в отдельном сообщении транзакции для определения общих значений для пакетов номеров и уменьшения размера сообщений транзакции.

<Result> Optional* <Result>

Данные о ценах для маршрута номера или элемент <RoomBundle> , определяющий пакеты номеров и дополнительные типы номеров для данного объекта размещения. Элемент <Result> также можно использовать для удаления маршрутов из списка доступных.

* Требуется наличие хотя бы одного из элементов <PropertyDataSet> или <Result> .

Примеры

Данные о номере

В следующем примере данные о номере определяются в сообщении транзакции:

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

Данные о ценах

В следующем примере данные о ценах определяются в сообщении транзакции:

<?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>
    <MilesIncluded>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines"/>
      </Provider>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
    </MilesIncluded>
  </Result>
</Transaction>

Стоимость за ночь

В следующем примере приведены данные о ценах на проживание от 1 до 7 ночей, начиная с 7 июня 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>


Базовые и условные ставки

В следующем примере показано сообщение транзакции, содержащее базовую ставку и условную ставку :

<?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>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Удалить товар со склада

В следующем примере из списка доступных номеров отеля удаляется несколько вариантов размещения (проживание на одну ночь в разные даты):

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

Контейнер для информации о номере и пакете услуг (или комплекте номеров ) в сообщении <Transaction> . Значения, установленные для отеля, переопределяют значения, установленные для партнера. Google хранит эту информацию, чтобы вам не приходилось определять ее каждый раз при отправке обновлений цен.

Элемент <PropertyDataSet> располагается в следующем месте в иерархии XML-сообщений транзакции:

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

Для получения более подробной информации обратитесь к метаданным пакета услуг для номеров .

Синтаксис

Элемент <PropertyDataSet> использует следующий синтаксис:

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

Атрибуты

Элемент <PropertyDataSet> не имеет атрибутов.

Дочерние элементы

Элемент <PropertyDataSet> имеет следующие дочерние элементы:

Дочерний элемент Необходимый? Тип Описание
<PackageData> Optional* <PackageData> Описывает пакет услуг, включающий проживание в номере. Эти данные связаны с партнером и отелем, но не с маршрутом поездки. Этот элемент похож на <RoomData> , но описывает удобства и условия, которые не являются частью фактического описания номера.

В обновлениях цен вы указываете идентификатор пакета.

Для получения более подробной информации обратитесь к метаданным пакета услуг для номеров .

<Property> Required string Идентификатор отеля, к которому относятся соответствующие данные. Значение этого элемента должно быть строкой, соответствующей объявлению <id> в вашем списке отелей.
<RoomData> Optional* <RoomData> Описывает номер. Эти данные связаны с партнером и отелем, но не с маршрутом поездки.

В обновлениях цен вы указываете идентификатор комнаты.

* Требуется наличие хотя бы одного из следующих типов данных: <PackageData> или <RoomData> .

Примеры

Данные о номере и пакетах услуг

В следующем примере показаны данные о номере и посылке в объекте <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>

При отправке цен и информации о наличии номеров и пакетов услуг вы ссылаетесь на идентификаторы номеров и пакетов в своих сообщениях с ценами. В результате вы значительно уменьшаете размер сообщений, а также сокращаете количество ошибок, которые могут возникнуть из-за дублирования данных. Для получения дополнительной информации см. раздел «Метаданные пакетов услуг» .

<RoomData>

Определяет независимые от маршрута метаданные о номерах и, соответственно, о пакетах номеров (поскольку пакеты номеров — это номера плюс дополнительные удобства). Используйте <RoomData> , чтобы уменьшить повторение описательных данных в вашем ценовом фиде.

Элемент <RoomData> располагается в следующем месте в иерархии XML-сообщений транзакций:

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

Элементы <RoomData> содержат информацию, связанную с партнером и отелем, но не с маршрутом поездки. Предназначены для хранения всех данных, не относящихся к маршруту.

Элемент <RoomData> похож на <PackageData> , но описывает физический номер, а не удобства и условия пакета услуг. Для предоставления подробной информации о пакетах услуг (Room Bundles) используются элементы <RoomData> и <PackageData> в сочетании. Для отдельных номеров, не входящих в пакет, используйте только <RoomData> .

Для одного и того же номера или пакета услуг можно определить как элементы <RoomData> , так и <PackageData> . Когда Google отобразит этот номер или пакет в результатах поиска, он включит описания из обоих источников, разделенные дефисом.

Для получения более подробной информации обратитесь к метаданным пакета услуг для номеров .

Синтаксис

Элемент <RoomData> использует следующий синтаксис:

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

Атрибуты

Элемент <RoomData> не имеет атрибутов.

Дочерние элементы

Элемент <RoomData> имеет следующие дочерние элементы:

Дочерний элемент Необходимый? Тип Описание
<Capacity> Optional integer Максимальное количество гостей, которое может физически вместить номер. Для номера вместимость больше или равна количеству проживающих.

Если это значение указано, оно должно быть равно или больше значения элемента <Occupancy> , которое представляет собой предполагаемое количество гостей в конкретном номере. Например, для большого номера <Capacity> может быть 6, а для него <Occupancy> — 4.

Значение параметра <Capacity> должно быть положительным целым числом от 1 до 20 включительно.

<Description> Optional Object Подробное описание комнаты. Этот элемент должен содержать информацию, не описанную другими элементами или элементом <Name> . При указании описания комнаты не следует использовать заглавные буквы.

Элемент <Description> принимает в качестве дочернего элемента единственный элемент <Text> , который имеет следующие два обязательных атрибута:

  • text : Подробное описание комнаты.
  • language : Двухбуквенный код языка; например, fr .

Для каждого языка, на котором может отображаться ваша реклама или ссылка на бесплатное бронирование, используйте отдельный элемент <Text> (с разными значениями для атрибутов language ).

В следующем примере представлены описания номера на французском и английском языках:

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Name> Required string Название категории номера. Это значение должно совпадать с тем, что отображается на главной странице отеля (ранее – страница продаж). Не следует устанавливать значение этого элемента в виде заглавных букв.

Этот элемент принимает в качестве дочернего элемента единственный дочерний элемент, <Text> , который имеет следующие два обязательных атрибута:

  • text : Название комнаты.
  • language : Двухбуквенный код языка; например, fr .

Для каждого языка, на котором может отображаться ваша реклама или ссылка на бесплатное бронирование, используйте отдельный элемент <Text> (с разными значениями для атрибутов language ).

В следующем примере показаны французский и английский варианты названия комнаты:

<Name>
  <Text text="Standard Double Room" language="en"/>
  <Text text="Le chambre double" language="fr"/>
</Name>
<Occupancy> Optional integer Максимальное количество гостей, на которое рассчитан номер. Например, большой люкс может физически вместить 6 гостей (вместимость = 6), но рассчитан только на 4 гостей.

Это значение должно быть меньше или равно значению элемента <Capacity> , который обозначает количество людей, физически вмещаемых в помещении.

Значение параметра <Occupancy> должно быть положительным целым числом от 1 до 99 включительно.

<Occupancy> может сопровождаться элементом <OccupancyDetails> , который указывает тип гостей (взрослые или дети). Для получения информации о синтаксисе и описании дочерних элементов см. <OccupancyDetails> .

<OccupancySettings> Optional Object Настройки, позволяющие ограничивать или изменять требования к количеству людей в номере.

Элемент <OccupancySettings> принимает в качестве дочерних элементов следующие элементы:

  • <MinOccupancy> : Минимальное количество гостей, которое может разместиться в номере. Например, если установлено значение 2 , этот номер нельзя забронировать для одного гостя.

    Значение параметра <MinOccupancy> должно быть положительным целым числом от 1 до 99 включительно.

  • <MinAge> : Минимальный возраст для всех гостей, проживающих в номере. Например, если установлено значение 18 , этот номер можно забронировать только для групп, в которых все гости достигли 18 лет или старше.

    Значение параметра <MinAge> должно быть положительным целым числом от 0 до 99 включительно.

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

Не все дочерние элементы обязательно должны быть включены.

<PhotoURL> Optional Object URL-адрес и необязательная подпись для фотографии указанного номера или пакета номеров. Для номера или пакета номеров можно указать несколько <PhotoURL> . Каждый URL-адрес фотографии должен находиться в отдельном <PhotoURL> .

Этот элемент принимает следующие дочерние элементы:

  • <URL> : Указывает местоположение фотографии. Местоположение должно быть общедоступным (не за брандмауэром) и должно включать протокол (например, https:// ). Используйте только один <URL> для каждого <PhotoURL> .
  • <Caption> : Определяет подпись к фотографии. Этот элемент принимает один дочерний элемент, <Text> , который имеет два обязательных атрибута: text и language . Атрибут text — это подпись, а атрибут language задает двухбуквенный код языка, например en .

Пример:

<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> Содержит информацию об особенностях номера.
<RoomID> Required string Уникальный идентификатор номера. Используйте этот идентификатор для сопоставления данных номера с блоками <Result> в обновлениях цен. Для получения дополнительной информации см. метаданные пакета номеров . (Вы также можете использовать этот идентификатор для ссылки на общее определение номера в одном сообщении транзакции при определении данных номера непосредственно в сообщении.)

Примеры

Данные о номере

В следующем примере задаются данные о номере:

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

Метаданные номера и пакета

В следующем примере определены метаданные для комнаты и пакета:

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

Несколько пакетов номеров

В следующем примере определены метаданные для комнаты и пакета услуг для нескольких комплектов номеров:

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

Определяет характеристики, имеющиеся в помещении.

Элемент <RoomFeatures> располагается в следующем месте в иерархии XML-сообщений транзакции:

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

Синтаксис

Элемент <RoomFeatures> использует следующий синтаксис:

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

Атрибуты

Элемент <RoomFeatures> не имеет атрибутов.

Дочерние элементы

Элемент <RoomFeatures> имеет следующие дочерние элементы:

Дочерний элемент Необходимый? Тип Описание
<JapaneseHotelRoomStyle> Optional enum

Указывает на стиль номера в японском отеле.

Допустимые значения:

  • western : Номер в западном стиле с кроватями.
  • japanese : Комната в японском стиле с футонами.
  • japanese_western : Номер в японско-западном стиле, оборудованный как кроватями западного типа, так и футонами в японском стиле.
<Beds> Optional Object В номере столько <Bed> , сколько в нем есть. Обратите внимание, что японские футоны здесь учитывать не следует.

Каждая <Bed> имеет следующие характеристики:

  • size (необязательно): Допустимые значения: single , semi_double , double , queen и king .
Каждый элемент <Bed> имеет следующие дочерние элементы:
  • <Width> (необязательно): Задает ширину кровати. Должен содержать значение атрибута " unit измерения" в cm и number атрибута, указывающий ширину кровати в целых сантиметрах.
  • <Length> (необязательно): Задает длину кровати. Должен содержать атрибут unit со значением cm и атрибут number с длиной кровати в целых сантиметрах.
Пример:
<Beds>
  <Bed size="double">
    <Width unit="cm" number="140"/>
    <Length unit="cm" number="195"/>
  </Bed>
  <Bed/> <!-- Size unknown -->
</Beds>
<Suite> Optional empty Добавьте этот элемент, если номер является люксом.
<Capsule> Optional empty Добавьте этот элемент, если это капсульный номер.
<Roomsharing> Optional enum Независимо от того, делится ли эта комната с другими жильцами, такими как владельцы или другие гости, допустимыми являются shared и private ценности.
<Outdoor> Optional empty Укажите этот элемент, если данное помещение представляет собой жилье на открытом воздухе, не имеющее стационарных стен, водопровода и системы климат-контроля. Например, гостиничные номера не являются жильем на открытом воздухе, в то время как кемпинги, где гости размещаются в палатках, и парки для автодомов, куда гости приезжают на собственных автодомах, являются жильем на открытом воздухе.
<MobilityAccessible> Optional empty Предусмотреть этот элемент следует, если помещение приспособлено для людей с ограниченной подвижностью.
<Smoking> Optional enum Указывает, является ли номер номером для некурящих или для курящих. Допустимые значения: non_smoking и smoking .
<BathAndToilet> Optional Object Содержит информацию о наличии ванны и туалета в номере.

Атрибут:

  • relation (необязательно): указывает, как ванна и туалет расположены относительно друг друга. Допустимые значения: together (ванна и туалет расположены вместе в одном помещении (например, ванной комнате) рядом друг с другом) и separate (ванна и туалет имеют отдельные помещения). Этот атрибут не следует устанавливать, если в помещении нет ни ванны, ни туалета.

Данный элемент может содержать следующие дочерние элементы (по желанию):

  • <Bath> (необязательно): Наличие этого элемента указывает на то, что в комнате есть ванна.

    Атрибуты следующие:

    • bathtub (необязательно): указывает, что в ванной комнате есть ванна. Допустимые значения: 0 (или false ) и 1 (или true ).
    • shower (необязательно): указывает, что в ванной есть душ. Допустимые значения: 0 (или false ) и 1 (или true ).
  • <Toilet> (необязательно): Наличие этого элемента указывает на то, что в этом помещении есть туалет.

    Атрибуты следующие:

    • electronic_bidet (необязательно): указывает, что в унитазе установлено электронное биде . Допустимые значения: 0 (или false ) и 1 (или true ).
    • mobility_accessible (необязательно): указывает, что туалет доступен для людей с ограниченными возможностями передвижения. Допустимые значения: 0 (или false ) и 1 (или true ).

Пример:

<BathAndToilet relation="separate">
  <Bath bathtub="1" shower="1"/>
  <Toilet
    electronic_bidet="1"
    mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath> Optional empty Этот элемент следует предусмотреть, если в номере есть отдельная ванная комната под открытым небом.
<AirConditioning> Optional empty Укажите этот элемент, если в этом помещении есть кондиционер.
<Balcony> Optional empty Добавьте этот элемент, если в комнате есть балкон или веранда.
<Views> Optional Object Допустимые варианты включают:

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

Примеры

JapaneseHotelRoomStyle не имеет значения по умолчанию. Отсутствие значения не приводит к ошибке XML, но ваше объявление не отображается в результатах поиска, когда пользователь фильтрует по типу номера или количеству кроватей.

Две односпальные кровати

В следующем примере показано, как использовать <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>

Две двуспальные кровати

Ниже представлен пример японской комнаты в western стиле с двумя 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>


Японский стиль без кровати

Ниже приведён пример номера в японском стиле без кровати. Информация о кровати для номера 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>

японский вестерн с кроватью

Ниже представлен пример номера japanese_western стиле с кроватью размера 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>

Если у партнера нет информации о количестве спальных мест в номерах категории japanese_western , следуйте приведенному примеру:

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

Определяет независимые от маршрута метаданные о пакетах номеров для объекта размещения. Этот элемент содержит информацию, связанную с партнером и отелем, но не с маршрутом. Цель состоит в том, чтобы определить все данные, не относящиеся к маршруту, один раз и ссылаться на них из данных маршрута.

Элемент <PackageData> располагается в следующем месте в иерархии XML-сообщений транзакции:

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

Элемент <PackageData> аналогичен элементу <RoomData> , но описывает характеристики и условия тарифа, которые не являются частью физического описания номера. Элементы <RoomData> и <PackageData> используются совместно для предоставления подробной информации о пакетах номеров и характеристиках тарифа. Для отдельных номеров, не входящих в пакет, используйте только <RoomData> .

Для одного и того же номера или пакета услуг можно определить как элементы <RoomData> , так и <PackageData> . Когда Google отобразит этот номер или пакет в результатах поиска, он включит описания из обоих источников, разделенные дефисом.

Если вы обновляете один элемент <PackageData> для объекта недвижимости, необходимо обновить все элементы <PackageData> и <RoomData> для этого же объекта. Каждый элемент <PropertyDataSet> рассматривается как полный набор данных об объекте недвижимости и перезаписывает все существующие данные.

Для получения более подробной информации обратитесь к метаданным пакета услуг для номеров .

Синтаксис

Элемент <PackageData> использует следующий синтаксис:

<?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>integer</NumberOfMiles>
        <Provider>
          <Text language="en" text="provider-name">
        </Provider>
        <!-- Add Loyalty point information -->
        <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
      </MilesIncluded>
    </PackageData>
    ...
    ...
  </PropertyDataSet>
  ...
</Transaction>

Атрибуты

Элемент <PackageData> не имеет атрибутов.

Дочерние элементы

Элемент <PackageData> имеет следующие дочерние элементы:

Дочерний элемент Необходимый? Тип Описание
<BreakfastIncluded> Optional boolean Указывает, включен ли завтрак в стоимость данного пакета услуг. Допустимые значения: 0 (или false ) и 1 (или true ).

Рекомендуется использовать <Meals> вместо <BreakfastIncluded> .

<ChargeCurrency> Optional enum Когда и где пользователь оплачивает бронирование. Этот элемент использует тот же синтаксис, что и <ChargeCurrency> в <Result> .

Значение по умолчанию — web .

<CheckinTime> Optional Time Самое раннее возможное время заселения. Время должно быть менее 24:00 по местному времени отеля.
<CheckoutTime> Optional Time Максимально возможное время выезда по местному времени отеля.
<Description> Optional Object Подробное описание пакета. Этот элемент должен содержать информацию, не описанную другими элементами или элементом <Name> . При указании описания комнаты не следует использовать заглавные буквы.

Элемент <Description> принимает один дочерний элемент <Text> , который имеет два обязательных атрибута: text и language . Атрибут text содержит описание, а атрибут language задает двухбуквенный код языка, как показано в следующем примере:

<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 Если пакет услуг включает бесплатный доступ в интернет, в то время как другие пакеты не включают эту услугу, не следует устанавливать этот параметр для пакетов услуг в отеле, который предоставляет бесплатный интернет во всех номерах. Этот параметр не применяется к проводному или беспроводному интернету в номерах, который недоступен для гостей. Допустимые значения: 0 (или false ) и 1 (или true ).
<Meals> Optional Object Содержит информацию о блюдах, входящих в этот набор.

Элемент <Meals> принимает два необязательных дочерних элемента, <Breakfast> и <Dinner> , которые имеют следующие атрибуты:

  • included (обязательно): Установите значение 1 (или true ), если в стоимость входит завтрак/ужин; в противном случае установите значение 0 или false .
  • in_room (необязательно): Установите значение 1 (или true ), если у гостей есть возможность позавтракать/поужинать в номере, в котором они проживают; в противном случае установите значение 0 (или false ).
  • in_private_space (необязательно): Установите значение 1 (или true ), если у гостей есть возможность завтракать/ужинать в помещении (кроме номера, в котором они проживают), где они могут избежать контакта с другими гостями; в противном случае установите значение 0 (или false ).
  • buffet (необязательно): установите значение 1 (или true ), если завтрак/ужин подается в формате "шведский стол"; в противном случае установите значение 0 (или false ).

Необязательные атрибуты используются только в том случае, если included имеет значение true.

Для корректной работы фильтров по приему пищи ( no meals , breakfast only , dinner only , breakfast and dinner ) необходимо included атрибуты <Breakfast> и <Dinner> .

<Name> Required string Название пакета услуг. Это значение должно совпадать с тем, что отображается на главной странице отеля. Не следует устанавливать значение этого элемента в виде заглавных букв.

Этот элемент принимает в качестве дочернего элемента единственный элемент <Text> , который имеет два атрибута: text и language . Атрибут text содержит описание, а атрибут language задает двухбуквенный код языка, как показано в следующем примере:

<Name>
  <Text text="Bed and Breakfast" language="en"/>
  <Text text="Lit et petit déjeuné" language="fr"/>
</Name>
<Occupancy> Optional integer Максимальное количество гостей, на которое рассчитан пакет услуг «Номер». Например, большой люкс может вместить 6 гостей, но рассчитан только на 4 гостей.

Это значение должно быть меньше или равно значению элемента <Capacity> , который обозначает количество людей, физически вмещаемых в помещении.

Значение параметра <Occupancy> должно быть положительным целым числом от 1 до 99 включительно.

Если вы укажете этот элемент как в <RoomBundle> , так и <PackageData> , то значение в <RoomBundle> будет иметь приоритет.

Примечание :

<Occupancy> может сопровождаться элементом <OccupancyDetails> , который указывает тип гостей (взрослые или дети). Для получения информации о синтаксисе и описании дочерних элементов см. <OccupancyDetails> .
<PackageID> Required string

Уникальный идентификатор пакета. Используйте этот идентификатор для сопоставления данных пакета услуг с блоками <Result> в обновлениях цен. Для получения дополнительной информации см. метаданные пакета услуг .

(Этот идентификатор также можно использовать для ссылки на общее определение пакета номеров, используемое в одном сообщении транзакции при определении данных пакета номеров непосредственно в сообщении.)

<ParkingIncluded> Optional boolean Включает ли пакет услуг «Номер» бесплатную парковку, если в противном случае парковка в этом отеле является платной услугой? Не указывайте стоимость этого элемента для отеля, предлагающего бесплатную парковку.

Допустимые значения: 0 (или false ) и 1 (или true ). Значение по умолчанию — false .

<PhotoURL> Optional Object (Аналогично <PhotoURL> в <RoomData> , но для пакета (например, фотографии блюд).)
<Refundable> Optional Object Позволяет указать тариф как полностью возвратный или предоставляющий бесплатную отмену. Если не указано, информация о возврате не отображается. Политика возврата на уровне <PackageData> переопределяет политику возврата на уровне <Result> . Политика возврата на уровне <Rates> переопределяет политику возврата на уровне <PackageData> . Возвратные цены также могут быть выделены для пользователей с помощью альтернативных вариантов без прямого изменения схемы сообщения транзакции. Подробнее об этих параметрах: Политика возвратных тарифов .

В следующем примере показан элемент <Refundable> со всеми заданными атрибутами:

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

Примечание: Мы рекомендуем установить все атрибуты. Если один или несколько атрибутов не установлены, генерируется предупреждающее сообщение о состоянии ленты.

Если вы не укажете никаких параметров, ставка не будет отображаться как подлежащая возврату. Параметрами являются:

  • available : (Обязательно) Установите значение 1 или true чтобы указать, допускает ли тариф полный возврат средств; в противном случае установите значение 0 или false .
  • refundable_until_days : (Обязательно, если available равно true ) Указывает количество дней до заезда, за которое можно запросить полный возврат средств. Значение refundable_until_days должно быть целым числом от 0 до 330 включительно.
  • refundable_until_time : (Настоятельно рекомендуется, если available равно true ) Указывает самое позднее время суток по местному времени отеля, когда будет удовлетворен запрос на полный возврат средств. Это можно комбинировать с refundable_until_days , чтобы указать, например, что «возврат средств возможен до 16:00 за два дня до заезда». Если refundable_until_time не задано, значение по умолчанию равно полуночи.

    Значение этого атрибута использует формат времени .

При задании атрибутов обратите внимание на следующее:

  • Если параметр available или refundable_until_days не задан, тариф не отображается как подлежащий возврату.
  • Если available равно 0 или false , остальные атрибуты игнорируются. Ставка не отображается как подлежащая возврату, даже если один или оба других атрибута заданы.
<MembershipBenefits Included> Optional boolean В стоимость включены привилегии элитного статуса на весь период пребывания. Включает следующие параметры:
  • ProgramName : Название программы для получения элитного статуса
  • ProgramLevel : Уровень программы. Например: "Золотой".
  • NightlyValue (optional) : Стоимость предоставляемых услуг за ночь.
<CarRentalIncluded> Optional boolean В стоимость входит бесплатный прокат автомобиля на весь период проживания.
<MilesIncluded> Optional boolean В стоимость включены бонусные мили для часто летающих пассажиров. Параметры включают:
  • NumberOfMiles : Количество миль на маршрут.
  • Provider : Компания, предоставляющая программы начисления миль для часто летающих пассажиров.
  • LoyaltyCampaignID : Уникальный идентификатор, который определяет конкретную программу лояльности, настроенную и обновленную в Google. Он добавляет баллы лояльности к цене номера в отеле.

    Для включения элемента <MilesIncluded> необходимо указать идентификатор кампании в настройках кампании лояльности. Конкретные детали использования баллов лояльности Google в результатах определяются настройками кампании лояльности.

    Элемент <MilesIncluded> имеет дочерний элемент <NumberOfMiles> , который вычисляет количество начисленных баллов. Если <NumberOfMiles> не задан, количество начисленных баллов определяется конфигурацией программы лояльности.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Примечание: <NumberOfMiles> и <Provider> являются необязательными.

<OnPropertyCredit> Optional boolean В стоимость включены средства, предоставленные на территории отеля (питание, напитки, услуги курорта, спа-салона и т. д.). Параметр:
  • Amount : Стоимость кредита на один маршрут в местной валюте.
<AirportTransportationIncluded> Optional Object В стоимость включен бесплатный трансфер до/от ближайшего аэропорта. Необязательный параметр direction указывает направление движения. Допустимые значения:
    from : Предоставляется трансфер из аэропорта до объекта размещения. Это значение по умолчанию, если направление не указано. to : Предоставляется трансфер из объекта размещения в аэропорт. round_trip : Предоставляется трансфер как до, так и из аэропорта.

Примеры

Одноместный номер (пакет)

В следующем примере представлен единый пакет услуг для одного номера, рассчитанный на двух человек (одного взрослого и одного ребенка) и включающий завтрак:

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

Метаданные комнаты и пакетов

В следующем примере определены метаданные для комнаты и пакета:

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

Несколько пакетов номеров

В следующем примере определены метаданные для комнаты и пакета услуг для нескольких комплектов номеров:

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


Пакет "Номер" с тарифами

В следующем примере определяются метаданные номера комнаты и пакета услуг для комплекта номеров с указанием тарифов:

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

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

Блюда и фотографии

В следующем примере определены метаданные номера и пакетов услуг, включая информацию о питании, фотографиях, а также времени заезда и выезда:

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

Завтрак

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

Контейнер для обновления информации о ценах и наличии товаров в сообщении типа <Transaction> .

Элемент <Result> располагается в следующем месте в иерархии XML-сообщений транзакции:

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

Используйте <Result> для установки или обновления цен на номера и определения доступного количества номеров. Элементы, определенные в этом элементе, обычно ссылаются на независимые от маршрута метаданные о номере или пакете услуг (например, описание или набор удобств), определенные в <PackageData> и <RoomData> .

Обычно сообщения Transaction с обновлениями цен отправляются очень часто. Точный способ и частота отправки зависят от выбранного вами способа доставки .

В сообщении транзакции можно использовать <Result> для удаления маршрутов, как описано в разделе «Удаление товаров со склада» . Дополнительную информацию об использовании сообщений транзакции для обновления цен и наличия товаров см. в разделе «Добавление и обновление товаров со склада» .

Одно сообщение транзакции может содержать любое количество элементов <Result> , при условии, что размер сообщения не превышает 100 МБ.

Синтаксис

Элемент <Result> использует следующий синтаксис:

<?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. -->
    <!-- Child occupancy rates should only be sent through Live pricing
         with context and not through Pull or Changed pricing -->
    <OccupancyDetails>occupancy_info</OccupancyDetails>

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

    <AllowablePointsOfSale>
      <PointOfSale id="landing_page_identifier"/>
      ...
    </AllowablePointsOfSale>

    <MilesIncluded>
      <NumberOfMiles>integer</NumberOfMiles>
      <Provider>
        <Text language="en" text="provider-name">
      </Provider>
      <!-- Add Loyalty point information -->
      <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
    </MilesIncluded>
  </Result>
  ...
  </Transaction>

Атрибуты

Элемент <Result> имеет следующие атрибуты:

Атрибут Необходимый? Тип Описание
mergeable Optional boolean По умолчанию новые цены для конкретной пары отель-маршрут перезаписывают любые предыдущие (непросроченные) цены, хранящиеся в кэше Google. Атрибут mergeable позволяет сохранять дополнительные цены в кэше Google без удаления предыдущей информации о ценах. В ответах на запросы Live Pricing Query with Context этот атрибут всегда будет установлен в true (независимо от ответа на ваше сообщение транзакции).

Дочерние элементы

Элемент <Result> имеет следующие дочерние элементы:

Дочерний элемент Необходимый? Тип Описание
<AllowablePointsOfSale> Optional Object Одна или несколько целевых страниц, подходящих для отеля. Целевая страница — это веб-сайт, который может обрабатывать процесс бронирования для конечного пользователя. Чтобы явно включить определенные целевые страницы (и исключить другие), добавьте один или несколько элементов <AllowablePointsOfSale> , соответствующих атрибуту id элемента <PointOfSale> в файле целевых страниц.

Если вы не включите этот элемент, все целевые страницы, определенные в файле целевых страниц, будут считаться пригодными для бронирования номера. Для получения дополнительной информации см. раздел «Синтаксис файла целевых страниц» .

<Baserate> Optional float

Стоимость номера за проживание. Значение этого элемента должно отражать следующее:

  • Для отдельной комнаты установите самый недорогой тариф для двухместного размещения, который вы предлагаете. Более высокие тарифы допускаются, если у вас нет тарифа для двухместного размещения, и в вашем аккаунте включены тарифы для недвухместного размещения. Пожалуйста, свяжитесь с нами , чтобы включить тарифы для недвухместного размещения. Тарифы для одноместного размещения здесь не допускаются — их необходимо установить в разделе <Rates> .
  • Для комнаты с общим пользованием оставьте поле пустым и используйте <RoomBundle> .
  • Эта сумма должна представлять собой общую базовую цену за все ночи, а не среднюю стоимость за ночь.

Если номер недоступен для данного маршрута, <Baserate> следует либо опустить, либо установить равным -1 , а <Unavailable> указать вместе с известными причинами недоступности.

Чтобы удалить пакет услуг для комнаты, воспользуйтесь инструкциями в разделе «Удаление пакета услуг для комнаты» .

В переменной <Baserate> не должно быть символов группировки цифр, таких как запятая (,) или точка (.). Дроби всегда разделяйте точкой (.) в качестве десятичного разделителя. Например, представьте 1200,40 долларов США следующим образом:

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

Элемент <Baserate> принимает следующие необязательные атрибуты:

  • all_inclusive : Логическое значение, указывающее, включает ли данная цена налоги и сборы. Как правило, для пользователей из США и Канады следует установить это значение в false , а для элементов <Tax> и <OtherFees> указать соответствующие значения. Если вы используете цены «все включено», ваши предложения могут не отображаться в списке, если для канадских пользователей в них не указаны налоги и сборы отдельно.

    Теперь пользователям из США отображаются цены, включающие все расходы.

    Для всех остальных конечных пользователей налоги и сборы обычно включаются в базовую ставку, а значение атрибута all_inclusive устанавливается в true . Для получения дополнительной информации см. Политику в отношении налогов и сборов .

    Значение по умолчанию — false .

  • currency : трёхбуквенный код валюты . Например, USD для обозначения долларов США.
<ChargeCurrency> Optional enum Когда и где пользователь оплачивает бронирование. Этот элемент можно использовать в сообщении о транзакции в элементе <Result> для цены отеля или в блоке <PackageData> для пакета номеров.

Допустимые значения:

  • web : Оплата производится онлайн во время бронирования. Это значение по умолчанию. Фактическая целевая страница определяется файлом целевой страницы и может зависеть от валюты пользователя, его местоположения, языка или других факторов.
  • hotel : С пользователя взимается плата при регистрации в отеле. Если оплата всегда должна производиться в валюте отеля, установите значение <ChargeCurrency> равным hotel . Фактическая целевая страница не зависит от валюты пользователя.
  • deposit : С пользователя немедленно списывается часть суммы, а оставшаяся часть — позже, как правило, при выезде из отеля.
  • installments : С пользователя взимается первоначальная часть от общей суммы к оплате, и ожидается, что он будет регулярно погашать установленный баланс в течение фиксированного периода времени.

Значение по умолчанию — web .

<Checkin> Required Date Дата заезда для маршрута, указанная в формате даты . Маршрут формируется из комбинации элементов <Nights> и <Checkin> .
Optional string Устарело: Определяет пользовательское поле, которое можно использовать для передачи дополнительных данных, связанных с отелем. Можно передать до пяти пользовательских значений со следующими именами элементов:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

Элементы <Custom> позволяют передавать произвольные данные. Например, вы можете указать значение в этом поле, которое затем будет использоваться файлом целевых страниц для создания пользовательского URL-адреса для целевой страницы. Ограничение на 200 символов на каждое пользовательское поле. Для получения дополнительной информации см. раздел «Файлы целевых страниц» . Элементы <Custom>, предоставленные в элементе <Rate> , не наследуются элементом <RoomBundle> . Атрибут <Custom> следует определять отдельно в каждом элементе <RoomBundle> .

Важно: Если вы хотите использовать CUSTOM переменные, свяжитесь со своим техническим менеджером по работе с клиентами (TAM).

<ExpirationTime> Optional DateTime Дата и время, когда цена считается истекшей (минимум 3 часа).

Мы рекомендуем не указывать сроки действия, если это не является критически важным для вашей ценовой политики.

Google не отображает цены, срок действия которых истек, и любой маршрут с устаревшей ценой станет доступен для запроса цен в режиме реального времени .

<MilesIncluded> Optional boolean В стоимость включены бонусные мили для часто летающих пассажиров. Параметры включают:
  • NumberOfMiles : Количество миль на маршрут.
  • Provider : Компания, предоставляющая программы начисления миль для часто летающих пассажиров.
  • LoyaltyCampaignID : Уникальный идентификатор, который определяет конкретную программу лояльности, настроенную и обновленную в Google. Он добавляет баллы лояльности к цене номера в отеле.

    To include <MilesIncluded> element, the campaign ID should be configured in the Loyalty Campaign configuration. The specific details on how Google uses loyalty points in the results are determined by the Loyalty Campaign configuration.

    The <MilesIncluded> element has a child element, <NumberOfMiles> which calculates the number of points earned. If the <NumberOfMiles> is not set, the points earned are determined by the Loyalty Campaign configuration.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Note: <NumberOfMiles> and <Provider> are optional.

<Nights> Required integer The number of nights for an itinerary. The value of the <Nights> element must be a positive integer. The combination of <Nights> and <Checkin> make up an itinerary.
<OtherFees> Optional float Fees other than the base rate and taxes that influence the final price of a room. The <OtherFees> element takes a single required attribute, currency , that defines the three-letter currency code for the fees. For example, USD .

The <OtherFees> element is required if <Baserate> is greater than zero.

<Occupancy> Optional integer Specifies the maximum allowed occupants for this rate. When <Occupancy> appears directly under <Result> , it must specify 2 or more. <Occupancy> may be accompanied by <OccupancyDetails> , which specifies the type of guests (adults or children). If guest types are not specified, they are assumed to be adults. Consult <OccupancyDetails> for syntax and description of child elements. If the <Occupancy> element is not provided, occupancy is defaulted as 2 .

Key Point : Child occupancy rates should only be sent through Live pricing with context and not through Pull or Changed pricing.

Note: Contact your support team to enable the feature to send non-double occupancy prices.

<PackageID> Optional string The unique ID of the package to map it to predefined package data. Also used to populate the PACKAGE-ID landing page variable. For more information, refer to Room Bundle metadata .

It is mandatory to include <RoomBundle> to define <PackageID> and <RoomID> in the <Result> element. However, it is preferred that you specify package and room IDs only within the <RoomBundle> element instead of the <Result> element.

<Property> Required string The ID of a hotel affected by the associated data (price, itinerary, Room Bundle, or metadata). The value of this element must be a string. The value of this element must match the listing <id> that you defined in your Hotel List Feed.
<Rates> Optional <Rates> A container for one or more <Rate> blocks. Each <Rate> in <Rates> defines a different price for the room/itinerary combination.

Use the <Rates> element when there are multiple rates for the same room/itinerary combination or when a rate is not allowed to be specified at the <Result> level. For example, you define multiple rates for conditional rates , private rates , conditional rates in Room Bundles , or different occupancies.

Note: Within <Result> , single-occupancy rates can only be specified in <Rates> . Please contact us to allow non-double occupancy prices.

<Refundable> Optional Object Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about Refundable rates policy .

The following example shows the <Refundable> element with all of its attributes set:

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

Note: We recommend setting all of the attributes. A feed status warning message is generated when one or more attributes are not set.

If you don't set any attributes, the rate does not display as refundable. The attributes are:

  • available : (Required) Set to 1 (or true ) to indicate if the rate allows a full refund; otherwise set to 0 (or false ).
  • refundable_until_days : (Required if available is true ) Specifies the number of days in advance of check-in that a full refund can be requested. The value of refundable_until_days must be an integer between 0 and 330, inclusive.
  • refundable_until_time : (Highly recommended if available is true ) Specifies the latest time of day, in the local time of the hotel, that a full refund request will be honored. This can be combined with refundable_until_days to specify, for example, that "refunds are available until 4:00PM two days before check-in". If refundable_until_time isn't set, the value defaults to midnight.

    The value of this attribute uses the Time format.

When setting the attributes, note the following:

  • If available or refundable_until_days isn't set, the rate does not display as refundable.
  • If available is 0 (or false ), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<RoomBundle> Optional <RoomBundle> A container for information on priced physical descriptions of a room, any packaging of amenities, and some purchase policy details for the given hotel and itinerary.

In general, use this element to define pricing for the base room and different types of rooms within the same property. While it is possible to define Room Bundle descriptions inline, you should use a separate Transaction message to define that information. Google will store metadata so that you can reference it, rather than repeat it, in all future pricing updates.

<RoomID> Optional string The unique ID of the room to map it to predefined room data. Also used to populate the PARTNER-ROOM-ID landing page variable. For more information, refer to Room Bundle metadata .

It is mandatory to include <RoomBundle> to define <PackageID> and <RoomID> in the <Result> element. However, it is preferred that you specify package and room IDs only within the <RoomBundle> element instead of the <Result> element.

<Tax> Optional float The taxes that are calculated for the final price of a room. The <Tax> element takes a single required attribute, currency , that defines the three-letter currency code for the taxes. For example, USD . The <Tax> element is required if <Baserate> is greater than zero.

If <Baserate> element's "all_inclusive" attribute is explicitly set to true, then setting this value is optional.

<Unavailable> Optional Object Indicates that the itinerary is unavailable for booking. Serves as a container for more detailed reasons why the itinerary was unavailable. One or more of the following unavailability reasons may be nested underneath the <Unavailable> tag:
  • <NoVacancy/> : No more rooms are available for sale for one or more nights of the stay.
  • <MinNightStay value=N/> : The itinerary was below the minimum night stay of N for the stay dates.
  • <MaxNightStay value=N/> : The itinerary was above the maximum night stay of N for the stay dates.
  • <MinAdvancePurchase value=N/> : The itinerary was below the minimum advance booking window of N for the stay dates.
  • <MaxAdvancePurchase value=N/> : The itinerary was above the maximum advance booking window of N for the stay dates.
  • <ClosedToArrival/> : The property does not allow check-in on the itinerary's arrival date.
  • <ClosedToDeparture/> : The property does not allow check-out on the itinerary's departure date.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/> : The property is closed for some or all of the stay. Recommended attributes first_open and first_closed specify the first dates greater than or equal to the arrival date for which the property is open or closed, respectively. For a property that closes after the arrival date, first_open should be equal to the arrival date, and first_closed should be the date on which the property closes. For a property that is closed on the arrival date, first_closed should be equal to the arrival date, and first_opened should be the next date on which the property is open.
  • <NotFetched/> : A price for the itinerary was not provided by downstream data sources.
  • <InvalidProperty/> : The requested property identifier was not recognized.
  • <InvalidOccupancy/> : The requested occupancy is not supported by the property.
  • <PriceIssue/> : An issue with the price caused it to not be sent.
  • <InternalError reason=""/> : Some unenumerated error occurred. Optional reason attribute can report the error as text.
  • <OtherRestriction restriction=""/> : The itinerary was not available due to some unenumerated booking restriction. Optional restriction attribute allows reporting the restriction as text.

Примеры

Multi-property example

The following example defines one itinerary and its pricing for two properties:

<?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>
    <MilesIncluded>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines"/>
      </Provider>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
    </MilesIncluded>
  </Result>
</Transaction>

Not shown in this example are details about the room, such as a description, a picture and caption, the room's name, and its capacity.

You can define that information once in a separate Transaction message that Google stores. You can then reference it in all subsequent pricing and inventory updates. For more information, refer to Room Bundle metadata .

Multi-rate example

The following example defines a single itinerary and property with multiple rates for various occupancies. The <Rates> element can be utilized to provide multi-rate pricing for a specific property. The following example is also useful for Vacation Rental (VR) properties:

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

Unavailable example

The following example defines one itinerary whose availability couldn't be retrieved from downstream channels, a second that is both below the minimum night stay and already booked for the specified dates, and a third whose property is closed on the arrival date, but that opens during the course of the stay:

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

A container for one or more <Rate> blocks. Each <Rate> in <Rates> defines a different price for the room or itinerary combination.

Use the <Rates> element only when there are multiple rates for the same room or itinerary combination. For example, you define multiple rates for conditional rates , private rates , or conditional rates in Room Bundles .

The <Rates> element appears in the following place in the Transaction message XML hierarchy:

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

Values set in a <Rate> override pricing-related values on the parent <Result> or <RoomBundle> element. If they are not set in <Rate> , they inherit their value from the parent element. Only <AllowablePointsofSale> is inherited to the <RoomBundle> element.

Синтаксис

The <Rates> element uses the following syntax:

<?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>
          ...
        <MilesIncluded>
          <NumberOfMiles>integer</NumberOfMiles>
          <Provider>
            <Text language="en" text="provider-name">
          </Provider>
          <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
        </MilesIncluded>
          ...
      </Rate>
      ...
    </Rates>
  </Result>
  ...
</Transaction>

Атрибуты

The <Rates> element has the following attributes:

Атрибут Необходимый? Описание
rate_rule_id Optional For conditional rates , this ID matches a rate to a definition in your Rate Rule Definition file. The character limit for this field is 40 characters. This ID cannot be empty string.

Child elements

The <Rates> element has the following child elements:

Child Element Необходимый? Тип Описание
<AllowablePointsOfSale> Optional Object One or more landing pages that are eligible for the hotel. This element uses the same syntax as the <AllowablePointsOfSale> on <Result> .
<Baserate> Required float The price of the room for the stay. This element uses the same syntax as the <Baserate> on <Result> .

Note: The <Baserate> child element under <Rate> cannot be defined as being unavailable.

<ChargeCurrency> Optional enum When and where the user pays for a booking. This element uses the same syntax as a <ChargeCurrency> in a <Result> .
Optional string Deprecated: Custom fields that you can use to pass additional data associated with a hotel to a landing page. This element uses the same syntax as a <Custom[1‑5]> in a <Result> . There is a limit of 200 characters per custom field. For more information, refer to landing page files . If <Custom> elements are provided in the <Result> element, then they are not inherited in the <RoomBundle> element and should be defined separately for each <RoomBundle> or it can be included in <PackageData> if needed.

Important: Contact your Technical Account Manager (TAM) if you want to use CUSTOM variables.

<ExpirationTime> Optional DateTime The date and time at which the rate is considered expired. This element uses the same syntax as an <ExpirationTime> in a <Result> .
<MilesIncluded> Optional boolean Rate includes frequent flyer miles. Parameters include:
  • NumberOfMiles : Number of miles per itinerary.
  • Provider : Frequent flyer miles provider.
  • LoyaltyCampaignID : A unique ID that identifies the specific Loyalty Campaign that was configured and updated with Google. It adds loyalty points to the hotel price.

    To include <MilesIncluded> element, the campaign ID should be configured in the Loyalty Campaign configuration. The specific details on how Google uses loyalty points in the results are determined by the Loyalty Campaign configuration.

    The <MilesIncluded> element has a child element, <NumberOfMiles> which calculates the number of points earned. If the <NumberOfMiles> is not set, the points earned are determined by the Loyalty Campaign configuration.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Note: <NumberOfMiles> and <Provider> are optional.

<Occupancy> Optional integer

Specifies the maximum allowed occupants for this rate. If not specified, it is assumed to be the same as parent rate. <Occupancy> may be accompanied by <OccupancyDetails> , which specifies the type of guests (adults or children). Consult <OccupancyDetails> for syntax and description of child elements.

<OtherFees> Required float Fees other than the base rate and taxes that influence the final price of a room. This element uses the same syntax as <OtherFees> in a <Result> .

If <Baserate> element's "all_inclusive" attribute is explicitly set to true, then setting this value is optional.

<Refundable> Optional Object Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about these options Refundable rates policy .

The following example shows the <Refundable> element with all of its attributes set:

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

Note: We recommend setting all of the attributes. A feed status warning message is generated when one or more attributes are not set.

If you don't set any attributes, the rate does not display as refundable. The attributes are:

  • available : (Required) Set to 1 (or true ) to indicate if the rate allows a full refund; otherwise set to 0 (or false ).
  • refundable_until_days : (Required if available is true ) Specifies the number of days in advance of check-in that a full refund can be requested. The value of refundable_until_days must be an integer between 0 and 330, inclusive.
  • refundable_until_time : (Highly recommended if available is true ) Specifies the latest time of day, in the local time of the hotel, that a full refund request will be honored. This can be combined with refundable_until_days to specify, for example, that "refunds are available until 4:00PM two days before check-in". If refundable_until_time isn't set, the value defaults to midnight.

    The value of this attribute uses the Time format.

When setting the attributes, note the following:

  • If available or refundable_until_days isn't set, the rate does not display as refundable.
  • If available is 0 (or false ), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<Tax> Required float The taxes that are calculated for the final price of a room. This element uses the same syntax as the a <Tax> in a <Result> .

Примеры

Base rate and conditional rate

The following example shows a Transaction message that contains a base rate and a conditional rate :

<?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>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Multiple conditional rates

The following example defines a base rate and multiple conditional rates within a <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 and it should be within 50 characters in length for optimal
      performance. 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>

      <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>
        </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>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<RoomBundle>

Defines pricing and availability for Room Bundles as a child of <Result> in a <Transaction> message. Define a separate element for each package or itinerary combination. To define the package and terms of the Room Bundles, use <RoomData> .

The <RoomBundle> element appears in the following place in the Transaction message XML hierarchy:

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

For more information, refer to Using Room Bundles .

Синтаксис

The <RoomBundle> element uses the following syntax:

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

      <!-- Add Loyalty point information -->
      <MilesIncluded>
        <NumberOfMiles>integer</NumberOfMiles>
        <Provider>
          <Text language="en" text="provider-name">
        </Provider>
        <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>>
      </MilesIncluded>

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

    </RoomBundle>
    ...
  </Result>
</Transaction>

Атрибуты

The <RoomBundle> element has no attributes.

Child elements

The <RoomBundle> element has the following child elements:

Child Element Необходимый? Тип Описание
<Baserate> Required float Defines the price of the Room Bundle for the stay. This element uses the same syntax as <Baserate> in <Result> , with the following exception:
  • When the room is unavailable for the itinerary, remove the <RoomBundle> element to indicate that a room is no longer in inventory. For more information, refer to Removing a Room Bundle .
<BreakfastIncluded> Optional boolean Specifies whether this Room Bundle includes breakfast with the rate.
<ChargeCurrency> Optional enum When and where the user pays for a booking. This element uses the same syntax as <ChargeCurrency> in a <Result> .

The default value is web .

Optional string Deprecated: Custom fields for passing additional data to the landing pages for the Room Bundle. These elements use the same syntax as <Custom[1-5]> in <Result> . There is a limit of 200 characters per custom field. For more information, refer to landing page files . Custom variables are listed only when you send the prices in the Transaction message. If <Custom> elements are provided in the <Result> element, then they are not inherited in the <RoomBundle> element and should be defined separately for each <RoomBundle> or it can be included in <PackageData> if needed.

Important: Contact your Technical Account Manager (TAM) if you want to use CUSTOM variables.

<InternetIncluded> Optional boolean If a Room Bundle includes internet access at no charge, while other bundles wouldn't include that amenity. Don't set this element for Room Bundles in a hotel that provides free internet to all rooms. This element does not apply to in-room wired internet or wireless internet that is not available in guest rooms.
<MilesIncluded> Optional boolean Rate includes frequent flyer miles. Parameters include:
  • NumberOfMiles : Number of miles per itinerary.
  • Provider : Frequent flyer miles provider.
  • LoyaltyCampaignID : A unique ID that identifies the specific Loyalty Campaign that was configured and updated with Google. It adds loyalty points to the hotel price.

    To include <MilesIncluded> campaign ID should be configured in the Loyalty Campaign configuration. The specific details on how Google uses loyalty points in the results are determined by the Loyalty Campaign configuration.

    The <MilesIncluded> element has a child element, <NumberOfMiles> which calculates the number of points earned. If the <NumberOfMiles> is not set, the points earned are determined by the Loyalty Campaign configuration.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Note: <NumberOfMiles> and <Provider> are optional.

<Occupancy> Required integer Specifies the maximum allowed occupants for this rate. For example, a large suite might be able to physically accommodate 6 guests, but the "Honeymoon Package" allows 2 guests only.

This value must be less than or equal to the <Capacity> , which is the number of people that the room can physically accommodate.

When defining occupancy in your landing page URL, use the NUM-ADULTS and NUM-CHILDREN variables, as described in Using Variables and Conditions . The default value is 2 adults and 0 children.

The value of <Occupancy> must be a positive integer between 1 and 99, inclusive.

Примечания :

  • <Occupancy> for <RoomBundle> is strongly recommended so flagged as required and if omitted will throw a 1097 error.
  • <Occupancy> comes from the data object in this order: <RoomBundle> , <PackageData> , and then = <RoomData> . If there is no value present in any of these, the value defaults to 2.
  • <Occupancy> may be accompanied by <OccupancyDetails> , which specifies the type of guests (adults or children). If guest types are not specified, they are assumed to be adults. Consult <OccupancyDetails> for syntax and description of child elements.
  • When you set <Occupancy> in both <RoomBundle> and <PackageData> , the value in <RoomBundle> takes precedence.
<OtherFees> Required float Fees other than the base rate and taxes that influence the final price of a room. The <OtherFees> element takes a single required attribute, currency , that defines the three-letter currency code for the fees. For example, use USD for US dollars.
<PackageID> Optional (recommended) string The unique ID for the package data. Use this ID to match the Room Bundle data with what was sent in <PackageData> . For more information, refer to Room Bundle metadata . (You can also use this ID to reference a common Room Bundle definition used in a single Transaction message when defining Room Bundle data inline.)
<ParkingIncluded> Optional boolean Whether a Room Bundle includes parking at no charge, where parking would otherwise be a paid service at this hotel. Don't specify a value for this element for a hotel that offers free parking.

Valid values are 0 (or false ) and 1 (or true ). The default value is false .

<RatePlanID> Optional string The Rate Plan ID represents the unique identifier for a room and package combination. For example, given a <RoomID> value of 5 and a <PackageID> value of ABC, you could use a value of 5-ABC for <RatePlanID> . We strongly recommend using RatePlanID as a variable to build your dynamic landing page (formerly Point of Sale) URL.

Note: RatePlanID should be within 50 characters in length for optimal performance.

For more information, refer to Using Variables and Conditions .

<Rates> Optional <Rates> Rates that override the defaults for this Room Bundle. This element uses the same syntax as <Rates> in <Result> .
<Refundable> Optional Object Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about these options Refundable rates policy .

The following example shows the <Refundable> element with all of its attributes set:

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

Note: We recommend setting all of the attributes. A feed status warning message is generated when one or more attributes are not set.

If you don't set any attributes, the rate does not display as refundable. The attributes are:

  • available : (Required) Set to 1 (or true ) to indicate if the rate allows a full refund; otherwise set to 0 (or false ).
  • refundable_until_days : (Required if available is true ) Specifies the number of days in advance of check-in that a full refund can be requested. The value of refundable_until_days must be an integer between 0 and 330, inclusive.
  • refundable_until_time : (Highly recommended if available is true ) Specifies the latest time of day, in the local time of the hotel, that a full refund request will be honored. This can be combined with refundable_until_days to specify, for example, that "refunds are available until 4:00PM two days before check-in". If refundable_until_time isn't set, the value defaults to midnight.

    The value of this attribute uses the Time format.

When setting the attributes, note the following:

  • If available or refundable_until_days isn't set, the rate does not display as refundable.
  • If available is 0 (or false ), the other attributes are ignored. The rate does not display as refundable even if one or both of the other attributes is set.
<RoomID> Required string The unique ID for the room data. Use this ID to match the Room Bundle data with what you sent in <RoomData> . For more information, refer to Room Bundle metadata . (You can also use this ID to reference a common room definition in a single Transaction message when defining room data inline.)
<Tax> Required float The taxes that are calculated for the final price of a room. The <Tax> element takes a single required attribute, currency , that defines the three-letter currency code for the taxes. For example, use USD for US dollars.

Примеры

Single occupancy bundle

The following example defines a response with a single occupancy bundle. When a user selects 1 in the Occupancy picker, Google displays the lowest eligible price regardless of occupancy.

If a single occupancy price is not available, then Google will show the lowest double-occupancy price. Note that single occupancy prices are not live queried if double-occupancy or more prices are cached for an itinerary.

This example references predefined room and package metadata with the <RoomID> and <PackageID> elements. Use the <RoomData> and <PackageData> elements to define that information.

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


Two or more occupancies

The following example defines a response containing two or more occupancies.

This example references predefined room and package metadata with the <RoomID> and <PackageID> elements. Use the <RoomData> and <PackageData> elements to define that information.

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


Multiple room bundles

The following example sets Occupancy in multiple Room bundles to demonstrate possible hostel room pricing.

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

Multiple Conditional rates

The following example defines a base rate and multiple conditional rates within a <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 and it should be within 50 characters in length for optimal
      performance. 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>

      <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>
        </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>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<OccupancyDetails>

<Occupancy> in a transaction message specifies the maximum number of guests for a room or package. <OccupancyDetails> can contain additional information such as the number and type of guests (adults or children).

When <Occupancy> and <OccupancyDetails> appear within the <Rates> element of <Result> or <RoomBundle> , it means that the rate is constrained by the occupancy details.

If you include <OccupancyDetails> in a <RoomBundle> , along with a nested <Rate> element you can't send a basic <Occupancy> within the <Rate> ; instead one of the following options is recommended:

  • Omit occupancy from <Rate> : In this case, the <Rate> inherits the <OccupancyDetails> directly from the <RoomBundle>

или,

  • Duplicate <OccupancyDetails> : In this case, send additional identical <OccupancyDetails> in both the <RoomBundle> and the nested <Rate> element

Синтаксис

When <OccupancyDetails> appears, it is always preceded by <Occupancy> . Note the following syntax:

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

Child elements

The <OccupancyDetails> element has the following child elements:

Child Element Необходимый? Тип Описание
<NumAdults> Required integer The number of adult guests. Min:1, Max:20.
<Children> Optional Object A container for one or more <Child> elements.
<Child age> Optional integer The maximum age for this Child—for example, <Child age="17"> .

Примеры

The following examples show how <OccupancyDetails> may appear within <Results> , <RoomBundle> , or the <Rates> child element.

Result response

The following example defines one itinerary and its pricing for one property in response to a Live Pricing Query where the user specified the number and types of guests. Here, the <OccupancyDetails> -- 2 adults and one child -- are returned in <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>

Rates response

The following example defines one itinerary and its pricing for 1 adult and 1 child. Here, the <OccupancyDetails> are returned in the <Rates> element of <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>
        <AllowablePointsOfSale>
          <PointOfSale id="yourhotelpartnersite.com"/>
        </AllowablePointsOfSale>
      </Rate>
    </Rates>
  </Result>
</Transaction>

Room bundle

The following example defines an occupancy of 2 adults and 1 child for two nights, with a refundable rate. Here, the <OccupancyDetails> appear inside <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>

Multiple room bundles

The following example defines multiple <RoomBundle> rates that are restricted to an occupancy of 2 adults and 2 children. Here, the <OccupancyDetails> appear in the <Rates> element of <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>
      <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>
        </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>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>