借助客房套餐,您可以为单个房源定义多种客房类型,或者将客房的行程与费率功能(附带费率和销售条件的附加服务)相结合,以区别于标准价格。
主要概念和工作流程
借助客房套餐,您可以将实体客房类型与不同的服务套餐搭配出更多组合。
示例
以下图片展示了桌面设备和移动设备上的 Room 软件包示例:
包含图片的客房套餐
此示例是移动版客房套装,其中包含所需入住人数对应的所有不同客房类型及其各自的客房图片。
注意:没有图片的客房套餐会替换为床铺占位符图片。
费率功能
以下图片显示了费率地图项示例:
在搜索结果中显示客房套餐和房价功能遵循与标准客房价格相同的选择流程。
客房套餐
您可以在交易消息中定义客房套餐和评分功能。交易消息的根元素为 <Transaction>
。
交易消息的结构取决于您要执行的操作:定义客房套餐或房价功能的元数据,或更新客房套餐的价格或空房情况。
- 元数据
- 在
<PropertyDataSet>
元素中使用<PackageData>
定义客房套餐和评分设施元数据。如需了解详情,请参阅定义会议室和套餐元数据。客房套餐会使用现有的<RoomData>
元素来描述实际客房。 - 价格和空房情况
- 使用
<Result>
中的<RoomBundle>
元素为每个套餐/行程组合定义客房套餐价格和空房情况。如需了解详情,请参阅指定价格和库存状况。
如果基本客房的房价、税费和其他费用未与客房套餐搭配使用,则必须在 <Result>
下提供;如果与客房套餐搭配使用,则可以移除。如果您使用正式账号实现客房套餐,请按以下步骤操作:
在
<Result>
下添加基本客房的房价、税费和其他费用,并添加一个与基本客房套餐匹配的客房套餐。根据需要,在同一
<Result>
块中为该房源的其他客房类型或不同的服务套餐定义其他客房套餐。客房套餐发布后,请移除基本客房的房价、税费和其他费用。
客房套餐元数据
定义客房套餐和房价功能时,您通常需要提前定义说明、房价包含的额外服务以及客房套餐的其他信息。这些信息称为客房套餐元数据。然后,您可以在价格更新中引用此元数据,但不要将其包含在价格更新消息中。
定义客房套餐时,请为实际客房说明使用现有的 <RoomData>
元素,并为不在实际客房说明中的房价特征和条款使用 <PackageData>
元素。
使用 <RoomData>
和 <PackageData>
元素可以显著缩减酒店列表和酒店价格 Feed 的大小,因为这会减少在交易消息中发送的重复数据量。
例如,房间名称和说明等数据通常会在每条行程中重复。您可以使用 <RoomData>
和 <PackageData>
元素一次性定义此类数据。然后,行程专用客房套餐数据会与存储的客房和套餐定义合并,以便向最终用户显示。
Google 会将您的元数据与行程专用数据进行匹配,以呈现广告内容。系统会进行特殊处理,以合并 <RoomData>
和 <PackageData>
元素中的名称和说明,从而允许在 <RoomData>
中描述实际客房,并在 <PackageData>
中描述房价功能和套餐详情。
如果您为单个房间或 Room 套餐定义了房间数据和套餐数据,Google 会在广告输出中包含这两项(用连字符分隔)。
照片准则
在发送客房照片时,您应遵循以下准则,以确保向用户展示您的照片:
发送每种房型(包括无障碍客房)的照片,例如,配有各种浴室设施(例如无障碍淋浴间)的指定无障碍客房。
至少包含 4 张客房照片和 1 张浴室照片。
照片应为客房本身的照片,而不是房源的照片。最重要的照片包括床、整个房间、浴室、起居空间以及客房外的景色(同一张照片中应包含客房的其他部分),以及阳台、露台或庭院(如适用)。
另外,拍摄书桌、厨房、咖啡/茶机和独特的客房特色的照片也很有帮助。
避免上传人物和房源的照片,例如外观或房源设施、观光/旅游景点和食物。
避免拍摄物体的特写镜头,例如高脚杯的特写镜头。
避免展示品牌和品牌信息,但如果拍摄的是整个浴室区域的照片,则可以包含带有标签或品牌信息的卫浴用品。照片中不应包含大段文字、徽标或水印。
提供视野开阔的标准横向(横向)照片;请避免使用鱼眼和失真的照片。以最高分辨率拍摄照片,以提升排名。您无需提交不同分辨率的相同照片。
数据优先级
系统会从所有来源收集客房套餐数据,并根据优先规则进行组合,从而生成指定酒店、行程和客房套餐的最终数据。优先级顺序如下(从最低到最高):
- (最低)合作伙伴数据
- 媒体资源数据
<RoomData>
,其中<RoomID>
与<RoomBundle>
块中的<RoomID>
匹配<PackageData>
,其中<PackageID>
与<RoomBundle>
块中的<PackageID>
匹配- (最高)
<RoomBundle>
指定价格和库存状况
如需定义客房套餐的价格和空房情况,请在每个套餐或行程组合对应的交易消息中使用 <RoomBundle>
元素。<RoomBundle>
元素应位于 <Result>
元素内。下面显示了两个 <RoomBundle>
元素的示例代码。请注意,在此示例中,两个 <RoomBundle>
元素使用 <RoomID>
和 <PackageID>
引用了房间和软件包元数据。
对于每个 <Result>
,包含的客房套餐集会覆盖该房源或行程组合的现有集。如果您未在 <Result>
元素中定义任何客房套餐或房价功能,则系统会移除所有客房套餐,并且搜索结果中只会显示相应酒店或行程的基本客房。
请务必使用 <Name>
等元素,让您的客房套餐对潜在客户更具吸引力,并确保其与酒店的着陆页保持一致。在此示例中,您需要在元数据中定义名称和其他描述信息。
<RatePlanID>
是可选的,表示客房和套餐组合的唯一标识符。我们强烈建议您使用 RatePlanID 作为变量来构建动态着陆页(以前称为销售终端)网址。如需了解详情,请参阅使用变量和条件。
客房套餐中的以下元素是可选的:
<Baserate>
<Tax>
<OtherFees>
<RoomID>
<PackageID>
<Occupancy>
<OccupancyDetails>
在正式版账号中实现客房套餐后,请在启用客房套餐后移除 <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>
定义房间和软件包元数据
如需定义客房套餐元数据,请在交易消息的 <PropertyDataSet>
元素内使用 <PackageData>
和 <RoomData>
元素。
您可以在交易消息中定义客房和套餐元数据,该消息与价格和空房情况数据分开。通过提前定义这些数据,您在更新价格时无需包含重复的信息,例如每条行程的每个客房或套餐的说明、照片网址、设施以及其他数据。
Google 会为您存储元数据,并在广告展示时将其插入到广告中。您可以随时使用新的事务消息更新会议室和套餐元数据。
在交易消息中,您需要为每个分块设置一个套餐 ID 和客房 ID,然后在价格更新的 <Result>
分块中引用这些 ID。
如果客房和套餐数据发生变化(例如,如果您在媒体资源中添加新的客房类型,则发送一条包含更新后的客房和套餐数据的新 Transaction 消息),Google 会将客房或套餐的现有元数据替换为新数据。
Google 建议您在初始设置期间定义元数据。预定义元数据后,您只需在价格更新中引用 <RoomID>
和 <PackageID>
值,而无需再次添加所有这些信息。Google 使用这些 ID 将客房和客房套餐与存储的元数据进行匹配。这可以大幅缩减交易消息的总大小。
由于客房或行程组合的价格变化频率远高于客房或套餐说明,因此只需定义一次元数据,然后引用该元数据,就能更高效地使用交易消息。此外,通过使用元数据(而不是内嵌方式定义数据),可以消除客房说明不一致等错误。
下面显示了建议的且最有效的分别定义元数据和价格的方法:
<!-- 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 人,但您为两位入住客人设置了套餐价格。您可以使用
<RoomData>
元素的<Capacity>
子元素设置软件包容量的值。
为客房套餐定价时,您必须提供套餐的预期入住人数(套餐的 <Occupancy>
元素中指定的值)对应的价格。如果 <Occupancy>
设为两人,则该套餐中的价格必须为两人。您不能将 <Occupancy>
设为 4 名旅客,并将套餐的价格设为 2 名旅客。
共享客房
您还可以使用客房套餐中的“入住人数”和“入住人数上限”设置多人入住的住宿(例如旅社)的价格。例如,若要为 8 张床的宿舍客房设置每人价格,您需要将“入住人数”设置为 1
,将“可容纳人数”设置为 8
,并在 <RoomData>
名称中进行相应标识。查看示例。
更新客房套餐
本部分介绍了如何移除不再提供的客房套餐,以及如何更新现有客房套餐的价格。
移除客房套餐
客房套餐的移除方式与酒店价格不同。
如需从商品目录中移除客房或行程组合,请将 <Result>
元素的 <Baserate>
设置为 -1
。如需移除指定客房或行程的客房套餐,请从“Transaction”消息中的 <Result>
块中移除 <RoomBundle>
元素。
数据 Feed 中的客房套餐被视为一个集合,数量从 0 到数十个不等。向 Google 发送客房套餐时,请发送当前完整的套餐。您不能更改单个客房套餐的值,将之前可用的客房套餐标记为不可用。最新的事务消息中包含的任何软件包集都会替换当前的那组软件包。
例如,有 A、B、C 和 D 套装。您首先发送一条消息,用于定义一组客房套餐 A、B、C 和 D。稍后,如果套装 B 售罄,您只需重新寄送包含套装 A、C 和 D 的整套商品。如果所有 Room 软件包均售罄,则发送一组空的 Room 软件包。
价格调整
如需更改客房软件包的价格,请在 <Result>
元素中设置新的 <Baserate>
。
每次在事务消息中更新客房/行程的 <Result>
块时,您都必须为每个 <Result>
添加一组完整的可用 Room Bundle。Google 会将现有的一组客房套餐替换为新一组。如果您未在 <Result>
中添加任何客房套餐,Google 将移除该客房或行程的所有客房套餐。
元数据更新
您可以通过对 Google 发出的 <Query>
的响应来更新 Room Bundle 元数据。
您可以使用 Transaction 消息响应 Query 消息,该消息用于定义指定酒店的客房和套餐元数据。如需了解详情,请参阅查询消息。