借助客房套餐,您可以为单个房源定义多种客房类型,或者将客房的行程与费率功能(即费率附带的附加服务和销售条件)相结合,以区别于标准价格。
主要概念和工作流程
借助客房套餐,您可以提供实体客房类型与不同服务套餐的更多组合。
示例
以下图片展示了桌面设备和移动设备中的 Room 软件包示例:
含图片的客房套餐

此示例是 Room 组合的移动版,其中包含所需入住人数的所有不同房型及其各自的客房图片。
注意:没有图片的客房套装会被替换为床位占位符图片。
费率功能
以下图片展示了比率特征的示例:
在搜索结果中显示客房套餐和房价功能与标准房价的选用流程相同。
客房套餐
您可以在交易消息中定义客房套餐和房价功能。交易消息的根元素为 <Transaction>
。
交易消息的结构取决于您要执行的操作:定义有关客房套装或房价功能的元数据,还是更新客房套装的价格或房源情况。
- 元数据
- 在
<PropertyDataSet>
元素中使用<PackageData>
定义 Room Bundle 和费率功能元数据。如需了解详情,请参阅定义房间和软件包元数据。客房套餐使用现有的<RoomData>
元素来描述实体客房。 - 价格和空房情况
- 在
<Result>
中使用<RoomBundle>
元素为每个套餐/行程组合定义客房套餐价格和供应情况。如需了解详情,请参阅定义价格和库存状况。
根据 <Result>
,基本客房的房价、税费和其他费用在不与客房套餐搭配使用时是强制性的,但在与客房套餐搭配使用时可以移除。如果您要使用有效账号实现 Room Bundles,请按以下步骤操作:
在
<Result>
下添加基本客房的房价、税费和其他费用,并添加一个与基本客房套餐相符的客房套餐。如有需要,您可以在同一
<Result>
代码块中为相应房源的其他客房类型或不同的服务套餐定义其他客房套餐。在推出客房套餐后,移除基础客房的价格、税费和其他费用。
客房套餐元数据
在定义客房套装和房价功能时,您通常需要提前定义说明、房价包含的其他服务以及有关客房套装的其他信息。此信息称为 Room Bundle 元数据。然后,您可以在价格更新中引用此元数据,但不要将其包含在价格更新消息中。
定义 Room Bundle 时,请使用现有的 <RoomData>
元素来表示实体房间说明,并使用 <PackageData>
元素来表示不属于实体房间说明的价格功能和条款。
使用 <RoomData>
和 <PackageData>
元素可以显著减小酒店列表和酒店价格 Feed 的大小,因为它可以减少交易消息中发送的重复数据量。
例如,房间名称和说明等数据通常会在每个行程中重复出现。您可以使用 <RoomData>
和 <PackageData>
元素来定义一次此类数据。然后,系统会将行程专属的 Room Bundle 数据与存储的客房和套餐定义合并,以显示给最终用户。
Google 会将您的元数据与行程特定数据进行匹配,以呈现广告内容。系统会进行特殊处理,以合并 <RoomData>
和 <PackageData>
元素中的名称和说明,从而允许在 <RoomData>
中描述实体客房,并在 <PackageData>
中描述房价功能和套餐详细信息。
如果您为单个客房或客房套装同时定义了客房数据和套餐数据,Google 会在广告输出中同时包含这两类数据,并以连字符分隔。
照片准则
发送客房照片时,您应遵循以下准则,以确保您的照片会向用户展示:
发送每种房型的照片,包括无障碍客房的照片,例如配备各种浴室设施(如滚入式淋浴间)的指定无障碍客房。
至少包含四张客房照片和至少一张浴室照片。
照片应是房间本身的图片,而不是房源的图片。最重要的照片是床、整个房间、浴室、起居空间和房间景观(与房间的其余部分在同一张照片中),以及(如适用)阳台或露台。
拍摄书桌、厨房、咖啡机/茶具和独特的客房设施的照片也很有帮助。
避免拍摄人物和房产的照片,例如外观或房产设施、观光/旅游和食物。
避免拍摄物体特写镜头,例如高脚杯特写。
避免使用品牌和品牌信息,但如果照片拍摄的是整个浴室区域,则可以包含带有标签或品牌信息的卫浴用品。照片不应包含大段文字、徽标或水印。
提供视野开阔的标准横向照片;避免使用鱼眼镜头和拍摄变形的照片。以最高分辨率拍摄照片,有助于提高排名。您无需提交不同分辨率的同一张照片。
数据优先顺序
系统会从所有来源收集 Room Bundle 数据,并使用优先规则将这些数据合并,从而生成指定酒店、行程和 Room Bundle 的最终数据。优先级顺序(从最低到最高)如下:
- (最低)合作伙伴数据
- 媒体资源数据
<RoomData>
,其中<RoomID>
与<RoomBundle>
块中的<RoomID>
相匹配<PackageData>
,其中<PackageID>
与<RoomBundle>
块中的<PackageID>
相匹配- (最高)
<RoomBundle>
确定价格和库存状况
如需定义客房套餐的价格和供应情况,请在每个套餐或行程组合的交易消息中使用 <RoomBundle>
元素。<RoomBundle>
元素应位于 <Result>
元素内。以下示例代码展示了两个 <RoomBundle>
元素。请注意,在此示例中,两个 <RoomBundle>
元素使用 <RoomID>
和 <PackageID>
引用了 room 和软件包元数据。
对于每个 <Result>
,其中包含的 Room Bundle 集会覆盖相应属性或行程组合的现有集。如果您未在 <Result>
元素中定义任何房间套餐或费率功能,则系统会移除所有房间套餐,并且搜索结果中只会显示相应酒店或行程的基本房间。
请务必使用 <Name>
等元素,让您的客房套餐对潜在客户更具吸引力,并确保这些元素与酒店的着陆页相符。在此示例中,您需要在元数据中定义名称和其他描述性信息。
<RatePlanID>
是可选的,表示客房和套餐组合的唯一标识符。我们强烈建议您使用 RatePlanID
作为变量来构建动态着陆页(以前称为“销售点”)网址。为获得最佳效果,长度应不超过 50 个字符。如需了解详情,请参阅使用变量和条件。
在会议室套装中,以下元素是可选的:
<Baserate>
<Tax>
<OtherFees>
<RoomID>
<PackageID>
<Occupancy>
<OccupancyDetails>
在正式版账号中实现 Room Bundle 时,请在启用 Room Bundle 后移除 <Baserate>
。
<Result>
<!-- Note: When using Room Bundles, the top level result price is no
longer necessary. -->
<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 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>060773-P54321</RatePlanID>
</RoomBundle>
<!-- Premium Room Bundle -->
<RoomBundle>
<RoomID>436233</RoomID>
<PackageID>P12345</PackageID>
<!-- Price for 4 ("occupancy") -->
<Baserate currency="USD">298.88</Baserate>
<Tax currency="USD">42.12</Tax>
<OtherFees currency="USD">10.00</OtherFees>
<RatePlanID>436233-P12345</RatePlanID>
</RoomBundle>
</Result>
定义 room 和软件包元数据
如需定义客房套装元数据,请在交易消息的 <PropertyDataSet>
元素中使用 <PackageData>
和 <RoomData>
元素。
您可以在与价格和房源状况数据分开的交易消息中定义客房和套餐元数据。通过预先定义这些数据,您的价格更新无需包含重复信息,例如每个行程中每个客房或套餐的说明、照片网址、设施和其他数据。
Google 会为您存储元数据,并在广告展示时将其插入到广告中。您可以随时使用新的 Transaction 消息更新房间和套餐元数据。
在交易消息中,您可以在每个块上设置一个软件包 ID 和一个房源 ID,然后在价格更新的 <Result>
块中引用这些 ID。
如果客房和套餐数据发生变化(例如,如果您在媒体资源中添加了新的房型,则发送包含更新后的客房和套餐数据的新交易消息),Google 会使用新数据替换有关客房或套餐的现有元数据。
Google 建议您在初始设置期间定义元数据。预定义元数据后,您只需在价格更新中引用 <RoomID>
和 <PackageID>
值,而无需再次包含所有这些信息。Google 会使用这些 ID 将房间和 Room Bundle 与存储的元数据进行匹配。这可以大幅缩减交易消息的总体大小。
由于客房或行程组合的价格变化频率远高于客房或套餐说明,因此定义一次元数据,然后引用该元数据,可以更高效地使用交易消息。此外,使用元数据而不是内嵌定义数据可以消除不匹配的会议室说明等错误。
下面展示了分别定义元数据和价格的推荐方法,也是最有效的方法:
<!-- Efficient method of defining Room Bundles -->
<!----- Occupancy of 2 and 4 example ------>
<Transaction timestamp="2019-04-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 4, but bundle is for 2 -->
<Capacity>4</Capacity>
<PhotoURL>
<URL>http://www.foo.com/static/bar/imageQueen.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>
</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>
<!-- Room can accommodate 4 and bundle is for 4 -->
<Capacity>4</Capacity>
<PhotoURL>
<URL>http://www.foo.com/static/bar/imageKing.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>
</RoomData>
<!-- Can be reused by multiple Room Bundles -->
<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"/>
<BreakfastIncluded/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
</PropertyDataSet>
<!-- Efficient method of defining Room Bundles -->
<!-- Part 2: Reference RoomData and PackageData through ID -->
<Result>
<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 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>060773-P54321</RatePlanID>
</RoomBundle>
<!-- Premium Room Bundle -->
<RoomBundle>
<RoomID>436233</RoomID>
<PackageID>P12345</PackageID>
<!-- Price for 4 ("occupancy") -->
<Baserate currency="USD">298.88</Baserate>
<Tax currency="USD">42.12</Tax>
<OtherFees currency="USD">10.00</OtherFees>
<RatePlanID>060773-P12345</RatePlanID>
</RoomBundle>
<!-- Continue providing all available RoomBundle rates under matched
property for any other occupancies -->
</Result>
</Transaction>
入住率和容量
定义客房套装时,您必须了解入住人数和容纳人数之间的区别:
- 入住人数
- 客房套餐的适用房客人数。例如,“蜜月套餐”的入住人数为 2。您可以使用
<PackageData>
或<RoomBundle>
元素的<Occupancy>
子元素设置套餐的入住人数值。 - 容量
- 会议室可容纳的实际人数上限。客房的容量始终等于或高于入住人数。例如,您酒店的“蜜月套房”最多可容纳 6 人,但您为 2 位客人设置了套餐价格。您可以使用
<RoomData>
元素的<Capacity>
子元素来设置软件包容量的值。
为客房套装定价时,您必须提供套装的适用入住人数(套装的 <Occupancy>
元素中指定的值)对应的价格。如果 <Occupancy>
设置为 2,则相应套餐中的价格必须是双人价格。您不能将<Occupancy>
设置为 4 位房客,同时将套装的价格设置为 2 位房客。
共享客房
您还可以使用客房套装中的入住人数和容纳人数来设置合住型住宿(例如青年旅馆)的价格。例如,若要为有 8 张床位的宿舍设置每人价格,您需要将“入住人数”设置为 1
,将“容量”设置为 8
,并在 <RoomData>
名称中指明这一点。查看示例。
更新客房套餐
本部分介绍了如何移除不再提供的客房套装,以及如何更新现有客房套装的价格。
移除客房套餐
客房套餐的移除方式与酒店价格不同。
如需从房源中移除房间或行程组合,请将 <Result>
元素的 <Baserate>
设置为 -1
。如需移除特定客房或行程的客房套餐,请从交易消息的 <Result>
块中移除 <RoomBundle>
元素。
数据 Feed 中的房间套装被视为一个集合,其数量介于 0 到数十个之间。向 Google 发送会议室套装时,您需要发送当前完整的一组套装。您不会更改单个客房套餐的值,以将之前可用的客房套餐标记为不可用。无论最新的 Transaction 消息中包含哪些软件包,都会替换当前软件包集。
例如,有套装 A、B、C 和 D。您首先发送一条消息,用于定义房间套装 A、B、C 和 D 的集合。之后,如果套装 B 售罄,您只需重新发送包含套装 A、C 和 D 的整个套装。如果所有房间套装均已售完,则发送一个空的房间套装集。
价格调整
如需更改 Room Bundle 的价格,请在 <Result>
元素中设置新的 <Baserate>
。
每次更新交易消息中的客房/行程 <Result>
代码块时,您都必须针对每个 <Result>
包含一套完整的可用客房套装。Google 会将现有的一组 Room Bundle 替换为新的一组。如果您未在 <Result>
中添加任何客房套餐,则 Google 会移除相应客房或行程的所有客房套餐。
元数据更新
您可以通过回复 Google 发送的 <Query>
来更新 Room Bundle 元数据。
您可以使用交易消息来响应查询消息,该交易消息定义了指定酒店的客房和套餐元数据。如需了解详情,请参阅查询消息。