프로모션

개요

이 API를 사용하면 가능한 할인을 지정할 수 있습니다. 지정된 프로모션 중 Google은 최저 가격을 제공하는 프로모션 또는 프로모션 세트를 적용합니다. 조건이 충족될 때 가격을 인상하거나 인하할 수 있는 임의의 요금 조정을 지원하는 API를 찾고 있다면 요금 수정 API를 고려해 보세요. 두 API가 모두 있는 경우 요금 수정사항은 프로모션 전에 적용됩니다.

요청

구문

Promotions 메시지는 다음 구문을 사용합니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
            id="message_ID"
            timestamp="timestamp">
  <HotelPromotions hotel_id="HotelID" action="[overlay]">
    <Promotion id="PromotionID" action="[delete]">
      <BookingDates>
        <DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
          days_of_week="MTWHFSU_or_subset"/>
        <DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
          days_of_week="MTWHFSU_or_subset"/>
      </BookingDates>
      <BookingWindow min="integer_or_duration" max="integer_or_duration"/>
      <Ceiling amount_per_night="float"/>
      <Floor amount_per_night="float"/>
      <CheckinDates>
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </CheckinDates>
      <CheckoutDates>
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </CheckoutDates>
      <!-- Specify only one of percentage, percentage_of_base, fixed_amount,
           fixed_amount_per_night, fixed_price, or fixed_price_per_night;
           applied_nights is only used with percentage, fixed_amount_per_night,
           and fixed_price_per_night. -->
      <Discount percentage="float" percentage_of_base="float"
                fixed_amount="float" fixed_amount_per_night="float"
                fixed_price="float" fixed_price_per_night="float"
                applied_nights="integer_1_to_99" rank="integer_1_to_99">
        <!-- FreeNights may not be used in conjunction with attributes on Discount -->
        <FreeNights stay_nights="integer" discount_nights="integer"
                    discount_percentage="float" night_selection="[cheapest|last]"
                    repeats="boolean"/>
      </Discount>
      <!-- Exactly one of Discount or BestDailyDiscount must be specified.
           Specify only one of percentage, fixed_amount, or fixed_price. -->
      <BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
      <Devices>
        <Device type="[desktop|tablet|mobile]"/>
      </Devices>
      <InventoryCount min="integer" max="integer"/>
      <LengthOfStay min="integer" max="integer"/>
      <MembershipRateRule id="RateRuleID"/>
      <MinimumAmount before_discount="integer"/>
      <Occupancy min="integer" max="integer"/>
      <RatePlans>
        <RatePlan id="PackageID_1"/>
        <RatePlan id="PackageID_2"/>
      </RatePlans>
      <RoomTypes>
        <RoomType id="RoomID_1"/>
        <RoomType id="RoomID_2"/>
      </RoomTypes>
      <Stacking type="[any|base|none|second]"/>
      <StayDates application="[all|any|overlap]">
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </StayDates>
      <UserCountries type="[include|exclude]">
        <Country code="country_code"/>
      </UserCountries>
    </Promotion>
  </HotelPromotions>
</Promotions>

요소 및 속성

프로모션 메시지에는 다음과 같은 요소와 속성이 있습니다.

요소 / @Attribute 발생 횟수 유형 설명
Promotions 1 Complex element 프로모션 메시지의 루트 요소입니다.
Promotions / @partner 1 string 이 메시지의 파트너 계정입니다. 이 문자열 값은 Hotel Center의 계정 설정 페이지에 표시된 '파트너 키' 값입니다.

여러 계정의 피드를 제공하는 백엔드가 있는 경우 이 값은 동일한 계정의 <OTA_HotelRateAmountNotifRQ><OTA_HotelAvailNotifRQ> 메시지의 <RequestorID> 요소에 지정된 ID 속성 값과 일치해야 합니다.

Promotions / @id 1 string 이 요청 메시지의 고유 식별자입니다. 이 값은 응답 메시지로 반환됩니다. 허용되는 문자는 a~z, A~Z, 0~9, _(밑줄), - (대시)입니다.
Promotions / @timestamp 1 DateTime 이 메시지의 생성 날짜 및 시간입니다.
Promotions / HotelPromotions 0..n HotelPromotions

숙박 시설의 프로모션입니다. 각 프로모션은 단일 숙박 시설에 적용됩니다.

<Stacking>을 사용하지 않는 한 여러 프로모션이 적용되는 경우 가장 큰 할인이 적용된 프로모션이 예약에 적용됩니다.

Promotions / HotelPromotions / @hotel_id 1 string 숙박 시설의 고유 식별자입니다. 이 값은 호텔 목록 피드의 <listing> 요소에서 <id>을 사용하여 지정된 호텔 ID와 일치해야 합니다. 호텔 ID는 Hotel Center에도 표시됩니다.
Promotions / HotelPromotions / @action 0..1 enum

지정된 경우 값은 "overlay"이어야 합니다. 값이 "overlay"이면 현재 메시지에 지정된 프로모션을 저장하기 전에 저장된 모든 프로모션이 삭제됩니다.

지정하지 않으면 현재 메시지에 지정된 각 프로모션은 다음 중 하나입니다.

  • Added (저장된 프로모션에 동일한 id이 없는 경우)
  • Updated (저장된 프로모션에 동일한 id이 있는 경우)
  • Deleted (저장된 프로모션의 id이 동일하고 현재 메시지에 지정된 프로모션의 action 속성 값이 "delete"인 경우)
Promotions / HotelPromotions / Promotion 0..99 Promotion

숙박 시설의 단일 프로모션입니다. action="overlay"<Promotion>이 지정되지 않으면 속성의 모든 프로모션이 삭제됩니다.

프로모션을 100개 이상 사용해야 하는 경우 기술계정 관리자 (TAM)에게 문의하세요.

Promotions / HotelPromotions / Promotion / @id 1 string 프로모션의 고유 식별자입니다. 허용되는 최대 문자 수는 40자(영문 기준)입니다. 허용되는 문자는 a~z, A~Z, 0~9, _ (밑줄), - (대시), .입니다. (마침표)를 누릅니다.
Promotions /HotelPromotions / Promotion / @action 0..1 enum

지정된 경우 값은 delete여야 합니다. 지정되지 않았고 동일한 id를 가진 프로모션이 저장되지 않은 경우 이 프로모션이 저장됩니다. 그렇지 않고 지정되지 않았으며 동일한 id가 있는 프로모션이 저장된 경우 기존 프로모션이 업데이트됩니다.

delete가 지정되면 동일한 id이 있는 저장된 프로모션이 삭제됩니다. delete를 사용하는 경우 <Promotion>에 하위 요소를 포함하지 마세요. 또한 delete<HotelPromotions action="overlay"/>과 함께 사용할 수 없습니다.

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates 프로모션이 적용되려면 예약이 이루어져야 하는 시점을 정의하는 하나 이상의 범위 컨테이너입니다.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange 프로모션이 적용되려면 예약이 이루어져야 하는 시점을 지정하는 범위입니다.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date 또는 DateTime

범위의 시작 날짜 또는 시간(속성의 시간대 기준)입니다(포함).

  • start로 지정된 날짜 또는 datetime은 end로 지정된 날짜 또는 datetime보다 이전이거나 같아야 합니다.
  • start가 지정되지 않으면 시작 시간 측면에서 범위가 사실상 무제한입니다.
  • start이 날짜 'YYYY-MM-DD'로 채워지면 datetime 'YYYY-MM-DDT00:00:00'으로 해석됩니다.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date 또는 DateTime

범위의 종료일 또는 종료 시간(속성의 시간대 기준)입니다(포함).

  • end로 지정된 날짜 또는 datetime은 start로 지정된 날짜 또는 datetime보다 늦어야 합니다 (또는 같아야 함).
  • end가 지정되지 않으면 범위가 종료 시간 측면에서 사실상 무제한입니다.
  • end이 날짜 'YYYY-MM-DD'로 제공되면 datetime 'YYYY-MM-DDT23:59:59'로 해석됩니다.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

기간에 허용되는 요일입니다. 지정하지 않으면 날짜 범위의 모든 요일이 허용됩니다. 문자열의 각 문자는 요일을 지정합니다. 예를 들어 'MTWHF'는 날짜 범위에 평일이 허용됨을 지정합니다.

유효한 문자는 다음과 같습니다.

  • 월요일의 경우 M
  • 화요일의 경우 T
  • 수요일의 경우 W
  • 목요일의 경우 H
  • 금요일의 경우 F
  • 토요일의 경우 S
  • 일요일의 경우 U

모든 문자 조합이 유효합니다.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow 체크인 날짜 (숙박 시설의 시간대 기준)를 기준으로 예약이 이루어져야 하는 기간을 지정합니다. 예를 들어 예약 기간은 체크인 전 최소 7일, 최대 180일로 설정할 수 있습니다.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration 프로모션이 적용되려면 예약이 이루어져야 하는 체크인 전 최소 기간입니다. 지정되지 않았거나 값이 0인 경우 최소값이 없습니다.

유효한 값 유형은 다음과 같습니다.

  • 정수: 체크인 날짜 전의 일수입니다. 예를 들어 값이 30이면 프로모션이 체크인 날짜 최소 30일 전 예약에만 적용됩니다.
  • ISO 8601 기간 (일, 시간, 분): 체크인 날짜 전의 일수 (선택적으로 시간/분)입니다. 예를 들어 P30D 값은 프로모션이 체크인 날짜 30일 전 예약에만 적용됨을 나타냅니다. P30DT6H 값은 도착 30일 전 오후 6시 이전에 예약해야 합니다.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration 프로모션이 적용되려면 예약이 이루어져야 하는 체크인 전 최대 일수입니다. 지정되지 않았거나 값이 0인 경우 최댓값은 없습니다.

유효한 값 유형은 다음과 같습니다.

  • 정수: 체크인 날짜까지 남은 일수입니다. 예를 들어 값이 30이면 프로모션이 체크인 날짜로부터 최대 30일 전 예약에만 적용된다는 의미입니다.
  • ISO 8601 기간 (일, 시간, 분): 체크인 날짜 전의 일수 (선택적으로 시간/분)입니다. 예를 들어 값이 P30D이면 프로모션이 체크인 날짜로부터 최대 30일 전 예약에만 적용된다는 의미입니다. P30DT6H 값은 도착 30일 전 오후 6시 이후에 예약해야 합니다.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

프로모션이 적용된 후 요율이 설정될 수 있는 최대 값에 대한 제한사항을 정의합니다.

프로모션은 항상 <Discount> 또는 <BestDailyDiscount>를 지정해야 하므로 <Ceiling>만 적용되는 프로모션을 만들려면 percentage0<Discount>를 설정하는 방법이 있습니다.

스태킹이 구성된 경우 <Ceiling>가 있는 여러 프로모션이 단일 숙박에 적용될 수 있습니다. 각 프로모션은 할인을 적용한 후 바로 상한을 적용합니다. 다음 예에서는 각 상한액이 스택의 다음 프로모션 계산에 어떻게 기여하는지 보여줍니다.

예:

AmountBeforeTax이 100이고 두 프로모션이 스택으로 쌓여 있는 1박 숙박 가격 책정:

  1. 스태킹 유형이 base이고 fixed_amount이 25이며 상한이 amount_per_night인 프로모션
  2. 스태킹 유형이 second이고, fixed_amount이 25이며, 상한이 amount_per_night인 프로모션

계산 순서는 다음과 같습니다.

  1. base 프로모션이 먼저 적용되어 AmountBeforeTax이 75로 할인되지만 상한선이 60으로 낮아집니다.
  2. second 프로모션은 AmountBeforeTax을 60에서 35로 할인합니다. 이 값은 상한인 90 미만이므로 두 번째 상한이 적용되지 않습니다. 최종 요금은 35입니다.

60이 더 엄격한 전체 상한이라는 사실은 자체 프로모션에만 유효하고 전체 프로모션 스택에 걸쳐 있는 단일 상한이 있을 수 없으므로 관련이 없습니다.

Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night 1 float

할인이 적용된 후 설정할 수 있는 최대 1박 요금입니다.

<Floor> 요소도 지정된 경우 이 값은 <Floor>amount_per_night 속성보다 크거나 같도록 설정해야 합니다.

amount_per_nightAmountAfterTax를 사용하여 숙박 요금에 포함된 세금 및 수수료에 적용되지만 TaxFeeInfo를 사용하여 지정된 세금 및 수수료에는 적용되지 않습니다.

Promotions / HotelPromotions / Promotion / Floor 0..1 Floor

프로모션이 적용된 후 요율이 설정될 수 있는 최소값에 대한 제한을 정의합니다.

프로모션은 항상 <Discount> 또는 <BestDailyDiscount>를 지정해야 하므로 <Floor>만 적용되는 프로모션을 만들려면 percentage0<Discount>를 설정하는 방법이 있습니다.

무료 숙박에 100% 할인이 적용된 경우에도 <Floor> 로직은 <FreeNights> 할인에 계속 적용됩니다.

스태킹이 구성된 경우 <Floor>가 있는 여러 프로모션이 단일 숙박에 적용될 수 있습니다. 각 프로모션은 할인과 가격 하한선을 순서대로 적용합니다. 다음 예에서는 각 플로어가 스택의 다음 프로모션 계산에 어떻게 기여하는지 보여줍니다.

예:

AmountBeforeTax이 100이고 두 프로모션이 스택으로 쌓여 있는 1박 숙박 가격 책정:

  1. 스태킹 유형이 base이고 fixed_amount이 25이며 하한 amount_per_night이 90인 프로모션
  2. 스태킹 유형 second, fixed_amount이 25, 하한 amount_per_night이 60인 프로모션

계산 순서는 다음과 같습니다.

  1. base 프로모션이 먼저 적용되어 AmountBeforeTax이 75로 할인되지만 하한선이 90까지 인상합니다.
  2. second 프로모션으로 AmountBeforeTax의 가격이 90에서 65로 할인됩니다. 이 값은 최솟값 60보다 높으므로 두 번째 최솟값이 적용되지 않습니다. 최종 비율은 65입니다.

90이 더 엄격한 전체 최저가라는 사실은 자체 프로모션에만 유효하고 전체 프로모션 스택에 걸쳐 있는 단일 최저가는 있을 수 없으므로 관련이 없습니다.

Promotions / HotelPromotions / Promotion / Floor / @amount_per_night 1 float

할인이 적용된 후 1박 요금을 설정할 수 있는 최소 금액입니다.

<Ceiling> 요소도 지정된 경우 이 값은 <Ceiling>amount_per_night 속성 이하로 설정해야 합니다.

amount_per_nightAmountAfterTax를 사용하여 숙박 요금에 포함된 세금 및 수수료에 적용되지만 TaxFeeInfo를 사용하여 지정된 세금 및 수수료에는 적용되지 않습니다.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates 프로모션이 적용되려면 체크인이 발생해야 하는 시기를 정의하는 하나 이상의 기간 컨테이너입니다.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

프로모션이 적용되려면 체크인이 이루어져야 하는 기간입니다. 하나 이상의 프로모션을 삭제하는 경우에는 이 요소가 필요하지 않습니다.

YearlessDate 형식도 지원됩니다.

  • start 또는 end 중 하나가 연도 없는 날짜인 경우 둘 다 연도 없는 날짜로 채워야 합니다.
  • 연도가 없는 기간은 새해를 지나면 안 됩니다. 대신 범위를 인접한 두 기간으로 나타냅니다. 예를 들어 {"12-29", "01-05"}{"12-29", "12-31"}{"01-01", "01-05"}로 나타낼 수 있습니다.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate 기간의 시작일입니다 (속성의 시간대 기준, 포함). 이 날짜는 end 날짜 이전이거나 같아야 합니다. start가 지정되지 않으면 시작일 측면에서 날짜 범위가 사실상 무제한입니다.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate 기간의 종료일입니다 (속성의 시간대 기준, 포함). 이 날짜는 start 날짜와 같거나 그 이후여야 합니다. end가 지정되지 않으면 종료일 측면에서 날짜 범위가 사실상 무제한입니다.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

기간에 허용되는 요일입니다. 지정하지 않으면 날짜 범위의 모든 요일이 허용됩니다. 문자열의 각 문자는 요일을 지정합니다. 예를 들어 'MTWHF'는 날짜 범위에 평일이 허용됨을 지정합니다.

유효한 문자는 다음과 같습니다.

  • 월요일의 경우 M
  • 화요일의 경우 T
  • 수요일의 경우 W
  • 목요일의 경우 H
  • 금요일의 경우 F
  • 토요일의 경우 S
  • 일요일의 경우 U

모든 문자 조합이 유효합니다.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates 프로모션이 적용되려면 체크아웃이 발생해야 하는 시기를 정의하는 하나 이상의 기간 컨테이너입니다.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

프로모션이 적용되려면 체크아웃이 이루어져야 하는 기간입니다. 하나 이상의 프로모션을 삭제하는 경우에는 이 요소가 필요하지 않습니다.

YearlessDate 형식도 지원됩니다.

  • start 또는 end이 연도 없는 날짜인 경우 둘 다 연도 없는 날짜로 채워야 합니다.
  • 연도가 없는 기간은 새해를 지나면 안 됩니다. 대신 범위를 인접한 두 기간으로 나타냅니다. 예를 들어 {"12-29", "01-05"}{"12-29", "12-31"}{"01-01", "01-05"}로 나타낼 수 있습니다.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate 기간의 시작일입니다 (속성의 시간대 기준, 포함). 이 날짜는 end 날짜 이전이거나 같아야 합니다. start가 지정되지 않으면 시작일 측면에서 날짜 범위가 사실상 무제한입니다.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate 기간의 종료일입니다 (속성의 시간대 기준, 포함). 이 날짜는 start 날짜와 같거나 그 이후여야 합니다. end가 지정되지 않으면 종료일 측면에서 날짜 범위가 사실상 무제한입니다.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

기간에 허용되는 요일입니다. 지정하지 않으면 날짜 범위의 모든 요일이 허용됩니다. 문자열의 각 문자는 요일을 지정합니다. 예를 들어 'MTWHF'는 날짜 범위에 평일이 허용됨을 지정합니다.

유효한 문자는 다음과 같습니다.

  • 월요일의 경우 M
  • 화요일의 경우 T
  • 수요일의 경우 W
  • 목요일의 경우 H
  • 금요일의 경우 F
  • 토요일의 경우 S
  • 일요일의 경우 U

모든 문자 조합이 유효합니다.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices 프로모션을 받을 수 있는 사용자 기기를 나열하는 컨테이너입니다. 지정된 경우 나열된 기기의 자격 요건을 충족하는 사용자에게만 할인 요금이 제공됩니다. 지정하지 않으면 모든 기기의 적격 사용자에게 할인 요금이 제공됩니다.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device 프로모션 대상인 사용자 기기 유형을 하나 정의합니다.
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum 기기 유형입니다. 값은 desktop, tablet 또는 mobile이어야 합니다.
Promotions / HotelPromotions / Promotion / Discount 1 Discount

Discount 또는 BestDailyDiscount 중 정확히 하나를 지정해야 합니다.

이 프로모션에 적용할 할인을 지정합니다.

Promotions / HotelPromotions / Promotion / Discount / @percentage 0..1 float

percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price 또는 fixed_price_per_night 중 하나가 필요합니다.

할인율을 지정하는 0~100의 십진수 값입니다. AmountAfterTax (또는 AmountAfterTax가 지정되지 않은 경우 AmountBeforeTax)에 적용됩니다.

예:

  • AmountAfterTax이 100이고 percentage이 20이면

    프로모션 요금 = AmountAfterTax * (1 - 할인율)

    80.00 = 100 * (1 - 0.2)

  • AmountBeforeTax이 100이고 percentage이 20이며 TaxFeeInfo에서 세금을 10으로 지정하는 경우

    프로모션 요금 = AmountBeforeTax * (1 - 할인율) + 세금

    90.00 = 100 * (1 - 0.2) + 10

Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base 0..1 float

percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price 또는 fixed_price_per_night 중 하나가 필요합니다.

기본 할인율을 지정하는 0~100의 십진수 값입니다. percentage와 마찬가지로 AmountAfterTax (또는 AmountAfterTax가 지정되지 않은 경우 AmountBeforeTax)에 적용됩니다.

percentage와 달리 이 할인은 순서대로 적용된 이전 프로모션과 관계없이 항상 기본 요금의 비율로 계산됩니다.

예:

  • 가격이 100인 1박 숙박에 순서대로 적용되는 프로모션이 두 개 있다고 가정해 보겠습니다. 첫 번째는 일반적인 10% 할인율이고 두 번째는 기본 가격의 10% 할인율입니다. 두 프로모션 모두 10을 할인하므로 할인된 요금은 80이 됩니다. 두 번째 프로모션도 일반적인 비율 할인인 경우 두 번째 프로모션에서 90의 10% 를 할인하므로 할인된 요금은 81이 됩니다.
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price 또는 fixed_price_per_night 중 하나가 필요합니다.

AmountAfterTax 야간 요금의 합계 (또는 AmountAfterTax이 지정되지 않은 경우 AmountBeforeTax 야간 요금의 합계)에서 차감할 고정 금액입니다. 1박 요금과 동일한 통화로 간주됩니다. 이 값이 숙박 요금의 합계보다 크면 결과 값은 0입니다.

예:

  • AmountBeforeTax이 90이고 AmountAfterTax이 100이며 fixed_amount이 20인 1박 숙박 요금을 책정하는 경우

    프로모션 요율 = AmountAfterTax - 고정 할인

    80.00 = 100 - 20

  • AmountBeforeTax이 100이고 fixed_amount이 20이며 TaxFeeInfo에 세금이 8%로 지정된 1박 숙박 요금을 책정하는 경우

    프로모션 요율 = (AmountBeforeTax - 고정 할인) * (1 + 백분율 세금)

    86.40 = (100 - 20) * 1.08

  • AmountBeforeTax이 50이고 fixed_amount이 60이며 TaxFeeInfo에 세금이 10으로 지정된 1박 숙박 요금을 책정하는 경우

    프로모션 요율 = (AmountBeforeTax - 고정 할인) * 세금

    10.00 = 0 + 10

  • AmountAfterTax 값이 100, 110, 120이고 fixed_amount이 150인 3박 숙박의 가격을 책정하는 경우

    프로모션 요율 = sum(AmountAfterTax) - (고정 할인)

    180.00 = (100 + 110 + 120) - 150

Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night 0..1 float

percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price 또는 fixed_price_per_night 중 하나가 필요합니다.

AmountAfterTax 1박당 요금 (또는 applied_nights이 지정된 경우 가장 저렴한 N)에 적용되는 고정 할인입니다. AmountAfterTax가 지정되지 않은 경우 AmountBeforeTax에 적용됩니다. 1박 요금과 동일한 통화로 간주됩니다. fixed_amount_per_night이 1박 요금보다 큰 경우 1박 요금이 0으로 줄어듭니다. 할인으로 인해 1박 요금이 음수가 될 수는 없습니다.

예:

  • AmountAfterTax 값이 100, 110, 120이고 fixed_amount_per_night이 10인 3박 숙박의 가격을 책정하는 경우

    프로모션 요율 = sum(AmountBeforeTax - 고정 금액 할인)

    300.00 = ((100 - 10) + (110 - 10) + (120 - 10))

  • AmountAfterTax 값이 10, 50, 100이고 fixed_amount_per_night이 20인 3박 숙박 요금을 책정하는 경우

    프로모션 요율 = sum(AmountAfterTax - 고정 금액 할인)

    110.00 = (0 + (50 - 20) + (100 - 20))

Promotions / HotelPromotions / Promotion / Discount / @fixed_price 0..1 float

percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price 또는 fixed_price_per_night 중 하나가 필요합니다.

AmountAfterTax 1박 요금이 지정되면 세금 및 수수료를 포함한 숙박 가격이 지정된 값으로 설정됩니다. AmountBeforeTax이 지정되면 AmountAfterTax이 지정되었는지 여부와 관계없이 숙박의 세전 가격이 지정된 값으로 설정됩니다. 1박 요금과 동일한 통화로 간주됩니다.

AmountAfterTax가 백분율 세금을 반영하도록 하려면 AmountBeforeTax의 고정 가격을 설정하면 세금과 수수료가 부정확해질 수 있습니다. 일반적으로 TaxFeeInfo를 사용하여 숙박 시설의 세금과 수수료를 지정하는 것이 좋습니다.

예:

  • AmountBeforeTax이 90이고 AmountAfterTax이 100이며 fixed_price이 80인 1박 숙박의 가격을 책정하는 경우 프로모션 요금은 80입니다.
  • AmountBeforeTax이 100이고 fixed_amount이 80이며 TaxFeeInfo에 세금이 8%로 지정된 1박 숙박 요금을 책정하는 경우

    프로모션 요금 = 고정 가격 * (1 + 백분율 세금)

    86.40 = 80 * 1.08

  • AmountAfterTax 값이 100, 110, 120이고 fixed_amount이 300인 3박 숙박 요금을 책정하는 경우

    promotion rate = 300

Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night 0..1 float

percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price 또는 fixed_price_per_night 중 하나가 필요합니다.

AmountAfterTax 1박 요금이 지정되면 세금 및 수수료를 포함한 각 숙박일의 가격이 지정된 값으로 설정됩니다. AmountBeforeTax가 지정되면 AmountAfterTax 지정 여부와 관계없이 숙박의 각 밤에 대한 세전 가격이 지정된 값으로 설정됩니다. 1박 요금과 동일한 통화로 간주됩니다.

AmountAfterTax가 백분율 세금을 반영하도록 하려면 AmountBeforeTax의 고정 가격을 설정하면 세금과 수수료가 부정확해질 수 있습니다. 일반적으로 TaxFeeInfo를 사용하여 숙박 시설의 세금과 수수료를 지정하는 것이 좋습니다.

applied_nights이 지정되면 가장 저렴한 N박에 새 가격이 적용됩니다.

예:

  • AmountBeforeTax 값이 90, 90이고 AmountAfterTax 값이 100, 100이며 fixed_price이 80인 2박 숙박의 가격을 책정하는 경우 프로모션 요금은 80 + 80 = 160입니다.
  • AmountBeforeTax이 100, 100이고 fixed_amount이 80이며 TaxFeeInfo에 8%의 세금이 지정된 2박 숙박의 가격을 책정하는 경우 프로모션 요금은 (80 + 80) * 1.08 = 172.8입니다.
  • AmountAfterTax 값이 100, 110, 120이고 fixed_amount이 110인 3박 숙박의 가격을 책정하는 경우 프로모션 요금은 110 * 3 = 330입니다.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

percentage 또는 fixed_amount_per_night와 함께만 사용해야 합니다.

할인이 적용되는 숙박 일수입니다. 가장 저렴한 숙박부터 시작됩니다. 1~99 사이의 정수여야 합니다. 지정하지 않으면 할인이 모든 숙박에 적용됩니다.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights 최소 숙박 기간이 충족될 때 숙박의 특정 밤에 적용되는 할인을 지정합니다. 이 요소가 사용되면 상위 Discount 요소의 속성은 허용되지 않습니다.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

할인이 적용되기 위해 필요한 숙박 일수입니다. 각 할인은 숙박 밤의 별도 세그먼트에 적용됩니다.

예를 들어 stay_nights이 4이고 repeats이 true인 10박 숙박의 경우 숙박 밤 세그먼트가 2개 있습니다. 1~4박과 5~8박입니다. 9~10박은 숙박 밤 세그먼트에 포함되지 않습니다.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer 숙박 기간의 각 세그먼트 내 할인된 숙박 수입니다.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float 할인 숙박에 적용되는 할인입니다. 이 값이 50이면 선택한 각 숙박에 50% 할인이 적용됩니다.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string cheapest 또는 last 중 하나여야 합니다. last인 경우 숙박 세그먼트의 마지막 밤이 할인됩니다. cheapest인 경우 숙박 기간 내 가장 저렴한 숙박에 할인이 적용됩니다.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

할인을 여러 숙박 기간 세그먼트에 적용할 수 있는지 여부입니다. false인 경우 여정 시작 부분의 숙박 일수 세그먼트만 할인됩니다. true인 경우 숙박 일수의 세그먼트가 할인됩니다.

예를 들어 stay_nights이 4이고 여정이 10박인 경우 repeatstrue이면 2개의 세그먼트 (1~4박, 5~8박)가 할인됩니다. 하지만 repeatsfalse이면 1개의 세그먼트 (1~4박)만 할인됩니다.

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer 이 프로모션에 순위를 할당하고 순위가 지정된 선택을 선택합니다. 순위가 가장 낮은 프로모션만 선택되어 적용됩니다. 값은 1~99(포함) 사이여야 합니다. 여러 프로모션이 동일한 순위를 공유하는 경우 하나가 임의로 선택되어 적용됩니다.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Discount 또는 BestDailyDiscount 중 정확히 하나를 지정해야 합니다.

숙박에 적용할 수 있는 일일 할인을 지정합니다. 이는 숙박 전체에 할인을 적용하는 Discount와는 대조적입니다.

각 숙박 시설에는 '최고의 일일'로 간주되는 프로모션 그룹이 하나 있을 수 있습니다. 즉, 숙박하는 각 날짜에 대해 적용 가능하고 해당 날짜에 가장 큰 할인을 제공하는 단일 '최고의 일일' 프로모션이 선택되어 적용될 수 있습니다.

StackingBestDailyDiscount으로 지정할 수 있습니다. base 또는 none로 설정해야 합니다. 각 숙박일의 할인율이 가장 높은 '최고의 일일' 할인은 구성된 중복 유형을 준수하면서 결합되어 단일 숙박 할인 (예: Discount)으로 처리됩니다. 이 결합된 할인은 다른 자격 요건을 충족하는 <Discount> 프로모션과 비교되며, 가장 큰 할인을 제공하는 프로모션 또는 조합을 찾기 위해 다른 프로모션과 함께 사용할 수 있습니다. BestDailyDiscount의 조합 또는 단일 Discount 중 더 낮은 가격을 산출하는 항목이 선택되어 base 스태킹 유형에 적용됩니다.

StayDates는 이 유형의 할인과 함께 지정할 수 있지만 applicationoverlap로 설정해야 합니다.

.
Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage 0..1 float

percentage, fixed_amount 또는 fixed_price 중 하나가 필요합니다.

할인율을 지정하는 0~100의 십진수 값입니다. AmountAfterTax (또는 AmountAfterTax가 지정되지 않은 경우 AmountBeforeTax)에 적용됩니다.

예:

  • 숙박 1박의 AmountAfterTax이 100이고 percentage이 20이면

    프로모션 요금 = AmountAfterTax * (1 - 할인율)

    80.00 = 100 * (1 - 0.2)

  • 숙박 일수의 AmountBeforeTax가 100이고 percentage가 20이며 TaxFeeInfo에 세금 10이 지정된 경우

    프로모션 요금 = AmountBeforeTax * (1 - 할인율) + 세금

    90.00 = 100 * (1 - 0.2) + 10

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount 0..1 float

percentage, fixed_amount 또는 fixed_price 중 하나가 필요합니다.

단일 AmountAfterTax 1박 요금 (또는 AmountAfterTax이 지정되지 않은 경우 AmountBeforeTax 1박 요금)에서 차감할 고정 금액입니다. 1박 요금과 동일한 통화로 간주됩니다. 이 값이 숙박 요금의 합계보다 크면 결과 값은 0입니다.

예:

  • 하룻밤의 AmountBeforeTax이 90이고 AmountAfterTax이 100이며 fixed_amount이 20인 경우

    프로모션 요율 = AmountAfterTax - 고정 할인

    80.00 = 100 - 20

  • 1박의 AmountBeforeTax가 100이고 fixed_amount가 20이며 TaxFeeInfo에서 8%의 세금을 지정하는 경우

    프로모션 요율 = (AmountBeforeTax - 고정 할인) * (1 + 백분율 세금)

    86.40 = (100 - 20) * 1.08

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price 0..1 float

percentage, fixed_amount 또는 fixed_price 중 하나가 필요합니다.

AmountAfterTax 1박 요금이 지정되면 세금 및 수수료를 포함한 숙박 당일의 가격이 지정된 값으로 설정됩니다. AmountBeforeTax이 지정되면 AmountAfterTax이 지정되었는지 여부와 관계없이 숙박의 세전 가격이 지정된 값으로 설정됩니다. 1박 요금과 동일한 통화로 간주됩니다.

예:

  • 1박의 AmountBeforeTax이 90이고 AmountAfterTax이 100이며 fixed_price이 80인 경우 프로모션 비율은 80입니다.
  • 1박 요금이 100이고 fixed_amount이 80이며 TaxFeeInfo가 8%의 세금을 지정하는 경우AmountBeforeTax

    프로모션 요금 = 고정 가격 * (1 + 백분율 세금)

    86.40 = 80 * 1.08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount 이 프로모션을 적용하기 위해 이용 가능해야 하는 객실 수에 관한 제한을 정의합니다. 할인은 제약 조건을 충족하는 숙박 일수에만 적용됩니다. fixed_amount 할인과 함께 사용할 수 없습니다. 사용 가능한 객실 수는 OTA_HotelInvCountNotifRQ (InvCount) 또는 OTA_HotelAvailNotifRQ(BookingLimit)로 지정됩니다.
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer 프로모션이 1박당 요금에 적용되려면 사용할 수 있어야 하는 최소 객실 수입니다. 지정하지 않으면 최솟값이 없습니다.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer 프로모션이 야간 요금에 적용되려면 사용할 수 있어야 하는 최대 객실 수입니다. 지정하지 않으면 최댓값이 없습니다.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay 이 프로모션을 적용할 수 있는 숙박 기간 한도를 정의합니다. 숙박 기간이 최소 및 최대 한도를 벗어나면 프로모션이 적용되지 않습니다.
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer 프로모션이 적용되려면 숙박에 허용되는 최소 숙박 일수입니다. 지정되지 않으면 최솟값이 없습니다.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer 프로모션이 적용될 수 있는 숙박의 최대 숙박 일수입니다. 지정하지 않으면 최댓값이 없습니다.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

연결된 할인에 대한 특정 UI 처리를 트리거하는 멤버십 요금 규칙의 컨테이너입니다.

이 요소는 <Discount>도 지정되지 않는 한 지정하면 안 됩니다.

Promotions / HotelPromotions / Promotion / MembershipRateRule / @id 1 string

멤버십 프로그램과 연결된 요금 규칙의 ID입니다.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount 프로모션이 적용되려면 초과해야 하는 일일 객실 요금의 최소 합계를 지정합니다 (AmountBeforeTax 또는 AmountAfterTax 중 더 큰 값 사용).
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer 프로모션이 적용되려면 초과해야 하는 값입니다.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy 이 프로모션이 적용되는 숙박에 대한 제한사항을 정의합니다. 점유율이 최소 및 최대 한도를 벗어나면 프로모션이 적용되지 않습니다.

프로모션은 여정 요금에 적용됩니다. 점유자당 최대 할인을 설정할 수는 없습니다.

Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer 할인이 적용되려면 사용자가 지정한 숙박 인원이 이 값 이상이어야 합니다.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer 할인이 적용되려면 사용자가 지정한 숙박 인원이 이 값 이하여야 합니다.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans 프로모션이 적용되는 요금제 목록의 컨테이너입니다. <RatePlans>를 지정하지 않으면 프로모션이 모든 요금제에 적용됩니다.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan 1..n RatePlan 요금제를 지정합니다. 요금제는 트랜잭션(숙박 시설 데이터), OTA_HotelRateAmountNotifRQ, OTA_HotelAvailNotifRQ 메시지에 정의되고 PackageID로 식별되는 패키지, 요금, 이용 가능 여부의 조합으로 정의됩니다.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string 요금제의 고유 식별자입니다. 이 값은 트랜잭션 (숙박 시설 데이터) 메시지의 <PackageData>에 있는 PackageID 값과 <OTA_HotelRateAmountNotifRQ><OTA_HotelAvailNotifRQ> 메시지 모두에서 <StatusApplicationControl>RatePlanCode 속성에 매핑됩니다. 허용되는 최대 문자 수는 50자(영문 기준)입니다.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes 프로모션이 적용되는 객실 유형 목록의 컨테이너입니다. 프로모션은 지정된 각 <RoomType>에 적용됩니다. <RoomTypes>이 지정되지 않으면 프로모션이 모든 객실에 적용됩니다.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType 방 유형을 지정합니다. 객실 유형은 트랜잭션 (숙박 시설 데이터) 메시지의 <RoomData> 요소에 정의되며 <RoomID> 값을 사용하여 참조됩니다. (<RoomID> 값은 OTA_HotelRateAmountNotifRQ 메시지의 InvTypeCode 속성에서도 참조됩니다.)
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string 인벤토리 (객실 유형)의 고유 식별자입니다. 이 값은 트랜잭션 (숙박 시설 데이터) 메시지의 <RoomID>에 매핑됩니다. 허용되는 최대 문자 수는 50자(영문 기준)입니다.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking 프로모션을 결합할 수 있는 방법을 지정합니다. 지정하지 않으면 'type'이 base인 것으로 간주됩니다.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

이 설정에 따라 단일 요금에 여러 프로모션을 적용할 수 있습니다.

  • any: 다른 프로모션 (none 제외)과 함께 사용할 수 있지만 프로모션이 적용되는 순서는 보장되지 않습니다.
  • base: 자격 요건을 충족하는 최적의 base 프로모션이 다른 프로모션보다 먼저 선택되고 적용됩니다. 이전에는 base_only라고 했습니다.
  • second: 자격 요건을 충족하는 최적의 second 프로모션이 base 프로모션(해당하는 경우) 후 any 프로모션 전에 선택되어 적용됩니다.
  • none: 다른 프로모션과 결합할 수 없습니다.

허용된 조합 중에서 가장 큰 할인을 제공하는 프로모션 세트가 요금에 적용됩니다.

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates 프로모션이 적용되는 방식을 결정하는 하나 이상의 기간 컨테이너입니다(예: 시즌 할인을 수용).
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

프로모션을 적용하는 방법을 설명합니다.

유효한 값은 다음과 같습니다.

  • all: 여정의 모든 날짜가 숙박 날짜와 겹치는 경우 여정의 각 숙박에 프로모션을 적용합니다.
  • any: 여정의 날짜가 숙박 기간의 날짜와 겹치는 경우 여정의 모든 숙박에 프로모션을 적용합니다.
  • overlap: 숙박 기간 범위의 날짜와 겹치는 여정의 숙박 일수에만 프로모션을 적용합니다.

이 속성은 항상 지정해야 합니다.

  • <Discount>에서 percentage을 지정하고 applicationall 또는 any로 설정된 경우 할인이 전체 숙박의 비율로 적용됩니다.
  • <Discount>에서 percentage을 지정하고 applicationoverlap로 설정된 경우 할인은 중복되는 숙박 일수의 1박 요금의 백분율로 적용됩니다.
  • <Discount>에서 fixed_amountapplicationoverlap로 설정하는 것은 잘못된 조합입니다.
  • <FreeNights>는 모든 application 값을 지원합니다. overlap의 경우 숙박 기간 중 겹치는 숙박 일수만 할인 요건에 반영됩니다.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

프로모션이 적용될 날짜를 지정하는 기간입니다.

YearlessDate 형식도 지원됩니다.

  • start 또는 end 중 하나가 연도 없는 날짜인 경우 둘 다 연도 없는 날짜로 채워야 합니다.
  • 연도가 없는 기간은 새해를 지나면 안 됩니다. 대신 범위를 인접한 두 기간으로 나타냅니다. 예를 들어 {"12-29", "01-05"}{"12-29", "12-31"}{"01-01", "01-05"}로 나타낼 수 있습니다.

특정 요일에 프로모션을 허용하도록 StayDates 범위를 설정하려면 프로모션이 만료되지 않도록 end 없이 start 날짜를 현재 날짜로 설정해야 합니다.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate 기간의 시작일입니다 (속성의 시간대 기준, 포함). 이 날짜는 end 날짜 이전이거나 같아야 합니다. start가 지정되지 않으면 시작일 측면에서 날짜 범위가 사실상 무제한입니다.

end 값이 제공되지 않으면 start 값을 지정해야 합니다.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate 기간의 종료일입니다 (속성의 시간대 기준, 포함). 이 날짜는 start 날짜와 같거나 그 이후여야 합니다. end가 지정되지 않으면 날짜 범위가 start 날짜부터 사실상 무제한입니다.

start 값이 제공되지 않으면 end 값을 지정해야 합니다.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

기간에 허용되는 요일입니다. 지정하지 않으면 날짜 범위의 모든 요일이 허용됩니다. 문자열의 각 문자는 요일을 지정합니다. 예를 들어 'MTWHF'는 날짜 범위에 평일이 허용됨을 지정합니다.

유효한 문자는 다음과 같습니다.

  • 월요일의 경우 M
  • 화요일의 경우 T
  • 수요일의 경우 W
  • 목요일의 경우 H
  • 금요일의 경우 F
  • 토요일의 경우 S
  • 일요일의 경우 U

모든 문자 조합이 유효합니다.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries 프로모션 대상 사용자 위치 (국가)를 나열하는 컨테이너입니다. 지정된 경우 나열된 국가의 자격 요건을 충족하는 사용자에게만 할인 요금이 제공됩니다. 지정하지 않으면 모든 국가의 적격 사용자에게 할인 요금이 제공됩니다.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum UserCountries 사양의 유형입니다.

유효한 값은 include, exclude입니다.

UserCountries typeinclude로 설정된 경우 프로모션은 나열된 국가의 사용자에게 적용됩니다.

UserCountries typeexclude인 경우 프로모션은 나열된 국가 외부의 사용자에게 적용됩니다.

UserCountries type가 설정되지 않으면 include로 처리되며 프로모션이 나열된 국가의 사용자에게 적용됩니다.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country 사용자가 프로모션을 이용할 수 있는 국가를 하나 정의합니다.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string DE 또는 FR과 같은 CLDR 국가 코드입니다. 일부 국가의 경우 CLDR 국가 코드가 2자리 ISO 국가 코드와 다릅니다. 또한 CLDR 지역 코드는 지원되지 않습니다.

속성당 프로모션은 500개로 제한됩니다. '프로모션 1개 삭제' 예시를 참고하여 속성에서 프로모션을 삭제하세요.

기본 메시지

다음 예시에서는 기본 Promotions 메시지를 보여줍니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
         <DateRange start="2020-09-01" end="2020-09-30"/>
      </BookingDates>
      <BookingWindow min="7" max="330"/>
      <CheckinDates>
         <DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
      </CheckinDates>
      <CheckoutDates>
         <DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
      </CheckoutDates>
      <Devices>
        <Device type="mobile"/>
        <Device type="tablet"/>
      </Devices>
      <Discount percentage="20" applied_nights="2"/>
      <LengthOfStay min="2" max="14"/>
      <RatePlans>
         <RatePlan id="234"/>
         <RatePlan id="567"/>
      </RatePlans>
      <RoomTypes>
         <RoomType id="123"/>
         <RoomType id="456"/>
      </RoomTypes>
      <Stacking type="base"/>
      <UserCountries>
        <Country code="US"/>
        <Country code="GB"/>
      </UserCountries>
    </Promotion>
  </HotelPromotions>
</Promotions>


인벤토리 상태

다음 예에서는 도착일이 임박한 재고가 남은 경우 할인을 만드는 방법을 보여줍니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingWindow max="7"/>
      <Discount percentage="10"/>
      <InventoryCount min="3"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


프로모션 하나 삭제

다음 예시에서는 속성의 프로모션 하나를 삭제하는 방법을 보여줍니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1" action="delete"/>
  </HotelPromotions>
</Promotions>

모든 프로모션 삭제

다음 예는 속성의 모든 프로모션을 삭제하는 방법을 보여줍니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>



모든 프로모션 오버레이

다음 예는 하나 이상의 새 프로모션이 있는 속성에 <HotelPromotions>를 오버레이하는 방법을 보여줍니다. action="overlay"인 경우 저장된 모든 프로모션은 현재 메시지에 지정된 프로모션을 저장하기 전에 삭제됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1" action="overlay">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-09-01" end="2020-09-30"/>
      </BookingDates>
      <Discount percentage="10"/>
      <RoomTypes>
         <RoomType id="123"/>
         <RoomType id="456"/>
      </RoomTypes>
      <RatePlans>
         <RatePlan id="234"/>
         <RatePlan id="567"/>
      </RatePlans>
      <Stacking type="base"/>
    </Promotion>
  </HotelPromotions>
</Promotions>

3가지 스태킹 유형

다음 예에서는 서로 다른 세 가지 프로모션 (base, second, any)이 적용되는 경우를 보여줍니다. 다른 프로모션이 더 나은 할인을 제공하므로 none 프로모션은 적용되지 않습니다. 원래 가격이 100달러인 경우 할인 가격은 72.90달러입니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="10"/>
      <Stacking type="base"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="10"/>
      <Stacking type="second"/>
    </Promotion>
    <Promotion id="3">
      <Discount percentage="10"/>
      <Stacking type="any"/>
    </Promotion>
    <Promotion id="4">
      <Discount percentage="25"/>
      <Stacking type="none"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


스태킹 유형 없음

다음 예는 다른 프로모션의 조합으로 인해 할인이 더 적어 none 프로모션이 사용되는 경우를 보여줍니다. 원래 가격이 100달러인 경우 할인 가격은 75달러입니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="10"/>
      <Stacking type="base"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="10"/>
      <Stacking type="any"/>
    </Promotion>
    <Promotion id="3">
      <Discount percentage="25"/>
      <Stacking type="none"/>
    </Promotion>
  </HotelPromotions>
</Promotions>



예약 기간 범위

다음 예에서는 BookingWindow 요소가 ISO 8601 기간 유형으로 정의된 시작 및 종료 경계와 함께 사용되는 사례를 보여줍니다. 이 예약 기간 제한에 따라 도착 전날 18:00 또는 그 이전에 예약해야 하며, 도착 2일 전 12:00 또는 그 이후에 예약해야 합니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingWindow min="P1DT6H" max="P2DT12H"/>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


예약 날짜 시간 범위

다음 예에서는 BookingDates 요소가 startend 속성과 함께 DateTime 유형으로 사용되는 경우를 보여줍니다. 이 예약 날짜 제한에 따라 2020년 7월 1일 6시 30분과 2020년 7월 2일 18시 45분 사이에 예약이 이루어져야 합니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-07-01T06:30:00" end="2020-07-02T18:45:00"/>
      </BookingDates>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


연도가 없는 기간

다음 예에서는 CheckInDates 요소에 연도 없이 startend 필드가 있는 DateRanges가 포함된 사례를 보여줍니다. 이 예에서는 연도와 관계없이 12월 29일과 1월 2일 사이의 체크인 날짜에 프로모션이 적용됩니다. 새해 경계를 넘는 연도 없는 기간은 유효하지 않으므로 DateRange는 인접한 두 기간으로 표현됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <CheckInDates>
         <DateRange start="12-29" end="12-31"/>
         <DateRange start="01-01" end="01-02"/>
      </CheckInDates>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>



FreeNights 할인

다음 예에서는 지정된 예약 날짜 범위에서 4박을 숙박할 때마다 2박을 50% 할인합니다. 10박 일정의 경우 총 4박이 50% 할인됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
        <DateRange start="2022-01-01" end="2022-05-31"/>
      </BookingDates>
      <Discount>
        <FreeNights stay_nights="4" discount_nights="2" discount_percentage="50" night_selection="cheapest" repeats="true"/>
      </Discount>
    </Promotion>
  </HotelPromotions>
</Promotions>

다음 예에서는 지정된 숙박 기간 범위에서 3박을 숙박할 때마다 1박을 50% 할인합니다. 할인 자격 요건을 충족하는 데는 숙박 기간 중 겹치는 일수만 계산됩니다. 2022년 1월 1일에 체크인하고 2022년 1월 7일에 체크아웃하는 다음 여정의 경우 숙박 자격 요건을 충족하는 숙박일수와 할인이 다음과 같이 적용됩니다.

  • 2022-01-01 (숙박)
  • 2022-01-02 (숙박)
  • 2022-01-03
  • 2022년 1월 4일 (할인)
  • 2022-01-05 (숙박)
  • 2022-01-06 (숙박)
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <StayDates application="overlap">
        <DateRange start="2022-01-01" end="2022-01-02"/>
        <DateRange start="2022-01-04" end="2022-01-06"/>
      </StayDates>
      <Discount>
        <FreeNights stay_nights="3" discount_nights="1" discount_percentage="50" night_selection="last" repeats="true"/>
      </Discount>
    </Promotion>
  </HotelPromotions>
</Promotions>


순위 지정 선택

다음 예에서는 20% 할인과 15% 할인 두 가지를 제공합니다. 평가 중에 순위가 낮은 15% 할인만 적용됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="15" rank="25"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="20" rank="50"/>
    </Promotion>
  </HotelPromotions>
</Promotions>

BestDailyDiscount

다음 예에서는 Discount과 함께 스택된 BestDailyDiscount를 적용하여 2박 숙박을 할인합니다.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
 <HotelPromotions hotel_id="HotelID" action="overlay">
   <Promotion id="general">
     <BestDailyDiscount fixed_amount="20"/>
   </Promotion>
   <Promotion id="may">
     <BestDailyDiscount fixed_amount="50"/>
     <StayDates application="overlap">
        <DateRange start="2023-05-01" end="2023-05-31"/>
     </StayDates>
   </Promotion>
   <Promotion id="fiesta">
     <Discount fixed_amount_per_night="5"/>
     <Stacking type="any"/>
   </Promotion>
 </HotelPromotions>
</Promotions>

2023년 4월 30일부터 2023년 5월 2일까지 2박 숙박을 고려해 보세요. 계산을 위해 가장 큰 할인을 제공하는 최적의 일일 할인 조합이 먼저 찾아집니다.

첫 번째 숙박일의 경우 '일반' 프로모션만 적용 가능하며 고정 할인액은 20입니다.

두 번째 밤에는 '일반' 할인보다 '5월' 프로모션이 더 큰 할인을 제공합니다. 따라서 'may'를 선택하면 고정 할인 금액이 50이 됩니다.

숙박 시 'fiesta' 프로모션이 적용되어 1박당 5달러, 총 10달러로 할인됩니다. 'fiesta'의 스태킹 유형이 any로 설정되어 있으므로 일일 최고 할인 조합과 함께 스태킹할 수 있습니다. base로 설정된 경우 최적의 일일 할인 또는 '피에스타' 할인 조합만 적용됩니다. 자세한 내용은 Stacking 설명을 참고하세요.

`전체적으로 숙박 가격에 20 + 50 + 10 = 80의 고정 금액 할인이 적용됩니다.

응답

구문

PromotionsResponse 메시지는 다음 구문을 사용합니다.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="timestamp"
                    id="message_ID"
                    partner="partner_key">
  <!-- Either Success or Issues are populated. -->
  <Success/>
  <Issues>
    <Issue code="issue_code"
           status="issue_type">
      issue_description
    </Issue>
  </Issues>
</PromotionsResponse>

요소 및 속성

PromotionsResponse 메시지에는 다음과 같은 요소와 속성이 있습니다.

요소 / @Attribute 발생 횟수 유형 설명
PromotionsResponse 1 Complex element 수신된 프로모션 요청 메시지의 성공 여부 또는 문제를 나타내는 루트 요소입니다.
PromotionsResponse / @timestamp 1 DateTime 이 메시지의 생성 날짜 및 시간입니다.
PromotionsResponse / @id 1 string 연결된 프로모션 메시지의 고유 식별자입니다.
PromotionsResponse / @partner 1 string 이 메시지의 파트너 계정입니다.
PromotionsResponse / Success 0..1 Success 프로모션 메시지가 경고, 오류 또는 실패 없이 성공적으로 처리되었음을 나타냅니다.

각 메시지에 <Success> 또는 <Issues>가 있습니다.

PromotionsResponse / Issues 0..1 Issues 프로모션 메시지를 처리하는 중에 발생한 하나 이상의 문제 컨테이너입니다.

각 메시지에 <Success> 또는 <Issues>가 있습니다.

PromotionsResponse / Issues / Issue 1..n Issue 프로모션 메시지를 처리하는 중에 발생한 경고, 오류 또는 실패에 관한 설명입니다. 이러한 문제에 관한 자세한 내용은 피드 상태 오류 메시지를 참고하세요.
PromotionsResponse / Issues / Issue / @code 1 integer 문제의 식별자입니다.
PromotionsResponse / Issues / Issue / @status 1 enum

발생한 문제의 유형입니다.

유효한 값은 warning, error, failure입니다.

성공

다음은 성공적으로 처리된 프로모션 메시지에 대한 응답입니다.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Success/>
</PromotionsResponse>

문제

다음은 오류로 인해 처리되지 않은 프로모션 메시지에 대한 응답입니다.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Issues>
    <Issue code="1001" status="error">Example</Issue>
  </Issues>
</PromotionsResponse>