通过客房套餐,您可以为单个房源定义多个客房类型,也可以将房价行程与费率功能(附加在费率和销售条件范围内的附加服务)一起展示给用户,超出标准价格。
主要概念和工作流程
借助客房套餐,您可以提供具有不同服务套餐的其他实体客房类型组合。
下图显示了 Room Bundle 的示例:
在此示例中,第一个套装是基础客房,折扣仅适用于一位成人乘客。第二种是不同的房间类型,最多可供三位成人入住。第三个是同一媒体资源中的另一个客房类型。第四种是基础客房的“高级”套餐,可能包含免费早餐或稍后退房等设施。
下图显示了费率功能的示例:
在搜索结果中显示客房套餐和费率功能时,受与标准房价相同的选择流程约束。
客房套餐
您可以在交易消息中定义客房套餐和费率功能。事务消息的根元素是 <Transaction>
。
事务消息的结构取决于您正在执行的操作:定义有关客房套餐或费率功能的元数据,或更新客房套餐的价格或空房情况。
- 元数据
- 使用
<PropertyDataSet>
元素中的<PackageData>
定义 Room Bundle 和特征特征元数据。如需了解详情,请参阅定义会议室和软件包元数据。Room Bundle 使用现有<RoomData>
元素作为其实体会议室说明。 - 价格和空房情况
- 在
<Result>
中为每个套餐/行程组合使用<RoomBundle>
元素定义 Room Bundle 价格和空房情况。如需了解详情,请参阅定义价格和库存状况。
基本客房的费率、税费和其他费用(不可与客房套餐一起使用)需要在 <Result>
下移除;与客房套餐搭配使用时,可以移除此房价。如果您使用实际帐号实现 Room Bundle,请按以下步骤操作:
在
<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>
定义价格和库存状况
如需定义 Room Bundle 价格和空房情况,请在交易消息中为每个套餐或行程组合使用 <RoomBundle>
元素。<RoomBundle>
元素应位于 <Result>
元素内。两个 <RoomBundle>
元素的示例代码如下所示。请注意,在此示例中,两个 <RoomBundle>
元素使用 <RoomID>
和 <PackageID>
引用 Room 和软件包元数据。
对于每个 <Result>
,所包含的一组 Room Bundle 会覆盖相应属性或行程组合的现有集。如果您未在 <Result>
元素中定义任何客房套餐或费率功能,则系统会移除所有客房套餐,并仅在搜索结果中显示该酒店或行程的基本客房。
请务必使用 <Name>
等元素,使您的客房套餐对潜在客户更具吸引力,并确保它们与酒店的着陆页相匹配。在此示例中,您将在元数据中定义名称和其他描述性信息。
<RatePlanID>
是可选的,表示客房和套餐组合的唯一标识符。我们强烈建议您使用 RatePlanID 作为变量,构建动态着陆页(以前称为“销售终端”)网址。如需了解详情,请参阅使用变量和条件。
Room 软件包中的以下元素是可选的:
<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 Bundle 元数据,请在 Transaction 消息的 <PropertyDataSet>
元素内使用 <PackageData>
和 <RoomData>
元素。
您可以在与价格和空房数据不同的事务消息中定义客房和套餐元数据。提前定义这些数据不需要在价格更新中包含重复信息,例如说明、照片网址、酒店设施以及关于每个行程或每个行程的套餐的其他数据。
Google 会为您存储元数据,并在展示这些广告时插入您的广告。您可以随时使用新的事务消息更新会议室和软件包元数据。
在“交易消息”中,您可以为每个屏蔽设置软件包 ID 和房间 ID,然后在 <Result>
价格更新块中引用它们。
如果客房和套餐数据发生更改(例如,如果您在房源中添加了新的客房类型),请发送新的“交易”消息(其中包含更新后的客房和套餐数据),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>
入座率和容纳人数
定义 Room Bundle 时,您必须了解入住人数和容纳人数之间的区别:
- 在家/外出
- 客房套餐适用于多少人。例如,“蜜月套餐”的入住人数为 2。您可以使用
<PackageData>
或<RoomBundle>
元素的<Occupancy>
子元素设置软件包的占用值。 - 容量
- 客房能容纳的人数上限。会议室的容纳人数始终等于或高于入住人数。例如,您酒店中的“Honeymoon Suite”最多可容纳 6 人,但是您可以套餐为两位房客打包服务。您可以使用
<RoomData>
元素的<Capacity>
子元素设置软件包的容量值。
为客房套餐定价时,您必须提供套餐的房客数量价格(在套餐的 <Occupancy>
元素中指定的值)。如果 <Occupancy>
设为 2,则该软件包中的价格必须为 2 人。您不能将 <Occupancy>
设置为 4 个房客,也不能为 2 个房客设置套装价格。
共享聊天室
您还可以使用 Room Bundle 中的入住人数和容纳人数设置共享客房的住宿价格(例如招待所)。例如,如需为有 8 个床位的多人间设置每人价格,应将“入住人数”设置为 1
,将“容纳人数”设置为 8
,然后在 <RoomData>
名称中进行标识。查看示例。
更新客房套餐
本部分介绍了如何移除不再提供的 Room Bundle,以及如何更新现有 Room Bundle 的价格。
移除客房套餐
客房套餐与酒店套餐不同,移除房间的方式也不同。
如需从产品目录中移除客房或行程组合,请将 <Result>
元素的 <Baserate>
设置为 -1
。如需移除给定客房或行程的客房套餐,请从“交易”消息的 <Result>
代码块中移除 <RoomBundle>
元素。
数据 Feed 中的 Room Bundle 会被视为一个集,其数量在 0 到数十个之间。向 Google 发送 Room Bundle 时,您需要发送当前完整的集合。您无需更改单个 Room Bundle 的值才能将之前可用的软件包标记为不可用。最近的事务消息中的任一捆绑包将取代当前集合。
例如,软件包 A、B、C 和 D。首先,发送一条消息,定义一组客房套装 A、B、C 和 D。之后,如果套装 B 售罄,您只重新发送整个套装(包含套装 A、C 和 D)。如果所有客房套餐均已用完,请发送一组空的客房套餐。
价格调整
如需更改客房套餐的价格,请在 <Result>
元素中设置新的 <Baserate>
。
每次在交易消息中更新客房/行程的 <Result>
代码块时,都必须为每个 <Result>
添加一组完整的客房套餐。Google 会将现有的客房套餐集替换为新套餐。如果您未在 <Result>
中添加任何客房套餐,Google 会移除该客房或行程的所有客房套餐。
元数据更新
您可以使用来自 Google 的 <Query>
响应来更新 Room Bundle 元数据。
您回复包含交易消息的查询消息,该消息会定义指定酒店的客房和套餐元数据。如需了解详情,请参阅查询消息。