Trang tham khảo XML về Giá và Quỹ phòng (Giao dịch)

Trang này cung cấp thông tin tham khảo về Thông báo giao dịch viết bằng XML.

<Transaction>

Phần tử gốc của Thông báo giao dịch<Transaction>. Đây là vùng chứa thông tin mô tả về phòng và gói dịch vụ, giá và tình trạng phòng và gói dịch vụ.

Phần tử <Transaction> xuất hiện ở vị trí sau đây trong hệ thống phân cấp của Thông báo giao dịch viết bằng XML:

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

Những thông báo sử dụng <Transaction> làm phần tử gốc cần có ít nhất một phần tử con. Thông báo giao dịch có thể có số lượng phần tử con không hạn chế, miễn là tổng dung lượng thông báo không vượt quá 100 MB.

Cú pháp

Phần tử <Transaction> sử dụng cú pháp sau:

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

Thuộc tính

Phần tử <Transaction> có các thuộc tính như sau:

Thuộc tính Bắt buộc? Loại Mô tả
id Required string Giá trị nhận dạng duy nhất của mỗi Thông báo giao dịch.
partner Optional string Tài khoản đối tác của Thông báo giao dịch. Thông thường, bạn sử dụng thuộc tính này nếu hệ thống phụ trợ của bạn cung cấp nguồn cấp dữ liệu về giá cho nhiều tài khoản đối tác. Giá trị của chuỗi này là giá trị của "Khoá đối tác" được liệt kê trên trang Cài đặt tài khoản trong Hotel Center.
timestamp Required DateTime

Thời điểm gửi Thông báo giao dịch.

Những thông báo có dấu thời gian cho biết được gửi trong vòng 24 giờ trước sẽ được xử lý và những thông báo không có dấu thời gian đáp ứng điều kiện đó sẽ bị loại bỏ.

Thông báo được xử lý theo thứ tự timestamp, chứ không phải theo thứ tự mà hệ thống nhận được. Ví dụ: Một thông báo cập nhật giá có dấu thời gian là 2019-05-03 14:09:00 và hệ thống nhận được sau một thông báo có dấu thời gian là 2019-05-03 14:10:00 vẫn sẽ được xử lý theo đúng thứ tự và giá của thông báo có dấu thời gian là 2019-05-03 14:10:00 sẽ được sử dụng.

Phần tử con

Phần tử <Transaction> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<PropertyDataSet> Optional* <PropertyDataSet>

Mô tả một phòng và Gói dịch vụ phòng cụ thể. Bạn thường sử dụng phần tử này trong một Thông báo giao dịch riêng để quy định các giá trị dùng chung của Gói dịch vụ phòng và giảm dung lượng của Thông báo giao dịch.

<Result> Optional* <Result>

Dữ liệu giá cho hành trình của một phòng hoặc một phần tử <RoomBundle> giúp xác định Gói dịch vụ phòng và các loại phòng khác của cơ sở lưu trú. Bạn cũng có thể sử dụng phần tử <Result> để xoá hành trình khỏi quỹ phòng.

* Bạn phải cung cấp <PropertyDataSet> hoặc <Result>.

Ví dụ

Dữ liệu phòng

Ví dụ sau đây xác định dữ liệu phòng trong thông báo Giao dịch:

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

Dữ liệu về giá

Ví dụ sau đây xác định dữ liệu giá trong thông báo Giao dịch:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">299.98</Baserate>
    <Tax currency="USD">26.42</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="otto"/>
      <PointOfSale id="simon"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

Giá phòng mỗi đêm

Ví dụ sau đây xác định dữ liệu giá cho 1 đến 7 đêm bắt đầu từ ngày 7 tháng 6 năm 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>


Giá cơ sở và giá phòng có điều kiện

Ví dụ sau đây thể hiện một thông báo Giao dịch chứa giá cơ bản và giá phòng có điều kiện:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using conditional rates -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for conditional rates -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Xoá quỹ phòng

Ví dụ sau đây xoá một số quỹ phòng (những lượt lưu trú 1 đêm vào nhiều ngày) của một khách sạn khỏi quỹ phòng:

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

Vùng chứa cho thông tin về phòng và gói dịch vụ (hoặc Gói dịch vụ phòng) trong thông báo <Transaction>. Các giá trị đặt cho khách sạn sẽ thay thế giá trị đặt cho đối tác. Google lưu trữ thông tin này để bạn không cần phải xác định thông tin đó mỗi khi gửi thông tin cập nhật về giá.

Phần tử <PropertyDataSet> xuất hiện ở vị trí sau đây trong hệ thống phân cấp của Thông báo giao dịch viết bằng XML:

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

Để biết thêm thông tin, hãy tham khảo bài viết Siêu dữ liệu của gói dịch vụ phòng.

Cú pháp

Phần tử <PropertyDataSet> sử dụng cú pháp sau:

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

Thuộc tính

Phần tử <PropertyDataSet> không có thuộc tính nào.

Phần tử con

Phần tử <PropertyDataSet> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<PackageData> Optional* <PackageData> Mô tả Gói dịch vụ phòng. Dữ liệu này liên kết với đối tác và khách sạn, nhưng không liên kết với hành trình. Phần tử này tương tự như <RoomData>, nhưng mô tả những tiện nghi và điều khoản không có trong nội dung mô tả phòng thực tế.

Bạn cần tham chiếu đến mã gói dịch vụ trong thông tin cập nhật giá của mình.

Để biết thêm thông tin, hãy tham khảo mục siêu dữ liệu của Gói dịch vụ phòng.

<Property> Required string Mã của khách sạn áp dụng dữ liệu liên kết. Giá trị của phần tử này phải là một chuỗi khớp với <id> trang thông tin trong Nguồn cấp dữ liệu danh sách khách sạn của bạn.
<RoomData> Optional* <RoomData> Mô tả về phòng. Dữ liệu này liên kết với đối tác và khách sạn, nhưng không liên kết với hành trình.

Bạn cần tham chiếu đến mã phòng trong thông tin cập nhật giá của mình.

* Bạn phải cung cấp <PackageData> hoặc <RoomData>.

Ví dụ

Dữ liệu về phòng và gói

Ví dụ sau đây cho thấy cả dữ liệu phòng và dữ liệu gói dịch vụ trong một phần tử <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>

Khi gửi giá và tình trạng phòng của phòng này và Gói dịch vụ phòng, bạn cần tham chiếu đến mã phòng và mã gói dịch vụ trong thông báo giá của mình. Nhờ đó, bạn sẽ giảm đáng kể dung lượng thông báo, đồng thời giảm số lượng lỗi có thể gặp phải do dữ liệu trùng lặp. Để biết thêm thông tin, hãy tham khảo mục Siêu dữ liệu của Gói dịch vụ phòng.

<RoomData>

Xác định những siêu dữ liệu độc lập với hành trình về phòng, và theo tiện ích, Gói dịch vụ phòng (do Gói dịch vụ phòng gồm phòng cộng với các tiện nghi khác). Sử dụng <RoomData> để giảm việc lặp lại dữ liệu mô tả trong Nguồn cấp dữ liệu giá của bạn.

Phần tử <RoomData> xuất hiện ở vị trí sau đây trong hệ thống phân cấp của Thông báo giao dịch viết bằng XML:

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

Phần tử <RoomData> chứa thông tin liên quan đến đối tác và khách sạn, nhưng không liên quan đến hành trình. Các phần tử này là dành cho tất cả dữ liệu không phải là dữ liệu hành trình.

Phần tử <RoomData> tương tự như <PackageData>, nhưng mô tả phòng ở trên thực tế chứ không mô tả các tiện nghi và điều khoản của gói dịch vụ. Bạn cần sử dụng kết hợp <RoomData><PackageData> để cung cấp thông tin chi tiết về Gói dịch vụ phòng. Đối với các phòng riêng lẻ không nằm trong gói dịch vụ, chỉ sử dụng <RoomData>.

Bạn có thể xác định cả hai phần tử <RoomData><PackageData> cho cùng một phòng hoặc Gói dịch vụ phòng. Khi Google giới thiệu phòng hoặc gói dịch vụ đó trong kết quả tìm kiếm, nội dung mô tả của cả hai phần tử đều sẽ xuất hiện và được phân cách bằng dấu gạch ngang.

Để biết thêm thông tin, hãy tham khảo bài viết Siêu dữ liệu của gói dịch vụ phòng.

Cú pháp

Phần tử <RoomData> sử dụng cú pháp sau:

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

Thuộc tính

Phần tử <RoomData> không có thuộc tính nào.

Phần tử con

Phần tử <RoomData> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<Capacity> Optional integer Số lượng khách tối đa mà một phòng có thể chứa được trên thực tế. Đối với một phòng, sức chứa tối đa lớn hơn hoặc bằng sức chứa.

Nếu bạn chỉ định thì giá trị này phải bằng hoặc lớn hơn giá trị của phần tử <Occupancy> – số lượng khách mà một phòng cụ thể dự kiến sẽ phục vụ. Ví dụ: <Capacity> của một phòng suite lớn có thể là 6, nhưng <Occupancy> của phòng đó là 4.

Giá trị của <Capacity> phải là số nguyên dương từ 1 đến 20.

<Description> Optional Object Nội dung mô tả chi tiết về phòng. Phần tử này phải chứa những thông tin không được mô tả trong các phần tử khác hoặc phần tử <Name>. Bạn không nên viết hoa tất cả các chữ cái khi soạn nội dung mô tả về phòng.

Phần tử <Description> có một phần tử con duy nhất là <Text>, trong đó có hai thuộc tính bắt buộc sau đây:

  • text: Mô tả chi tiết về phòng.
  • language: Mã ngôn ngữ gồm hai chữ cái. Ví dụ: fr.

Hãy sử dụng một phần tử <Text> riêng cho mỗi ngôn ngữ mà quảng cáo hoặc đường liên kết miễn phí để đặt phòng của bạn có thể sử dụng khi xuất hiện (kèm những giá trị khác nhau cho thuộc tính language).

Ví dụ sau đây cho thấy nội dung mô tả phòng bản tiếng Pháp và tiếng Anh:

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Name> Required string Tên danh mục phòng. Giá trị này phải khớp với thông tin xuất hiện trên trang đích của khách sạn (trước đây là điểm bán hàng). Đừng đặt giá trị của phần tử này thành tất cả chữ cái viết hoa.

Phần tử này có một phần tử con là <Text>, trong đó có hai thuộc tính bắt buộc sau đây:

  • text: Tên phòng.
  • language: Mã ngôn ngữ gồm hai chữ cái. Ví dụ: fr.

Hãy sử dụng một phần tử <Text> riêng cho mỗi ngôn ngữ mà quảng cáo hoặc đường liên kết miễn phí để đặt phòng của bạn có thể sử dụng khi xuất hiện (kèm những giá trị khác nhau cho thuộc tính language).

Ví dụ sau cho thấy tên phòng bản tiếng Pháp và tiếng Anh:

<Name>
  <Text text="Standard Double Room" language="en"/>
  <Text text="Le chambre double" language="fr"/>
</Name>
<Occupancy> Optional integer Số lượng khách tối đa mà một phòng dự kiến sẽ phục vụ. Ví dụ: Phòng suite lớn có thể chứa được 6 khách trên thực tế (sức chứa tối đa = 6) nhưng dự kiến sẽ chỉ phục vụ tối đa 4 khách.

Giá trị này phải nhỏ hơn hoặc bằng phần tử <Capacity> – số người mà phòng có thể chứa được trên thực tế.

Giá trị của <Occupancy> phải là số nguyên dương từ 1 đến 99.

<Occupancy> có thể đi kèm với <OccupancyDetails> – phần tử quy định loại khách (người lớn hoặc trẻ em). Tham khảo cú pháp và nội dung mô tả về các phần tử con trong <OccupancyDetails>.

<OccupancySettings> Optional Object Các chế độ cài đặt có thể hạn chế hoặc sửa đổi yêu cầu về số người lưu trú của một phòng.

Phần tử <OccupancySettings> có các phần tử con sau:

  • <MinOccupancy>: Số khách tối thiểu có thể lưu trú trong một phòng. Ví dụ: nếu bạn đặt giá trị này thành 2, thì khách sạn sẽ không thể đặt phòng này cho một khách.

    Giá trị của <MinOccupancy> phải là số nguyên dương từ 1 đến 99.

  • <MinAge>: Độ tuổi tối thiểu của tất cả khách lưu trú trong một phòng. Ví dụ: nếu bạn đặt giá trị này thành 18, thì chỉ những nhóm có tất cả khách từ 18 tuổi trở lên mới có thể đặt phòng này.

    Giá trị của <MinAge> phải là số nguyên dương từ 0 đến 99.

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

Không phải phần tử con nào cũng cần được đưa vào.

<PhotoURL> Optional Object URL và nội dung chú thích không bắt buộc về hình ảnh của phòng hoặc Gói dịch vụ phòng đã chọn. Bạn có thể chỉ định nhiều <PhotoURL> cho một phòng hoặc Gói dịch vụ phòng. Mỗi URL ảnh phải nằm trong một <PhotoURL> riêng.

Phần tử này có các phần tử con sau đây:

  • <URL>: Xác định vị trí của ảnh. Vị trí phải công khai (không có tường lửa bảo vệ) và phải bao gồm giao thức (ví dụ: https://). Chỉ sử dụng một <URL> cho mỗi <PhotoURL>.
  • <Caption>: Xác định nội dung chú thích cho ảnh. Phần tử này có một phần tử con là <Text>. Phần tử con này có hai thuộc tính bắt buộc là textlanguage. Thuộc tính text là chú thích còn thuộc tính language xác định mã ngôn ngữ gồm hai chữ cái, chẳng hạn như en.

Ví dụ:

<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> Chứa thông tin về các tính năng của phòng.
<RoomID> Required string Mã nhận dạng duy nhất của phòng. Sử dụng mã này để so khớp dữ liệu phòng với các khối <Result> trong thông tin cập nhật về giá. Để biết thêm thông tin, hãy tham khảo mục siêu dữ liệu của Gói dịch vụ phòng. (Bạn cũng có thể sử dụng mã này để tham chiếu định nghĩa phòng chung trong một Thông báo giao dịch duy nhất khi xác định trực tiếp dữ liệu phòng).

Ví dụ

Dữ liệu phòng

Ví dụ sau đây xác định dữ liệu phòng:

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

Siêu dữ liệu về phòng và gói dịch vụ

Ví dụ sau đây xác định siêu dữ liệu của phòng và gói dịch vụ:

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

Nhiều gói dịch vụ phòng

Ví dụ sau đây xác định siêu dữ liệu của phòng và gói dịch vụ cho nhiều Gói dịch vụ phòng:

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

Xác định các tính năng có trong phòng.

Phần tử <RoomFeatures> xuất hiện ở vị trí sau đây trong hệ thống phân cấp của Thông báo giao dịch viết bằng XML:

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

Cú pháp

Phần tử <RoomFeatures> sử dụng cú pháp sau:

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

Thuộc tính

Phần tử <RoomFeatures> không có thuộc tính nào.

Phần tử con

Phần tử <RoomFeatures> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<JapaneseHotelRoomStyle> Optional enum

Cho biết phong cách của phòng khách sạn Nhật Bản.

Các giá trị hợp lệ là:

  • western: Phòng kiểu phương Tây có giường.
  • japanese: Phòng kiểu Nhật có giường futon.
  • japanese_western: Phòng kiểu Nhật và phương Tây, có cả giường kiểu phương Tây và đệm futon kiểu Nhật.
<Beds> Optional Object Chứa nhiều <Bed> như số lượng phòng. Xin lưu ý rằng bạn không nên tính giường futon Nhật Bản ở đây.

Mỗi <Bed> có các thuộc tính sau:

  • size (không bắt buộc): Các giá trị hợp lệ là single, semi_double, double, queenking.
Mỗi <Bed> có các phần tử con sau:
  • <Width> (không bắt buộc): Chỉ định chiều rộng của giường. Phải có thuộc tính unit với giá trị cm và thuộc tính number với chiều rộng của giường tính bằng số nguyên tính bằng cm.
  • <Length> (không bắt buộc): Chỉ định chiều dài giường. Phải có thuộc tính unit với giá trị cm và thuộc tính number với chiều dài của giường tính bằng số nguyên tính bằng cm.
Ví dụ:
<Beds>
  <Bed size="double">
    <Width unit="cm" number="140"/>
    <Length unit="cm" number="195"/>
  </Bed>
  <Bed/> <!-- Size unknown -->
</Beds>
<Suite> Optional empty Cung cấp phần tử này khi phòng này là một căn hộ.
<Capsule> Optional empty Cung cấp phần tử này khi phòng này là phòng capsule.
<Roomsharing> Optional enum Liệu phòng này có được dùng chung với những người lưu trú khác như chủ sở hữu hoặc khách lưu trú khác hay không. Các giá trị hợp lệ là sharedprivate.
<Outdoor> Optional empty Cung cấp phần tử này khi phòng này là nhà nghỉ dưỡng ngoài trời không có tường cố định, hệ thống cấp thoát nước và điều khiển khí hậu. Ví dụ: phòng khách sạn không phải là chỗ ở ngoài trời, trong khi khu cắm trại nơi khách ở trong lều và khu đỗ xe RV nơi khách đem xe RV của mình đến được phân loại là chỗ ở ngoài trời.
<MobilityAccessible> Optional empty Cung cấp phần tử này khi phòng này có thể tiếp cận được bằng phương tiện di chuyển.
<Smoking> Optional enum Phòng này có phải là phòng không hút thuốc hay phòng hút thuốc. Các giá trị hợp lệ là non_smokingsmoking.
<BathAndToilet> Optional Object Chứa thông tin về phòng tắm và nhà vệ sinh trong phòng.

Thuộc tính này là:

  • relation (không bắt buộc): Cho biết cách đặt bồn tắm và nhà vệ sinh đối diện nhau. Các giá trị hợp lệ là together (cả nhà tắm và phòng vệ sinh đều nằm trong cùng một phòng (ví dụ: phòng tắm) ngay cạnh nhau) và separate (nhà tắm và phòng vệ sinh có không gian riêng biệt). Không được đặt thuộc tính này khi phòng không có cả bồn tắm và nhà vệ sinh.

Phần tử này có thể có các phần tử con sau đây:

  • <Bath> (không bắt buộc): Sự tồn tại của phần tử này cho biết phòng có phòng tắm.

    Các thuộc tính đó bao gồm:

    • bathtub (không bắt buộc): Cho biết nhà tắm có bồn tắm. Các giá trị hợp lệ là 0 (hoặc false) và 1 (hoặc true).
    • shower (không bắt buộc): Cho biết phòng tắm có bồn tắm. Các giá trị hợp lệ là 0 (hoặc false) và 1 (hoặc true).
  • <Toilet> (không bắt buộc): Sự tồn tại của phần tử này cho biết phòng này có nhà vệ sinh.

    Các thuộc tính đó bao gồm:

    • electronic_bidet (không bắt buộc): Cho biết bồn cầu có chậu vệ sinh điện tử. Các giá trị hợp lệ là 0 (hoặc false) và 1 (hoặc true).
    • mobility_accessible (không bắt buộc): Cho biết nhà vệ sinh có thể tiếp cận được bằng xe lăn. Các giá trị hợp lệ là 0 (hoặc false) và 1 (hoặc true).

Ví dụ:

<BathAndToilet relation="separate">
  <Bath bathtub="1" shower="1"/>
  <Toilet
    electronic_bidet="1"
    mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath> Optional empty Cung cấp phần tử này khi phòng có bồn tắm ngoài trời riêng.
<AirConditioning> Optional empty Cung cấp phần tử này khi phòng này có máy điều hoà.
<Balcony> Optional empty Cung cấp phần tử này khi phòng có ban công hoặc lanai.
<Views> Optional Object Các tuỳ chọn hợp lệ bao gồm:

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

Ví dụ

JapaneseHotelRoomStyle không có giá trị mặc định. Việc bỏ qua một giá trị sẽ không dẫn đến lỗi XML, nhưng trang thông tin của bạn sẽ không xuất hiện trong kết quả tìm kiếm khi người dùng lọc theo kiểu phòng hoặc số giường.

Hai giường đơn

Ví dụ sau đây cho thấy cách sử dụng <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>

Hai giường đôi

Sau đây là ví dụ về phòng kiểu Nhật western có hai giường 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>


Phòng kiểu Nhật không có giường

Sau đây là ví dụ về một phòng theo phong cách Nhật Bản không có giường. Không bắt buộc phải cung cấp thông tin về giường cho phòng kiểu 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>

Phòng kiểu Nhật pha trộn phương Tây có giường

Sau đây là ví dụ về một phòng theo phong cách japanese_western có giường kích thước king.

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

Nếu đối tác không có thông tin về số giường trong phòng japanese_western, hãy làm theo ví dụ sau:

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

Xác định siêu dữ liệu độc lập với hành trình về Gói dịch vụ phòng cho một cơ sở lưu trú. Phần tử này chứa thông tin liên kết với đối tác và khách sạn, nhưng không liên kết với hành trình. Mục đích là để xác định một lần tất cả dữ liệu không phải là dữ liệu hành trình và tham chiếu dữ liệu đó từ dữ liệu hành trình.

Phần tử <PackageData> xuất hiện ở vị trí sau đây trong hệ thống phân cấp của Thông báo giao dịch viết bằng XML:

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

Phần tử <PackageData> tương tự như <RoomData>, nhưng mô tả những dịch vụ theo đơn giá và điều khoản không có trong nội dung mô tả phòng thực tế. Bạn cần sử dụng kết hợp <RoomData><PackageData> để cung cấp thông tin chi tiết về Gói dịch vụ phòng và dịch vụ theo đơn giá. Đối với các phòng riêng lẻ không thuộc gói dịch vụ, chỉ sử dụng <RoomData>.

Bạn có thể xác định cả hai phần tử <RoomData><PackageData> cho cùng một phòng hoặc Gói dịch vụ phòng. Khi Google giới thiệu phòng hoặc gói dịch vụ đó trong kết quả tìm kiếm, nội dung mô tả của cả hai phần tử đều sẽ xuất hiện và được phân cách bằng dấu gạch ngang.

Nếu cập nhật một phần tử <PackageData> duy nhất cho một cơ sở lưu trú thì bạn phải cập nhật tất cả các phần tử <PackageData><RoomData> cho cơ sở lưu trú đó. Mỗi <PropertyDataSet> được xem là toàn bộ dữ liệu về cơ sở lưu trú và sẽ thay thế mọi dữ liệu hiện có.

Để biết thêm thông tin, hãy tham khảo bài viết Siêu dữ liệu của gói dịch vụ phòng.

Cú pháp

Phần tử <PackageData> sử dụng cú pháp sau:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    <PackageData>
      <PackageID>package_ID</PackageID>
      <Name>
        <Text text="package_name" language="language_code"/>
        ...
      </Name>
      <Description>
        <Text text="package_description" language="language_code"/>
        ...
      </Description>
      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails><!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
      <!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      ...
      <Meals>
        <Breakfast
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
        <Dinner
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
      </Meals>
      <CheckinTime>checkin_time</CheckinTime>
      <CheckoutTime>checkout_time</CheckoutTime>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Special Rewards">
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum">
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
    <!-- a PackageID with a MilesIncluded rate feature -->
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
       <Text text="Room with Bundled Miles" language="en">
      </Name>
      <ChargeCurrency>hotel </ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000 </NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines">
        </Provider>
      </MilesIncluded>
    </PackageData>
    ...
    ...
  </PropertyDataSet>
  ...
</Transaction>

Thuộc tính

Phần tử <PackageData> không có thuộc tính nào.

Phần tử con

Phần tử <PackageData> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<BreakfastIncluded> Optional boolean Chỉ định xem gói này có bao gồm bữa sáng kèm theo giá hay không. Các giá trị hợp lệ là 0 (hoặc false) và 1 (hoặc true).

Bạn nên sử dụng <Meals> thay vì <BreakfastIncluded>.

<ChargeCurrency> Optional enum Thời gian và địa điểm mà người dùng thanh toán cho yêu cầu đặt phòng. Phần tử này sử dụng cú pháp giống như <ChargeCurrency> trong <Result>.

Giá trị mặc định là web.

<CheckinTime> Optional Time Giờ nhận phòng sớm nhất có thể. Thời gian phải trước 24:00 theo giờ địa phương của khách sạn.
<CheckoutTime> Optional Time Giờ trả phòng muộn nhất có thể theo giờ địa phương của khách sạn.
<Description> Optional Object Nội dung mô tả chi tiết về gói. Phần tử này phải chứa những thông tin không được mô tả trong các phần tử khác hoặc phần tử <Name>. Bạn không nên viết hoa tất cả các chữ cái khi soạn nội dung mô tả về phòng.

Phần tử <Description> có một phần tử con là <Text>. Phần tử con này có hai thuộc tính bắt buộc là textlanguage. Thuộc tính text là nội dung mô tả và thuộc tính language chỉ định mã ngôn ngữ gồm hai chữ cái, như trong ví dụ dưới đây:

<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 Dùng khi một gói bao gồm cả quyền truy cập Internet miễn phí, trong khi các gói khác thì không có tiện nghi đó. Đừng đặt phần tử này cho Gói dịch vụ phòng của những khách sạn cung cấp Internet miễn phí cho tất cả các phòng. Phần tử này không áp dụng cho dịch vụ Internet có dây trong phòng hoặc dịch vụ Internet không dây không có trong phòng khách. Các giá trị hợp lệ là 0 (hoặc false) và 1 (hoặc true).
<Meals> Optional Object Chứa thông tin về các bữa ăn trong gói này.

Phần tử <Meals> có hai phần tử con không bắt buộc là <Breakfast><Dinner>. Các phần tử con này có các thuộc tính sau:

  • included (bắt buộc): Đặt thành 1 (hoặc true) nếu giá bao gồm bữa sáng/bữa tối; nếu không, hãy đặt thành 0 hoặc false.
  • in_room (không bắt buộc): Đặt thành 1 (hoặc true) nếu khách có thể dùng bữa sáng/bữa tối trong phòng họ lưu trú; nếu không, hãy đặt thành 0 (hoặc false).
  • in_private_space (không bắt buộc): Đặt thành 1 (hoặc true) nếu khách có thể dùng bữa sáng/bữa tối trong một không gian (ngoại trừ phòng họ ở) để tránh tiếp xúc với khách khác; nếu không, hãy đặt thành 0 (hoặc false).
  • buffet (không bắt buộc): Đặt thành 1 (hoặc true) nếu bữa sáng/bữa tối được phục vụ theo kiểu tự chọn; nếu không, hãy đặt thành 0 (hoặc false).

Các thuộc tính không bắt buộc chỉ được sử dụng khi included là đúng.

Để bộ lọc bữa ăn (no meals, breakfast only, dinner onlybreakfast and dinner) hoạt động, bạn cần cung cấp thuộc tính included cho cả <Breakfast><Dinner>.

<Name> Required string Tên gói. Giá trị này phải khớp với thông tin xuất hiện trên trang đích của khách sạn. Đừng đặt giá trị của phần tử này thành tất cả chữ cái viết hoa.

Phần tử này có một phần tử con là <Text>. Phần tử con này có hai thuộc tính là textlanguage. Thuộc tính text là nội dung mô tả và thuộc tính language chỉ định mã ngôn ngữ gồm hai chữ cái, như trong ví dụ dưới đây:

<Name>
  <Text text="Bed and Breakfast" language="en"/>
  <Text text="Lit et petit déjeuné" language="fr"/>
</Name>
<Occupancy> Optional integer Số lượng khách tối đa mà một Gói dịch vụ phòng dự kiến sẽ phục vụ. Ví dụ: phòng suite lớn có thể chứa được 6 khách trên thực tế, nhưng dự kiến sẽ chỉ phục vụ tối đa 4 khách.

Giá trị này phải nhỏ hơn hoặc bằng phần tử <Capacity> – số người mà phòng có thể chứa được trên thực tế.

Giá trị của <Occupancy> phải là số nguyên dương từ 1 đến 99.

Nếu bạn chỉ định phần tử này trong cả <RoomBundle><PackageData>, thì giá trị trong <RoomBundle> sẽ được ưu tiên.

Lưu ý:

<Occupancy> có thể đi kèm với <OccupancyDetails>,giúp xác định loại khách (người lớn hoặc trẻ em). Tham khảo cú pháp và nội dung mô tả về các phần tử con trong <OccupancyDetails>.
<PackageID> Required string

Mã nhận dạng duy nhất của gói. Sử dụng mã này để so khớp dữ liệu Gói dịch vụ phòng với các khối <Result> trong thông tin cập nhật về giá. Để biết thêm thông tin, hãy tham khảo mục siêu dữ liệu của Gói dịch vụ phòng.

(Bạn cũng có thể sử dụng mã này để tham chiếu định nghĩa chung về Gói dịch vụ phòng được sử dụng trong một Thông báo giao dịch duy nhất khi xác định trực tiếp dữ liệu Gói dịch vụ phòng.)

<ParkingIncluded> Optional boolean Xác định có phải Gói dịch vụ phòng bao gồm cả chỗ đỗ xe miễn phí không. Nếu không, bãi đỗ xe tại khách sạn sẽ là dịch vụ có tính phí. Đừng chỉ định một giá trị cho phần tử này đối với khách sạn cung cấp chỗ đỗ xe miễn phí.

Các giá trị hợp lệ là 0 (hoặc false) và 1 (hoặc true). Giá trị mặc định là false.

<PhotoURL> Optional Object (Tương tự như <PhotoURL> trong <RoomData>, nhưng dành cho gói (ví dụ: ảnh bữa ăn).)
<Refundable> Optional Object Cho phép niêm yết giá dịch vụ là có thể hoàn tiền đầy đủ hoặc miễn phí huỷ đặt phòng. Nếu bạn không cung cấp thông tin về vấn đề hoàn tiền thì sẽ không có thông tin nào được hiển thị. Chính sách hoàn tiền ở cấp <PackageData> sẽ thay thế chính sách hoàn tiền ở cấp <Result>. Chính sách hoàn tiền ở cấp <Rates> sẽ thay thế chính sách hoàn tiền ở cấp <PackageData>. Bạn cũng có thể làm nổi bật chính sách cho phép hoàn tiền cho người dùng thấy bằng các phương án thay thế mà không cần trực tiếp sửa đổi giản đồ thông báo giao dịch. Tìm hiểu thêm về các lựa chọn này trong Chính sách về giá phòng có thể hoàn tiền.

Ví dụ sau đây cho thấy phần tử <Refundable> đã được thiết lập tất cả các thuộc tính:

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

Lưu ý: Bạn nên thiết lập tất cả các thuộc tính. Thông báo cảnh báo trạng thái của nguồn cấp dữ liệu được tạo khi bạn không thiết lập một hoặc nhiều thuộc tính.

Nếu bạn không thiết lập thuộc tính thì giá sẽ không hiển thị dưới dạng có thể hoàn lại. Các thuộc tính đó bao gồm:

  • available: (Bắt buộc) Đặt thành 1 hoặc true để cho biết rằng bạn cho phép hoàn tiền toàn bộ; nếu không, hãy thiết lập thành 0 hoặc false.
  • refundable_until_days: (Bắt buộc nếu availabletrue) Chỉ định số ngày trước khi nhận phòng mà người dùng có thể yêu cầu hoàn tiền toàn bộ. Giá trị của refundable_until_days phải là số nguyên từ 0 đến 330.
  • refundable_until_time: (Rất nên áp dụng nếu availabletrue) Chỉ định thời gian mới nhất trong ngày theo giờ địa phương của khách sạn mà tại thời điểm đó, yêu cầu hoàn tiền đầy đủ sẽ được chấp nhận. Bạn có thể kết hợp thuộc tính này với refundable_until_days để xác định. Ví dụ: "được phép hoàn tiền đến 4 giờ chiều hai ngày trước khi nhận phòng". Nếu bạn không đặt refundable_until_time thì giá trị mặc định là nửa đêm.

    Giá trị của thuộc tính này sử dụng định dạng Thời gian.

Khi bạn thiết lập thuộc tính, hãy lưu ý những điều sau:

  • Nếu bạn không đặt available hoặc refundable_until_days, thì giá sẽ không xuất hiện dưới dạng có thể hoàn tiền.
  • Nếu available0 hoặc false thì các thuộc tính khác sẽ bị bỏ qua. Giá sẽ không hiển thị dưới dạng có thể hoàn lại ngay cả khi bạn đã thiết lập một trong hai hoặc cả hai thuộc tính còn lại.
<MembershipBenefits Included> Optional boolean Giá bao gồm các lợi ích dành cho khách hàng cao cấp trong thời gian lưu trú. Bao gồm các tham số sau:
  • ProgramName: Tên chương trình khách hàng cao cấp
  • ProgramLevel: Cấp chương trình. Ví dụ: "Vàng".
  • NightlyValue (optional): Giá trị mỗi đêm của các lợi ích.
<CarRentalIncluded> Optional boolean Giá bao gồm ưu đãi cho thuê ô tô miễn phí trong thời gian lưu trú.
<MilesIncluded>> Optional boolean Giá bao gồm dặm bay của khách bay thường xuyên. Các thông số bao gồm:
  • NumberofMiles: Số dặm bay mỗi hành trình.
  • Provider: Nhà cung cấp số dặm bay của khách bay thường xuyên.
<OnPropertyCredit> Optional boolean Giá bao gồm tín dụng tại cơ sở lưu trú (cơ sở cung cấp dịch vụ thực phẩm và đồ uống, khu nghỉ dưỡng, spa và các cơ sở khác). Thông số:
  • Amount: Giá trị tín dụng cho mỗi hành trình, tính bằng nội tệ.
<AirportTransportationIncluded> Optional Object Giá phòng bao gồm dịch vụ đưa đón miễn phí đến/từ một sân bay lân cận. Thuộc tính direction không bắt buộc chỉ định hướng của phương tiện. Các giá trị hợp lệ bao gồm:
    from: Khách sạn cung cấp dịch vụ đưa đón từ sân bay đến cơ sở lưu trú. Đây là giá trị mặc định nếu bạn không chỉ định hướng. to: Có dịch vụ đưa đón sân bay từ cơ sở lưu trú. round_trip: Có dịch vụ đưa đón sân bay.

Ví dụ

Gói phòng đơn

Ví dụ sau đây xác định một Gói dịch vụ phòng, có sức chứa là 2 (một người lớn và một trẻ em) và bao gồm bữa sáng:

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

Siêu dữ liệu về phòng và gói dịch vụ

Ví dụ sau đây xác định siêu dữ liệu của phòng và gói dịch vụ:

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

Nhiều gói dịch vụ phòng

Ví dụ sau đây xác định siêu dữ liệu của phòng và gói dịch vụ cho nhiều Gói dịch vụ phòng:

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


Gói dịch vụ phòng có giá

Ví dụ sau đây xác định siêu dữ liệu của phòng và gói dịch vụ cho một gói phòng có các đặc điểm liên quan đến giá:

<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID">
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
     ...
    </RoomData>
<!-- definitions of PackageData types including rate features -->
    <PackageData>
      <PackageID>room_with_addl_benefits</PackageID>
      <Name>
        <Text text="Acme Hotels 2017 Promotion Package" language="en"/>
      </Name>
      <ChargeCurrency>hotel</ChargeCurrency>
      <BreakfastIncluded>1</BreakfastIncluded>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Marriott Rewards"/>
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum"/>
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
        <Text text="Room with Bundled Miles" language="en"/>
      </Name>
      <ChargeCurrency>hotel</ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000</NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines"/>
        </Provider>
      </MilesIncluded>
      <AirportTransportationIncluded direction="from"/>
    </PackageData>
  </PropertyDataSet>

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

Bữa ăn và ảnh

Ví dụ sau đây xác định siêu dữ liệu của phòng và gói dịch vụ cho bữa ăn, ảnh và thời gian nhận phòng và trả phòng:

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

Bữa sáng

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

Vùng chứa thông tin cập nhật giá và tình trạng phòng của thông báo <Transaction>.

Phần tử <Result> xuất hiện ở vị trí sau đây trong hệ thống phân cấp của Thông báo giao dịch viết bằng XML:

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

Sử dụng <Result> để đặt hoặc cập nhật giá phòng và xác định tình trạng còn phòng. Các mục được xác định trong phần tử này thường tham chiếu siêu dữ liệu độc lập với hành trình về phòng hoặc gói dịch vụ (chẳng hạn như nội dung mô tả hoặc tập hợp các tiện nghi) được xác định trong <PackageData><RoomData>.

Thông thường, bạn sẽ gửi Thông báo giao dịch kèm theo thông tin cập nhật về giá rất thường xuyên. Cách làm và tần suất cụ thể phụ thuộc vào chế độ phân phối của bạn.

Bạn có thể sử dụng <Result> trong Thông báo giao dịch để xoá hành trình, như mô tả trong bài viết Xoá quỹ phòng. Để biết thêm thông tin về việc sử dụng thông báo Giao dịch để cập nhật giá và tình trạng phòng, hãy xem bài viết Thêm và cập nhật quỹ phòng.

Một thông báo Giao dịch có thể bao gồm số lượng phần tử <Result> bất kỳ, miễn là dung lượng thông báo không vượt quá 100 MB.

Cú pháp

Phần tử <Result> sử dụng cú pháp sau:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    <!-- Required -->
    <Property>hotel_ID</Property>
    <!-- Required -->
    <Checkin>YYYY-MM-DD</Checkin>
    <!-- Required -->
    <Nights>number_of_nights</Nights>

    <Baserate currency="currency_code">price</Baserate>
    <!-- Only required when <Baserate> contains a real price -->
    <Tax currency="currency_code">tax_amount</Tax>
    <!-- Only required when <Baserate> contains a real price  -->
    <OtherFees currency="currency_code">fee_amount</OtherFees>
    <Refundable available="[false|true]" refundable_until_days="number_of_days"
      refundable_until_time="time"/>

    <RoomID>room_ID</RoomID>
    <PackageID>package_ID</PackageID>
    <ExpirationTime>expiration_time</ExpirationTime>
    <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>

    <Occupancy>max_number_of_intended_occupants</Occupancy>
    <!-- For Baserate, occupancy value must be greater than or equal to 2.
         If a value is not provided for occupancy, it defaults to 2. -->
    <OccupancyDetails>occupancy_info</OccupancyDetails>

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

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

    <Custom[1-5]>custom_value</Custom[1-5]>
  </Result>
  ...
  </Transaction>

Thuộc tính

Phần tử <Result> có các thuộc tính như sau:

Thuộc tính Bắt buộc? Loại Mô tả
mergeable Optional boolean Theo mặc định, giá mới cho một cặp khách sạn và hành trình cụ thể sẽ thay thế mọi giá trước đây (chưa hết hạn) có trong bộ nhớ đệm của Google. Thuộc tính có thể hợp nhất này cho phép bạn lưu trữ các mức giá bổ sung vào bộ nhớ đệm của Google mà không cần xoá thông tin về giá trước đó. Thuộc tính này trong nội dung phản hồi cho Truy vấn giá hiện tại theo Bối cảnh sẽ luôn được thiết lập thành true (bất kể phản hồi của bạn về thông báo giao dịch).

Phần tử con

Phần tử <Result> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<AllowablePointsOfSale> Optional Object Một hoặc nhiều trang đích đủ điều kiện cho khách sạn. Trang đích là một trang web có thể xử lý quá trình đặt phòng cho người dùng cuối. Để cung cấp một trang đích cụ thể (và loại trừ các trang đích khác), hãy thêm một hoặc nhiều phần tử <AllowablePointsOfSale> khớp với thuộc tính id của phần tử <PointOfSale> trong tệp trang đích.

Nếu bạn không bao gồm phần tử này, thì tất cả các trang đích được xác định trong tệp trang đích sẽ được coi là đủ điều kiện sử dụng để đặt phòng. Để biết thêm thông tin, hãy tham khảo bài viết Cú pháp của tệp trang đích.

<Baserate> Optional float

Giá phòng cho lần lưu trú. Giá trị của phần tử này phải phản ánh những nội dung sau:

  • Đối với phòng riêng, hãy thiết lập giá thấp nhất cho phòng hai người mà bạn cung cấp. Bạn có thể cho phép số người lưu trú cao hơn ở đây nếu không có giá cho 2 người lưu trú và tài khoản của bạn đã bật giá cho số người lưu trú không phải 2 người. Vui lòng liên hệ với chúng tôi để bật mức giá cho phòng không phải là phòng hai người. Bạn không được đặt giá phòng một người ở đây. Bạn phải đặt giá phòng một người trong mục <Rates>.
  • Đối với phòng dùng chung, hãy để trống và sử dụng <RoomBundle>.
  • Giá trị này phải là tổng mức giá cơ bản cho tất cả các đêm, chứ không phải giá trung bình mỗi đêm.

Khi không thể sử dụng phòng cho hành trình, bạn nên bỏ qua hoặc đặt <Baserate> thành -1, đồng thời chỉ định <Unavailable> cùng với mọi lý do đã biết khiến phòng không có sẵn.

Để xoá Gói dịch vụ phòng, hãy làm theo hướng dẫn trong bài viết Xoá Gói dịch vụ phòng.

<Baserate> không được chứa bất kỳ ký hiệu nào dùng để nhóm các chữ số, chẳng hạn như dấu phẩy (,) hoặc dấu chấm (.). Bạn phải luôn sử dụng dấu chấm (.) làm dấu thập phân để phân tách phần thập phân. Ví dụ: hãy trình bày $1.200,40 như sau:

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

Phần tử <Baserate> có các thuộc tính không bắt buộc sau đây:

  • all_inclusive: Giá trị boolean cho biết giá này có bao gồm thuế và phí hay không. Nhìn chung, hãy đặt giá trị này thành false đối với người dùng cuối ở Hoa Kỳ và Canada, đồng thời cung cấp giá trị cho các phần tử <Tax><OtherFees>. Nếu sử dụng giá trọn gói, bạn có thể không đủ điều kiện xuất hiện trong trang thông tin nếu giá của bạn không tách riêng thuế và phí cho người dùng ở Canada.

    Giá trọn gói hiện hiển thị cho người dùng ở Hoa Kỳ.

    Đối với tất cả người dùng cuối khác, thông thường, bạn nên tính cả thuế và phí vào giá cơ sở và đặt giá trị của thuộc tính all_inclusive thành true. Để biết thêm thông tin, hãy tham khảo Chính sách về thuế và phí.

    Giá trị mặc định là false.

  • currency: Mã đơn vị tiền tệ gồm ba chữ cái. Ví dụ: USD cho đô la Mỹ.
<ChargeCurrency> Optional enum Thời gian và địa điểm mà người dùng thanh toán cho yêu cầu đặt phòng. Bạn có thể sử dụng phần tử này trong Thông báo giao dịch của phần tử <Result> cho Giá khách sạn hoặc khối <PackageData> cho Gói dịch vụ phòng.

Các giá trị hợp lệ là:

  • web: Người dùng cần thanh toán trực tuyến tại thời điểm đặt phòng. Đây là giá trị mặc định. Trang đích thực tế được xác định bằng tệp trang đích và có thể chịu ảnh hưởng của đơn vị tiền tệ, vị trí, ngôn ngữ của người dùng hoặc các yếu tố khác.
  • hotel: Người dùng cần thanh toán khi nhận phòng tại khách sạn. Nếu bạn muốn người dùng phải luôn thanh toán bằng đơn vị tiền tệ của khách sạn, hãy đặt giá trị của <ChargeCurrency> thành hotel. Trang đích thực tế sẽ không chịu ảnh hưởng của đơn vị tiền tệ của người dùng.
  • deposit: Người dùng cần thanh toán một phần ngay lập tức và phần còn lại sẽ được tính phí sau, thường là khi người dùng trả phòng khách sạn.
  • installments: Người dùng cần thanh toán một phần số tiền ban đầu đã đến hạn trong tổng số tiền và dự kiến sẽ định kỳ thanh toán một số tiền cụ thể trong một khoảng thời gian cố định.

Giá trị mặc định là web.

<Checkin> Required Date Ngày nhận phòng trong hành trình theo định dạng Ngày. Phần tử <Nights> và phần tử <Checkin> kết hợp với nhau sẽ tạo thành một hành trình.
<Custom[1‑5]> Optional string Xác định trường tuỳ chỉnh mà bạn có thể sử dụng để chuyển dữ liệu bổ sung liên kết với khách sạn. Bạn có thể chuyển tối đa 5 giá trị tuỳ chỉnh thông qua các tên phần tử sau:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

Phần tử <Custom> giúp bạn chuyển dữ liệu tuỳ ý. Ví dụ: Bạn có thể chỉ định giá trị trong trường này. Sau đó, giá trị này sẽ được tệp trang đích sử dụng để tạo URL tuỳ chỉnh cho trang đích. Mỗi trường tuỳ chỉnh có giới hạn là 200 ký tự. Để biết thêm thông tin, hãy tham khảo tệp trang đích .

Các phần tử <Tuỳ chỉnh> được cung cấp trong phần tử <Rate> không được kế thừa cho phần tử <RoomBundle>. Bạn nên xác định thuộc tính <Custom> (Tuỳ chỉnh) riêng biệt trong mỗi <RoomBundle>.

<ExpirationTime> Optional DateTime Ngày và giờ mà tại thời điểm đó, giá được xem là hết hạn (tối thiểu là 3 giờ).

Bạn không nên cung cấp dấu thời gian hết hạn nếu đó không phải là yếu tố quan trọng đối với cấu trúc định giá.

Google không phân phát giá đã hết hạn và mọi hành trình có giá đã hết hạn sẽ đủ điều kiện để truy vấn giá hiện tại.

<Nights> Required integer Số đêm trong một hành trình. Giá trị của phần tử <Nights> phải là số nguyên dương. <Nights><Checkin> kết hợp với nhau sẽ tạo thành một hành trình.
<OtherFees> Optional float Các khoản phí khác ngoài giá cơ bản và các loại thuế có ảnh hưởng đến giá sau cùng của phòng. Phần tử <OtherFees> có một thuộc tính bắt buộc là currency. Thuộc tính này giúp xác định mã đơn vị tiền tệ gồm ba chữ cái cho các khoản phí. Ví dụ: USD.

Bạn bắt buộc phải thiết lập phần tử <OtherFees> nếu <Baserate> lớn hơn 0.

<Occupancy> Optional integer Chỉ định số người lưu trú tối đa được phép cho mức giá này. Khi xuất hiện ngay trong <Result>, <Occupancy> phải chỉ định 2 trở lên. <Occupancy> có thể đi kèm với <OccupancyDetails>, giúp xác định loại khách (người lớn hoặc trẻ em). Nếu bạn không chỉ định loại khách, thì họ được giả định là người lớn. Hãy tham khảo <OccupancyDetails> để biết cú pháp và nội dung mô tả về các phần tử con. Nếu bạn không cung cấp phần tử <Occupancy>, thì theo mặc định, sức chứa sẽ được đặt là 2.

Lưu ý: Hãy liên hệ với nhóm hỗ trợ của bạn để bật tính năng gửi giá cho phòng không phải phòng hai người.

<PackageID> Optional string Mã nhận dạng duy nhất của gói dịch vụ để liên kết với dữ liệu gói đã xác định sẵn. Thuộc tính này còn được dùng để điền biến trang đích PACKAGE-ID. Để biết thêm thông tin, hãy tham khảo bài viết Siêu dữ liệu của Gói dịch vụ phòng.
<Property> Required string Mã của khách sạn chịu ảnh hưởng của dữ liệu liên kết (giá, hành trình, Gói dịch vụ phòng hoặc siêu dữ liệu). Giá trị của phần tử này phải là một chuỗi. Giá trị của phần tử này phải khớp với <id> trang thông tin mà bạn đã xác định trong Nguồn cấp dữ liệu danh sách khách sạn.
<Rates> Optional <Rates> Vùng chứa một hoặc nhiều khối <Rate>. Mỗi <Rate> trong <Rates> xác định một mức giá cho tổ hợp phòng/hành trình.

Sử dụng phần tử <Rates> khi có nhiều mức giá cho cùng một tổ hợp phòng/hành trình hoặc khi không được phép chỉ định mức giá ở cấp <Result>. Ví dụ: bạn xác định nhiều mức giá liên quan đến giá phòng có điều kiện, mức giá ưu đãi chọn lọc, giá phòng có điều kiện trong Gói dịch vụ phòng hoặc số người lưu trú khác nhau.

Lưu ý: Trong <Result>, bạn chỉ có thể chỉ định giá cho một người lưu trú trong <Rates>. Vui lòng liên hệ với chúng tôi để cho phép giá cho phòng không phải phòng hai người.

<Refundable> Optional Object Cho phép niêm yết giá dịch vụ là có thể hoàn tiền đầy đủ hoặc miễn phí huỷ đặt phòng. Nếu bạn không cung cấp thông tin về vấn đề hoàn tiền thì sẽ không có thông tin nào được hiển thị. Chính sách hoàn tiền ở cấp <PackageData> sẽ thay thế chính sách hoàn tiền ở cấp <Result>. Chính sách hoàn tiền ở cấp <Rates> sẽ thay thế chính sách hoàn tiền ở cấp <PackageData>. Bạn cũng có thể làm nổi bật chính sách cho phép hoàn tiền cho người dùng thấy bằng các phương án thay thế mà không cần trực tiếp sửa đổi giản đồ thông báo giao dịch. Tìm hiểu thêm về Chính sách về giá phòng có thể hoàn tiền.

Ví dụ sau đây cho thấy phần tử <Refundable> đã được thiết lập tất cả các thuộc tính:

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

Lưu ý: Bạn nên thiết lập tất cả các thuộc tính. Hệ thống sẽ gửi cảnh báo về trạng thái của nguồn cấp dữ liệu khi bạn không thiết lập một hoặc nhiều thuộc tính.

Nếu bạn không thiết lập thuộc tính thì giá sẽ không xuất hiện dưới dạng có thể hoàn tiền. Các thuộc tính đó bao gồm:

  • available: (Bắt buộc) Đặt thành 1 (hoặc true) để cho biết rằng bạn cho phép hoàn tiền toàn bộ; nếu không, hãy thiết lập thành 0 (hoặc false).
  • refundable_until_days: (Bắt buộc nếu availabletrue) Chỉ định số ngày trước khi nhận phòng mà người dùng có thể yêu cầu hoàn tiền toàn bộ. Giá trị của refundable_until_days phải là số nguyên từ 0 đến 330.
  • refundable_until_time: (Rất nên áp dụng nếu availabletrue) Chỉ định thời gian mới nhất trong ngày theo giờ địa phương của khách sạn mà tại thời điểm đó, yêu cầu hoàn tiền đầy đủ sẽ được chấp nhận. Bạn có thể kết hợp thuộc tính này với refundable_until_days để xác định. Ví dụ: "được phép hoàn tiền đến 4 giờ chiều hai ngày trước khi nhận phòng". Nếu bạn không đặt refundable_until_time thì giá trị mặc định là nửa đêm.

    Giá trị của thuộc tính này sử dụng định dạng Thời gian.

Khi bạn thiết lập thuộc tính, hãy lưu ý những điều sau:

  • Nếu bạn không đặt available hoặc refundable_until_days, thì giá sẽ không xuất hiện dưới dạng có thể hoàn tiền.
  • Nếu available0 (hoặc false) thì các thuộc tính khác sẽ bị bỏ qua. Giá sẽ không hiển thị dưới dạng có thể hoàn lại ngay cả khi bạn đã thiết lập một trong hai hoặc cả hai thuộc tính còn lại.
<RoomBundle> Optional <RoomBundle> Vùng chứa thông tin về nội dung mô tả thực tế của phòng kèm theo giá, gói tiện nghi và một số thông tin về chính sách mua hàng cho khách sạn và hành trình cụ thể.

Nhìn chung, hãy sử dụng phần tử này để xác định giá cho phòng cơ sở và các loại phòng trong cùng một cơ sở lưu trú. Mặc dù có thể xác định trực tiếp nội dung mô tả Gói dịch vụ phòng, nhưng bạn nên sử dụng Thông báo giao dịch riêng để xác định thông tin đó. Google sẽ lưu trữ siêu dữ liệu để bạn có thể tham chiếu thay vì phải lặp lại siêu dữ liệu đó, trong tất cả thông tin cập nhật giá trong tương lai.

<RoomID> Optional string Mã nhận dạng duy nhất của phòng để liên kết với dữ liệu phòng đã xác định sẵn. Thuộc tính này còn được dùng để điền biến trang đích PARTNER-ROOM-ID. Để biết thêm thông tin, hãy tham khảo bài viết Siêu dữ liệu của Gói dịch vụ phòng.
<Tax> Optional float Thuế được tính cho giá sau cùng của phòng. Phần tử <Tax> có một thuộc tính bắt buộc là currency. Thuộc tính này giúp xác định mã đơn vị tiền tệ gồm ba chữ cái cho các khoản thuế. Ví dụ: USD. Bạn bắt buộc phải thiết lập phần tử <Tax> nếu <Baserate> lớn hơn 0.

Nếu thuộc tính "all_inclusive" của phần tử <Baserate> được đặt rõ ràng thành true, thì bạn không bắt buộc phải đặt giá trị này.

<Unavailable> Optional Object Cho biết không thể đặt vé cho hành trình này. Dùng làm vùng chứa cho các lý do chi tiết hơn về việc không cung cấp được hành trình. Một hoặc nhiều lý do không có sẵn sau đây có thể được lồng ghép bên dưới thẻ <Unavailable>:
  • <NoVacancy/>: Không còn phòng để bán cho một hoặc nhiều đêm lưu trú.
  • <MinNightStay value=N/>: Hành trình có số đêm lưu trú dưới số đêm lưu trú tối thiểu là N cho các ngày lưu trú.
  • <MaxNightStay value=N/>: Hành trình vượt quá số đêm lưu trú tối đa là N cho các ngày lưu trú.
  • <MinAdvancePurchase value=N/>: Hành trình có thời hạn đặt trước dưới N ngày đối với các ngày lưu trú.
  • <MaxAdvancePurchase value=N/>: Hành trình vượt quá khoảng thời gian đặt trước tối đa là N ngày đối với ngày lưu trú.
  • <ClosedToArrival/>: Khách sạn không cho phép nhận phòng vào ngày đến trong hành trình.
  • <ClosedToDeparture/>: Cơ sở lưu trú không cho phép trả phòng vào ngày khởi hành của hành trình.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/>: Cơ sở lưu trú đóng cửa trong một số hoặc toàn bộ thời gian lưu trú. Các thuộc tính được đề xuất first_openfirst_closed chỉ định ngày đầu tiên lớn hơn hoặc bằng ngày đến mà cơ sở lưu trú mở cửa hoặc đóng cửa tương ứng. Đối với cơ sở lưu trú đóng cửa sau ngày đến, first_open phải bằng ngày đến và first_closed phải là ngày cơ sở lưu trú đóng cửa. Đối với cơ sở lưu trú đóng cửa vào ngày đến, first_closed phải bằng ngày đến và first_opened phải là ngày tiếp theo mà cơ sở lưu trú mở cửa.
  • <NotFetched/>: Giá của hành trình không được các nguồn dữ liệu hạ nguồn cung cấp.
  • <InvalidProperty/>: Không nhận dạng được giá trị nhận dạng tài sản được yêu cầu.
  • <InvalidOccupancy/>: Số người lưu trú được yêu cầu không được cơ sở lưu trú hỗ trợ.
  • <PriceIssue/>: Giá không được gửi do có vấn đề.
  • <InternalError reason=""/>: Đã xảy ra một số lỗi chưa được liệt kê. Thuộc tính lý do không bắt buộc có thể báo cáo lỗi dưới dạng văn bản.
  • <OtherRestriction restriction=""/>: Hành trình không có sẵn do một số hạn chế chưa được liệt kê về việc đặt phòng. Thuộc tính hạn chế không bắt buộc cho phép báo cáo hạn chế dưới dạng văn bản.

Ví dụ

Ví dụ về nhiều cơ sở lưu trú

Ví dụ sau đây xác định một hành trình và giá của hành trình đó cho hai cơ sở lưu trú:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">299.98</Baserate>
    <Tax currency="USD">26.42</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="otto"/>
      <PointOfSale id="simon"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

Ví dụ này không trình bày thông tin chi tiết về phòng, chẳng hạn như nội dung mô tả, hình ảnh và chú thích, tên phòng và sức chứa tối đa của phòng.

Bạn có thể xác định thông tin đó một lần trong Thông báo giao dịch riêng mà Google lưu trữ. Sau đó, bạn có thể tham chiếu thông tin này trong tất cả các lần cập nhật về giá và quỹ phòng tiếp theo. Để biết thêm thông tin, hãy tham khảo mục siêu dữ liệu của Gói dịch vụ phòng.

Ví dụ về nhiều mức giá

Ví dụ sau đây xác định một hành trình và cơ sở lưu trú duy nhất có nhiều mức giá cho nhiều tỷ lệ kín phòng. Bạn có thể sử dụng phần tử <Rates> để đặt nhiều giá cho một cơ sở lưu trú cụ thể. Ví dụ sau đây cũng hữu ích cho các cơ sở lưu trú dạng Nhà nghỉ dưỡng cho thuê (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>

Ví dụ về trường hợp không có sẵn

Ví dụ sau đây xác định một hành trình không thể truy xuất tình trạng phòng trống từ các kênh truyền dẫn xuống, một hành trình thứ hai có số đêm lưu trú dưới mức tối thiểu và đã được đặt trước cho những ngày đã chỉ định, và một hành trình thứ ba có cơ sở lưu trú đóng cửa vào ngày đến nhưng mở cửa trong thời gian lưu trú:

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

Vùng chứa một hoặc nhiều khối <Rate>. Mỗi <Rate> trong <Rates> xác định một mức giá cho tổ hợp phòng hoặc hành trình.

Chỉ sử dụng phần tử <Rates> khi cùng một tổ hợp phòng hoặc hành trình có nhiều mức giá. Ví dụ: bạn xác định nhiều mức giá liên quan đến giá phòng có điều kiện, mức giá ưu đãi chọn lọc hoặc giá phòng có điều kiện trong Gói dịch vụ phòng.

Phần tử <Rates> xuất hiện ở vị trí sau đây trong hệ thống phân cấp của Thông báo giao dịch viết bằng XML:

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

Giá trị được thiết lập trong <Rate> sẽ thay thế giá trị liên quan đến giá trên phần tử mẹ <Result> hoặc <RoomBundle>. Nếu không được thiết lập trong phần tử <Rate>, các giá trị này sẽ lấy giá trị của phần tử mẹ. Chỉ <AllowablePointsofSale> được kế thừa cho phần tử <RoomBundle>.

Cú pháp

Phần tử <Rates> sử dụng cú pháp sau:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    <Rates>
      <Rate rate_rule_id="rate_rule_id">
        <Baserate currency="currency_code">price</Baserate>
        <Tax currency="currency_code">tax_amount</Tax>
        <OtherFees currency="currency_code">fee_amount</OtherFees>
        <ExpirationTime>expiration_time</ExpirationTime>
        <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
        <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
        <AllowablePointsOfSale>
          <PointOfSale id="landing_page_identifier"/>
        </AllowablePointsOfSale>
        <Occupancy>max_number_of_intended_occupants</Occupancy>
        <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
          ...
        <Custom[1-5]>custom_value</Custom[1-5]>
      </Rate>
      ...
    </Rates>
  </Result>
  ...
</Transaction>

Thuộc tính

Phần tử <Rates> có các thuộc tính như sau:

Thuộc tính Bắt buộc? Mô tả
rate_rule_id Optional Đối với giá phòng có điều kiện, mã này sẽ so khớp giá với định nghĩa trong tệp Định nghĩa quy tắc giá. Giới hạn ký tự cho trường này là 40 ký tự.

Phần tử con

Phần tử <Rates> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<AllowablePointsOfSale> Optional Object Một hoặc nhiều trang đích đủ điều kiện cho khách sạn. Phần tử này sử dụng cú pháp giống như <AllowablePointsOfSale> trên <Result>.
<Baserate> Required float Giá phòng cho lần lưu trú. Phần tử này sử dụng cú pháp giống như <Baserate> trên <Result>.

Lưu ý: Bạn không thể đặt giá trị là không có sẵn cho phần tử con <Baserate> trong <Rate>.

<ChargeCurrency> Optional enum Thời gian và địa điểm mà người dùng thanh toán cho yêu cầu đặt phòng. Phần tử này sử dụng cú pháp giống như <ChargeCurrency> trong <Result>.
<Custom[1‑5]> Optional string Trường tuỳ chỉnh mà bạn có thể sử dụng để chuyển dữ liệu bổ sung liên kết với khách sạn vào trang đích. Phần tử này sử dụng cú pháp giống như <Custom[1‑5]> trong <Result>. Mỗi trường tuỳ chỉnh có giới hạn là 200 ký tự. Để biết thêm thông tin, hãy tham khảo tệp trang đích.

Nếu các phần tử <Tuỳ chỉnh> được cung cấp trong phần tử <Result>, thì các phần tử này sẽ không được kế thừa trong phần tử <RoomBundle> và phải được xác định riêng cho từng <RoomBundle> hoặc có thể được đưa vào <PackageData> nếu cần.

<ExpirationTime> Optional DateTime Ngày và giờ mà giá được xem là hết hạn. Phần tử này sử dụng cú pháp giống như <ExpirationTime> trong <Result>.
<Occupancy> Optional integer

Chỉ định số người lưu trú tối đa được phép cho mức giá này. Nếu bạn không chỉ định, giá trị này sẽ được giả định là giống với giá gốc. <Occupancy> có thể đi kèm với <OccupancyDetails> – phần tử quy định loại khách (người lớn hoặc trẻ em). Hãy tham khảo <OccupancyDetails> để biết cú pháp và nội dung mô tả về các phần tử con.

<OtherFees> Required float Các khoản phí khác ngoài giá cơ sở và các loại thuế có ảnh hưởng đến giá sau cùng của phòng. Phần tử này sử dụng cú pháp giống như <OtherFees> trong <Result>.

Nếu thuộc tính "all_inclusive" của phần tử <Baserate> được đặt rõ ràng thành true, thì bạn không bắt buộc phải đặt giá trị này.

<Refundable> Optional Object Cho phép niêm yết giá dịch vụ là có thể hoàn tiền đầy đủ hoặc miễn phí huỷ đặt phòng. Nếu bạn không cung cấp thông tin về vấn đề hoàn tiền thì sẽ không có thông tin nào được hiển thị. Chính sách hoàn tiền ở cấp <PackageData> sẽ thay thế chính sách hoàn tiền ở cấp <Result>. Chính sách hoàn tiền ở cấp <Rates> sẽ thay thế chính sách hoàn tiền ở cấp <PackageData>. Bạn cũng có thể làm nổi bật chính sách cho phép hoàn tiền cho người dùng thấy bằng các phương án thay thế mà không cần trực tiếp sửa đổi giản đồ thông báo giao dịch. Tìm hiểu thêm về các lựa chọn này trong Chính sách về giá phòng có thể hoàn tiền.

Ví dụ sau đây cho thấy phần tử <Refundable> đã được thiết lập tất cả các thuộc tính:

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

Lưu ý: Bạn nên thiết lập tất cả các thuộc tính. Thông báo cảnh báo trạng thái của nguồn cấp dữ liệu được tạo khi bạn không thiết lập một hoặc nhiều thuộc tính.

Nếu bạn không thiết lập thuộc tính thì giá sẽ không hiển thị dưới dạng có thể hoàn lại. Các thuộc tính đó bao gồm:

  • available: (Bắt buộc) Đặt thành 1 (hoặc true) để cho biết rằng bạn cho phép hoàn tiền toàn bộ; nếu không, hãy thiết lập thành 0 (hoặc false).
  • refundable_until_days: (Bắt buộc nếu availabletrue) Chỉ định số ngày trước khi nhận phòng mà người dùng có thể yêu cầu hoàn tiền toàn bộ. Giá trị của refundable_until_days phải là số nguyên từ 0 đến 330.
  • refundable_until_time: (Rất nên áp dụng nếu availabletrue) Chỉ định thời gian mới nhất trong ngày theo giờ địa phương của khách sạn mà tại thời điểm đó, yêu cầu hoàn tiền đầy đủ sẽ được chấp nhận. Bạn có thể kết hợp thuộc tính này với refundable_until_days để xác định. Ví dụ: "được phép hoàn tiền đến 4 giờ chiều hai ngày trước khi nhận phòng". Nếu bạn không đặt refundable_until_time thì giá trị mặc định là nửa đêm.

    Giá trị của thuộc tính này sử dụng định dạng Thời gian.

Khi bạn thiết lập thuộc tính, hãy lưu ý những điều sau:

  • Nếu bạn không đặt available hoặc refundable_until_days, thì giá sẽ không xuất hiện dưới dạng có thể hoàn tiền.
  • Nếu available0 (hoặc false) thì các thuộc tính khác sẽ bị bỏ qua. Giá sẽ không hiển thị dưới dạng có thể hoàn lại ngay cả khi bạn đã thiết lập một trong hai hoặc cả hai thuộc tính còn lại.
<Tax> Required float Thuế được tính cho giá sau cùng của phòng. Phần tử này sử dụng cú pháp giống như <Tax> trong <Result>.

Ví dụ

Giá cơ bản và giá phòng có điều kiện

Ví dụ sau đây thể hiện một thông báo Giao dịch chứa giá cơ bản và giá phòng có điều kiện:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using conditional rates -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for conditional rates -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Nhiều mức giá phòng có điều kiện

Ví dụ sau đây xác định giá cơ sở và nhiều mức giá phòng có điều kiện trong <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>2</Nights>
    <!-- When Google receives new room bundle information for an itinerary, all
    previous room bundle pricing is dropped from Google's cache. Thus, if you
    want to delete a specific room bundle from Google's cache, you may do so
    by simply not providing that specific room bundle in subsequent transaction
    messages. -->
    <RoomBundle>
     ...
      <!-- RoomID is required, PackageID is recommended. -->
      <RoomID>5</RoomID>
      <PackageID>ABC</PackageID>
      <!-- Baserate is required. -->
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>

      <!-- RatePlanID is optional and represents the unique identifier for a
      room and package data combination. We strongly recommend using RatePlanID
      as a variable to build your dynamic landing page (formerly Point of Sale)
      URL. For details, see Using Variables and Conditions. -->
      <RatePlanID>5-ABC</RatePlanID>

      <!-- Occupancy is mandatory for RoomBundle elements. -->
      <!-- Elements below will get inherited to nested rate elements. -->
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
      </OccupancyDetails>
      <InternetIncluded>1</InternetIncluded>


      <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <!-- Neither rate overrides Custom2. -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides ChargeCurrency from roombundle. -->
          <ChargeCurrency>hotel</ChargeCurrency>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode321</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode432</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<RoomBundle>

Xác định giá và tình trạng phòng cho Gói dịch vụ phòng dưới dạng phần tử con của <Result> trong thông báo <Transaction>. Hãy xác định một phần tử riêng cho mỗi tổ hợp gói hoặc hành trình. Để xác định gói dịch vụ và điều khoản của Gói dịch vụ phòng, hãy sử dụng <RoomData>.

Phần tử <RoomBundle> xuất hiện ở vị trí sau đây trong hệ thống phân cấp của Thông báo giao dịch viết bằng XML:

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

Để biết thêm thông tin, hãy tham khảo bài viết Sử dụng gói dịch vụ phòng.

Cú pháp

Phần tử <RoomBundle> sử dụng cú pháp sau:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    ...
    <RoomBundle>
      <!-- Required unless specified inline under <RoomData> -->
      <RoomID>room_ID</RoomID>
      <!-- Required  <PackageData> -->
      <PackageID>package_ID</PackageID>

      <!-- Required -->
      <Baserate currency="currency_code">price</Baserate>
      <!-- Required -->
      <Tax currency="currency_code">taxes</Tax>
      <!-- Required -->
      <OtherFees currency="currency_code">other_fees</OtherFees>

      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <!-- Required -->
      <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>

      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>

      <RatePlanID>rate_plan_ID</RatePlanID>

      <Rates>...</Rates>

      <Custom1>custom_value_1</Custom1>
      <Custom2>custom_value_2</Custom2>
      <Custom3>custom_value_3</Custom3>
      <Custom4>custom_value_4</Custom4>
      <Custom5>custom_value_5</Custom5>
    </RoomBundle>
    ...
  </Result>
</Transaction>

Thuộc tính

Phần tử <RoomBundle> không có thuộc tính nào.

Phần tử con

Phần tử <RoomBundle> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<Baserate> Required float Xác định giá của Gói dịch vụ phòng cho lần lưu trú. Phần tử này sử dụng cú pháp giống như <Baserate> trong <Result>, ngoại trừ trường hợp ngoại lệ sau:
  • Khi không thể sử dụng phòng cho hành trình, hãy xoá phần tử <RoomBundle> để cho biết rằng phòng không còn trong quỹ phòng. Để biết thêm thông tin, hãy tham khảo bài viết Xoá Gói dịch vụ phòng.
<BreakfastIncluded> Optional boolean Chỉ định xem Gói dịch vụ phòng này có bao gồm bữa sáng kèm theo giá không.
<ChargeCurrency> Optional enum Thời gian và địa điểm mà người dùng thanh toán cho yêu cầu đặt phòng. Phần tử này sử dụng cú pháp giống như <ChargeCurrency> trong <Result>.

Giá trị mặc định là web.

<Custom[1‑5]> Optional string Trường tuỳ chỉnh để chuyển dữ liệu bổ sung đến các trang đích cho Gói dịch vụ phòng. Các phần tử này sử dụng cú pháp giống như <Custom[1-5]> trong <Result>. Mỗi trường tuỳ chỉnh có giới hạn là 200 ký tự. Để biết thêm thông tin, hãy tham khảo tệp trang đích. Biến tuỳ chỉnh chỉ được liệt kê khi bạn gửi giá trong thông báo Giao dịch.

Nếu các phần tử <Tuỳ chỉnh> được cung cấp trong phần tử <Result>, thì các phần tử này sẽ không được kế thừa trong phần tử <RoomBundle> và phải được xác định riêng cho từng <RoomBundle> hoặc có thể được đưa vào <PackageData> nếu cần.

<InternetIncluded> Optional boolean Dùng khi Gói dịch vụ phòng bao gồm cả quyền truy cập Internet miễn phí, trong khi các gói dịch vụ khác thì không có tiện nghi đó. Đừng đặt phần tử này cho Gói dịch vụ phòng của những khách sạn cung cấp Internet miễn phí cho tất cả các phòng. Phần tử này không áp dụng cho dịch vụ Internet có dây trong phòng hoặc dịch vụ Internet không dây không có trong phòng khách.
<Occupancy> Required integer Chỉ định số người lưu trú tối đa được phép cho mức giá này. Ví dụ: phòng suite lớn có thể chứa được 6 khách trên thực tế, nhưng "Gói tuần trăng mật" chỉ cho phép 2 khách.

Giá trị này phải nhỏ hơn hoặc bằng <Capacity> – số người mà phòng có thể chứa được trên thực tế.

Khi xác định số người lưu trú trong URL trang đích, hãy sử dụng biến NUM-ADULTSNUM-CHILDREN, như được mô tả trong bài viết Sử dụng biến và điều kiện. Giá trị mặc định là 2 người lớn và 0 trẻ em.

Giá trị của <Occupancy> phải là số nguyên dương từ 1 đến 99.

Lưu ý:

  • Bạn nên sử dụng <Occupancy> cho <RoomBundle> để được gắn cờ là bắt buộc và nếu bỏ qua sẽ gửi lỗi 1097.
  • <Occupancy> đến từ đối tượng dữ liệu theo thứ tự này: <RoomBundle>, <PackageData>, sau đó là = <RoomData>. Nếu không có giá trị nào trong số này, giá trị mặc định sẽ là 2.
  • <Occupancy> có thể đi kèm với <OccupancyDetails> – phần tử quy định loại khách (người lớn hoặc trẻ em). Nếu bạn không chỉ định loại khách, thì họ được giả định là người lớn. Hãy tham khảo cú pháp và nội dung mô tả về các phần tử con trong mục nói về phần tử <OccupancyDetails>.
  • Khi bạn đặt <Occupancy> trong cả <RoomBundle><PackageData>, giá trị trong <RoomBundle> sẽ được ưu tiên.
<OtherFees> Required float Các khoản phí khác ngoài giá cơ sở và các loại thuế có ảnh hưởng đến giá sau cùng của phòng. Phần tử <OtherFees> có một thuộc tính bắt buộc là currency. Thuộc tính này giúp xác định mã đơn vị tiền tệ gồm ba chữ cái cho các khoản phí. Ví dụ: sử dụng USD cho đô la Mỹ.
<PackageID> Optional (recommended) string Mã nhận dạng duy nhất của dữ liệu gói. Sử dụng mã này để so khớp dữ liệu Gói dịch vụ phòng với dữ liệu gửi trong <PackageData>. Để biết thêm thông tin, hãy tham khảo mục siêu dữ liệu của Gói dịch vụ phòng. (Bạn cũng có thể sử dụng mã này để tham chiếu định nghĩa chung về Gói dịch vụ phòng được sử dụng trong một Thông báo giao dịch duy nhất khi xác định trực tiếp dữ liệu Gói dịch vụ phòng).
<ParkingIncluded> Optional boolean Xác định có phải Gói dịch vụ phòng bao gồm cả chỗ đỗ xe miễn phí không. Nếu không, bãi đỗ xe tại khách sạn sẽ là dịch vụ có tính phí. Đừng chỉ định một giá trị cho phần tử này đối với khách sạn cung cấp chỗ đỗ xe miễn phí.

Các giá trị hợp lệ là 0 (hoặc false) và 1 (hoặc true). Giá trị mặc định là false.

<RatePlanID> Optional string Mã gói giá đại diện cho giá trị nhận dạng duy nhất của tổ hợp phòng và gói dịch vụ. Ví dụ: Khi có giá trị <RoomID> là 5 và giá trị <PackageID> là ABC, bạn có thể sử dụng giá trị 5-ABC cho <RatePlanID>. Bạn nên dùng RatePlanID làm biến để tạo URL cho trang đích động (trước kia gọi là Điểm bán hàng).

Để biết thêm thông tin, hãy tham khảo bài viết Sử dụng biến và điều kiện.

<Rates> Optional <Rates> Giá ghi đè giá mặc định cho Gói dịch vụ phòng này. Phần tử này sử dụng cú pháp giống như <Rates> trong <Result>.
<Refundable> Optional Object Cho phép niêm yết giá dịch vụ là có thể hoàn tiền đầy đủ hoặc miễn phí huỷ đặt phòng. Nếu bạn không cung cấp thông tin về vấn đề hoàn tiền thì sẽ không có thông tin nào được hiển thị. Chính sách hoàn tiền ở cấp <PackageData> sẽ thay thế chính sách hoàn tiền ở cấp <Result>. Chính sách hoàn tiền ở cấp <Rates> sẽ thay thế chính sách hoàn tiền ở cấp <PackageData>. Bạn cũng có thể làm nổi bật chính sách cho phép hoàn tiền cho người dùng thấy bằng các phương án thay thế mà không cần trực tiếp sửa đổi giản đồ thông báo giao dịch. Tìm hiểu thêm về các lựa chọn này trong Chính sách về giá phòng có thể hoàn tiền.

Ví dụ sau đây cho thấy phần tử <Refundable> đã được thiết lập tất cả các thuộc tính:

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

Lưu ý: Bạn nên thiết lập tất cả các thuộc tính. Hệ thống sẽ gửi cảnh báo về trạng thái của nguồn cấp dữ liệu khi bạn không thiết lập một hoặc nhiều thuộc tính.

Nếu bạn không thiết lập thuộc tính thì giá sẽ không xuất hiện dưới dạng có thể hoàn tiền. Các thuộc tính đó bao gồm:

  • available: (Bắt buộc) Đặt thành 1 (hoặc true) để cho biết rằng bạn cho phép hoàn tiền toàn bộ; nếu không, hãy thiết lập thành 0 (hoặc false).
  • refundable_until_days: (Bắt buộc nếu availabletrue) Chỉ định số ngày trước khi nhận phòng mà người dùng có thể yêu cầu hoàn tiền toàn bộ. Giá trị của refundable_until_days phải là số nguyên từ 0 đến 330.
  • refundable_until_time: (Rất nên áp dụng nếu availabletrue) Chỉ định thời gian mới nhất trong ngày theo giờ địa phương của khách sạn mà tại thời điểm đó, yêu cầu hoàn tiền đầy đủ sẽ được chấp nhận. Bạn có thể kết hợp thuộc tính này với refundable_until_days để xác định. Ví dụ: "được phép hoàn tiền đến 4 giờ chiều hai ngày trước khi nhận phòng". Nếu bạn không đặt refundable_until_time thì giá trị mặc định là nửa đêm.

    Giá trị của thuộc tính này sử dụng định dạng Thời gian.

Khi bạn thiết lập thuộc tính, hãy lưu ý những điều sau:

  • Nếu bạn không đặt available hoặc refundable_until_days thì giá sẽ không hiển thị dưới dạng có thể hoàn lại.
  • Nếu available0 (hoặc false) thì các thuộc tính khác sẽ bị bỏ qua. Giá sẽ không hiển thị dưới dạng có thể hoàn lại ngay cả khi bạn đã thiết lập một trong hai hoặc cả hai thuộc tính còn lại.
<RoomID> Required string Mã nhận dạng duy nhất của dữ liệu phòng. Sử dụng mã này để so khớp dữ liệu Gói dịch vụ phòng với dữ liệu mà bạn gửi trong <RoomData>. Để biết thêm thông tin, hãy tham khảo mục siêu dữ liệu của Gói dịch vụ phòng. (Bạn cũng có thể sử dụng mã này để tham chiếu định nghĩa phòng chung trong một Thông báo giao dịch duy nhất khi xác định trực tiếp dữ liệu phòng).
<Tax> Required float Thuế được tính cho giá sau cùng của phòng. Phần tử <Tax> có một thuộc tính bắt buộc là currency. Thuộc tính này giúp xác định mã đơn vị tiền tệ gồm ba chữ cái cho các khoản thuế. Ví dụ: sử dụng USD cho đô la Mỹ.

Ví dụ

Gói cho một người

Ví dụ sau đây xác định nội dung phản hồi có một gói dịch vụ lưu trú duy nhất. Khi người dùng chọn 1 trong Công cụ chọn phòng theo sức chứa, Google sẽ cho người dùng xem giá đủ điều kiện thấp nhất bất kể sức chứa.

Nếu không có giá phòng một người, thì Google sẽ cung cấp giá phòng hai người thấp nhất. Xin lưu ý rằng giá phòng một người sẽ không được truy vấn trực tiếp nếu trong bộ nhớ đệm đã lưu giá phòng hai người trở lên của một hành trình.

Ví dụ này tham chiếu siêu dữ liệu xác định sẵn về phòng và gói dịch vụ, trong đó có các phần tử <RoomID><PackageID>. Hãy sử dụng các phần tử <RoomData><PackageData> để xác định thông tin đó.

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


Số người lưu trú từ 2 người trở lên

Ví dụ sau đây xác định nội dung phản hồi chứa thông tin về số người lưu trú từ 2 người trở lên.

Ví dụ này tham chiếu siêu dữ liệu xác định sẵn về phòng và gói dịch vụ, trong đó có các phần tử <RoomID><PackageID>. Hãy sử dụng các phần tử <RoomData><PackageData> để xác định thông tin đó.

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


Nhiều gói dịch vụ phòng

Ví dụ sau đây thiết lập Sức chứa trong nhiều Gói dịch vụ phòng để minh hoạ các mức giá phòng nhà nghỉ có thể đưa ra.

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

Nhiều mức giá phòng có điều kiện

Ví dụ sau đây xác định giá cơ sở và nhiều mức giá phòng có điều kiện trong <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>2</Nights>
    <!-- When Google receives new room bundle information for an itinerary, all
    previous room bundle pricing is dropped from Google's cache. Thus, if you
    want to delete a specific room bundle from Google's cache, you may do so
    by simply not providing that specific room bundle in subsequent transaction
    messages. -->
    <RoomBundle>
     ...
      <!-- RoomID is required, PackageID is recommended. -->
      <RoomID>5</RoomID>
      <PackageID>ABC</PackageID>
      <!-- Baserate is required. -->
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>

      <!-- RatePlanID is optional and represents the unique identifier for a
      room and package data combination. We strongly recommend using RatePlanID
      as a variable to build your dynamic landing page (formerly Point of Sale)
      URL. For details, see Using Variables and Conditions. -->
      <RatePlanID>5-ABC</RatePlanID>

      <!-- Occupancy is mandatory for RoomBundle elements. -->
      <!-- Elements below will get inherited to nested rate elements. -->
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
      </OccupancyDetails>
      <InternetIncluded>1</InternetIncluded>


      <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <!-- Neither rate overrides Custom2. -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides ChargeCurrency from roombundle. -->
          <ChargeCurrency>hotel</ChargeCurrency>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode321</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode432</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<OccupancyDetails>

<Occupancy> trong thông báo giao dịch chỉ định số lượng khách tối đa cho một phòng hoặc một gói dịch vụ. <OccupancyDetails> có thể chứa thông tin bổ sung như số lượng và loại khách (người lớn hoặc trẻ em).

Khi <Occupancy><OccupancyDetails> xuất hiện trong phần tử <Rates> của <Result> hoặc <RoomBundle> thì có nghĩa là tỷ lệ này bị hạn chế do thông tin về sức chứa.

Cú pháp

Khi <OccupancyDetails> xuất hiện, nó luôn đứng trước <Occupancy>. Hãy lưu ý cú pháp sau:

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

Phần tử con

Phần tử <OccupancyDetails> có các phần tử con sau:

Phần tử con Bắt buộc? Loại Mô tả
<NumAdults> Required integer Số lượng khách là người lớn. Tối thiểu:1, Tối đa:20.
<Children> Optional Object Vùng chứa một hoặc nhiều phần tử <Child>.
<Child age> Optional integer Độ tuổi tối đa của phần tử con này, ví dụ: <Child age="17">.

Ví dụ

Các ví dụ sau đây cho thấy cách <OccupancyDetails> có thể xuất hiện trong <Results>, <RoomBundle> hoặc phần tử con <Rates>.

Phản hồi kết quả

Ví dụ sau đây xác định một hành trình và giá của hành trình đó cho một cơ sở lưu trú để phản hồi Truy vấn giá hiện tại trong đó người dùng đã chỉ định số lượng và loại khách. Trong trường hợp này, <OccupancyDetails> gồm 2 người lớn và một trẻ em sẽ được trả về trong <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>

Phản hồi về giá

Ví dụ sau đây xác định một hành trình và giá của hành trình đó cho 1 người lớn và 1 trẻ em. Trong trường hợp này, <OccupancyDetails> sẽ được trả về trong phần tử <Rates> của <Result>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2018-04-18T11:27:45-04:00">
  <Result>
    <Property>8251</Property>
    <Checkin>2018-06-20</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">62.18</Baserate>
    <Tax currency="USD">2.45</Tax>
    <OtherFees currency="USD">0.00</OtherFees>
    <Rates>
      <Rate rate_rule_id="rule-951">
        <Occupancy>2</Occupancy>
        <OccupancyDetails>
          <NumAdults>1</NumAdults>
          <Children>
            <Child age="17"/>
          </Children>
        </OccupancyDetails>
        <Baserate currency="USD">42.61</Baserate>
        <Tax currency="USD">5.70</Tax>
        <OtherFees currency="USD">0.00</OtherFees>
        <Custom1>abc4</Custom1>
        <AllowablePointsOfSale>
          <PointOfSale id="yourhotelpartnersite.com"/>
        </AllowablePointsOfSale>
      </Rate>
    </Rates>
  </Result>
</Transaction>

Gói dịch vụ phòng

Ví dụ sau đây xác định sức chứa là 2 người lớn và 1 trẻ em cho hai đêm, giá phòng thuộc loại có thể được hoàn tiền. Trong trường hợp này, <OccupancyDetails> xuất hiện trong <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>

Nhiều gói dịch vụ phòng

Ví dụ sau đây xác định nhiều mức giá <RoomBundle> bị giới hạn theo điều kiện sức chứa là 2 người lớn và 2 trẻ em. Trong trường hợp này, <OccupancyDetails> xuất hiện trong phần tử <Rates> của <RoomBundle>.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">275.00</Baserate>
    <Tax currency="USD">27.50</Tax>
    <OtherFees currency="USD">0</OtherFees>
    <RoomBundle>
      <RoomID>5</RoomID>
      <PackageID>STD</PackageID>
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">0</OtherFees>
      <InternetIncluded>1</InternetIncluded>
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <Custom2>ratebasic</Custom2>
      <Occupancy>4</Occupancy>
      <OccupancyDetails>
          <NumAdults>2</NumAdults>
          <Children>
              <Child age="17"/>
              <Child age="17"/>
          </Children>
      </OccupancyDetails>
      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <ChargeCurrency>hotel</ChargeCurrency>
          <Custom1>ratecode321</Custom1>
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <Custom1>ratecode432</Custom1>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>