객실 패키지를 사용하면 단일 숙박 시설에 여러 객실 유형을 정의하거나 객실의 숙박 일정을 요금 기능(요금과 함께 제공되는 추가 서비스 및 판매 조건)과 결합하여 사용자에게 표준 가격 이상의 가격을 제공할 수 있습니다.
주요 개념 및 워크플로
객실 패키지를 사용하면 실제 객실 유형과 다양한 서비스 패키지를 조합한 상품을 추가로 제공할 수 있습니다.
예
다음 이미지는 데스크톱 및 모바일 기기에서 Room 번들의 예를 보여줍니다.
이미지가 포함된 객실 패키지

이 예는 필수 숙박 인원수와 각 객실 이미지로 구성된 모든 다양한 객실 유형으로 구성된 객실 번들의 모바일 버전입니다.
참고: 이미지가 없는 객실 번들은 침대 자리표시자 이미지로 대체됩니다.
요금 기능
다음 이미지는 비율 기능의 예를 보여줍니다.
검색 결과에 객실 번들 및 요금 기능을 표시하는 것은 표준 객실 요금과 동일한 선택 프로세스가 적용됩니다.
객실 패키지
트랜잭션 메시지에서 객실 패키지 및 요금 기능을 정의합니다. 거래 메시지의 루트 요소는 <Transaction>
입니다.
트랜잭션 메시지의 구조는 객실 번들 또는 요금 기능에 관한 메타데이터를 정의하는지, 아니면 객실 번들의 가격 또는 사용 가능 여부를 업데이트하는지에 따라 다릅니다.
- 메타데이터
<PropertyDataSet>
요소에서<PackageData>
를 사용하여 Room 번들 및 요금 기능 메타데이터를 정의합니다. 자세한 내용은 룸 및 패키지 메타데이터 정의를 참고하세요. 객실 패키지는 실제 객실 설명에 기존<RoomData>
요소를 사용합니다.- 가격 및 사용 가능 여부
- 각 패키지/일정 조합의
<Result>
에서<RoomBundle>
요소를 사용하여 객실 패키지 가격과 이용 가능 여부를 정의합니다. 자세한 내용은 가격 및 재고 정의를 참고하세요.
기본 객실의 요금, 세금, 기타 수수료는 객실 번들과 함께 사용하지 않는 경우 <Result>
에 따라 필수이며, 객실 번들과 함께 사용하는 경우 삭제할 수 있습니다. 실제 계정을 사용하여 Room 번들을 구현하는 경우 다음 단계를 따르세요.
<Result>
아래에 기본 객실의 요금, 세금, 기타 수수료를 포함하고 기본 객실 패키지와 일치하는 객실 패키지를 하나 추가합니다.필요한 경우 해당 숙박 시설의 다른 객실 유형이나 다양한 서비스 패키지에 대해 동일한
<Result>
블록 내에 추가 객실 패키지를 정의합니다.객실 패키지가 출시된 후 기본 객실의 요금, 세금, 기타 수수료를 삭제합니다.
객실 패키지 메타데이터
객실 패키지 및 요금 기능을 정의할 때는 일반적으로 설명, 요금에 포함된 추가 서비스, 객실 패키지에 관한 기타 정보를 미리 정의합니다. 이 정보를 룸 번들 메타데이터라고 합니다. 그런 다음 가격 업데이트에서 이 메타데이터를 참조하지만 가격 업데이트 메시지에는 포함하지 않습니다.
Room 번들을 정의할 때는 실제 객실 설명에 기존 <RoomData>
요소를 사용하고, 실제 객실 설명에 포함되지 않는 요금 기능 및 약관에는 <PackageData>
요소를 사용합니다.
<RoomData>
및 <PackageData>
요소를 사용하면 거래 메시지에서 전송되는 반복 데이터의 양이 줄어들기 때문에 호텔 목록과 호텔 가격 피드의 크기를 크게 줄일 수 있습니다.
예를 들어 객실 이름과 설명 같은 데이터는 일반적으로 모든 일정에 대해 반복됩니다. <RoomData>
및 <PackageData>
요소를 사용하여 이러한 유형의 데이터를 한 번 정의할 수 있습니다. 그런 다음 여정별 객실 번들 데이터가 저장된 객실 및 패키지 정의와 병합되어 최종 사용자에게 표시됩니다.
Google은 메타데이터를 일정별 데이터와 일치시켜 광고 콘텐츠를 렌더링합니다. <RoomData>
및 <PackageData>
요소의 이름과 설명을 결합하는 특별한 처리가 있어 <RoomData>
에 실제 객실을 설명하고 <PackageData>
에 요금 기능과 패키지 세부정보를 포함할 수 있습니다.
단일 객실 또는 객실 번들에 대해 객실 데이터와 패키지 데이터를 모두 정의하면 Google은 광고 출력에 두 데이터를 모두 포함하며, 하이픈으로 구분됩니다.
사진 가이드라인
객실 사진을 보낼 때 사진이 사용자에게 표시되도록 하려면 다음 가이드라인을 따르세요.
휠체어 이용 가능 객실의 사진을 포함하여 각 객실 유형의 사진을 전송하세요. 예를 들어 휠체어 이용 가능 객실에는 롤인 샤워기 등 다양한 욕실 설비가 있습니다.
객실 사진 4장 이상과 욕실 사진 1장 이상을 포함하세요.
사진은 숙박 시설이 아닌 객실 자체를 촬영한 것이어야 합니다. 가장 중요한 사진은 침대, 전체 객실, 욕실, 거실, 객실에서 보이는 뷰 (객실의 나머지 부분과 함께)이며, 해당하는 경우 발코니, 파티오 또는 테라스입니다.
책상, 주방, 커피/차 메이커, 객실의 특징을 사진으로 찍는 것도 도움이 됩니다.
사람과 재산(예: 외관 또는 재산 편의시설), 관광/여행, 음식 사진은 피하세요.
스템웨어의 클로즈업과 같은 물체의 클로즈업 샷은 피합니다.
브랜딩 및 브랜드는 피해야 하지만, 욕실 전체를 담은 사진에 라벨이 지정되거나 브랜드가 지정된 세면도구를 포함하는 것은 괜찮습니다. 사진에 큰 텍스트 블록, 로고 또는 워터마크가 표시되어서는 안 됩니다.
표준 가로 (수평) 사진을 넓은 시야로 제공하세요. 어안 사진과 왜곡된 사진은 피하세요. 더 나은 순위를 위해 최고 해상도로 사진을 촬영하세요. 다양한 해상도로 동일한 사진을 제출하지 않아도 됩니다.
데이터 우선순위
Room Bundle 데이터는 모든 소스에서 수집되고 우선순위 규칙을 사용하여 결합되어 특정 호텔, 여정, Room Bundle의 최종 데이터를 생성합니다. 순서는 우선순위가 낮은 순에서 높은 순으로 다음과 같습니다.
- (가장 낮음) 파트너 데이터
- 숙박 시설 데이터
<RoomData>
:<RoomID>
이<RoomBundle>
블록의<RoomID>
과 일치합니다.<PackageData>
:<PackageID>
이<RoomBundle>
블록의<PackageID>
과 일치합니다.- (가장 높음)
<RoomBundle>
가격 및 예약 가능 여부 정의
객실 패키지 가격과 이용 가능 여부를 정의하려면 각 패키지 또는 숙박 일정 조합의 거래 메시지에서 <RoomBundle>
요소를 사용하세요. <RoomBundle>
요소는 <Result>
요소 내부에 있어야 합니다. 두 개의 <RoomBundle>
요소의 샘플 코드가 표시됩니다. 이 예에서 두 <RoomBundle>
요소는 <RoomID>
및 <PackageID>
를 사용하여 룸 및 패키지 메타데이터를 참조합니다.
각 <Result>
의 포함된 객실 번들 세트는 해당 속성 또는 일정 조합의 기존 세트를 덮어씁니다. <Result>
요소에 객실 패키지 또는 요금 기능을 정의하지 않으면 모든 객실 패키지가 삭제되고 해당 호텔 또는 일정의 기본 객실만 검색 결과에 표시됩니다.
<Name>
와 같은 요소를 사용하여 객실 패키지를 잠재고객에게 더 매력적으로 만들고 호텔의 방문 페이지와 일치하는지 확인하세요. 이 예시에서는 메타데이터에 이름과 기타 설명 정보를 정의합니다.
<RatePlanID>
는 선택사항이며 객실과 패키지 조합의 고유 식별자를 나타냅니다. RatePlanID
를 변수로 사용하여 동적 방문 페이지 (이전 명칭: 판매 시점) URL을 빌드하는 것이 좋습니다. 최적의 성능을 위해 길이는 50자 이내여야 합니다. 자세한 내용은 변수 및 조건 사용을 참고하세요.
다음 요소는 Room 번들에서 선택사항입니다.
<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>
요소를 사용합니다.
가격 및 예약 가능 여부 데이터와 별도의 트랜잭션 메시지에서 객실 및 패키지 메타데이터를 정의합니다. 이 데이터를 미리 정의하면 가격 업데이트에 각 여정의 모든 객실 또는 패키지에 관한 설명, 사진 URL, 편의시설, 기타 데이터와 같은 반복적인 정보를 포함하지 않아도 됩니다.
Google은 메타데이터를 저장하고 광고가 표시될 때 광고에 삽입합니다. 언제든지 새 트랜잭션 메시지로 룸 및 패키지 메타데이터를 업데이트할 수 있습니다.
거래 메시지에서 각 블록에 패키지 ID와 객실 ID를 설정한 후 가격 업데이트의 <Result>
블록에서 이를 참조합니다.
숙박 시설 및 패키지 데이터가 변경되는 경우(예: 속성에 새 숙박 시설 유형을 추가하거나 업데이트된 숙박 시설 및 패키지 데이터가 포함된 새 거래 메시지를 전송하는 경우) 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명이지만 2인용 번들 가격을 책정합니다.
<RoomData>
요소의<Capacity>
하위 요소를 사용하여 패키지의 용량 값을 설정합니다.
객실 번들의 가격을 책정할 때는 번들이 대상으로 하는 게스트 수 (번들의 <Occupancy>
요소에 지정된 값)에 대한 가격을 제공해야 합니다. <Occupancy>
이 2로 설정된 경우 해당 패키지의 가격은 2인용이어야 합니다. <Occupancy>
를 4명으로 설정하고 2명에 대한 번들 가격을 설정할 수는 없습니다.
공유 객실
또한 객실 번들의 점유율 및 용량을 사용하여 호스텔과 같은 공유 객실 숙박 시설의 가격을 설정할 수 있습니다. 예를 들어 침대가 8개인 기숙사 객실의 1인당 가격을 설정하려면 Occupancy를 1
로, Capacity를 8
로 설정하고 <RoomData>
이름에서 이를 식별합니다. 예시 보기
객실 패키지 업데이트
이 섹션에서는 더 이상 사용할 수 없는 객실 번들을 삭제하고 기존 객실 번들의 가격을 업데이트하는 방법을 설명합니다.
객실 패키지 삭제
객실 패키지는 삭제하는 방식이 호텔 가격과 다릅니다.
인벤토리에서 객실 또는 일정 조합을 삭제하려면 <Result>
요소의 <Baserate>
을 -1
로 설정합니다. 특정 객실 또는 일정의 객실 번들을 삭제하려면 거래 메시지의 <Result>
블록에서 <RoomBundle>
요소를 삭제합니다.
데이터 피드의 Room Bundles는 0개에서 수십 개에 이르는 세트로 간주됩니다. 룸 번들을 Google에 전송할 때는 현재의 완전한 세트를 전송합니다. 이전에 사용 가능했던 객실 패키지를 사용 불가능으로 표시하기 위해 개별 객실 패키지의 값을 변경하지는 않습니다. 가장 최근의 트랜잭션 메시지에 있는 번들 세트가 현재 세트를 대체합니다.
예를 들어 번들 A, B, C, D가 있습니다. 먼저 A, B, C, D 채팅방 번들 세트를 정의하는 메시지를 보냅니다. 나중에 번들 B가 매진되면 번들 A, C, D만 포함된 전체 세트를 다시 전송합니다. 모든 객실 패키지가 매진된 경우 빈 객실 패키지 세트를 전송합니다.
가격 조정하기
Room Bundle의 가격을 변경하려면 <Result>
요소에 새 <Baserate>
를 설정합니다.
거래 메시지에서 객실/일정의 <Result>
블록을 업데이트할 때마다 각 <Result>
에 사용 가능한 객실 번들의 전체 집합을 포함해야 합니다. Google에서 기존 Room 번들 세트를 새 세트로 대체합니다. <Result>
에 객실 패키지를 포함하지 않으면 Google에서 해당 객실 또는 일정의 모든 객실 패키지를 삭제합니다.
메타데이터 업데이트
Google의 <Query>
에 대한 응답으로 Room 번들 메타데이터를 업데이트합니다.
지정된 호텔의 객실 및 패키지 메타데이터를 정의하는 트랜잭션 메시지로 쿼리 메시지에 응답합니다. 자세한 내용은 쿼리 메시지를 참고하세요.