개요
이 API를 사용하면 가능한 할인을 지정할 수 있습니다. 지정된 프로모션 중에서 Google은 가장 낮은 가격으로 이어지는 요건을 충족하는 프로모션 또는 프로모션 세트를 적용합니다. 조건이 충족될 때 가격을 올리거나 내릴 수 있는 임의의 요금 조정을 지원하는 API를 찾고 있다면 Rate Modifications 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>
요소 및 속성
프로모션 메시지에는 다음과 같은 요소와 속성이 있습니다.
| 요소 / @속성 | 발생 횟수 | 유형 | 설명 | 
|---|---|---|---|
| Promotions | 1 | Complex element | 프로모션 메시지의 루트 요소입니다. | 
| Promotions / @partner | 1 | string | 이 메시지의 파트너 계정입니다. 이 문자열 값은 Hotel Center의 
        계정 설정 페이지에 표시된 '파트너 키' 값입니다. 여러 계정의 피드를 제공하는 백엔드가 있는 경우 이 값은 동일한 계정의  | 
| Promotions / @id | 1 | string | 이 요청 메시지의 고유 식별자입니다. 이 값은 응답 메시지에 반환됩니다. 허용되는 문자는 a~z, A~Z, 0~9, _(밑줄), - (대시)입니다. | 
| Promotions / @timestamp | 1 | DateTime | 이 메시지의 생성 날짜 및 시간입니다. | 
| Promotions / HotelPromotions | 0..n | HotelPromotions | 숙박 시설의 프로모션입니다. 각 프로모션은 단일 숙박 시설에 적용됩니다. 
 | 
| Promotions / HotelPromotions / @hotel_id | 1 | string | 숙박 시설의 고유 식별자입니다. 이 값은 호텔 목록 피드의 <listing>요소에서<id>를 사용하여 지정된 호텔 ID와 일치해야 합니다. 호텔 ID는 Hotel Center에도 표시됩니다. | 
| Promotions / HotelPromotions / @action | 0..1 | enum | 지정된 경우 값은  지정하지 않으면 현재 메시지에 지정된 각 프로모션은 다음 중 하나입니다. 
 | 
| Promotions / HotelPromotions / Promotion | 0..99 | Promotion | 숙박 시설의 단일 프로모션입니다.  프로모션을 99개 이상 사용해야 하는 경우 기술계정 관리자 (TAM)에게 문의하세요. | 
| Promotions / HotelPromotions / Promotion / @id | 1 | string | 프로모션의 고유 식별자입니다. 허용되는 최대 문자 수는 40자(영문 기준)입니다. 허용되는 문자는 a~z, A~Z, 0~9, _ (밑줄), - (하이픈), .입니다. (마침표)를 누릅니다. | 
| Promotions /HotelPromotions / Promotion / @action | 0..1 | enum | 지정된 경우 값은  
 | 
| 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 | 기간의 시작 날짜 또는 날짜 시간입니다 (속성의 시간대를 기준으로 함). 
 | 
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end | 0..1 | Date 또는 DateTime | 기간의 종료일 또는 날짜 시간(숙박 시설의 시간대를 기준으로 함)입니다(기간에 포함). 
 | 
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week | 0..1 | string | 기간에 허용되는 요일입니다. 지정하지 않으면 기간 내 모든 날짜가 허용됩니다. 문자열의 각 문자는 하루를 지정합니다. 예를 들어 'MTWHF'는 기간에 평일이 허용됨을 지정합니다. 유효한 문자는 다음과 같습니다. 
 모든 문자 조합이 유효합니다. | 
| Promotions / HotelPromotions / Promotion / BookingWindow | 0..1 | BookingWindow | 체크인 날짜를 기준으로 예약이 이루어져야 하는 기간을 지정합니다 (숙박 시설의 시간대를 기준으로 함). 예를 들어 예약 기간은 체크인 날짜로부터 최소 7일 이상, 최대 180일 이내로 설정할 수 있습니다. | 
| Promotions / HotelPromotions / Promotion / BookingWindow / @min | 0..1 | integer or duration | 프로모션이 적용되려면 예약 시 체크인까지의 최소 기간이 경과해야 합니다. 지정되지 않거나 값이 0이면 최솟값이 없습니다.유효한 값 유형은 다음과 같습니다. 
 | 
| Promotions / HotelPromotions / Promotion / BookingWindow / @max | 0..1 | integer or duration | 프로모션이 적용되도록 예약해야 하는 체크인 전 최대 일수입니다. 지정되지 않거나 값이 0인 경우 최대값은 없습니다.유효한 값 유형은 다음과 같습니다. 
 | 
| Promotions / HotelPromotions / Promotion / Ceiling | 0..1 | Ceiling | 프로모션이 적용된 후 요금을 설정할 수 있는 최대 값에 대한 제한을 정의합니다. 프로모션은 항상  중복 적용이 구성된 경우  예: 
 
 계산 순서는 다음과 같습니다. 
 60이 더 엄격한 전체 상한선이라는 사실은 관련이 없습니다. 자체 프로모션에만 유효하며 전체 프로모션 스택에 걸쳐 단일 상한선이 있을 수 없기 때문입니다. | 
| Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float | 할인이 적용된 후 숙박 요금을 설정할 수 있는 최대 금액입니다. 
 
 | 
| Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor | 프로모션이 적용된 후 요금을 설정할 수 있는 최소값에 대한 제한을 정의합니다. 프로모션은 항상  무료 숙박에  중복 적용이 구성된 경우  예: 
 
 계산 순서는 다음과 같습니다. 
 90이 전체적으로 더 엄격한 하한선이라는 사실은 관련이 없습니다. 자체 프로모션에만 유효하며 전체 프로모션 스택에 걸쳐 단일 하한선을 설정할 수 없기 때문입니다. | 
| Promotions / HotelPromotions / Promotion / Floor / @amount_per_night | 1 | float | 할인이 적용된 후 1박 요금을 설정할 수 있는 최소 금액입니다. 
 
 | 
| Promotions / HotelPromotions / Promotion / CheckinDates | 0..1 | CheckinDates | 프로모션이 적용되기 위해 체크인이 이루어져야 하는 시점을 정의하는 하나 이상의 기간을 위한 컨테이너입니다. | 
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange | 1..20 | DateRange | 프로모션이 적용되려면 체크인이 언제 이루어져야 하는지 지정하는 기간입니다. 하나 이상의 프로모션을 삭제하는 경우에는 이 요소가 필요하지 않습니다. YearlessDate 형식도 지원됩니다. 
 | 
| 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'는 기간에 평일이 허용됨을 지정합니다. 유효한 문자는 다음과 같습니다. 
 모든 문자 조합이 유효합니다. | 
| Promotions / HotelPromotions / Promotion / CheckoutDates | 0..1 | CheckoutDates | 프로모션이 적용되기 위해 결제가 이루어져야 하는 시점을 정의하는 하나 이상의 기간을 위한 컨테이너입니다. | 
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange | 1..20 | DateRange | 프로모션이 적용되기 위해 체크아웃이 이루어져야 하는 기간을 지정하는 날짜 범위입니다. 하나 이상의 프로모션을 삭제하는 경우에는 이 요소가 필요하지 않습니다. YearlessDate 형식도 지원됩니다. 
 | 
| 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'는 기간에 평일이 허용됨을 지정합니다. 유효한 문자는 다음과 같습니다. 
 모든 문자 조합이 유효합니다. | 
| 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 | 
 이 프로모션에 적용할 할인을 지정합니다. | 
| Promotions / HotelPromotions / Promotion / Discount / @percentage | 0..1 | float | 
 할인율을 지정하는 0~100 사이의 십진수 값입니다.
           예: 
 | 
| Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base | 0..1 | float | 
 기본 할인율을 지정하는 0~100 사이의 십진수 값입니다.  
 예: 
 | 
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount | 0..1 | float | 
 
 예: 
 | 
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night | 0..1 | float | 
 각  예: 
 | 
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price | 0..1 | float | 
 
 
 예: 
 | 
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night | 0..1 | float | 
 
 
 
 예: 
 | 
| Promotions / HotelPromotions / Promotion / Discount / @applied_nights | 0..1 | integer | 
 할인이 적용되는 숙박 일수로, 가장 저렴한 숙박부터 시작됩니다. 1~99 사이의 정수여야 합니다. 지정하지 않으면 모든 숙박에 할인이 적용됩니다. | 
| Promotions / HotelPromotions / Promotion / Discount / FreeNights | 0..1 | FreeNights | 최소 숙박 일수가 충족되는 경우 숙박 기간 중 특정 밤에 적용되는 할인을 지정합니다. 이 요소가 사용되면 상위 Discount요소의 속성은 허용되지 않습니다. | 
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights | 1 | integer | 할인을 적용하기 위해 필요한 숙박 일수입니다. 각 할인은 숙박 일수의 별도 세그먼트에 적용됩니다. 예를 들어  | 
| 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 | 할인을 여러 숙박 일수 세그먼트에 적용할 수 있는지 여부입니다.  예를 들어  | 
| Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | 이 프로모션에 순위를 할당하고 순위 선택으로 선택합니다. 이 경우 순위가 가장 낮은 프로모션만 적용되도록 선택됩니다. 값은 1~99 사이여야 합니다(양 끝값 포함). 여러 프로모션이 동일한 순위를 공유하는 경우 하나가 임의로 선택되어 적용됩니다. | 
| Promotions / HotelPromotions / Promotion / BestDailyDiscount | 1 | Discount | 
 숙박 1박에 적용할 수 있는 일일 할인을 지정합니다. 이는 전체 숙박에 할인을 적용하는  각 숙박 시설에는 '최고의 일일'로 간주되는 프로모션 그룹이 하나 있을 수 있습니다. 즉, 숙박하는 밤마다 요건을 충족하고 해당 밤에 가장 큰 할인을 제공하는 단일 '최고의 일일' 프로모션이 선택되어 적용될 수 있습니다. 
 이 유형의 할인으로  | 
| Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage | 0..1 | float | 
 할인율을 지정하는 0~100 사이의 십진수 값입니다.
           예: 
 | 
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount | 0..1 | float | 
 단일  예: 
 | 
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price | 0..1 | float | 
 
 예: 
 | 
| 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 처리를 트리거하는 멤버십 요금 규칙의 컨테이너입니다. 
 | 
| 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 | 프로모션을 결합하는 방법을 지정합니다. 지정하지 않으면 '유형'이 base으로 간주됩니다. | 
| Promotions / HotelPromotions / Promotion / Stacking / @type | 1 | enum | 이 설정에 따라 단일 요금에 여러 프로모션을 적용할 수 있습니다. 
 허용되는 조합 중 가장 큰 할인을 제공하는 프로모션 세트가 요금에 적용됩니다. | 
| Promotions / HotelPromotions / Promotion / StayDates | 0..1 | StayDates | 시즌별 할인을 적용하는 등 프로모션 적용 방식을 결정하는 하나 이상의 기간을 위한 컨테이너입니다. | 
| Promotions / HotelPromotions / Promotion / StayDates / @application | 1 | enum | 프로모션을 적용하는 방법을 설명합니다. 유효한 값은 다음과 같습니다. 
 이 속성은 항상 지정되어야 합니다. 
 | 
| Promotions / HotelPromotions / Promotion / StayDates / DateRange | 1..99 | DateRange | 프로모션이 적용될 날짜를 지정하는 기간입니다. YearlessDate 형식도 지원됩니다. 
 특정 요일에 프로모션을 허용하도록  | 
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start | 0..1 | Date or YearlessDate | 기간의 시작일(숙박 시설의 시간대를 기준으로 함)입니다(기간에 포함). 이 날짜는 end날짜 이전이거나 그와 같아야 합니다.start가 지정되지 않으면 시작일 측면에서 날짜 범위가 사실상 무제한입니다.
 | 
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end | 0..1 | Date or YearlessDate | 기간의 종료일(숙박 시설의 시간대 기준)입니다(기간에 포함). 이 날짜는 start날짜와 같거나 그 이후여야 합니다.end가 지정되지 않으면 날짜 범위는start날짜 이후로 사실상 무제한입니다.
 | 
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week | 0..1 | string | 기간에 허용되는 요일입니다. 지정하지 않으면 기간 내 모든 날짜가 허용됩니다. 문자열의 각 문자는 하루를 지정합니다. 예를 들어 'MTWHF'는 기간에 평일이 허용됨을 지정합니다. 유효한 문자는 다음과 같습니다. 
 모든 문자 조합이 유효합니다. | 
| Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | 프로모션 대상 사용자 위치 (국가)를 나열하는 컨테이너입니다. 지정된 경우 나열된 국가의 자격 요건을 충족하는 사용자에게만 할인 요금이 제공됩니다. 지정하지 않으면 모든 국가의 자격 요건을 충족하는 사용자에게 할인 요금이 제공됩니다. | 
| Promotions / HotelPromotions / Promotion / UserCountries / @type | 0..1 | enum | UserCountries 사양의 유형입니다. 유효한 값은  UserCountries  UserCountries  UserCountries  | 
| 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>
프로모션 1개 삭제하기
다음 예는 숙박 시설의 프로모션 하나를 삭제하는 방법을 보여줍니다.
<?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 Duration 유형으로 정의된 시작 및 종료 경계와 함께 사용되는 사례를 보여줍니다. 이 예약 기간 제한사항에 따라 도착 전날 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>
예약 날짜 DateTime 경계
다음 예는 BookingDates 요소가 start 및 end 속성과 함께 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 요소에 연도가 없는 start 및 end 필드가 있는 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-01-04 (할인)
- 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원이 적용됩니다.
2번째 밤에는 '5월' 프로모션이 '일반' 할인보다 더 큰 할인을 제공합니다. 따라서 'may'가 선택되면 고정 할인 금액은 50입니다.
그러면 숙박에 대해 'fiesta' 프로모션이 적용되어 1박당 5, 000원 또는 총 10, 000원의 할인이 적용됩니다. 'fiesta'의 스택 유형이 any로 설정되어 있으므로 가장 좋은 일일 할인 조합과 함께 적용할 수 있습니다. base로 설정된 경우 최적의 일일 할인 또는 'fiesta' 할인 조합만 적용됩니다. 자세한 내용은 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 메시지에는 다음과 같은 요소와 속성이 있습니다.
| 요소 / @속성 | 발생 횟수 | 유형 | 설명 | 
|---|---|---|---|
| PromotionsResponse | 1 | Complex element | 수신된 프로모션 요청 메시지의 성공 또는 문제를 나타내는 루트 요소입니다. | 
| PromotionsResponse / @timestamp | 1 | DateTime | 이 메시지의 생성 날짜 및 시간입니다. | 
| PromotionsResponse / @id | 1 | string | 연결된 프로모션 메시지의 고유 식별자입니다. | 
| PromotionsResponse / @partner | 1 | string | 이 메시지의 파트너 계정입니다. | 
| PromotionsResponse / Success | 0..1 | Success | 프로모션 메시지가 경고, 오류, 실패 없이 성공적으로 처리되었음을 나타냅니다. 각 메시지에  | 
| PromotionsResponse / Issues | 0..1 | Issues | 프로모션 메시지를 처리하는 중에 발생한 하나 이상의 문제를 위한 컨테이너입니다. 각 메시지에  | 
| PromotionsResponse / Issues / Issue | 1..n | Issue | 프로모션 메시지를 처리하는 중에 발생한 경고, 오류 또는 실패에 관한 설명입니다. 이러한 문제에 관한 자세한 내용은 피드 상태 오류 메시지를 참고하세요. | 
| PromotionsResponse / Issues / Issue / @code | 1 | integer | 문제의 식별자입니다. | 
| PromotionsResponse / Issues / Issue / @status | 1 | enum | 발생한 문제의 유형입니다. 유효한 값은  | 
예
성공
다음은 처리가 완료된 프로모션 메시지에 대한 응답입니다.
<?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>