Цены и усилители; Справочник 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 нить Уникальный идентификатор для каждого сообщения о транзакции.
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> , но описывает удобства и условия, которые не являются частью описания физического номера.

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

Более подробную информацию можно найти в метаданных Room Bundle .

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

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

* Требуется хотя бы один из <PackageData> или <RoomData> .

Примеры

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

В следующем примере показаны данные о комнатах и ​​пакетах в <PropertyDataSet> :

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>180054</Property>
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Bed Room" language="en"/>
        <Text text="Chambre single" language="fr"/>
      </Name>
      <Description>
        <Text text="Non-smoking" language="en"/>
        <Text text="Pas de fumiers" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Includes a delightful array of jams and jellies." language="en"/>
        <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

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

<RoomData>

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

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

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

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

Элемент <RoomData> похож на <PackageData> , но описывает сам номер, а не удобства и условия пакета. Для предоставления информации о пакетах номеров используйте сочетание <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> в обновлениях цен. Подробнее см. в метаданных Room Bundle . (Вы также можете использовать этот идентификатор для ссылки на общее определение номера в одном сообщении транзакции при определении данных номера в строке.)

Примеры

Данные о комнатах

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

<?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 -size».

<?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 ) необходимо указать included <Breakfast> и <Dinner> .

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

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

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

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

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

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

Примечание :

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

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

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

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

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

  • Если 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 : Транспорт предоставляется как в аэропорт, так и из аэропорта.

Примеры

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

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

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

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

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

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

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

<Baserate> Optional float

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

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

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

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

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

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

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

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

    Теперь пользователям из США отображаются цены по принципу «все включено».

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

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

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

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

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

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

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

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

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

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

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

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 .

Ключевой момент : показатели занятости детей следует отправлять только через текущие цены с контекстом, а не через Pull или Changed цены.

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

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

Обязательно включите <RoomBundle> для определения <PackageID> и <RoomID> в элементе <Result> . Однако предпочтительно указывать идентификаторы пакетов и помещений только внутри элемента <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 не установлено, значение по умолчанию равно полуночи.

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

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

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

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

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

Обязательно включите <RoomBundle> для определения <PackageID> и <RoomID> в элементе <Result> . Однако предпочтительно указывать идентификаторы пакетов и помещений только внутри элемента <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=""/> : произошла неуказанная ошибка. Необязательный атрибут причины может сообщать об ошибке в виде текста.
  • <OtherRestriction 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. Затем вы сможете ссылаться на него во всех последующих обновлениях цен и запасов. Дополнительную информацию см. в метаданных Room Bundle .

Многотарифный пример

В следующем примере определяется один маршрут и объект размещения с несколькими тарифами для различной занятости. Элемент <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> , они наследуют свое значение от родительского элемента. Только <AllowablePointsofSale> наследуется от элемента <RoomBundle> .

Синтаксис

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

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

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

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

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

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

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

<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 Указывает максимально допустимое количество жильцов для этого тарифа. Например, в большом люксе могут физически разместиться 6 гостей, а в пакете «Медовый месяц» допускается размещение только 2 гостей.

Это значение должно быть меньше или равно <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 Уникальный идентификатор данных пакета. Используйте этот идентификатор, чтобы сопоставить данные Room Bundle с тем, что было отправлено в <PackageData> . Дополнительную информацию см. в метаданных Room Bundle . (Вы также можете использовать этот идентификатор для ссылки на общее определение пакета номеров, используемое в одном сообщении транзакции при определении встроенных данных пакета номеров.)
<ParkingIncluded> Optional boolean Включает ли пакет услуг бесплатную парковку, хотя в противном случае парковка в этом отеле была бы платной услугой. Не указывайте значение этого элемента для отеля, предлагающего бесплатную парковку.

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

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

Дополнительную информацию см. в разделе Использование переменных и условий .

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

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

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

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

Результат ответа

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

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
    <Occupancy>3</Occupancy>
    <OccupancyDetails>
      <NumAdults>2</NumAdults>
      <Children>
        <Child age="17"/>
      </Children>
    </OccupancyDetails>
  </Result>
</Transaction>

Ответ на тарифы

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

Пакет номеров

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