객실 번들

객실 패키지를 사용하면 단일 숙박 시설에 여러 객실 유형을 정의하거나 객실의 숙박 일정을 요금 기능(요금 및 판매 조건과 함께 제공되는 추가 서비스)과 결합하여 사용자에게 표준 가격 이상의 혜택을 제공할 수 있습니다.

주요 개념 및 워크플로

객실 패키지를 사용하면 실제 객실 유형과 다양한 서비스 패키지를 추가로 조합하여 제공할 수 있습니다.

다음 이미지는 데스크톱 및 휴대기기의 Room 번들의 예를 보여줍니다.

이미지가 포함된 객실 패키지

이 예시는 필요한 숙박 인원에 맞는 다양한 객실 유형과 각 객실 이미지로 구성된 객실 번들의 모바일 버전입니다.

참고: 이미지가 없는 객실 패키지는 침대 자리표시자 이미지로 대체됩니다.

요금 기능

다음 이미지는 비율 지형지물의 예를 보여줍니다.

검색 결과에 객실 패키지 및 요금 기능을 표시할 때는 표준 객실 요금과 동일한 선택 프로세스가 적용됩니다.

객실 패키지

Transaction 메시지에서 객실 번들을 정의하고 요금 특성을 정의합니다. 거래 메시지의 루트 요소는 <Transaction>입니다.

거래 메시지의 구조는 수행하는 작업(객실 패키지 또는 요금 기능에 관한 메타데이터 정의 또는 객실 패키지의 가격 또는 예약 가능 여부 업데이트)에 따라 다릅니다.

메타데이터
<PropertyDataSet> 요소에서 <PackageData>를 사용하여 객실 패키지 및 요금 기능 메타데이터를 정의합니다. 자세한 내용은 방 및 패키지 메타데이터 정의를 참고하세요. 객실 패키지는 실제 객실 설명에 기존 <RoomData> 요소를 사용합니다.
가격 및 사용 가능 여부
각 패키지/여행 일정 조합의 <Result>에서 <RoomBundle> 요소를 사용하여 객실 번들 가격 및 이용 가능 여부를 정의합니다. 자세한 내용은 가격 및 재고 정의를 참고하세요.

기본 객실의 요금, 세금, 기타 수수료는 객실 번들과 함께 사용하지 않는 경우 <Result>에 따라 필수이며 객실 번들과 함께 사용할 때 삭제할 수 있습니다. 실시간 계정을 사용하여 객실 패키지를 구현하는 경우 다음 단계를 따르세요.

  1. <Result>에 기본 객실 요금, 세금, 기타 수수료를 포함하고 기본 객실 패키지와 일치하는 객실 패키지 하나를 추가합니다.

  2. 필요한 경우 동일한 <Result> 블록 내에 해당 숙박 시설의 다른 객실 유형 또는 다른 서비스 패키지에 대한 객실 패키지를 추가로 정의합니다.

  3. 객실 번들이 출시된 후 기본 객실의 요금, 세금 및 기타 수수료를 삭제합니다.

객실 패키지 메타데이터

객실 번들과 요금 기능을 정의할 때는 일반적으로 설명, 요금에 포함된 추가 서비스, 객실 번들에 관한 기타 정보를 미리 정의합니다. 이 정보를 Room Bundle 메타데이터라고 합니다. 그런 다음 가격 업데이트에서 이 메타데이터를 참조하지만 가격 업데이트 메시지에는 포함하지 않습니다.

객실 패키지를 정의할 때 실제 객실 설명에는 기존 <RoomData> 요소를 사용하고 요금 기능 및 실제 객실 설명에 포함되지 않은 약관에는 <PackageData> 요소를 사용하세요.

<RoomData><PackageData> 요소를 사용하면 거래 메시지에서 전송되는 반복 데이터의 양이 줄어들어 호텔 목록 및 호텔 가격 피드의 크기를 크게 줄일 수 있습니다.

예를 들어 객실 이름 및 설명과 같은 데이터는 일반적으로 모든 숙박 일정에 반복됩니다. <RoomData><PackageData> 요소를 사용하여 이러한 유형의 데이터를 한 번 정의할 수 있습니다. 그런 다음 숙박 일정별 객실 패키지 데이터가 저장된 객실 및 패키지 정의와 병합되어 최종 사용자에게 표시됩니다.

Google은 메타데이터를 숙박 일정 관련 데이터와 일치시켜 광고 콘텐츠를 렌더링합니다. <RoomData><PackageData> 요소의 이름과 설명을 결합하는 특별한 처리가 있어 실제 객실은 <RoomData>에 설명되고 요금 기능 및 패키지 세부정보는 <PackageData>에 포함될 수 있습니다.

단일 객실 또는 Room Bundle의 객실 데이터와 패키지 데이터를 모두 정의하면 Google에서는 하이픈으로 구분된 광고 출력에 두 가지를 모두 포함합니다.

사진 가이드라인

객실 사진을 보낼 때 다음 가이드라인을 따르면 사진이 사용자에게 표시될 수 있습니다.

  • 휠체어 사용자도 이용할 수 있는 객실의 사진 등 각 객실 유형의 사진을 전송합니다(예: 휠체어 사용자도 이용할 수 있도록 지정된 객실로 롤인 샤워와 같은 다양한 욕실 비품이 갖춰져 있음).

  • 객실 사진 4장 이상과 욕실 사진 1장 이상을 포함하세요.

  • 숙박 시설이 아닌 객실 자체를 촬영한 사진이어야 합니다. 가장 중요한 사진은 침대, 전체 객실, 욕실, 거실 공간, 객실 전망(객실의 나머지 부분이 같은 사진에 포함됨), 해당하는 경우 발코니, 테라스입니다.

    책상, 주방, 커피/차 용품, 고유한 공간의 사진을 찍는 것도 도움이 됩니다.

  • 사람 및 숙박 시설(예: 외관 또는 숙박 시설 편의시설), 관광/여행, 음식 사진은 피하세요.

  • 와인잔의 클로즈업과 같이 물체의 클로즈업은 피합니다.

  • 브랜딩 및 브랜드는 피하세요. 라벨이 붙은 세면용품이나 브랜드 세면용품을 욕실 전체가 담긴 사진 안에 포함하는 것은 괜찮습니다. 사진에 큰 텍스트 블록, 로고 또는 워터마크가 있어서는 안 됩니다.

  • 시야가 넓은 표준 가로 모드(가로) 사진을 제공합니다. 어안 및 왜곡된 사진은 피하세요. 최고 해상도로 사진을 촬영하여 순위를 높입니다. 동일한 사진을 다양한 해상도로 제출할 필요는 없습니다.

데이터 우선순위

객실 번들 데이터는 모든 소스에서 수집되고 우선순위 규칙을 사용하여 결합하여 지정된 호텔, 숙박 일정, 객실 번들의 최종 데이터를 생성합니다. 순서는 가장 낮은 우선순위에서 가장 높은 우선순위로 다음과 같습니다.

  1. (가장 낮음) 파트너 데이터
  2. 숙박 시설 데이터
  3. <RoomData>: 여기서 <RoomID><RoomBundle> 블록의 <RoomID>와 일치합니다.
  4. <PackageData>: 여기서 <PackageID><RoomBundle> 블록의 <PackageID>와 일치합니다.
  5. (최고) <RoomBundle>

가격 및 재고 정의

객실 패키지 가격 및 재고를 정의하려면 각 패키지 또는 숙박 일정 조합의 거래 메시지에서 <RoomBundle> 요소를 사용하세요. <RoomBundle> 요소는 <Result> 요소 내에 있어야 합니다. 두 개의 <RoomBundle> 요소에 관한 샘플 코드는 아래와 같습니다. 이 예시에서 두 개의 <RoomBundle> 요소는 <RoomID><PackageID>를 사용하여 Room 및 패키지 메타데이터를 참조합니다.

<Result>의 경우 포함된 객실 패키지 세트가 해당 숙박 시설 또는 숙박 일정 조합의 기존 세트를 덮어씁니다. <Result> 요소에 객실 패키지 또는 요금 기능을 정의하지 않으면 모든 객실 패키지가 삭제되고 해당 호텔 또는 숙박 일정의 기본 객실만 검색 결과에 표시됩니다.

<Name>와 같은 요소를 사용하여 객실 패키지를 잠재고객에게 더 매력적으로 만들고 호텔의 방문 페이지와 일치시켜야 합니다. 이 예에서는 메타데이터에 이름과 기타 설명 정보를 정의합니다.

<RatePlanID>는 선택사항이며 객실 및 패키지 조합의 고유 식별자를 나타냅니다. 동적 방문 페이지(이전의 판매 시점) URL을 빌드할 때 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 및 패키지 메타데이터 정의

객실 패키지 메타데이터를 정의하려면 거래 메시지의 <PropertyDataSet> 요소 내에 있는 <PackageData><RoomData> 요소를 사용하세요.

가격 및 예약 가능 여부 데이터와 별개로 트랜잭션 메시지에서 객실 및 패키지 메타데이터를 정의합니다. 이 데이터를 미리 정의하면 가격 업데이트에 설명, 사진 URL, 편의시설, 각 숙박 일정의 모든 객실 또는 패키지에 대한 기타 데이터와 같은 반복적인 정보를 포함할 필요가 없습니다.

Google에서 메타데이터를 저장하고 광고가 표시될 때 광고에 삽입합니다. 언제든지 새 거래 메시지로 방 및 패키지 메타데이터를 업데이트할 수 있습니다.

거래 메시지에서 각 블록에 패키지 ID와 객실 ID를 설정하고 가격 업데이트의 <Result> 블록에서 참조합니다.

객실 및 패키지 데이터가 변경되면(예: 숙박 시설에 새 객실 유형을 추가하는 경우 업데이트된 객실 및 패키지 데이터가 포함된 새 거래 메시지를 전송) Google에서 객실 또는 패키지에 관한 기존 메타데이터를 새 데이터로 대체합니다.

초기 설정 중에 메타데이터를 정의하는 것이 좋습니다. 메타데이터를 사전 정의한 후에는 모든 정보를 다시 포함하는 대신 가격 업데이트에서 <RoomID><PackageID> 값만 참조하면 됩니다. Google은 이러한 ID를 사용하여 방과 Room 번들을 저장된 메타데이터와 일치시킵니다. 이렇게 하면 거래 메시지의 전체 크기를 크게 줄일 수 있습니다.

객실 또는 숙박 일정 조합의 가격은 객실 또는 패키지 설명보다 훨씬 더 자주 변경되므로 메타데이터를 한 번 정의한 다음 참조하는 것이 트랜잭션 메시지를 훨씬 더 효율적으로 사용하는 방법입니다. 또한 데이터를 인라인으로 정의하는 대신 메타데이터를 사용하여 객실 설명 불일치와 같은 오류를 제거할 수 있습니다.

메타데이터와 가격을 별도로 정의하는 가장 효율적인 방법은 다음과 같습니다.

<!-- 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인당 가격을 설정하려면 숙박 인원을 1로, 수용 인원을 8로 설정하고 <RoomData> 이름에서 이를 그렇게 식별합니다. 예시 보기

객실 패키지 업데이트

이 섹션에서는 더 이상 사용할 수 없는 객실 패키지를 삭제하는 방법과 기존 객실 번들의 가격을 업데이트하는 방법을 설명합니다.

객실 패키지 삭제

객실 패키지는 삭제하는 방식이 호텔 가격과 다릅니다.

인벤토리에서 객실 또는 숙박 일정 조합을 삭제하려면 <Result> 요소의 <Baserate>-1로 설정합니다. 특정 객실 또는 숙박 일정의 객실 패키지를 삭제하려면 거래 메시지의 <Result> 블록에서 <RoomBundle> 요소를 삭제합니다.

데이터 피드의 객실 번들은 0부터 10까지의 숫자인 집합으로 간주됩니다. Google에 Room 번들을 전송할 때는 현재 완성된 세트를 전송합니다. 이전에 사용 가능한 객실 번들을 사용 불가로 표시하기 위해 개별 객실 번들의 값을 변경하지는 않습니다. 최신 거래 메시지에 있는 번들 세트가 현재 세트를 대체합니다.

예를 들어 A, B, C, D 번들이 있습니다. 먼저 객실 패키지 A, B, C, D 세트를 정의하는 메시지를 전송합니다. 나중에 번들 B가 매진되면 번들 A, C, D만 포함된 전체 세트를 다시 전송합니다. 모든 객실 패키지가 매진된 경우 빈 객실 패키지 세트를 전송합니다.

가격 조정하기

객실 패키지 가격을 변경하려면 <Result> 요소에서 새 <Baserate>를 설정합니다.

거래 메시지에서 객실/숙박 일정의 <Result> 블록을 업데이트할 때마다 각 <Result>에 사용할 수 있는 전체 객실 패키지 세트를 포함해야 합니다. Google에서 기존 Room 번들 세트를 새 세트로 대체합니다. <Result>에 객실 패키지를 포함하지 않으면 Google에서 해당 객실 또는 숙박 일정의 모든 객실 패키지를 삭제합니다.

메타데이터 업데이트

Google의 <Query>에 대한 응답으로 Room 번들 메타데이터를 업데이트합니다.

지정된 호텔의 객실 및 패키지 메타데이터를 정의하는 거래 메시지로 쿼리 메시지에 응답합니다. 자세한 내용은 메시지 쿼리를 참고하세요.