Справочник по XML-фидам с ценами и наличием номеров (транзакции)

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

<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 string Уникальный идентификатор каждого сообщения-транзакции.
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>
        + ...

Подробную информацию можно найти в статье Метаданные пакета Room Bundle.

Синтаксис

Элемент <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>

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

<RoomData>

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

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

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

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

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

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

Подробную информацию можно найти в статье Метаданные пакета Room Bundle.

Синтаксис

Элемент <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> считается полным набором данных о ресурсе и перезаписывает все существующие данные.

Подробную информацию можно найти в статье Метаданные пакета Room Bundle.

Синтаксис

Элемент <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), необходимо указать атрибуты <Breakfast> и <Dinner> с атрибутом included.

<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 Максимальное количество гостей, на которое рассчитан пакет номеров. Например, в большом люксе могут разместиться шесть гостей, но он предназначен только для четырех.

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

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

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

Примечания

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

Уникальный идентификатор пакета. Используйте этот идентификатор, чтобы сопоставить данные о пакете номеров с блоками <Result> в обновлениях цен. Подробную информацию можно найти в разделе Метаданные пакета Room Bundle.

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

<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 не задано, по умолчанию используется полночь.

    Значение этого атрибута указывается в формате 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>.

Обычно сообщения-транзакции с обновленными ценами отправляются очень часто. То, как именно и как часто вы будете это делать, зависит от выбранного режима показа.

Вы можете использовать <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 дополнительные цены, не удаляя предыдущие. В ответах на запросы цен в режиме реального времени с контекстом этот атрибут всегда будет иметь значение true (независимо от ответа на сообщение-транзакцию).

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

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

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

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

<Baserate> Optional float

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

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

Если номер недоступен для программы пребывания, элемент <Baserate> не указывается или ему присваивается значение -1. Также необходимо задать элемент <Unavailable> и указать причины недоступности. Добавлять <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 Дата заезда для маршрута в формате Date. Сочетание элементов <Nights> и <Checkin> составляет маршрут.
Optional string Устарело. Определяет специальное поле, которое можно использовать для передачи дополнительных данных, связанных с гостиницей. Вы можете передавать до пяти собственных значений со следующими названиями элементов:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

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

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

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

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

<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> необязательны.

<Nights> Required integer Количество ночей в маршруте. Значение элемента <Nights> должно быть положительным целым числом. Сочетание <Nights> и <Checkin> составляет маршрут.
<OtherFees> Optional float Сборы, помимо базовой цены и налогов, которые влияют на итоговую стоимость номера. Элемент <OtherFees> принимает один обязательный атрибут currency, который определяет трехбуквенный код валюты для комиссий. Пример: USD.

Элемент <OtherFees> обязателен, если значение <Baserate> больше нуля.

<Occupancy> Optional integer Указывает максимальное количество гостей, для которых действует эта цена. Если свойство <Occupancy> указано непосредственно в свойстве <Result>, то его значение должно быть не меньше 2. Вместе с <Occupancy> может использоваться <OccupancyDetails>, указывающий тип гостей (взрослые или дети). Если тип гостей не указан, предполагается, что это взрослые. Синтаксис и описание дочерних элементов приведены в <OccupancyDetails>. Если элемент <Occupancy> не указан, по умолчанию используется значение 2.

Важно! Цены для гостей с детьми следует передавать только через цены в режиме реального времени с контекстом, а не через запросы или измененные цены.

Примечание. Чтобы включить функцию отправки цен, не рассчитанных на двухместное размещение, обратитесь в службу поддержки.

<PackageID> Optional string Уникальный идентификатор пакета, позволяющий сопоставить его с данными стандартного пакета. Также используется для заполнения переменной целевой страницы PACKAGE-ID. Подробную информацию можно найти в разделе Метаданные пакета Room Bundle.

В элементе <Result> обязательно должно быть указано свойство <RoomBundle>, чтобы определить <PackageID> и <RoomID>. Однако рекомендуется указывать идентификаторы пакетов и номеров только в элементе <RoomBundle>, а не в элементе <Result>.

<Property> Required string Идентификатор гостиницы, на которую влияют связанные данные (цена, маршрут, пакет номеров или метаданные). Значение этого элемента должно быть строкой. Значение этого элемента должно совпадать со значением элемента <id>, которое вы указали в фиде со списком отелей.
<Rates> Optional <Rates> Контейнер для одного или нескольких блоков <Rate>. Каждый элемент <Rate> в элементе <Rates> определяет отдельную цену для комбинации номера и маршрута.

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

Примечание. В <Result> тарифы на одноместное размещение можно указывать только в <Rates>. Чтобы разрешить цены не для двух гостей, свяжитесь с нами.

<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 не задано, по умолчанию используется полночь.

    Значение этого атрибута указывается в формате Time.

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

  • Если не задать available или refundable_until_days, тариф не будет показываться как возвратный.
  • Если для атрибута available задано значение 0 (или false), другие атрибуты игнорируются. Тариф не будет показываться как возвратный, даже если задан один или оба других атрибута.
<RoomBundle> Optional <RoomBundle> Контейнер для информации о физических характеристиках номера, включенных в цену, пакетах удобств и некоторых условиях покупки для указанной гостиницы и маршрута.

В общем случае используйте этот элемент, чтобы определить цены для базового номера и разных типов номеров в одном объекте размещения. Хотя описания пакетов номеров можно задавать непосредственно в сообщении, мы рекомендуем использовать для этого отдельное сообщение-транзакцию. Google сохранит метаданные, чтобы вы могли ссылаться на них, а не повторять их при всех будущих обновлениях цен.

<RoomID> Optional string Уникальный идентификатор комнаты, который сопоставляет ее с предварительно заданными данными. Также используется для заполнения переменной целевой страницы PARTNER-ROOM-ID. Подробную информацию можно найти в разделе Метаданные пакета Room Bundle.

В элементе <Result> обязательно должно быть указано свойство <RoomBundle>, чтобы определить <PackageID> и <RoomID>. Однако рекомендуется указывать идентификаторы пакетов и номеров только в элементе <RoomBundle>, а не в элементе <Result>.

<Tax> Optional float Налоги, которые учитываются при расчете итоговой цены номера. Элемент <Tax> принимает один обязательный атрибут currency, который определяет трехбуквенный код валюты для налогов. Пример: USD. Элемент <Tax> обязателен, если значение <Baserate> больше нуля.

Если для атрибута all_inclusive элемента <Baserate> явно задано значение true, то указывать это значение необязательно.

<Unavailable> Optional Object Указывает, что маршрут недоступен для бронирования. Контейнер для более подробных причин, по которым маршрут был недоступен. В тег <Unavailable> могут быть вложены следующие причины недоступности:
  • <NoVacancy/> – на одну или несколько ночей нет свободных номеров.
  • <MinNightStay value=N/>: программа пребывания меньше минимального срока пребывания (N) для указанных дат пребывания.
  • <MaxNightStay value=N/>: программа пребывания превышает максимальное количество ночей (N) для выбранных дат пребывания.
  • <MinAdvancePurchase value=N/>: программа пребывания не соответствует минимальным срокам предварительного бронирования (N) для дат пребывания.
  • <MaxAdvancePurchase value=N/>: срок предварительного бронирования для выбранных дат пребывания превышает максимальный (N).
  • <ClosedToArrival/>: в отеле нельзя зарегистрироваться в день прибытия, указанный в маршруте.
  • <ClosedToDeparture/>: в гостинице нельзя выехать в дату отъезда, указанную в программе пребывания.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/> – гостиница закрыта на весь период проживания или его часть. Рекомендуемые атрибуты first_open и first_closed указывают первые даты, которые больше или равны дате прибытия, когда объект открыт или закрыт соответственно. Если отель закрывается после даты заезда, значение first_open должно быть равно дате заезда, а значение first_closed – дате закрытия отеля. Если гостиница закрыта в день прибытия, значение first_closed должно быть равно дате прибытия, а значение first_opened – следующей дате, когда гостиница будет открыта.
  • <NotFetched/> – цена для маршрута не была предоставлена нижестоящими источниками данных.
  • <InvalidProperty/>: идентификатор запрашиваемого ресурса не распознан.
  • <InvalidOccupancy/>: запрашиваемое количество гостей не поддерживается.
  • <PriceIssue/>: цена не была отправлена из-за ошибки.
  • <InternalError reason=""/> – произошла ошибка, не указанная в списке. Необязательный атрибут reason может содержать текст ошибки.
  • <OtherRestriction restriction=""/>. Маршрут недоступен из-за неуказанного ограничения на бронирование. Необязательный атрибут restriction позволяет указать ограничение в виде текста.

Примеры

Пример с несколькими ресурсами

В примере ниже задан один маршрут и его цена для двух объектов:

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

В этом примере не показаны сведения о переговорной комнате, такие как описание, изображение и подпись, название комнаты и ее вместимость.

Вы можете один раз указать эту информацию в отдельном сообщении-транзакции, которое будет храниться в Google. Затем вы сможете ссылаться на него во всех последующих обновлениях цен и ассортимента. Подробную информацию можно найти в разделе Метаданные пакета переговорной комнаты.

Пример с несколькими тарифами

В примере ниже заданы одна программа пребывания и один объект недвижимости с несколькими тарифами для разного количества гостей. Элемент <Rates> позволяет указать несколько цен для одного объекта. Пример ниже также подходит для жилья для отпуска (VR).

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2021-01-13</Checkin>
    <Nights>9</Nights>
    <Baserate currency="USD">3196.1</Baserate>
    <Tax currency="USD">559.49</Tax>
    <OtherFees currency="USD">543.34</OtherFees>
    <Occupancy>2</Occupancy>
    <Rates>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>1</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>3</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>4</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>5</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>6</Occupancy>
      </Rate>
    </Rates>
  </Result>
</Transaction>

Пример недоступного контента

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

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

Контейнер для одного или нескольких блоков <Rate>. Каждый элемент <Rate> в <Rates> определяет отдельную цену для номера или маршрута.

Используйте элемент <Rates>, только если для одного номера или маршрута есть несколько тарифов. Например, вы можете задать несколько специальных цен, частных цен или специальных цен в пакетах услуг.

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

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

Значения, заданные в элементе <Rate>, переопределяют значения, связанные с ценой, в родительском элементе <Result> или <RoomBundle>. Если они не заданы в <Rate>, то наследуют значение от родительского элемента. Элемент <RoomBundle> наследует только элемент <AllowablePointsofSale>.

Синтаксис

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

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

Атрибуты

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

Атрибут Обязательно? Описание
rate_rule_id Optional Для специальных цен этот идентификатор сопоставляет цену с определением в файле определения правил назначения цен. Ограничение на количество символов для этого поля – 40 символов. Идентификатор не может быть пустой строкой.

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

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

Дочерний элемент Обязательно? Тип Описание
<AllowablePointsOfSale> Optional Object Одна или несколько целевых страниц, которые подходят для гостиницы. Этот элемент использует тот же синтаксис, что и <AllowablePointsOfSale> на <Result>.
<Baserate> Required float Цена номера за период проживания. Этот элемент использует тот же синтаксис, что и <Baserate> на <Result>.

Примечание. Дочерний элемент <Baserate> в элементе <Rate> нельзя определить как недоступный.

<ChargeCurrency> Optional enum Когда и где пользователь оплачивает бронирование. Этот элемент использует тот же синтаксис, что и <ChargeCurrency> в <Result>.
Optional string Устарело. Специальные поля, которые можно использовать для передачи дополнительных данных, связанных с гостиницей, на целевую страницу. Этот элемент использует тот же синтаксис, что и <Custom[1‑5]> в <Result>. В каждом поле может быть не более 200 символов. Подробнее о файлах целевых страниц… Если элементы <Custom> указаны в элементе <Result>, они не наследуются в элементе <RoomBundle>. Их нужно задавать отдельно для каждого элемента <RoomBundle> или, если необходимо, включать в элемент <PackageData>.
<ExpirationTime> Optional DateTime Дата и время, когда тариф перестает действовать. Этот элемент использует тот же синтаксис, что и <ExpirationTime> в <Result>.
<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> необязательны.

<Occupancy> Optional integer

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

<OtherFees> Required float Сборы, помимо базовой цены и налогов, которые влияют на итоговую стоимость номера. Этот элемент использует тот же синтаксис, что и <OtherFees> в <Result>.

Если для атрибута all_inclusive элемента <Baserate> явно задано значение true, то указывать это значение необязательно.

<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 не задано, по умолчанию используется полночь.

    Значение этого атрибута указывается в формате Time.

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

  • Если не задать available или refundable_until_days, тариф не будет показываться как возвратный.
  • Если для атрибута available задано значение 0 (или false), другие атрибуты игнорируются. Тариф не будет показываться как возвратный, даже если задан один или оба других атрибута.
<Tax> Required float Налоги, которые учитываются при расчете итоговой цены номера. Этот элемент использует тот же синтаксис, что и элемент <Tax> в <Result>.

Примеры

Базовая и специальная цена

В примере ниже показано сообщение-транзакция, содержащее базовую и специальную цены.

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

Несколько специальных цен

В примере ниже в элементе <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>

Определяет цены и доступность пакетов номеров как дочерний элемент <Result> в сообщении <Transaction>. Для каждого пакета или маршрута нужно задать отдельный элемент. Чтобы определить пакет и условия для пакетов номеров, используйте <RoomData>.

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

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

Подробнее о наборах для переговорных комнат…

Синтаксис

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

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

Атрибуты

У элемента <RoomBundle> нет атрибутов.

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

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

Дочерний элемент Обязательно? Тип Описание
<Baserate> Required float Определяет цену пакета услуг на время проживания. Этот элемент использует тот же синтаксис, что и <Baserate> в <Result>, за следующим исключением:
  • Если номер недоступен для программы пребывания, удалите элемент <RoomBundle>, чтобы указать, что номера больше нет в наличии. Подробнее о том, как удалить пакет номеров…
<BreakfastIncluded> Optional boolean Указывает, включен ли завтрак в стоимость пакета.
<ChargeCurrency> Optional enum Когда и где пользователь оплачивает бронирование. Этот элемент использует тот же синтаксис, что и <ChargeCurrency> в <Result>.

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

Optional string Устарело. Специальные поля для передачи дополнительных данных на целевые страницы пакета номеров. Эти элементы используют тот же синтаксис, что и <Custom[1-5]> в <Result>. Максимальная длина значения в пользовательском поле – 200 символов. Подробнее о файлах целевых страниц… Пользовательские переменные указываются только в том случае, если вы отправляете цены в сообщении-транзакции. Если элементы <Custom> указаны в элементе <Result>, они не наследуются в элементе <RoomBundle>. Их нужно задавать отдельно для каждого элемента <RoomBundle> или, если необходимо, включать в элемент <PackageData>.
<InternetIncluded> 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> необязательны.

<Occupancy> Required integer Указывает максимальное количество гостей, для которых действует эта цена. Например, в большом люксе могут разместиться шесть гостей, но в рамках пакета "Медовый месяц" допускается только два гостя.

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

При определении количества гостей в URL целевой страницы используйте переменные NUM-ADULTS и NUM-CHILDREN, как описано в разделе Использование переменных и условий. Значение по умолчанию – 2 взрослых и 0 детей.

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

Примечания

  • <Occupancy> для <RoomBundle> настоятельно рекомендуется, поэтому оно помечено как обязательное. Если его не указать, возникнет ошибка 1097.
  • <Occupancy> берется из объекта данных в следующем порядке: <RoomBundle>, <PackageData>, а затем <RoomData>. Если ни в одном из них нет значения, по умолчанию используется 2.
  • Вместе с <Occupancy> может использоваться <OccupancyDetails>, указывающий тип гостей (взрослые или дети). Если типы гостей не указаны, предполагается, что это взрослые. Синтаксис и описание дочерних элементов приведены в <OccupancyDetails>.
  • Если вы зададите <Occupancy> и в <RoomBundle>, и в <PackageData>, приоритет будет у значения в <RoomBundle>.
<OtherFees> Required float Сборы, помимо базовой цены и налогов, которые влияют на итоговую стоимость номера. Элемент <OtherFees> принимает один обязательный атрибут currency, который определяет трехбуквенный код валюты для комиссий. Например, для долларов США используйте USD.
<PackageID> Optional (recommended) string Уникальный идентификатор данных пакета. Используйте этот идентификатор, чтобы сопоставить данные о пакете номеров с данными, отправленными в элементе <PackageData>. Подробную информацию можно найти в разделе Метаданные пакета Room Bundle. (Этот идентификатор также можно использовать для ссылки на общее определение пакета услуг, используемое в одном сообщении-транзакции при определении данных пакета услуг в строке.)
<ParkingIncluded> Optional boolean Включает ли пакет номеров бесплатную парковку, если в отеле она платная. Если парковка бесплатная, не указывайте значение для этого элемента.

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

<RatePlanID> Optional string Идентификатор тарифного плана – это уникальный идентификатор комбинации номера и пакета. Например, если значение <RoomID> равно 5, а значение <PackageID> – ABC, то в качестве значения <RatePlanID> можно использовать 5-ABC. Мы настоятельно рекомендуем использовать RatePlanID в качестве переменной для создания динамического URL целевой страницы (ранее – точки продаж).

Примечание. Для оптимальной работы значение RatePlanID должно содержать не более 50 символов.

Подробнее об использовании переменных и условий…

<Rates> Optional <Rates> Тарифы, которые переопределяют тарифы по умолчанию для этого пакета услуг. Этот элемент использует тот же синтаксис, что и <Rates> в <Result>.
<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 не задано, по умолчанию используется полночь.

    Значение этого атрибута указывается в формате Time.

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

  • Если не задать available или refundable_until_days, тариф не будет показываться как возвратный.
  • Если для атрибута available задано значение 0 (или false), другие атрибуты игнорируются. Тариф не будет показываться как возвратный, даже если задан один или оба других атрибута.
<RoomID> Required string Уникальный идентификатор данных комнаты. Используйте этот идентификатор, чтобы сопоставить данные о пакете номеров с информацией, отправленной в файле <RoomData>. Подробную информацию можно найти в разделе Метаданные пакета номеров. (Этот идентификатор также можно использовать для ссылки на общее определение номера в одном сообщении-транзакции при определении данных номера в строке.)
<Tax> Required float Налоги, которые учитываются при расчете итоговой цены номера. Элемент <Tax> принимает один обязательный атрибут currency, который определяет трехбуквенный код валюты для налогов. Например, для долларов США используйте USD.

Примеры

Пакет для одного гостя

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

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

В этом примере используются элементы <RoomID> и <PackageID>, которые ссылаются на стандартные метаданные номеров и пакетов. Для этого используйте элементы <RoomData> и <PackageData>.

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


Два или более вариантов размещения

В примере ниже показан ответ, содержащий два или более вариантов размещения.

В этом примере используются элементы <RoomID> и <PackageID>, которые ссылаются на метаданные номеров и пакетов. Для этого используйте элементы <RoomData> и <PackageData>.

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


Несколько наборов для переговорных комнат

В примере ниже показано, как задать вместимость для нескольких пакетов номеров, чтобы продемонстрировать возможные цены на номера в хостеле.

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

Несколько специальных цен

В примере ниже в элементе <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> в сообщении-транзакции указывает максимальное количество гостей в номере или пакете. <OccupancyDetails> может содержать дополнительную информацию, например количество и тип гостей (взрослые или дети).

Если элементы <Occupancy> и <OccupancyDetails> находятся внутри элемента <Rates> в <Result> или <RoomBundle>, это означает, что цена зависит от количества гостей.

Если вы включаете <OccupancyDetails> в <RoomBundle> вместе с вложенным элементом <Rate>, вы не можете отправить базовый элемент <Occupancy> в <Rate>. Вместо этого рекомендуется использовать один из следующих вариантов:

  • Не указывать заполняемость в элементе <Rate>. В этом случае элемент <Rate> наследует значение <OccupancyDetails> непосредственно из элемента <RoomBundle>.

или

  • Дублирование <OccupancyDetails>. В этом случае отправьте дополнительные идентичные элементы <OccupancyDetails> как в элементе <RoomBundle>, так и во вложенном элементе <Rate>.

Синтаксис

Если появляется <OccupancyDetails>, то перед ним всегда стоит <Occupancy>. Обратите внимание на следующий синтаксис:

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

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

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

Дочерний элемент Обязательно? Тип Описание
<NumAdults> Required integer Количество взрослых гостей. Минимум – 1, максимум – 20.
<Children> Optional Object Контейнер для одного или нескольких элементов <Child>.
<Child age> Optional integer Максимальный возраст ребенка, например <Child age="17">.

Примеры

В примерах ниже показано, как <OccupancyDetails> может выглядеть в дочерних элементах <Results>, <RoomBundle> или <Rates>.

Ответ с результатами

В примере ниже показано, как в ответ на запрос цен в режиме реального времени, в котором пользователь указал количество и тип гостей, задать один маршрут и цену для него. В данном случае в <Result> возвращается <OccupancyDetails> – двое взрослых и один ребенок.

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

Ответ с ценами

В примере ниже задан один маршрут и его цена для одного взрослого и одного ребенка. В данном случае <OccupancyDetails> возвращаются в элементе <Rates> объекта <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>

Набор для переговорных комнат

В примере ниже указано размещение для двух взрослых и одного ребенка на две ночи с возмещаемым тарифом. Здесь <OccupancyDetails> появляются внутри <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>

Несколько наборов для переговорных комнат

В примере ниже задано несколько цен <RoomBundle>, которые действуют только при размещении двух взрослых и двух детей. В этом примере <OccupancyDetails> появляются в элементе <Rates> типа <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>