本页面提供了基于 XML 的交易消息的参考文档。
<Transaction>
交易消息的根元素为 <Transaction>
。它是一个容器,用于存放有关客房和套餐的描述性信息,以及客房和套餐的价格和空房情况。
<Transaction>
元素位于交易消息 XML 层次结构中的以下位置:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
使用 <Transaction>
作为根元素的消息至少需要一个子元素。事务消息可以有任意数量的子元素,前提是消息总大小不超过 100 MB。
语法
<Transaction>
元素使用以下语法:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">
<!-- Defines data about a room or package (Room Bundle) -->
<PropertyDataSet>
...
</PropertyDataSet>
<!-- Updates/sets prices and availability for rooms and Room Bundles -->
<!-- (Also removes itineraries from inventory) -->
<Result>
...
</Result>
</Transaction>
属性
<Transaction>
元素具有以下属性:
属性 | 是否必需? | 类型 | 说明 |
---|---|---|---|
id | Required | 字符串 | 每条 Transaction 消息的唯一标识符。 |
partner | Optional | string | 交易消息的目标合作伙伴账号。如果您的后端为多个合作伙伴账号提供价格 Feed,您通常会使用此属性。此字符串值是 Hotel Center “账号设置”页面上列出的“合作伙伴键”值。 |
timestamp | Required | DateTime | 交易消息的发送时间。 系统会处理发送时间戳在过去 24 小时内的所有消息,而未带时间戳的消息将被舍弃。 系统会按 |
子元素
<Transaction>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<PropertyDataSet> | Optional* | <PropertyDataSet> |
用于描述特定客房和客房套餐。通常,您会在单独的事务消息中使用此元素,以便为客房套餐定义共享值并缩减事务消息的大小。 |
<Result> | Optional* | <Result> |
客房行程的价格数据,或用于定义房源的客房套餐和其他房型类型的 |
* 至少需要 <PropertyDataSet> 和 <Result> 其中之一。 |
示例
客房数据
以下示例在交易消息中定义了客房数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
价格数据
以下示例在交易消息中定义了价格数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
</Result>
<Result>
<Property>052213</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">299.98</Baserate>
<Tax currency="USD">26.42</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="otto"/>
<PointOfSale id="simon"/>
</AllowablePointsOfSale>
</Result>
</Transaction>
每晚价格
以下示例定义了 2023 年 6 月 7 日开始的 1 到 7 晚的价格数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">209.99</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">419.98</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>3</Nights>
<Baserate currency="USD">614.97</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>4</Nights>
<Baserate currency="USD">819.96</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>5</Nights>
<Baserate currency="USD">999.95</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>6</Nights>
<Baserate currency="USD">1193.94</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>7</Nights>
<Baserate currency="USD">1259.93</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
</Transaction>
基本费率和条件式费率
以下示例展示了一个包含基准费率和条件式费率的交易消息:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
<!-- NOTE: OtherFees is inherited from the above setting -->
<Custom1>ratecode123</Custom1>
</Rate>
</Rates>
</Result>
</Transaction>
移除广告资源
以下示例将从房源中移除某家酒店的多个房源(几种不同日期的 1 晚住宿):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-05-23T16:20:00-04:00" id="42">
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-23</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-24</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<!---Sending <Baserate> is optional with <Unavailable> -->
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-25</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">-1</Baserate>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
</Transaction>
<PropertyDataSet>
<Transaction>
消息中用于存放客房和套餐(或客房套餐)信息的容器。在酒店上设置的值会替换在合作伙伴上设置的值。Google 会存储此类信息,这样您就不必每次发送价格更新时都定义此类信息。
<PropertyDataSet>
元素位于交易消息 XML 层次结构中的以下位置:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
如需了解详情,请参阅房间套装元数据。
语法
<PropertyDataSet>
元素使用以下语法:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> <!-- (Required) ID that matches the Hotel List Feed --> <Property>hotel_ID</Property> <!-- (Optional) Defines metadata about a room --> <RoomData> ... </RoomData> <!-- (Optional) Defines package metadata to be paired with rooms (Room Bundles) --> <PackageData> ... </PackageData> </PropertyDataSet> ... </Transaction>
属性
<PropertyDataSet>
元素没有属性。
子元素
<PropertyDataSet>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<PackageData> | Optional* | <PackageData> |
描述房间套餐。这些数据与合作伙伴和酒店相关联,但与行程无关。此元素与 <RoomData> 类似,但用于描述不属于实际客房说明的设施和条款。
您可以在价格更新中引用文件包 ID。 如需了解详情,请参阅房间软件包元数据。 |
<Property> | Required | string | 关联数据适用的酒店的 ID。此元素的值必须是与酒店列表 Feed 中的商家信息 <id> 匹配的字符串。
|
<RoomData> | Optional* | <RoomData> |
描述房间。这些数据与合作伙伴和酒店相关联,但与行程无关。
您可以在价格更新中引用客房 ID。 |
* 至少需要 <PackageData> 和 <RoomData> 其中之一。 |
示例
客房和套餐数据
以下示例展示了 <PropertyDataSet>
中的客房和套餐数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
在发送此客房和客房套餐的价格和空房情况时,您需要在价格消息中引用客房和套餐 ID。这样一来,您就可以大大缩减消息的大小,还能减少因重复数据而可能遇到的错误数量。如需了解详情,请参阅房间套装元数据。
<RoomData>
定义与行程无关的客房元数据,以及由此推断出的客房套餐元数据(因为客房套餐是客房加额外设施)。使用 <RoomData>
可减少价格 Feed 中描述性数据的重复。
<RoomData>
元素位于交易消息 XML 层次结构中的以下位置:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
<RoomData>
元素包含与合作伙伴和酒店相关的信息,但不包含与行程相关的信息。预期用途是用于所有非行程数据。
<RoomData>
元素与 <PackageData>
类似,但用于描述实体客房,而不是套餐的设施和条款。您可以将 <RoomData>
和 <PackageData>
结合使用,以提供有关 Room 软件包的详细信息。对于不属于套餐的单个客房,只需使用 <RoomData>
。
您可以为同一房间或房间软件包同时定义 <RoomData>
和 <PackageData>
元素。当 Google 在搜索结果中显示该客房或套餐时,会包含这两项的说明,并以英文连字符分隔。
如需了解详情,请参阅房间套装元数据。
语法
<RoomData>
元素使用以下语法:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> ... <RoomData> <RoomID>room_ID</RoomID> <Name> <Text text="room_name" language="language_code"/> ... </Name> <Description> <Text text="room_description" language="language_code"/> ... </Description> <Capacity>max_number_of_occupants</Capacity> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults, children, or seniors --></OccupancyDetails> <OccupancySettings> <MinOccupancy>min_number_of_occupants</MinOccupancy> <MinAge>min_age_of_occupants</MinAge> </OccupancySettings> <PhotoURL> <Caption> <Text text="photo_description" language="language_code"/> ... </Caption> <URL>photo_location</URL> </PhotoURL> <RoomFeatures> ... </RoomFeatures> </RoomData> ... </PropertyDataSet> </Transaction>
属性
<RoomData>
元素没有属性。
子元素
<RoomData>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<Capacity> | Optional | integer | 客房实际可容纳的房客人数。对于客房,容量大于或等于入住人数。
如果指定,此值必须等于或大于
|
<Description> | Optional | Object | 对房间的详细说明。此元素应包含其他元素或 <Name> 元素未描述的信息。指定客房说明时,请勿使用全大写字母。
为您的广告或免费的预订链接可能显示的每种语言使用单独的 以下示例显示了客房说明的法语和英语版本: <Description> <Text text="Two queen-sized beds" language="en"/> <Text text="Deux lits de la reine" language="fr"/> </Description> |
<Name> | Required | string | 客房类别的名称。此值应与酒店着陆页(以前称为销售终端)上显示的值一致。请勿将此元素的值设为全大写。
此元素接受一个子元素
为您的广告或免费的预订链接可能显示的每种语言使用单独的 以下示例显示了客房名称的法语和英语版本: <Name> <Text text="Standard Double Room" language="en"/> <Text text="Le chambre double" language="fr"/> </Name> |
<Occupancy> | Optional | integer | 客房的适用房客人数。
例如,一间大型套房可能实际可容纳 6 位客人(容量 = 6),但最多只能入住 4 位客人。
此值必须小于或等于
|
<OccupancySettings> | Optional | Object | 可限制或修改客房入住人数要求的设置。
<OccupancySettings> <MinOccupancy>2</MinOccupancy> <MinAge>16</MinAge> </OccupancySettings> 并非所有子元素都需要包含。 |
<PhotoURL> | Optional | Object | 指定客房或客房套餐的照片的网址和可选的说明。您可以为客房或客房套餐指定多个 <PhotoURL> 。每个照片网址都必须在自己的 <PhotoURL> 中。
此元素接受以下子元素:
示例: <PhotoURL> <URL>https://www.example.com/static/bar/image1234.jpg</URL> <Caption> <Text text="A bright and breezy way to enjoy your mornin' cuppa tea." language="en"/> <Text text="Une façon lumineuse et aérée pour profiter de votre journée tasse de thé." language="fr"/> </Caption> </PhotoURL> <PhotoURL> <URL>https://www.foo.com/static/bar/image5678.jpg</URL> <Caption> <Text text="Or, perhaps you prefer coffee." language="en"/> <Text text="Ou peut-être préférez-vous le café." language="fr"/> </Caption> </PhotoURL> |
<RoomFeatures> | Optional | <RoomFeatures> |
包含客房设施的相关信息。 |
<RoomID> | Required | string | 客房的唯一 ID。使用此 ID 将客房数据与价格更新中的 <Result> 块进行匹配。如需了解详情,请参阅房间套装元数据。(您还可以在内嵌方式定义客房数据时,使用此 ID 在单个交易消息中引用常见的客房定义。) |
示例
客房数据
以下示例定义了房间数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
房间和软件包元数据
以下示例定义了房间和套餐元数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
多个客房套餐
以下示例为多个 Room 软件包定义了房间和软件包元数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
<RoomFeatures>
定义房间中找到的功能。
<RoomFeatures>
元素位于交易消息 XML 层次结构中的以下位置:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<RoomFeatures>
语法
<RoomFeatures>
元素使用以下语法:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet ... > ... <RoomData> <RoomFeatures> <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle> <Beds> <Bed size="[single|semi_double|double|queen|king]"> <Width unit="cm" number="width"/> <Length unit="cm" number="length"/> </Bed> <!-- Include with any additional beds. --> </Beds> <Suite/> <Capsule/> <Roomsharing>[shared|private]</Roomsharing> <Outdoor/> <MobilityAccessible/> <Smoking>[smoking|non_smoking]</Smoking> <BathAndToilet relation="[together|separate]"> <Bath bathtub="[false|true]" shower="[false|true]"/> <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/> </BathAndToilet> <OpenAirBath/> <AirConditioning/> <Balcony/> <Views> <!-- (Optional) Defines the type of views from the room. --> <!-- Example: <OceanView/> --> </Views> </RoomFeatures> ... </RoomData> ... </PropertyDataSet> </Transactions>
属性
<RoomFeatures>
元素没有属性。
子元素
<RoomFeatures>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<JapaneseHotelRoomStyle> | Optional | enum | 表示日式酒店客房的样式。 有效值包括:
|
<Beds> | Optional | Object | 包含与房间数量相同的 <Bed> 。请注意,此处不应统计日式床垫。
每个
<Bed> 都有以下子元素:
<Beds> <Bed size="double"> <Width unit="cm" number="140"/> <Length unit="cm" number="195"/> </Bed> <Bed/> <!-- Size unknown --> </Beds> |
<Suite> | Optional | empty | 如果此客房是套房,请提供此元素。 |
<Capsule> | Optional | empty | 如果此房间是胶囊客房,请提供此元素。 |
<Roomsharing> | Optional | enum | 此客房是否与其他入住者(例如业主或其他房客)共用。有效值为 shared 和 private 。 |
<Outdoor> | Optional | empty | 如果此客房是没有固定墙壁、管道和气候控制系统的露天住宿,请提供此元素。例如,酒店客房不是露营地,而房客住帐篷的露营地和房客自带房车的房车营地属于露营地。 |
<MobilityAccessible> | Optional | empty | 如果此房间可供残障人士使用,请提供此元素。 |
<Smoking> | Optional | enum | 此客房是无烟客房还是吸烟客房。有效值为 non_smoking 和 smoking 。 |
<BathAndToilet> | Optional | Object | 包含房间内浴室和卫生间的相关信息。
该属性:
该元素可以选择包含以下子元素:
示例: <BathAndToilet relation="separate"> <Bath bathtub="1" shower="1"/> <Toilet electronic_bidet="1" mobility_accessible="1"/> </BathAndToilet> |
<OpenAirBath> | Optional | empty | 如果此客房设有私人露天浴缸,请提供此元素。 |
<AirConditioning> | Optional | empty | 如果此房间有空调,请提供此元素。 |
<Balcony> | Optional | empty | 如果此客房设有阳台或露台,请提供此元素。 |
<Views> | Optional | Object | 有效选项包括:
|
示例
JapaneseHotelRoomStyle
没有默认值。省略此值不会导致 XML 错误,但当用户按客房类型或床位数进行过滤时,您的商家信息不会显示在搜索结果中。
两张单人床
以下示例展示了如何使用 <RoomFeatures>
:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two single beds -->
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
</Beds>
<Suite/>
<Capsule/>
<Roomsharing>private</Roomsharing>
<Outdoor/>
<MobilityAccessible/>
<Smoking>non_smoking</Smoking>
<BathAndToilet relation="separate">
<Bath bathtub="1" shower="1"/>
<Toilet electronic_bidet="1" mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath/>
<AirConditioning/>
<Balcony/>
<Views>
<LakeView/>
<MarinaView/>
<BeachView/>
<ForestView/>
<MountainView/>
<NatureView/>
</Views>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
两张双人床
以下是带有两个 double
床的 western
风格日式客房示例。
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two double beds-->
<Bed size="double"></Bed>
<Bed size="double"></Bed>
</Beds>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
日式客房(无床)
以下是无床日式客房的示例。japanese
风格客房不需要提供床信息。
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
日式西式客房(带床)
以下是带 king
床的 japanese_western
风格客房示例。
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
<Beds>
<Bed size="king"></Bed>
</Beds>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
如果合作伙伴没有 japanese_western
个客房的床位数信息,请按照以下示例操作:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
<PackageData>
定义与行程无关的客房套餐元数据。此元素包含与合作伙伴和酒店相关的信息,但不包含与行程相关的信息。其预期用途是一次定义所有非行程数据,并从行程数据中引用这些数据。
<PackageData>
元素位于交易消息 XML 层次结构中的以下位置:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
<PackageData>
元素与 <RoomData>
类似,但用于描述不属于实际客房说明的房价特征和条款。您可以将 <RoomData>
和 <PackageData>
结合使用,详细说明客房套餐和房价功能。对于不属于软件包的单个房间,只需使用 <RoomData>
。
您可以为同一房间或房间套餐同时定义 <RoomData>
和 <PackageData>
元素。当 Google 在搜索结果中显示该客房或套餐时,会包含这两项的说明,并以英文连字符分隔。
如果您更新媒体资源的单个 <PackageData>
元素,则必须更新该媒体资源的所有 <PackageData>
和 <RoomData>
元素。每个 <PropertyDataSet>
都被视为与媒体资源相关的所有数据,并会覆盖所有现有数据。
如需了解详情,请参阅房间套装元数据。
语法
<PackageData>
元素使用以下语法:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<PropertyDataSet ... >
<PackageData>
<PackageID>package_ID</PackageID>
<Name>
<Text text="package_name" language="language_code"/>
...
</Name>
<Description>
<Text text="package_description" language="language_code"/>
...
</Description>
<Refundable available="[false|true]" refundable_until_days="number_of_days"
refundable_until_time="time"/>
<ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
<Occupancy>max_number_of_intended_occupants</Occupancy>
<OccupancyDetails><!-- optional info about the types of guests,
whether adults or children --></OccupancyDetails>
<!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
<BreakfastIncluded>boolean_value</BreakfastIncluded>
<InternetIncluded>boolean_value</InternetIncluded>
<ParkingIncluded>boolean_value</ParkingIncluded>
<PhotoURL>
<Caption>
<Text text="photo_description" language="language_code"/>
...
</Caption>
<URL>photo_location</URL>
</PhotoURL>
...
<Meals>
<Breakfast
included="[true|false]" buffet="[true|false]"
in_room="[true|false]" in_private_space="[true|false]"/>
<Dinner
included="[true|false]" buffet="[true|false]"
in_room="[true|false]" in_private_space="[true|false]"/>
</Meals>
<CheckinTime>checkin_time</CheckinTime>
<CheckoutTime>checkout_time</CheckoutTime>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Special Rewards">
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum">
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<!-- a PackageID with a MilesIncluded
rate feature -->
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en">
</Name>
<ChargeCurrency>hotel </ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>1000 </NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines">
</Provider>
</MilesIncluded>
</PackageData>
...
...
</PropertyDataSet>
...
</Transaction>
属性
<PackageData>
元素没有属性。
子元素
<PackageData>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<BreakfastIncluded> | Optional | boolean | 指定此套餐的房价是否包含早餐。
有效值为 0 (或 false )和 1 (或 true )。
建议您使用 |
<ChargeCurrency> | Optional | enum | 用户何时何地为预订付款。此元素使用的语法与 <Result> 中的 <ChargeCurrency> 相同。
默认值为 |
<CheckinTime> | Optional | Time | 最早入住时间。 时间必须小于酒店当地时间的 24:00。 |
<CheckoutTime> | Optional | Time | 最晚的退房时间(采用酒店的当地时间)。 |
<Description> | Optional | Object | 对文件包的详细说明。此元素应包含其他元素或 <Name> 元素未描述的信息。指定客房说明时,请勿使用全大写字母。
<Description> <Text text="Two breakfast buffet certificates for each night of stay." language="en"/> <Text text="Deux certificats petit-déjeuner buffet pour chaque nuit de séjour." language="fr"/> </Description> |
<InternetIncluded> | Optional | boolean | 如果某个套餐包含免费上网,而其他套餐不包含此设施。如果酒店为所有客房提供免费互联网,请勿为酒店的客房套餐设置此元素。此元素不适用于客房内不可用的有线互联网或无线互联网。有效值为 0 (或 false )和 1 (或 true )。
|
<Meals> | Optional | Object | 包含此套餐中餐食的相关信息。
仅当 如需使用餐食过滤条件( |
<Name> | Required | string | 软件包的名称。此值应与酒店着陆页上显示的值一致。请勿将此元素的值设为全大写字母。
此元素接受单个子元素 <Name> <Text text="Bed and Breakfast" language="en"/> <Text text="Lit et petit déjeuné" language="fr"/> </Name> |
<Occupancy> | Optional | integer | 客房套餐的适用房客人数上限。
例如,一间大型套房可能实际可容纳 6 位客人,但最多只能入住 4 位客人。
此值必须小于或等于
如果您同时在 注意: <Occupancy> 可能随附 <OccupancyDetails> ,用于指定房客类型(成人或儿童)。如需了解子元素的语法和说明,请参阅 <OccupancyDetails> 。
|
<PackageID> | Required | string | 文件包的唯一 ID。使用此 ID 将客房套餐数据与价格更新中的 (您还可以在内嵌定义客房套餐数据时,使用此 ID 引用单个交易消息中使用的常见客房套餐定义。) |
<ParkingIncluded> | Optional | boolean | 客房套餐是否包含免费停车服务,如果不包含,则该酒店的停车服务是付费的。对于提供免费停车位的酒店,请勿为此元素指定值。
有效值为 |
<PhotoURL> | Optional | Object | (与 <RoomData> 中的 <PhotoURL> 相同,但适用于文件包 [例如餐食照片]。)
|
<Refundable> | Optional | Object | 可将房价列为可全额退款或提供免费取消服务。如果未提供,系统不会显示任何退款信息。
<PackageData> 级别的退款政策会替换 <Result> 级别的退款政策。<Rates> 级别的退款政策会替换 <PackageData> 级别的退款政策。您还可以通过其他选项向用户突出显示可退款价格,而无需直接修改交易消息架构。如需详细了解这些选项,请参阅可退款费率政策。
以下示例展示了设置了所有属性的 <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> 注意:我们建议您设置所有属性。如果未设置一个或多个属性,系统会生成 Feed 状态警告消息。 如果您未设置任何属性,则费率不会显示为可退款。这些属性包括:
设置属性时,请注意以下事项:
|
<MembershipBenefits |
Optional | boolean | 房价包括住宿期间的会员福利。包含以下参数:
|
<CarRentalIncluded> | Optional | boolean | 房价包含入住期间的免费租车服务。 |
<MilesIncluded>> | Optional | boolean | 房价包括飞行常客奖励计划里程。参数包括:
|
<OnPropertyCredit> | Optional | boolean | 房价包含酒店内抵用金(餐饮、度假村、水疗等)。参数:
|
<AirportTransportationIncluded> | Optional | Object | 房价包含往返附近机场的免费交通服务。可选的 direction 属性用于指定交通工具的方向。有效值包括:
from :提供从机场到房源的交通服务。如果未指定方向,则为默认值。
to :提供从房源到机场的交通服务。
round_trip :提供往返机场的交通服务。
|
示例
单房套餐
以下示例定义了一个客房套餐,入住人数为 2 人(1 名成人和 1 名儿童),并包含早餐:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>1</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Two certificates for continental
breakfast will be provided." language="en"/>
<Text text="Deux certificats pour le petit déjeuner
continental seront fournis." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
房间和软件包元数据
以下示例定义了房间和套餐元数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
多个客房套餐
以下示例为多个 Room 软件包定义了房间和软件包元数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
包含房价的客房套餐
以下示例为包含房价特征的房源软件包定义了客房和软件包元数据:
<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID">
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
...
</RoomData>
<!-- definitions of PackageData types including rate features -->
<PackageData>
<PackageID>room_with_addl_benefits</PackageID>
<Name>
<Text text="Acme Hotels 2017 Promotion Package" language="en"/>
</Name>
<ChargeCurrency>hotel</ChargeCurrency>
<BreakfastIncluded>1</BreakfastIncluded>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Marriott Rewards"/>
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum"/>
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en"/>
</Name>
<ChargeCurrency>hotel</ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>1000</NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines"/>
</Provider>
</MilesIncluded>
<AirportTransportationIncluded direction="from"/>
</PackageData>
</PropertyDataSet>
<!-- The actual list of prices -->
<Result>
…
</Result>
</Transaction>
餐食和照片
以下示例定义了餐食、照片以及入住和退房时间的客房和套餐元数据:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Meals Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<!-- Guests can choose to have breakfast in their room or in another
space to avoid contact with other guests. -->
<Breakfast included="1" in_room="1" in_private_space="1"/>
<Dinner included="1" buffet="1"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
早餐
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<Breakfast included="true"/>
<!-- Dinner not included needs to be explicitly specified -->
<Dinner included="false"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
<Result>
用于在 <Transaction>
消息中更新价格和库存状况的容器。
<Result>
元素位于交易消息 XML 层次结构中的以下位置:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
使用 <Result>
设置或更新客房价格并定义可用客房。在此元素中定义的项通常引用 <PackageData>
和 <RoomData>
中定义的与行程无关的客房或套餐元数据(例如说明或一组设施)。
您通常会非常频繁地发送包含价格更新的交易消息。具体操作方式和频率取决于您的提交模式。
您可以在 Transaction 消息中使用 <Result>
移除行程,如移除商品目录中所述。如需详细了解如何使用交易消息更新价格和库存状况,请参阅添加和更新商品目录。
单个事务消息可以包含任意数量的 <Result>
元素,前提是消息的大小不超过 100MB。
语法
<Result>
元素使用以下语法:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <!-- Required --> <Property>hotel_ID</Property> <!-- Required --> <Checkin>YYYY-MM-DD</Checkin> <!-- Required --> <Nights>number_of_nights</Nights> <Baserate currency="currency_code">price</Baserate> <!-- Only required when <Baserate> contains a real price --> <Tax currency="currency_code">tax_amount</Tax> <!-- Only required when <Baserate> contains a real price --> <OtherFees currency="currency_code">fee_amount</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <RoomID>room_ID</RoomID> <PackageID>package_ID</PackageID> <ExpirationTime>expiration_time</ExpirationTime> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <!-- For Baserate, occupancy value must be greater than or equal to 2. If a value is not provided for occupancy, it defaults to 2. --> <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>
属性
<Result>
元素具有以下属性:
属性 | 是否必需? | 类型 | 说明 |
---|---|---|---|
mergeable | Optional | boolean | 默认情况下,特定酒店和行程对的新价格将覆盖 Google 缓存中之前的所有(未过期)价格。借助可合并的属性,您可以将其他价格存储到 Google 的缓存中,而无需删除之前的价格信息。带上下文的实时定价查询响应的此属性始终会设置为 true (无论您的交易消息响应如何)。 |
子元素
<Result>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | 适用于酒店的一个或多个着陆页。着陆页是指可为最终用户处理预订流程的网站。如需明确包含某个着陆页(并排除其他着陆页),请在着陆页文件中添加一个或多个与 <PointOfSale> 元素的 id 属性匹配的 <AllowablePointsOfSale> 元素。
如果您未添加此元素,则系统会将着陆页文件中定义的所有着陆页都视为符合用于预订客房的条件。如需了解详情,请参阅着陆页文件语法。 |
<Baserate> | Optional | float | 住宿期间的客房价格。此元素的值应反映以下内容:
如果客房在行程中不可用,则应忽略 如需移除客房套餐,请按照移除客房套餐中的说明操作。
<Baserate currency="USD">1200.40</Baserate>
|
<ChargeCurrency> | Optional | enum | 用户何时何地为预订付款。此元素可用于交易消息中的酒店价格 <Result> 元素或客房套餐 <PackageData> 块。
有效值包括:
默认值为 |
<Checkin> | Required | Date | 行程的入住日期,采用日期格式。<Nights> 元素和 <Checkin> 元素的组合构成了行程。 |
<Custom[1‑5]> | Optional | string | 定义一个自定义字段,您可以使用该字段传递与酒店关联的其他数据。您最多可以传递 5 个自定义值,并使用以下元素名称:
|
<ExpirationTime> | Optional | DateTime | 价格被视为过期的日期和时间(最短 3 小时)。
如果到期时间戳对您的定价结构不重要,我们建议您不要提供。 Google 不会提供任何已过期的价格,并且任何包含已过期价格的行程都将符合 实时价格查询的条件。 |
<Nights> | Required | integer | 行程的晚数。<Nights> 元素的值必须为正整数。
<Nights> 和 <Checkin> 的组合构成了行程。 |
<OtherFees> | Optional | float | 除基本房价和税费之外,影响客房最终价格的其他费用。<OtherFees> 元素接受一个必需属性 currency ,用于定义费用的三字母货币代码。例如 USD 。
如果 |
<Occupancy> | Optional | integer | 指定此房价允许的入住人数上限。
当 <Occupancy> 直接位于 <Result> 下方时,必须指定 2 或更高级别。<Occupancy> 可能随附 <OccupancyDetails> ,用于指定房客类型(成人或儿童)。如果未指定房客类型,则假定他们是成人。如需了解子元素的语法和说明,请参阅 <OccupancyDetails> 。如果未提供 <Occupancy> 元素,则默认占用情况为 2 。
注意:请与您的支持团队联系,启用用于发送非双人入住价格的功能。 |
<PackageID> | Optional | string | 文件包的唯一 ID,用于将其映射到预定义的文件包数据。 也用于填充 PACKAGE-ID 着陆页变量。 如需了解详情,请参阅 Room 软件包元数据。 |
<Property> | Required | string | 受关联数据(价格、行程、客房套餐或元数据)影响的酒店的 ID。此元素的值必须为字符串。此元素的值必须与您在酒店列表 Feed 中定义的房源 <id> 一致。
|
<Rates> | Optional | <Rates> |
一个或多个 <Rate> 块的容器。<Rates> 中的每个 <Rate> 都为客房/行程组合定义了不同的价格。
如果同一客房/行程组合有多个房价,或者不允许在 注意:在 |
<Refundable> | Optional | Object | 可将房价列为可全额退款或提供免费取消服务。如果未提供,系统不会显示任何退款信息。
<PackageData> 级别的退款政策会替换 <Result> 级别的退款政策。<Rates> 级别的退款政策会替换 <PackageData> 级别的退款政策。您还可以通过其他选项向用户突出显示可退款价格,而无需直接修改交易消息架构。详细了解可退款费率政策。
以下示例展示了设置了所有属性的 <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> 注意:我们建议您设置所有属性。如果未设置一个或多个属性,系统会生成 Feed 状态警告消息。 如果您未设置任何属性,则费率不会显示为可退款。这些属性包括:
设置属性时,请注意以下事项:
|
<RoomBundle> | Optional | <RoomBundle> |
用于存放有关客房的价格实体说明、任何设施包装信息,以及特定酒店和行程的某些购买政策详细信息的容器。
通常,使用此元素可定义基本客房和同一房源中不同类型客房的价格。虽然可以内嵌定义客房套餐说明,但您应使用单独的交易消息来定义此类信息。Google 会存储元数据,以便您在日后的所有价格更新中引用元数据,而不是重复元数据。 |
<RoomID> | Optional | string | 客房的唯一 ID,用于将其映射到预定义的客房数据。也用于填充 PARTNER-ROOM-ID 着陆页变量。 如需了解详情,请参阅 Room 软件包元数据。 |
<Tax> | Optional | float | 按客房最终价格计算的税费。
<Tax> 元素有一个必需属性 currency ,用于定义税费的三字母货币代码。例如 USD 。如果 <Baserate> 大于零,则必须提供 <Tax> 元素。如果 |
<Unavailable> | Optional | Object | 表示无法预订行程。用作容器,用于详细说明行程不可用的原因。以下一种或多种不可用原因可能会嵌套在 <Unavailable> 标记下:
|
示例
多媒体资源示例
以下示例定义了两个房源的一张行程及其价格:
<?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>
此示例中未显示客房的详细信息,例如说明、照片和说明文字、客房名称和容纳人数。
您可以在 Google 存储的单独交易消息中一次定义这些信息。然后,您可以在所有后续的价格和商品目录更新中引用该 ID。如需了解详情,请参阅房间套装元数据。
多费率示例
以下示例定义了单个行程和房源,其中包含适用于不同入住人数的多个房价。<Rates>
元素可用于为特定房源提供多种费率价格。以下示例也适用于民宿 (VR) 房源:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-23T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2021-01-13</Checkin>
<Nights>9</Nights>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>2</Occupancy>
<Rates>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>1</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>3</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>4</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>5</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>6</Occupancy>
</Rate>
</Rates>
</Result>
</Transaction>
不可用示例
以下示例定义了三条行程:第一条行程无法从下游渠道检索到空房情况;第二条行程低于最短入住晚数,并且已在指定日期预订;第三条行程的房源在入住日期关闭,但在入住期间开放:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NotFetched/>
</Unavailable>
</Result>
<Result>
<Property>073313</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NoVacancy/>
<MinNightStay value=3/>
</Unavailable>
</Result>
<Result>
<Property>052213</Property>
<Checkin>2018-06-10</Checkin>
<Nights>10</Nights>
<Unavailable>
<PropertyClosed first_open="2018-06-15" first_closed="2018-06-10"/>
</Unavailable>
</Result>
</Transaction>
<Rates>
一个或多个 <Rate>
块的容器。<Rates>
中的每个 <Rate>
都会为客房或行程组合定义不同的价格。
仅当同一客房或行程组合有多个房价时,才应使用 <Rates>
元素。例如,您可以为条件式费率、不公开费率或客房套餐中的条件式费率定义多个费率。
<Rates>
元素位于交易消息 XML 层次结构中的以下位置:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
(Can also contain<Rates>
) + ...
在 <Rate>
中设置的值会替换父级 <Result>
或 <RoomBundle>
元素上的价格相关值。如果未在 <Rate>
中设置这些属性,则它们会从父元素继承值。只有 <AllowablePointsofSale> 会继承给 <RoomBundle>
元素。
语法
<Rates>
元素使用以下语法:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <Rates> <Rate rate_rule_id="rate_rule_id"> <Baserate currency="currency_code">price</Baserate> <Tax currency="currency_code">tax_amount</Tax> <OtherFees currency="currency_code">fee_amount</OtherFees> <ExpirationTime>expiration_time</ExpirationTime> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> </AllowablePointsOfSale> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> ... <Custom[1-5]>custom_value</Custom[1-5]> </Rate> ... </Rates> </Result> ... </Transaction>
属性
<Rates>
元素具有以下属性:
属性 | 是否必需? | 说明 |
---|---|---|
rate_rule_id | Optional | 对于 条件式费率,此 ID 用于将费率与费率规则定义文件中的定义进行匹配。此字段的字符数限制为 40 个字符。 |
子元素
<Rates>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | 一个或多个符合酒店条件的着陆页。此元素使用的语法与 <Result> 上的 <AllowablePointsOfSale> 相同。 |
<Baserate> | Required | float | 住宿期间的客房价格。此元素使用的语法与 <Result> 上的 <Baserate> 相同。
注意: |
<ChargeCurrency> | Optional | enum | 用户何时何地为预订付款。此元素使用的语法与 <Result> 中的 <ChargeCurrency> 相同。 |
<Custom[1‑5]> | Optional | string | 您可以使用自定义字段将与酒店相关联的其他数据传递到着陆页。此元素使用的语法与 <Result> 中的 <Custom[1‑5]> 相同。每个自定义字段的字符数限制为 200 个字符。如需了解详情,请参阅
着陆页文件。
如果 |
<ExpirationTime> | Optional | DateTime | 费率被视为过期的日期和时间。此元素使用的语法与 <Result> 中的 <ExpirationTime> 相同。 |
<Occupancy> | Optional | integer | 指定此房价允许的入住人数上限。如果未指定,则假定与父级费率相同。
|
<OtherFees> | Required | float | 除了基本房价和税费之外,影响客房最终价格的其他费用。此元素使用的语法与 <Result> 中的 <OtherFees> 相同。
如果 |
<Refundable> | Optional | Object | 可将房价列为可全额退款或提供免费取消服务。如果未提供,系统不会显示任何退款信息。
<PackageData> 级别的退款政策会替换 <Result> 级别的退款政策。<Rates> 级别的退款政策会替换 <PackageData> 级别的退款政策。您还可以通过其他选项向用户突出显示可退款价格,而无需直接修改交易消息架构。如需详细了解这些选项,请参阅可退款费率政策。
以下示例展示了设置了所有属性的 <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> 注意:我们建议您设置所有属性。如果未设置一个或多个属性,系统会生成 Feed 状态警告消息。 如果您未设置任何属性,则费率不会显示为可退款。这些属性包括:
设置属性时,请注意以下事项:
|
<Tax> | Required | float | 按客房最终价格计算的税费。此元素使用的语法与 <Result> 中的 <Tax> 相同。 |
示例
基本房价和条件式房价
以下示例展示了一个包含基本费率和条件式费率的交易消息:
<?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>
多个条件式费率
以下示例在 <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>
在 <Transaction>
消息中,将客房套餐的价格和空房情况定义为 <Result>
的子级。为每个套餐或行程组合定义一个单独的元素。如需定义客房套餐的文件包和条款,请使用 <RoomData>
。
<RoomBundle>
元素位于交易消息 XML 层次结构中的以下位置:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
如需了解详情,请参阅使用客房套餐。
语法
<RoomBundle>
元素使用以下语法:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <RoomBundle> <!-- Required unless specified inline under<RoomData>
--> <RoomID>room_ID</RoomID> <!-- Required<PackageData>
--> <PackageID>package_ID</PackageID> <!-- 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>
属性
<RoomBundle>
元素没有属性。
子元素
<RoomBundle>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<Baserate> | Required | float | 定义住宿期间客房套餐的价格。此元素使用的语法与 <Result> 中的 <Baserate> 相同,但存在以下例外情况:
|
<BreakfastIncluded> | Optional | boolean | 指定此客房套餐的房价是否包含早餐。 |
<ChargeCurrency> | Optional | enum | 用户何时何地为预订付款。此元素使用的语法与 <Result> 中的 <ChargeCurrency> 相同。
默认值为 |
<Custom[1‑5]> | Optional | string | 用于向客房套餐的着陆页传递其他数据的自定义字段。这些元素使用与 <Result> 中的 <Custom[1-5]> 相同的语法。每个自定义字段的字符数限制为 200 个字符。如需了解详情,请参阅着陆页文件。
只有当您在“交易”消息中发送价格时,系统才会列出自定义变量。
如果 |
<InternetIncluded> | Optional | boolean | 如果某个客房套餐包含免费上网,而其他套餐不包含此设施。如果酒店为所有客房提供免费互联网,请勿为酒店的客房套餐设置此元素。此元素不适用于客房内未提供的有线互联网或无线互联网。 |
<Occupancy> | Required | integer | 指定此房价允许的入住人数上限。例如,一间大型套房可能实际可容纳 6 名客人,但“蜜月套餐”仅允许 2 名客人入住。 此值必须小于或等于 在着陆页网址中定义入住人数时,请使用
注意:
|
<OtherFees> | Required | float | 除基本房价和税费之外,影响客房最终价格的其他费用。<OtherFees> 元素接受一个必需属性 currency ,用于定义费用的三字母货币代码。例如,使用 USD 表示美元。 |
<PackageID> | Optional (recommended) | string | 文件包数据的唯一 ID。使用此 ID 将 Room Bundle 数据与 <PackageData> 中发送的数据进行匹配。如需了解详情,请参阅 Room 软件包元数据。(您还可以在内嵌方式定义客房套餐数据时,使用此 ID 引用单个交易消息中使用的常见客房套餐定义。) |
<ParkingIncluded> | Optional | boolean | 客房套餐是否包含免费停车服务,如果不包含,则该酒店的停车服务是付费的。对于提供免费停车位的酒店,请勿为此元素指定值。
有效值为 |
<RatePlanID> | Optional | string | 房价方案 ID 表示客房和套餐组合的唯一标识符。例如,如果 <RoomID> 的值为 5,<PackageID> 的值为 ABC,则您可以为 <RatePlanID> 使用值 5-ABC。我们强烈建议您使用 RatePlanID 作为变量来构建动态着陆页(以前称为销售终端)网址。
如需了解详情,请参阅使用变量和条件。 |
<Rates> | Optional | <Rates> |
替换此客房套餐默认房价的房价。此元素使用的语法与 <Result> 中的 <Rates> 相同。 |
<Refundable> | Optional | Object | 可将房价列为可全额退款或提供免费取消服务。如果未提供,系统不会显示任何退款信息。
<PackageData> 级别的退款政策会替换 <Result> 级别的退款政策。<Rates> 级别的退款政策会替换 <PackageData> 级别的退款政策。您还可以通过其他选项向用户突出显示可退款价格,而无需直接修改交易消息架构。如需详细了解这些选项,请参阅可退款费率政策。
以下示例展示了设置了所有属性的 <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> 注意:我们建议您设置所有属性。如果未设置一个或多个属性,系统会生成 Feed 状态警告消息。 如果您未设置任何属性,则费率不会显示为可退款。这些属性包括:
设置属性时,请注意以下事项:
|
<RoomID> | Required | string | 客房数据的唯一 ID。使用此 ID 将客房套餐数据与您在 <RoomData> 中发送的数据进行匹配。
如需了解详情,请参阅
房间套餐元数据。(您还可以在内嵌方式定义客房数据时,使用此 ID 引用单个交易消息中的通用客房定义。) |
<Tax> | Required | float | 按客房最终价格计算的税费。
<Tax> 元素有一个必需属性 currency ,用于定义税费的三字母货币代码。例如,使用 USD 表示美元。 |
示例
单人入住套餐
以下示例定义了包含单个入住人数套餐的响应。当用户在“入住人数”选择器中选择 1
时,Google 会显示符合条件的最低价格,无论入住人数如何。
如果没有单人入住价格,Google 会显示最低的双人入住价格。请注意,如果行程缓存了双人或更多人入住的价格,系统不会实时查询单人入住价格。
此示例使用 <RoomID>
和 <PackageID>
元素引用预定义的房间和软件包元数据。使用 <RoomData>
和 <PackageData>
元素定义这些信息。
<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 1 example ----->
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
<!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
<!-- Note: Once defined it does not have to be repeated for future
Transaction Messages.
PropertyDataSets can also be defined and sent in their own
Transaction Message separately from pricing. Google can be
configured to pull just PropertyDataSets once per day
(or on a predefined frequency). -->
<PropertyDataSet>
<Property>180054</Property>
<!-- Can be reused by multiple Room Bundles -->
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Queen Room - Non-Smoking" language="en"/>
<Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<!-- Room can accommodate up to 4, but package data specifies occupancy
between 1 to 4 -->
<Capacity>4</Capacity>
</RoomData>
<RoomData>
<RoomID>436233</RoomID>
<Name>
<Text text="Premium King Room - Non-Smoking" language="en"/>
<Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<Capacity>4</Capacity>
</RoomData>
<!-- Can be reused by multiple Room Bundles -->
<PackageData>
<PackageID>P11111</PackageID>
<Occupancy>1</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P54321</PackageID>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P12345</PackageID>
<Occupancy>4</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="1"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
</PropertyDataSet>
<!-- Efficient method of defining Room Bundles -->
<!-- Part 2: Reference RoomData and PackageData through ID -->
<Result>
<!-- Single occupancy pricing will be specified in a room bundle below -->
<Property>180054</Property>
<Checkin>2017-10-07</Checkin>
<Nights>2</Nights>
<!-- Base Room Bundle -->
<RoomBundle>
<RoomID>060773</RoomID>
<PackageID>P54321</PackageID>
<Baserate currency="USD">199.99</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RatePlanID>060773-P54321</RatePlanID>
</RoomBundle>
<RoomBundle>
<RoomID>060773</RoomID>
<PackageID>P11111</PackageID>
<!-- Price for 1 ("occupancy") is the lowest price and will be
displayed -->
<Baserate currency="USD">174.99</Baserate>
<Tax currency="USD">22.08</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RatePlanID>060773-P11111</RatePlanID>
</RoomBundle>
<!-- Premium Room Bundle -->
<RoomBundle>
<RoomID>436233</RoomID>
<PackageID>P12345</PackageID>
<!-- Price for 4 ("occupancy"), any eligible room bundle with 1 or more
occupancy will be displayed-->
<Baserate currency="USD">298.88</Baserate>
<Tax currency="USD">42.12</Tax>
<OtherFees currency="USD">10.00</OtherFees>
<RatePlanID>436233-P12345</RatePlanID>
</RoomBundle>
<!-- ..Continue providing all available RoomBundle rates under matched
property for 1 or more occupancies..-->
</Result>
</Transaction>
两人或更多人入住
以下示例定义了一个包含两个或更多入住人数的响应。
此示例使用 <RoomID>
和 <PackageID>
元素引用预定义的房间和软件包元数据。使用 <RoomData>
和 <PackageData>
元素定义这些信息。
<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 3 example ----->
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
<!-- Efficient method of defining Room Bundles-->
<!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
<PropertyDataSet>
<Property>180054</Property>
<!-- Can be reused by multiple Room Bundles -->
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Queen Room - Non-Smoking" language="en"/>
<Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<!-- Room can accommodate up to 4, but package data specifies occupancy
between 1 to 4 -->
<Capacity>4</Capacity>
</RoomData>
<RoomData>
<RoomID>436233</RoomID>
<Name>
<Text text="Premium King Room - Non-Smoking" language="en"/>
<Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<Capacity>4</Capacity>
</RoomData>
<!-- Can be reused by multiple Room Bundles -->
<PackageData>
<PackageID>P33333</PackageID>
<Occupancy>3</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P12345</PackageID>
<Occupancy>4</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="1"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
</PropertyDataSet>
<Result>
<Property>180054</Property>
<Checkin>2017-10-07</Checkin>
<Nights>2</Nights>
<!-- Efficient method of defining Room Bundles -->
<!-- Part 2: Reference RoomData and PackageData through ID -->
<!-- Base Room Bundle -->
<RoomBundle>
<!-- Baserate above and attributes must match atleast one room bundle
below -->
<RoomID>060773</RoomID>
<PackageID>P33333</PackageID>
<Baserate currency="USD">499.99</Baserate>
<Tax currency="USD">55.12</Tax>
<OtherFees currency="USD">22.00</OtherFees>
</RoomBundle>
<!-- Premium Room Bundle -->
<RoomBundle>
<RoomID>436233</RoomID>
<PackageID>P12345</PackageID>
<!-- Lowest price for 3 ("occupancy"), shown below, will be displayed -->
<Baserate currency="USD">598.88</Baserate>
<Tax currency="USD">62.12</Tax>
<OtherFees currency="USD">30.00</OtherFees>
</RoomBundle>
<!-- ..Continue providing all available RoomBundle rates under matched
property for 2 or more occupancies..-->
</Result>
</Transaction>
多个客房套餐
以下示例在多个客房套餐中设置了入住人数,以演示可能的旅馆客房价格。
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<Result>
...
<!-- Suite Room Bundle -->
<RoomBundle>
<RoomID>suite1</RoomID>
<PackageID>standard</PackageID>
<Occupancy>2</Occupancy>
<!-- Price for room -->
<Baserate currency="USD">80.00</Baserate>
<Tax currency="USD">5.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="Suite for 2" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Small Dorm Room Bundle -->
<RoomBundle>
<RoomID>small_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">35.00</Baserate>
<Tax currency="USD">3.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in small dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Large Dorm Room Bundle -->
<RoomBundle>
<RoomID>large_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">20.00</Baserate>
<Tax currency="USD">2.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in large dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
...
</Result>
</Transaction>
多个条件式费率
以下示例在 <RoomBundle>
中定义了基本费率和多个条件式费率:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>2</Nights>
<!-- When Google receives new room bundle information for an itinerary, all
previous room bundle pricing is dropped from Google's cache. Thus, if you
want to delete a specific room bundle from Google's cache, you may do so
by simply not providing that specific room bundle in subsequent transaction
messages. -->
<RoomBundle>
...
<!-- RoomID is required, PackageID is recommended. -->
<RoomID>5</RoomID>
<PackageID>ABC</PackageID>
<!-- Baserate is required. -->
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<!-- RatePlanID is optional and represents the unique identifier for a
room and package data combination. We strongly recommend using RatePlanID
as a variable to build your dynamic landing page (formerly Point of Sale)
URL. For details, see Using Variables and Conditions. -->
<RatePlanID>5-ABC</RatePlanID>
<!-- Occupancy is mandatory for RoomBundle elements. -->
<!-- Elements below will get inherited to nested rate elements. -->
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
</OccupancyDetails>
<InternetIncluded>1</InternetIncluded>
<!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
<ChargeCurrency>web</ChargeCurrency>
<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>
用于指定客房或套餐支持的最多入住人数。<OccupancyDetails>
可以包含其他信息,例如房客人数和类型(成人或儿童)。
当 <Result>
或 <RoomBundle>
的 <Rates>
元素中出现 <Occupancy>
和 <OccupancyDetails>
时,表示房价受入住人数详细信息的约束。
语法
<OccupancyDetails>
出现时,前面始终会带有 <Occupancy>
。请注意以下语法:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <NumAdults>number_of_adults</NumAdults> <Children> <Child age=age_of_one_child_guest/> <Child age=age_of_one_child_guest/> </Children> </OccupancyDetails> </Result> </Transaction>
子元素
<OccupancyDetails>
元素具有以下子元素:
子元素 | 是否必需? | 类型 | 说明 |
---|---|---|---|
<NumAdults> | Required | integer | 成人房客的数量。最小值:1,最大值:20。 |
<Children> | Optional | Object | 一个或多个 <Child> 元素的容器。 |
<Child age> | Optional | integer | 此子账号的最大年龄,例如 <Child age="17"> 。 |
示例
以下示例展示了 <OccupancyDetails>
在 <Results>
、<RoomBundle>
或 <Rates>
子元素中的显示方式。
结果响应
以下示例定义了一份行程及其价格,以响应用户指定了房客人数和类型的实时价格查询。在这里,<Result>
会返回 <OccupancyDetails>
(2 名成人和 1 名儿童)。
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
<Occupancy>3</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
</Result>
</Transaction>
费率响应
以下示例定义了一次行程以及相应的“1 名成人 + 1 名儿童”的价格。在这里,<OccupancyDetails>
在 <Result>
的 <Rates>
元素中返回。
<?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>
客房套餐
以下示例定义了 2 名成人和 1 名儿童入住 2 晚,且可退款的费率。在这里,<OccupancyDetails>
显示在 <RoomBundle>
内
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>6781291</Property>
<Checkin>2017-08-05</Checkin>
<Nights>2</Nights>
...
<RoomBundle>
<RoomID>10291</RoomID>
<RatePlanID>564739</RatePlanID>
<PackageID>564739</PackageID>
<Occupancy>3</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="true" refundable_until_days="1" refundable_until_time="23:59:00" />
<Baserate currency="USD">185.34</Baserate>
<Tax currency="USD">37.06</Tax>
<OtherFees currency="USD">2.22</OtherFees>
</RoomBundle>
</Result>
</Transaction>
多个客房套餐
以下示例定义了多个 <RoomBundle>
费率,这些费率仅适用于 2 名成人和 2 名儿童入住。在这里,<OccupancyDetails>
显示在 <RoomBundle>
的 <Rates>
元素中。
<?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>