Giao dịch (Dữ liệu cơ sở lưu trú)

Yêu cầu

Cú pháp

Thông báo Transaction (Property Data) sử dụng cú pháp sau:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp"
             id="message_ID"
             partner="partner_key">
  <PropertyDataSet action="[overlay|delta]">
    <!-- (Required) ID that matches the Hotel List Feed -->
    <Property>HotelID</Property>
    <RoomData>
      <!-- (Required) One room ID per RoomData element -->
      <RoomID>RoomID</RoomID>
      <Name>
        <Text text="room_name" language="language_code"/>
      </Name>
      <Description>
        <Text text="room_description" language="language_code"/>
      </Description>
      <!-- (Optional) Restricts the rate plans allowed for this room type to
        those listed here. If specified, don't specify AllowableRoomIDs. -->
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID</AllowablePackageID>
      </AllowablePackageIDs>
      <Capacity>max_number_of_occupants</Capacity>
      <AdultCapacity>max_number_of_adult_occupants</AdultCapacity>
      <ChildCapacity>max_number_of_child_occupants</ChildCapacity>
      <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>
        <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle>
        <Beds>
           <Bed size="[single|semi_double|double|queen|king]">
             <Width unit="cm" number="bed_width"/>
             <Length unit="cm" number="bed_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>
    <PackageData>
      <!-- (Required) One package ID per PackageData element -->
      <PackageID>PackageID</PackageID>
      <Name>
        <Text text="package_name" language="language_code"/>
      </Name>
      <Description>
        <Text text="package_description" language="language_code"/>
      </Description>
      <!-- (Optional) Restricts the room types allowed for this rate plan to
        those listed here. If specified, don't specify AllowablePackageIDs. -->
      <AllowableRoomIDs>
        <AllowableRoomID>RoomID</AllowableRoomID>
      </AllowableRoomIDs>
      <!-- Add Loyalty point information -->
      <MilesIncluded>
        <LoyaltyCampaignID>campaign-ID</LoyaltyCampaignID>
        <!-- (Optional) Use <NumberOfMiles> if the rate plan earns fixed loyalty rewards-->
        <NumberOfMiles>integer</NumberOfMiles>
      </MilesIncluded>
      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <!-- 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>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Phần tử và thuộc tính

Thông báo Giao dịch (Dữ liệu của cơ sở lưu trú) có các phần tử và thuộc tính sau:

Phần tử / @Thuộc tính Số lần xuất hiện Loại Mô tả
Transaction 1 Complex element Trong một lần triển khai ARI, đây là phần tử gốc của thông báo xác định loại phòng và gói dịch vụ cho một cơ sở lưu trú.
Transaction / @timestamp 1 DateTime Ngày và giờ tạo thông báo này.
Transaction / @id 1 string Giá trị nhận dạng duy nhất cho thông báo yêu cầu này. Giá trị này được trả về trong thông báo phản hồi. Các ký tự được phép sử dụng là a – z, A – Z, 0 – 9, _ (dấu gạch dưới) và - (dấu gạch nối).
Transaction / @partner 1 string Tài khoản đối tác dùng cho thông báo này. 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.

Lưu ý: Nếu bạn có một phần phụ trợ cung cấp nguồn cấp dữ liệu cho nhiều tài khoản, thì giá trị này cần phải khớp với giá trị của thuộc tính ID được chỉ định trong phần tử <RequestorID> của thông báo <OTA_HotelRateAmountNotifRQ><OTA_HotelAvailNotifRQ> cho cùng một tài khoản.

Transaction / PropertyDataSet 1.. PropertyDataSet Vùng chứa xác định loại phòng và gói dịch vụ cho một cơ sở lưu trú.

Bạn nên chỉ gửi <PropertyDataSet> một lần và chỉ cập nhật khi cần sửa đổi.

Transaction / PropertyDataSet / @action 0..1 enum

Loại nội dung cập nhật được áp dụng cho định nghĩa về giá phòng.

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

  • overlay : Thay thế tất cả <RoomData><PackageData> đã được xác định trước đó của cơ sở lưu trú. Chỉ có <RoomData><PackageData> trong thông báo hiện tại hợp lệ.
  • delta : Bổ sung <RoomData><PackageData> chưa được xác định trước đó hoặc chỉnh sửa các phần tử đã có.

Thuộc tính này không bắt buộc và mặc định sẽ được đặt là delta nếu không xác định.

Transaction / PropertyDataSet / Property 1 string Giá trị nhận dạng duy nhất của cơ sở lưu trú. Giá trị này phải khớp với Mã khách sạn được chỉ định bằng phần tử <id> trong phần tử <listing> của Nguồn cấp dữ liệu danh sách khách sạn. Mã khách sạn cũng có trong Hotel Center.
Transaction / PropertyDataSet / RoomData 0..n RoomData

Mô tả một phòng.

Lưu ý: Bạn phải cung cấp ít nhất một trong <RoomData> hoặc <PackageData>.

Transaction / PropertyDataSet / RoomData / RoomID 1 RoomID Giá trị nhận dạng riêng biệt cho một loại phòng. Giá trị này được tham chiếu bằng cách sử dụng thuộc tính InvTypeCode trong phần tử <StatusApplicationControl> của các thông báo <OTA_HotelAvailNotifRQ>, <OTA_HotelRateAmountNotifRQ><OTA_HotelInvCountNotifRQ>.
Transaction / PropertyDataSet / RoomData / Name 1 Name Vùng chứa tên của danh mục phòng bằng một hoặc nhiều ngôn ngữ.
Transaction / PropertyDataSet / RoomData / Name / Text 1..n Text Xác định tên của danh mục phòng bằng một ngôn ngữ.
Transaction / PropertyDataSet / RoomData / Name / Text / @text 1..n string Tên của danh mục phòng bằng ngôn ngữ do thuộc tính language xác định.
Transaction / PropertyDataSet / RoomData / Description 1 Name Vùng chứa thông tin mô tả của danh mục phòng bằng một hoặc nhiều ngôn ngữ.
Transaction / PropertyDataSet / RoomData / Description / Text 1..n Text Xác định thông tin mô tả của danh mục phòng bằng một ngôn ngữ.
Transaction / PropertyDataSet / RoomData / Description / Text / @text 1..n string Thông tin mô tả của danh mục phòng bằng ngôn ngữ do thuộc tính language xác định.
Transaction / PropertyDataSet / RoomData / Description / Text / @language 1..n string Mã ngôn ngữ gồm hai chữ cái.
Transaction / PropertyDataSet / RoomData / AllowablePackageIDs 0..1 AllowablePackageIDs Vùng chứa các phần tử <AllowablePackageID>.

Nếu <AllowablePackageIDs> được chỉ định, loại phòng do <RoomID> trong phần tử mẹ <RoomData> xác định chỉ có thể kết hợp được với các gói giá do phần tử <AllowablePackageID> xác định.

Nếu không xác định <AllowablePackageIDs>, loại phòng mà <RoomID> trong phần tử mẹ <RoomData> xác định có thể kết hợp được với mọi gói giá.

Hãy sử dụng <AllowablePackageIDs> hoặc <AllowableRoomIDs>, nhưng không được sử dụng cả hai.

Transaction / PropertyDataSet / RoomData / AllowablePackageIDs / AllowablePackageID 1..n AllowablePackageID Xác định PackageID của một gói giá có thể kết hợp được với loại phòng này. Gói giá được xác định là tổng hợp các gói dịch vụ, đơn giá và tình trạng phòng. PackageID tương ứng với RatePlanCode trong các thông báo OTA_HotelRateAmountNotifRQ và OTA_HotelAvailNotifRQ.
Transaction / PropertyDataSet / RoomData / Capacity 0..1 integer Số lượng người lớn và trẻ em tối đa mà một phòng có thể chứa được trên thực tế. Giá trị này phải lớn hơn hoặc bằng mọi giá trị NumberOfGuests mà bạn gửi cùng với giá.

Giá trị của <Capacity> phải là số nguyên dương từ 1 đến 99. Hãy xem ví dụ tại đây.

Lưu ý: Nếu bạn không đặt <Capacity>, thì số lượng người cư trú được phép sẽ được coi là không giới hạn. Nếu bạn không đặt trường này và xác định ExtraGuestCharges hoặc AdditionalGuestAmounts, thì giá có thể được tạo cho bất kỳ số lượng người lưu trú nào. Bạn nên đặt <Capacity> nếu ExtraGuestCharges hoặc AdditionalGuestAmounts được xác định để đảm bảo rằng giá không hiển thị cho các lựa chọn về số người lưu trú không hợp lệ.

Transaction / PropertyDataSet / RoomData / AdultCapacity 0..1 integer Số lượng người lớn tối đa mà một phòng có thể chứa được trên thực tế. Giá trị này phải lớn hơn hoặc bằng các giá trị NumberOfGuests mà bạn gửi cùng với giá.

Giá trị của <AdultCapacity> phải là số nguyên dương từ 1 đến 99. Hãy xem ví dụ tại đây.

Transaction / PropertyDataSet / RoomData / ChildCapacity 0..1 integer Số lượng trẻ em tối đa mà một phòng có thể chứa được trên thực tế.

Giá trị của <ChildCapacity> phải là số nguyên dương từ 1 đến 99. Hãy xem ví dụ tại đây.

Transaction / PropertyDataSet / RoomData / OccupancySettings 0..1 OccupancySettings Các chế độ cài đặt có thể hạn chế hoặc sửa đổi yêu cầu về số người trong phòng.

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

  • <MinOccupancy>: Số lượng 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 không thể đặt phòng này cho một người.

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

Bạn không cần phải thêm tất cả các phần tử con.

Transaction / PropertyDataSet / RoomData / PhotoURL 0..n PhotoURL 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.

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 (http://).
  • <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.
<PhotoURL>
 <URL>http://www.example.com/image1.jpg</URL>
 <Caption>
  <Text text="A bright way to enjoy your
   mornin' cuppa tea." language="en"/>
  <Text text="Une façon lumineuse pour profiter
   de votre tasse de thé." language="fr"/>
 </Caption>
</PhotoURL>
Transaction / PropertyDataSet / RoomData / RoomFeatures 0..1 <RoomFeatures> Chứa thông tin về các đặc điểm của phòng.
Transaction / PropertyDataSet / RoomData / RoomFeatures / JapaneseHotelRoomStyle 0..1 enum

Cho biết kiểu phòng của một 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ó đệm 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.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Beds 0..1 Object Chứa số lượng <Bed> bằng số lượng có trong phòng. Xin lưu ý rằng bạn không nên tính nệm futon của Nhật Bản vào đây.

Mỗi <Bed> đều 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 đây:
  • <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 bằng số nguyên (đơn vị là 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 có chiều dài của giường bằng số nguyên cm.
Ví dụ:
<Beds>
  <Bed size="double">
    <Width unit="cm" number="140"/>
    <Length unit="cm" number="195"/>
  </Bed>
  <Bed/> <!-- Size unknown -->
</Beds>
Transaction / PropertyDataSet / RoomData / RoomFeatures / Suite 0.. enum Cung cấp phần tử này khi phòng là một căn hộ.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Capsule 0..1 enum Cung cấp phần tử này khi phòng là phòng ngủ dạng khoang.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Roomsharing 0..1 enum Phòng này có được dùng chung với những người khác hay không, chẳng hạn như chủ sở hữu hoặc khách khác. Các giá trị hợp lệ là sharedprivate.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Outdoor 0..1 enum Cung cấp phần tử này khi phòng là nơi lưu trú ngoài trời không có tường cố định, hệ thống ống nước và hệ thống kiểm soát nhiệt độ. 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 dã ngoại của mình đến là chỗ ở ngoài trời.
Transaction / PropertyDataSet / RoomData / RoomFeatures / MobileAccessible 0..1 enum Cung cấp phần tử này khi phòng này có lối đi cho xe lăn.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Smoking 0..1 enum Phòng này 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.
Transaction / PropertyDataSet / RoomData / RoomFeatures / BathAndToilet 0..1 Object Chứa thông tin về nhà 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 bố trí nhà tắm và nhà vệ sinh so với nhau. Các giá trị hợp lệ là together, ví dụ: phòng tắm có cả bồn tắm và nhà vệ sinh trong cùng một phòng; và separate, nơi bồn tắm và nhà vệ sinh có không gian riêng. Bạn 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ể tuỳ ý 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ó bồn 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ó vòi hoa sen. 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 nhà vệ sinh 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ó hỗ trợ người khuyết tật. 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>
Transaction / PropertyDataSet / RoomData / RoomFeatures / OpenAirBath 0..1 enum Cung cấp phần tử này khi phòng có bồn tắm riêng ngoài trời.
Transaction / PropertyDataSet / RoomData / RoomFeatures / AirConditioning 0..1 enum Cung cấp phần tử này khi phòng có máy điều hoà không khí.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Balcony 0..1 enum Cung cấp phần tử này khi phòng có ban công hoặc hiên.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Views 0..1 Object Các lựa 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/>

Transaction / PropertyDataSet / PackageData 0..n PackageData

Vùng chứa các phần tử mô tả những dịch vụ theo đơn giá và điều khoản không thuộc nội dung mô tả của căn phòng thực tế.

Lưu ý: Bạn phải cung cấp ít nhất một trong <RoomData> hoặc <PackageData>.

Transaction / PropertyDataSet / PackageData / PackageID 1 string PackageID trong các thông báo này tương ứng với RatePlanCode trong các thông báo OTA_HotelRateAmountNotifRQ và OTA_HotelAvailNotifRQ.
Transaction / PropertyDataSet / PackageData / Name 1 Name Vùng chứa tên của gói bằng một hoặc nhiều ngôn ngữ.
Transaction / PropertyDataSet / PackageData / Name / Text 1..n Text Xác định tên của gói bằng một ngôn ngữ.
Transaction / PropertyDataSet / PackageData / Name / Text / @text 1..n string Tên của gói dịch vụ bằng ngôn ngữ do thuộc tính language xác định.
Transaction / PropertyDataSet / PackageData / Description 1 Description Vùng chứa nội dung mô tả của gói bằng một hoặc nhiều ngôn ngữ.
Transaction / PropertyDataSet / PackageData / Description / Text 1..n Text Xác định nội dung mô tả của gói dịch vụ bằng một ngôn ngữ.
Transaction / PropertyDataSet / PackageData / Description / Text / @text 1..n string Nội dung mô tả của gói dịch vụ bằng ngôn ngữ do thuộc tính language xác định.
Transaction / PropertyDataSet / PackageData / Description / Text / @language 1..n string Mã ngôn ngữ gồm hai chữ cái.
Transaction / PropertyDataSet / PackageData / AllowableRoomIDs 0..1 AllowableRoomIDs Vùng chứa các phần tử <AllowableRoomID>.

Nếu <AllowableRoomIDs> được chỉ định, gói giá do <PackageID> trong phần tử mẹ <PackageData> xác định chỉ có thể kết hợp được với loại phòng do phần tử <AllowableRoomID> xác định.

Nếu không xác định <AllowableRoomIDs>, thì gói giá do <PackageID> trong phần tử mẹ <PackageData> xác định có thể kết hợp được với mọi loại phòng.

Hãy sử dụng <AllowablePackageIDs> hoặc <AllowableRoomIDs>, nhưng không được sử dụng cả hai.

Transaction / PropertyDataSet / PackageData / AllowableRoomIDs / AllowableRoomID 1..n AllowableRoomID Xác định RoomID của loại phòng có thể kết hợp được với gói giá này. Loại phòng được xác định trong phần tử <RoomData>.
Transaction / PropertyDataSet / PackageData / MilesIncluded 0..1 MilesIncluded Thêm thông tin về điểm khách hàng thân thiết vào các gói dựa trên cách bạn xác định gói hoặc gói giá. Chỉ định phần tử <MilesIncluded> trong phần tử <PackageData> xác định gói giá. <MilesIncluded> có phần tử con sau đây:
  • LoyaltyCampaignID: Một mã nhận dạng duy nhất xác định Chiến dịch khách hàng thân thiết cụ thể đã được định cấu hình và cập nhật bằng Google. Thẻ này thêm điểm khách hàng thân thiết vào giá khách sạn.

    Để thêm phần tử <MilesIncluded>, bạn phải định cấu hình mã chiến dịch trong cấu hình Chiến dịch khách hàng thân thiết. Thông tin chi tiết cụ thể về cách Google sử dụng điểm khách hàng thân thiết trong kết quả được xác định theo cấu hình Chiến dịch khách hàng thân thiết.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
    </MilesIncluded>

    Lưu ý: Trong một số trường hợp hiếm gặp, bạn có thể thêm <NumberOfMiles> vào phần tử <MilesIncluded> để chỉ định rằng kế hoạch luôn nhận được một số điểm cố định, bất kể hành trình. Tìm hiểu thêm về <MilesIncluded> trong <PackageData>.

Transaction / PropertyDataSet / PackageData / Refundable 0..1 Refundable Cho phép niêm yết giá dịch vụ là có thể hoàn tiền đầy đủ hoặc huỷ đặt chỗ. 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ị.

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.

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 thiết lập 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.
Transaction / PropertyDataSet / PackageData / Refundable / @available 1 boolean (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.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_days 0..1 integer (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.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_time 0.. Time (Nên áp dụng nếu availabletrue) Xác đị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.
Transaction / PropertyDataSet / PackageData / BreakfastIncluded 0..1 boolean Xác định loại phòng này có bao gồm bữa sáng 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>.

Transaction / PropertyDataSet / PackageData / CheckinTime 0..1 Time Giờ nhận phòng sớm nhất có thể theo giờ địa phương của khách sạn. Thời gian phải nhỏ hơn 24:00.
Transaction / PropertyDataSet / PackageData / CheckoutTime 0..1 Time Thời gian trả phòng muộn nhất có thể theo giờ địa phương của khách sạn.
Transaction / PropertyDataSet / PackageData / InternetIncluded 0..1 boolean Cho biết phòng có bao gồm quyền truy cập Internet miễn phí hay không, trong khi các phòng khác không có tiện nghi này. Đừng đặt phần tử này trong 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).
Transaction / PropertyDataSet / PackageData / Meals 0..1 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>, trong đó 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ể ăn sáng/tối tại phòng mà 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ể ăn sáng/tối ở một không gian (ngoại trừ phòng mà họ ở) nơi họ có thể tránh tiếp xúc với những 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ụ dưới dạng bữa 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 dùng khi included là true.

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

Transaction / PropertyDataSet / PackageData / ParkingIncluded 0..1 boolean Xác định phòng có bao gồm chỗ đỗ xe miễn phí hay không. Nếu không, bãi đỗ xe tại khách sạn này sẽ là dịch vụ trả 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.
Transaction / PropertyDataSet / PackageData / PhotoURL 0..1 Object (Tương tự như <PhotoURL> trong <RoomData>, nhưng dành cho gói (ví dụ: ảnh bữa ăn).)

Ví dụ

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

Sau đây là ví dụ cơ bản về cách xác định dữ liệu phòng và gói dịch vụ của cơ sở lưu trú trong thông báo Giao dịch (Dữ liệu của cơ sở lưu trú). Thuộc tính overlay được dùng để đảm bảo rằng nếu có dữ liệu tồn tại nhưng chưa được biết đến thì mọi dữ liệu hiện có sẽ bị xoá và thay thế bằng dữ liệu trong thông báo này:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-05-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      <Description>
        <Text text="Room with a king bed" language="en"/>
      </Description>
      <Capacity>2</Capacity>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image.jpg</URL>
        <Caption>
          <Text text="Room with a king bed" language="en"/>
        </Caption>
      </PhotoURL>
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <Name>
        <Text text="Double" language="en"/>
      </Name>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Standard" language="en"/>
      </Name>
      <Description>
        <Text text="Standard rate" language="en"/>
      </Description>
      <MilesIncluded>
        <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      </MilesIncluded>
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>PackageID_2</PackageID>
      <Name>
        <Text text="Free Breakfast" language="en"/>
      </Name>
      <Description>
        <Text text="Free breakfast rate" language="en"/>
      </Description>
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Thêm loại phòng

Sau đây là ví dụ về cách thêm một loại phòng và gói dịch vụ vào dữ liệu <Transaction> hiện có:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <PropertyDataSet action="delta">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_3</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
    <PackageData>
      <PackageID>PackageID_3</PackageID>
      <Name>
        <Text text="Non-Refundable" language="en"/>
      </Name>
      <!-- Additional PackageData child elements omitted. -->
      <Refundable available="false"/>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Xoá loại phòng

Sau đây là ví dụ về cách xoá loại phòng và gói dịch vụ hiện có. Trong trường hợp này, nếu trước đó các thông báo trong "Dữ liệu về phòng và gói" và "Thêm một loại phòng" đã được gửi tới Google, thì các loại phòng KingDouble sẽ không còn tồn tại khi Google nhận được thông báo được hiển thị. Xin lưu ý rằng việc xoá dữ liệu gói sẽ ảnh hưởng đến gói giá tổng thể như được xác định trong các thông báo Giao dịch (Dữ liệu của cơ sở lưu trú), OTA_HotelRateAmountNotifRQ và OTA_HotelAvailNotifRQ (bằng cách tham chiếu cùng một giá trị PackageID), do đó, bạn có thể phải cập nhật tương ứng bằng các loại thông báo khác để phản ánh rằng PackageID_2PackageID_3 không còn được xác định ở đây nữa.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-08-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <!-- Additional RoomData child elements omitted. -->
      <Capacity>2</Capacity>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image.jpg</URL>
        <Caption>
          <Text text="Room with a queen bed" language="en"/>
        </Caption>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Refundable" language="en"/>
      </Name>
      <!-- Additional PackageData child elements omitted. -->
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>


Hạn chế gói giá

Sau đây là ví dụ về cách sử dụng phần tử <AllowablePackageIDs> để hạn chế gói giá cho phép đối với một loại phòng. Trong ví dụ này, loại phòng Queen (RoomID_2) chỉ có thể kết hợp với gói dịch vụ và gói giá được xác định là PackageID_1.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-12-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID_1</AllowablePackageID>
      </AllowablePackageIDs>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Standard" language="en"/>
      </Name>
      <!-- Additional PackageData child elements omitted. -->
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>PackageID_2</PackageID>
      <Name>
        <Text text="Free Breakfast" language="en"/>
      </Name>
      <!-- Additional PackageData child elements omitted. -->
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Hạn chế sức chứa của phòng

Sau đây là ví dụ về cách sử dụng các phần tử <Capacity>, <AdultCapacity>, <ChildCapacity> để đặt hạn chế về sức chứa của phòng.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-12-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="Double" language="en"/>
      </Name>
      <Capacity>4</Capacity>
      <AdultCapacity>4</AdultCapacity>
      <ChildCapacity>3</ChildCapacity>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
  </PropertyDataSet>
</Transaction>

Loại phòng Đôi (RoomID_1) có thể có tổng cộng tối đa 4 khách. Ngoài ra, nhóm gia đình có thể có tối đa 4 người lớn và tối đa 3 trẻ em. Bạn phải đáp ứng cả 3 yêu cầu về sức chứa thì mới có thể đặt phòng này. Cấu hình này đại diện cho một phòng tiêu chuẩn có 2 giường, mỗi giường có thể chứa 2 người. Số lượng trẻ em tối đa ít hơn tổng số người tối đa một người vì phòng phải có ít nhất một người lớn.

Ví dụ mở rộng có <RoomFeatures> và bữa ăn

JapaneseHotelRoomStyle không có giá trị mặc định. Việc bỏ qua một giá trị không gây ra 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 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 theo kiểu western có 2 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 căn phòng kiểu Nhật không có giường. Bạn không cần cung cấp thông tin về giường cho phòng theo 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 kiểu japanese_western có giường 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 japanese_westernphòng, hãy tham khảo 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>


Bữa ăn

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, cũng như 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>

Chỉ có 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>

Phản hồi

Cú pháp

Thông báo TransactionResponse (Property Data) sử dụng cú pháp sau:

<?xml version="1.0" encoding="UTF-8"?>
<TransactionResponse timestamp="timestamp"
                     id="message_ID"
                     partner="partner_key">
  <!-- Either Success or Issues will be populated. -->
  <Success/>
  <Issues>
    <Issue code="issue_code" status="issue_type">issue_description</Issue>
  </Issues>
</TransactionResponse>

Phần tử và thuộc tính

Thông báo TransactionResponse (Property Data) có các phần tử và thuộc tính sau:

Phần tử / @Thuộc tính Số lần xuất hiện Loại Mô tả
TransactionResponse 1 Complex element Phần tử gốc cho biết thông báo yêu cầu Giao dịch nhận được thành công hay gặp lỗi.
TransactionResponse / @timestamp 1 DateTime Ngày và giờ tạo thông báo này.
TransactionResponse / @id 1 string Giá trị nhận dạng duy nhất lấy từ thông báo Giao dịch tương ứng.
TransactionResponse / @partner 1 string Tài khoản đối tác dùng cho thông báo này.
TransactionResponse / Success 0..1 Success Cho biết rằng thông báo Giao dịch đã được xử lý thành công mà không có cảnh báo, lỗi hoặc thất bại.

Mỗi thông báo có <Success> hoặc <Issues>.

TransactionResponse / Issues 0..1 Issues Vùng chứa một hoặc nhiều vấn đề gặp phải trong quá trình xử lý thông báo Giao dịch.

Mỗi thông báo có <Success> hoặc <Issues>.

TransactionResponse / Issues / Issue 1..n Issue Thông tin mô tả về cảnh báo, lỗi hoặc lần xử lý hỏng gặp phải trong quá trình xử lý thông báo Giao dịch. Bạn có thể xem thông tin chi tiết về các lỗi này trong Thông báo lỗi về trạng thái của nguồn cấp dữ liệu.
TransactionResponse / Issues / Issue / @code 1 integer Giá trị nhận dạng của vấn đề.
TransactionResponse / Issues / Issue / @status 1 enum

Loại vấn đề gặp phải.

Các giá trị hợp lệ là warning, errorfailure.

Ví dụ

Thành công

Dưới đây là hồi đáp cho một thông báo Giao dịch được xử lý thành công.

<?xml version="1.0" encoding="UTF-8"?>
<TransactionResponse timestamp="2020-05-18T16:20:00-04:00"
                     id="12345678"
                     partner="partner_key">
  <Success/>
</TransactionResponse>

Vấn đề

Dưới đây là hồi đáp cho thông báo Giao dịch không được xử lý do gặp lỗi.

<?xml version="1.0" encoding="UTF-8"?>
<TransactionResponse timestamp="2020-05-18T16:20:00-04:00"
                     id="12345678"
                     partner="partner_key">
  <Issues>
    <Issue code="1001" status="error">Example</Issue>
  </Issues>
</TransactionResponse>