Promocje

Omówienie

Ten interfejs API pozwala określić możliwe rabaty. spośród określonych promocji, Google stosuje kwalifikującą się promocję lub zestaw promocji, które prowadzą do najniższą cenę. Jeśli szukasz interfejsu API, który obsługuje dowolne stawki korekty, które mogą podnieść lub obniżyć cenę, gdy określone warunki to zastanów się nad Rate Modifications API. Jeśli dostępne są oba interfejsy API, zmiany stawek zostaną zastosowane przed promocji.

Żądania

Składnia

Komunikat Promotions ma taką składnię:

<?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, 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" 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>

Elementy i atrybuty

Wiadomość z promocjami składa się z tych elementów i atrybutów:

Element / @Atrybut Wystąpienia Typ Opis
Promotions 1 Complex element Główny element komunikatu promocyjnego.
Promotions / @partner 1 string Konto partnera, z którego pochodzi ta wiadomość. Ta wartość ciągu znaków to parametr „Klucz partnera” wartość podana na Strona Ustawienia konta w Hotel Center.

Jeśli masz backend, który dostarcza pliki danych dla dla wielu kont, ta wartość musi odpowiadać ID wartość atrybutu określona w <RequestorID> element <OTA_HotelRateAmountNotifRQ> oraz <OTA_HotelAvailNotifRQ> wiadomości dla tego samego koncie.

Promotions / @id 1 string Unikalny identyfikator tej wiadomości z żądaniem. Ta wartość jest zwracana w wiadomości z odpowiedzią. Dozwolone znaki to a–z, A–Z, 0–9, _ (podkreślenie) i - (myślnik).
Promotions / @timestamp 1 DateTime Data i godzina utworzenia tej wiadomości.
Promotions / HotelPromotions 0..n HotelPromotions

Promocje obiektu. Każda promocja dotyczy jednej usłudze.

Jeśli nie jest używany identyfikator <Stacking>, promocja z największym rabatem jest stosowana do rezerwacji, kwalifikuje się wiele promocji.

Promotions / HotelPromotions / @hotel_id 1 string Unikalny identyfikator usługi. Ta wartość musi pasować do Identyfikator hotelu określony za pomocą atrybutu <id> w elemencie <listing> w pliku danych z listą hoteli. Identyfikator hotelu jest też podany w Hotel Center.
Promotions / HotelPromotions / @action 0..1 enum

Jeśli została określona, wartość musi być "overlay" Gdy wartość wynosi "overlay", wszystkie przechowywane promocje są usuwane przed zapisaniem określonych promocji. w bieżącej wiadomości.

Jeśli nie podasz żadnej promocji, każda promocja określona w bieżącej wiadomość to:

  • Added (jeśli żadna z zapisanych promocji nie ma parametru id)
  • Updated (jeśli przechowywana promocja ma taką samą wartość) id).
  • Deleted (jeśli przechowywana promocja ma taką samą wartość) id i wartość atrybutu action dla promocji określonej w bieżącej wiadomości to "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

Pojedyncza promocja obiektu. Pamiętaj, że jeśli action="overlay" i <Promotion> są nie określono, wszystkie promocje tego miejsca zostaną usunięte.

Jeśli chcesz wykorzystać więcej niż 99 promocji, skontaktuj się z technicznym menedżerem konta (TAM).

Promotions / HotelPromotions / Promotion / @id 1 string Unikalny identyfikator promocji. Maksymalna liczba dozwolona liczba znaków to 40. Dozwolone znaki to a–z, A–Z, 0–9, _ (podkreślenie), - (myślnik) i . (kropka).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Jeśli została określona, wartość musi wynosić delete. Jeśli nie, i promocja z tym samym identyfikatorem id nie jest przechowywana, promocja jest przechowywana. W przeciwnym razie, jeśli nie zostanie określona, a promocja z atrybutem taka sama cena (id), istniejąca promocja zostanie Zaktualizowano.

Jeśli określony jest atrybut delete, przechowywana promocja z atrybutem ten sam element typu id został usunięty. Jeśli używasz parametru delete, nie umieszczaj w nim żadnych elementów podrzędnych <Promotion> Poza tym delete nie dozwolone w połączeniu z zasadą <HotelPromotions action="overlay"/>.

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates Kontener na co najmniej 1 zakres, który określa, kiedy musi mieć miejsce rezerwacja aby można było skorzystać z promocji.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange Zakres określający, kiedy wymagana jest rezerwacja, aby promocja się zakończyła zastosowano.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date lub DateTime

datę rozpoczęcia lub datę i godzinę (na podstawie strefy czasowej usługi); włącznie z zakresu.

  • Data lub data i godzina określone przez funkcję start muszą być jest wcześniejsza niż data lub godzina określone przez end
  • Jeśli start nie zostanie określony, zakres jest efektywnie bez ograniczeń co do czasu rozpoczęcia.
  • Jeśli start ma podaną datę „RRRR-MM-DD”, oznacza to, że jest interpretowany jako data i godzina „RRRR-MM-DDT00:00:00”.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date lub DateTime

datę zakończenia lub datę i godzinę (na podstawie strefy czasowej usługi); włącznie z zakresu.

  • Data lub data i godzina określone przez funkcję end muszą być późniejsze niż data lub godzina określone przez start
  • Jeśli end nie zostanie określony, zakres jest efektywnie bez ograniczeń co do czasu zakończenia.
  • Jeśli jako datę end podano „RRRR-MM-DD”, oznacza to, że jest ona interpretowany jako data i godzina „RRRR-MM-DDT23:59:59”.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

Dni tygodnia, które są dozwolone w zakresie dat. Jeśli nie, oznacza to, że w zakresie dat dozwolone są wszystkie dni. Każdy wskazuje dzień. Na przykład „MTWHF”. określa że dni powszednie są dozwolone w danym zakresie dat.

Prawidłowe znaki to:

  • M na poniedziałek
  • T na wtorek
  • W na środę
  • H na czwartek
  • F na piątek
  • S na sobotę
  • U na niedzielę

Obowiązuje każda kombinacja znaków.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow Określa przedział czasu, w którym należy dokonać rezerwacji, względem data zameldowania (według strefy czasowej obiektu). Na przykład parametr okres rezerwacji można ustawić na co najmniej 7 dni, ale nie więcej niż 180 dni, przed zameldowaniem.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration Minimalny czas trwania rezerwacji, przed którą należy się zameldować , aby zastosować promocję. Jeśli nie został określony lub jego wartość wynosi 0, nie ma minimalnej wartości.

Prawidłowe typy wartości to:

  • Liczba całkowita: liczba dni przed datą zameldowania datę. Na przykład wartość 30 oznacza promocja dotyczy tylko rezerwacji dokonanych co najmniej 30 dni przed datę zameldowania.
  • Czas trwania w formacie ISO 8601 (dni, godziny i minuty): liczba dni (i opcjonalnie kilka godzin/minut) przed datą zameldowania. Dla: przykład, wartość P30D wskazuje tylko promocję dotyczy rezerwacji dokonanych co najmniej 30 dni przed datą zameldowania. O o wartości P30DT6H wymagane jest dokonanie rezerwacji najpóźniejszej do 18:00 w dniu 30 dnia przed przybyciem.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration Maksymalna liczba dni przed datą zameldowania, w której możliwa jest rezerwacja , aby zastosować promocję. Jeśli nie został określony lub jego wartość wynosi 0, nie ma maksymalnej wartości.

Prawidłowe typy wartości to:

  • Liczba całkowita: liczba dni przed datą zameldowania datę. Na przykład wartość 30 oznacza promocja dotyczy tylko rezerwacji dokonanych najpóźniej 30 dni przed datę zameldowania.
  • Czas trwania w formacie ISO 8601 (dni, godziny i minuty): liczba dni (i opcjonalnie kilka godzin/minut) przed datą zameldowania. Dla: przykład, wartość P30D wskazuje tylko promocję dotyczy rezerwacji najpóźniej 30 dni przed datą zameldowania. O o wartości P30DT6H wymagana jest rezerwacja najpóźniejsza od 18:00 w dniu 30 dnia przed przybyciem.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Określa ograniczenia dotyczące maksymalnej wartości stawki po zastosowaniu promocji.

Promocje muszą zawsze określać atrybut <Discount> lub <BestDailyDiscount>, tak aby utworzyć promocję, która ma zastosowanie tylko do <Ceiling>, jedną z opcji jest ustawienie <Discount> z percentage wartością 0.

Jeśli skonfigurowano stosowanie, wiele promocji z <Ceiling> może odnosić się do jednego pobytu. Każda promocja zastosuje rabat, bezpośrednio po przekroczeniu limitu. ten przykład pokazuje, w jaki sposób każdy pułap przekłada się na następny obliczanie awansów.

Przykład:

Cena pobytu na 1 noc w miejscu, w którym jest AmountBeforeTax 100 i powstaje stos dwóch promocji:

  1. Promocja z typem nakładania base, fixed_amount z 25 i sufit amount_per_night z 60
  2. Promocja z typem nakładania second, fixed_amount z 25 i sufit amount_per_night z 90

Oto kolejność obliczeń:

  1. Promocja base jest stosowana jako pierwsza i rabaty AmountBeforeTax do 75, a potem sufit obniża się go do 60.
  2. Promocja second obniża AmountBeforeTax z 60 na 35. To jest pod sufitem 90, więc drugi sufit nie jest stosowany. Ostateczna stawka wynosi 35

Fakt, że 60 to węższy pułap ogólny, nie ma znaczenia, jest ważna tylko dla własnej promocji i nie może być na cały stos promocji.

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

Maksymalna kwota, jaką można ustawić cenę za noc po zostanie zastosowany rabat.

Jeśli określono również element <Floor>, musi być ustawiona na wartość większą lub równą amount_per_night w <Floor>

Kwota amount_per_night zostanie uwzględniona w podatkach i opłatach, gdy są wliczone w cenę za noc przy wykorzystaniu AmountAfterTax, ale nie te określone za pomocą funkcji TaxFeeInfo.

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

Określa ograniczenia dotyczące minimalnej wartości, na którą można ustawić stawkę po zastosowaniu promocji.

Promocje muszą zawsze określać atrybut <Discount> lub <BestDailyDiscount>, tak aby utworzyć promocję, która ma zastosowanie tylko do <Floor>, jedną z opcji jest ustawienie <Discount> z percentage wartością 0.

Do działania ma nadal zastosowanie logika <Floor> <FreeNights> rabatów, nawet jeśli podczas bezpłatnej nocy Zastosowano zniżkę w wysokości 100%.

Jeśli skonfigurowano stosowanie, wiele promocji z <Floor> może odnosić się do jednego pobytu. Każda promocja stosuje rabat, a zaraz po nim następuje jego wartość minimalna. ten przykład pokazuje, jak każde piętro wpływa na następne piętro. obliczanie awansów.

Przykład:

Cena pobytu na 1 noc w miejscu, w którym jest AmountBeforeTax 100 i powstaje stos dwóch promocji:

  1. Promocja z typem nakładania base, fixed_amount z 25 i 1 piętro amount_per_night z 90
  2. Promocja z typem nakładania second, fixed_amount z 25 i 1 piętro amount_per_night z 60

Oto kolejność obliczeń:

  1. Promocja base jest stosowana jako pierwsza i rabaty AmountBeforeTax do 75, a potem podnosi się do 90.
  2. Promocja second obniża AmountBeforeTax od 90 do 65. To znajduje się nad podłogą ma wartość 60, więc drugie piętro nie jest stosowane. Ostateczna stawka wynosi 65

Fakt, że 90 to bardziej rygorystyczna ogólna cena minimalna nie ma znaczenia, jest ważna tylko dla własnej promocji i nie może być który obejmuje cały stos promocji.

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

Minimalna kwota, jaką można ustawić cenę za noc po zostanie zastosowany rabat.

Jeśli określono również element <Ceiling>, musi być ustawiona na wartość mniejszą lub równą amount_per_night w <Ceiling>

Kwota amount_per_night zostanie uwzględniona w podatkach i opłatach, gdy są wliczone w cenę za noc przy wykorzystaniu AmountAfterTax, ale nie te określone za pomocą funkcji TaxFeeInfo.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates kontener dla jednego lub kilku zakresów dat, które określają, kiedy należy się zameldować. .
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

Zakres dat, w którym należy się zameldować w celu skorzystania z promocji można zastosować. Ten element nie jest wymagany, jeśli usuwasz co najmniej jeden promocji.

Obsługiwany jest też format YearlessDate.

  • Jeśli wartość start lub end jest bez roku date, oba muszą być wypełnione jako daty bez roku.
  • Zakresy dat bez roku nie mogą obejmować początku nowego roku. Zamiast tego: przedstawiają zakres w postaci dwóch sąsiednich zakresów dat. Przykład: Pole {"12-29", "01-05"} może być wyświetlane jako {"12-29", "12-31"} oraz {"01-01", "01-05"}
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate Data rozpoczęcia (na podstawie strefy czasowej usługi) włącznie z datą rozpoczęcia zakres dat. Ta data nie może być wcześniejsza niż Data: end. Jeśli nie określono start, data jest faktycznie nieograniczony w zakresie daty rozpoczęcia.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate Data zakończenia (na podstawie strefy czasowej usługi) włącznie z datą zakończenia zakresu dat. Ta data musi być taka sama jak start lub później datę. Jeśli nie określono end, data jest faktycznie nieograniczony w zakresie daty zakończenia.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

Dni tygodnia, które są dozwolone w zakresie dat. Jeśli nie, oznacza to, że w zakresie dat dozwolone są wszystkie dni. Każdy wskazuje dzień. Na przykład „MTWHF”. określa że dni powszednie są dozwolone w danym zakresie dat.

Prawidłowe znaki to:

  • M na poniedziałek
  • T na wtorek
  • W na środę
  • H na czwartek
  • F na piątek
  • S na sobotę
  • U na niedzielę

Obowiązuje każda kombinacja znaków.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates Kontener na co najmniej jeden zakres dat, który określa moment realizacji transakcji musi wystąpić, aby promocja została zastosowana.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

Zakres dat, w którym należy dokonać płatności, aby promocja można zastosować. Ten element nie jest wymagany, jeśli: usuwania co najmniej jednej promocji.

Obsługiwany jest też format YearlessDate.

  • Jeśli wartość start lub end jest całkowita date, oba te muszą być wypełnione jako daty bez roku.
  • Zakresy dat bez roku nie mogą obejmować początku nowego roku. Zamiast tego: przedstawiają zakres w postaci dwóch sąsiednich zakresów dat. Przykład: Pole {"12-29", "01-05"} może być przedstawiane jako {"12-29", "12-31"} i {"01-01", "01-05"}
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate Data rozpoczęcia (na podstawie strefy czasowej usługi) włącznie z datą rozpoczęcia zakres dat. Ta data nie może być wcześniejsza niż Data: end. Jeśli nie określono start, data jest faktycznie nieograniczony w zakresie daty rozpoczęcia.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate Data zakończenia (na podstawie strefy czasowej usługi) włącznie z datą zakończenia zakresu dat. Ta data musi być taka sama jak start lub później datę. Jeśli nie określono end, data jest faktycznie nieograniczony w zakresie daty zakończenia.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

Dni tygodnia, które są dozwolone w zakresie dat. Jeśli nie, oznacza to, że w zakresie dat dozwolone są wszystkie dni. Każdy wskazuje dzień. Na przykład „MTWHF”. określa że dni powszednie są dozwolone w danym zakresie dat.

Prawidłowe znaki to:

  • M na poniedziałek
  • T na wtorek
  • W na środę
  • H na czwartek
  • F na piątek
  • S na sobotę
  • U na niedzielę

Obowiązuje każda kombinacja znaków.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices Kontener do wyświetlania listy urządzeń użytkowników, które spełniają wymagania promocji. Jeśli została określona, tylko kwalifikujący się użytkownicy na wymienionych urządzeniach zaoferujemy obniżoną stawkę. Jeśli nie określono tego ustawienia, kwalifikujący się użytkownicy urządzenia otrzymują obniżoną cenę.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device Określa jeden typ urządzenia użytkownika, które kwalifikuje się do promocji.
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum Typ urządzenia. Wartością musi być desktop, tablet lub mobile.
Promotions / HotelPromotions / Promotion / Discount 1 Discount

Dokładnie jedno z tych elementów: Discount lub Trzeba określić BestDailyDiscount.

Określa rabat stosowany w przypadku tej promocji.

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

Dokładnie jeden z tych elementów: percentage, fixed_amount, fixed_amount_per_night fixed_price, lub fixed_price_per_night to

Wartość dziesiętna od 0 do 100, która określa rabat procentowy. Zostanie on zastosowany do AmountAfterTax (lub AmountBeforeTax, jeśli AmountAfterTax nie jest ).

Przykłady:

  • Jeśli AmountAfterTax to 100, a percentage to 20, to

    współczynnik promocji = AmountAfterTax * (1 – wartość procentowa rabat)

    80,00 = 100 * (1 – 0,2)

  • Jeśli AmountBeforeTax to 100, percentage to 20, a TaxFeeInfo określa podatek w wysokości 10, a następnie

    współczynnik promocji = AmountBeforeTax * (1 – wartość procentowa rabat) + podatek

    90,00 = 100 * (1 - 0,2) + 10

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

Dokładnie jeden z tych elementów: percentage, fixed_amount, fixed_amount_per_night fixed_price, lub fixed_price_per_night to

Ustalona kwota do odjęcia od sumy wartości AmountAfterTax cen za noc (lub suma AmountBeforeTax cen za noc, jeśli nie podano wartości (AmountAfterTax). Przyjmuje się, w tej samej walucie co stawki za noc. Jeśli jest większa niż suma cen za noc, wynik wyniesie zero.

Przykłady:

  • Jeśli mamy wycenę za 1 noc, pobyt AmountBeforeTax – 90 lat, AmountAfterTax to 100 i fixed_amount to 20, to

    współczynnik promocji = AmountAfterTax – stały rabat

    80,00 = 100 – 20

  • Jeśli mamy wycenę za 1 noc, pobyt AmountBeforeTax to 100, fixed_amount wynosi 20, a TaxFeeInfo określa podatek w wysokości 8%,

    współczynnik promocji = (AmountBeforeTax – stałe rabat) * (1 + podatek procentowy)

    86,40 = (100 – 20) * 1,08

  • Jeśli mamy wycenę za 1 noc, pobyt AmountBeforeTax to 50, fixed_amount to 60, a TaxFeeInfo określa podatek w wysokości 10, wtedy

    współczynnik promocji = (AmountBeforeTax – stałe rabat) * podatek

    10.00 = 0 + 10

  • Jeśli mamy wycenę noclegu na 3 noce, AmountAfterTax mają wartości 100, 110 i 120; oraz fixed_amount to 150, a potem

    współczynnik promocji = suma(AmountAfterTax) – (stała wartość) rabat)

    180,00 = (100 + 110 + 120) – 150

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

Dokładnie jeden z tych elementów: percentage, fixed_amount, fixed_amount_per_night fixed_price, lub fixed_price_per_night to

Stały rabat stosowany do każdego z tych elementów: AmountAfterTax za noc (lub najtańsze N, jeśli określono applied_nights). Jeśli Wartość AmountAfterTax nie została określona, ale jest stosowana do AmountBeforeTax Przyjmuje się, w tej samej walucie co stawki za noc. Jeśli Parametr fixed_amount_per_night jest większy niż za noc, wówczas stawka za noc zostanie zredukowana do zera – nie może spowodować, że cena za noc będzie ujemna.

Przykłady:

  • Jeśli mamy wycenę noclegu na 3 noce, AmountAfterTax mają wartości 100, 110 i 120; oraz fixed_amount_per_night to 10, a potem

    współczynnik promocji = suma(AmountBeforeTax – stała kwota rabat)

    300,00 = ((100 - 10) + (110 – 10) + (120 – 10))

  • Jeśli mamy wycenę noclegu na 3 noce, AmountAfterTax mają następujące wartości: 10, 50 i 100; oraz fixed_amount_per_night ma 20 lat, a potem

    współczynnik promocji = suma(AmountAfterTax – stała kwota rabat)

    110,00 = (0 + (50 - 20) + (100 – 20))

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

Dokładnie jeden z tych elementów: percentage, fixed_amount, fixed_amount_per_night fixed_price, lub fixed_price_per_night to

Jeśli określono stawki za noc w usłudze AmountAfterTax, ustawia cenę za pobyt, w tym podatki i opłaty, na określoną wartość. Jeśli określono AmountBeforeTax, niezależnie od tego, czy określono AmountAfterTax, ustawia to cenę przed naliczeniem podatku za pobyt o określonej wartości. Przyjmuje się, w tej samej walucie co stawki za noc.

Jeśli AmountAfterTax ma odzwierciedlać procentowego podatku, a potem ustawić stałą cenę dla AmountBeforeTax może spowodować nieprawidłowe informacje o podatkach i opłatach. Ogólnie zalecamy używanie właściwości TaxFeeInfo aby określić podatki i opłaty.

Przykłady:

  • Jeśli mamy wycenę za 1 noc, pobyt AmountBeforeTax – 90 lat, AmountAfterTax to 100 i fixed_price wynosi 80, a stawka promocji wynosi 80.
  • Jeśli mamy wycenę za 1 noc, pobyt AmountBeforeTax to 100, fixed_amount wynosi 80, a TaxFeeInfo określa podatek w wysokości 8%,

    stawka promocji = stała cena * (1 + podatek procentowy)

    86,40 = 80 * 1,08

  • Jeśli mamy wycenę noclegu na 3 noce, AmountAfterTax mają wartości 100, 110 i 120; oraz fixed_amount to 300, a potem

    współczynnik promocji = 300

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

Dokładnie jeden z tych elementów: percentage, fixed_amount, fixed_amount_per_night fixed_price, lub fixed_price_per_night to

Jeśli określono stawki za noc w usłudze AmountAfterTax, ustala cenę za każdą noc, w tym podatki i opłaty, na określoną wartość. Jeśli określono AmountBeforeTax, niezależnie od tego, czy określono AmountAfterTax, ustawia to cenę przed naliczeniem podatku za każdą noc pobytu do określonej wartości. Jest zakłada się, że są w tej samej walucie co stawki za noc.

Jeśli AmountAfterTax ma odzwierciedlać procentowego podatku, a potem ustawić stałą cenę dla AmountBeforeTax może spowodować nieprawidłowe informacje o podatkach i opłatach. Ogólnie zalecamy używanie właściwości TaxFeeInfo aby określić podatki i opłaty.

Jeśli określono applied_nights, nowa cena wynosi dotyczy najtańszych N nocy.

Przykłady:

  • Jeśli mamy wycenę noclegu na 2 noce, AmountBeforeTax mają następujące wartości: 90, 90; Wartości AmountAfterTax to 100, 100; oraz fixed_price to 80, stawka promocji wynosi 80 + 80 = 160.
  • Jeśli mamy wycenę noclegu na 2 noce, AmountBeforeTax to 100, 100; fixed_amount to 80, a TaxFeeInfo określa podatek w wysokości 8%, a następnie stawkę promocyjną to (80 + 80) * 1,08 = 172,8.
  • Jeśli mamy wycenę noclegu na 3 noce, AmountAfterTax mają wartości 100, 110 i 120; oraz fixed_amount to 110, a współczynnik promocji – 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Należy go używać tylko z: percentage lub fixed_amount_per_night.

Liczba nocy, do których stosowany jest rabat, zaczynając od najtańszym rozwiązaniem. Musi być liczbą całkowitą z zakresu od 1 do 99. Jeśli nie podasz żadnej wartości, Rabat dotyczy wszystkich nocy.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Określa rabat na określone noce w przypadku minimalnej długości pobytu jest osiągana. Atrybuty nadrzędnego elementu Discount są niedozwolone, jeśli ten element jest używany.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

Liczba nocy wymaganych do zastosowania rabatu. Każdy zostanie zastosowany do osobnego segmentu noclegów.

Na przykład jeśli chodzi o nocleg na 10 nocy, w którym jest stay_nights 4 (a repeats to true), oznacza to, że mają 2 noclegi segmenty: noce od 1 do 4 oraz od 5 do 8 nocy, 9 i 10 nocleg nie należą do segmentu noclegów.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer Liczba nocy ze zniżką w poszczególnych segmentach noclegów.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float Rabat stosowany do nocy, w których obowiązują rabaty. Jeśli ta wartość jest 50, każda wybrana noc jest niższa o 50%.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Musi to być wartość cheapest lub last. Jeśli last, a potem noce na koniec segmentu pobytu Noce są objęte rabatem. Jeśli cheapest, to najtańsza opcja noce w ramach segmentu pobytów są objęte rabatem.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

Możliwość zastosowania rabatu na wiele noclegów segmentów niestandardowych. Jeśli false, tylko segment noclegów w cenie rabat na początek planu podróży. Jeśli true, to Każdy segment nocy jest objęty rabatem.

Na przykład: jeśli stay_nights to 4, a plan podróży to 10 nocy, a następnie, jeśli repeats to true, to jeśli repeats to 2, segmenty są objęte rabatem (noce 1–4 noce i noce 5–8); ale jeśli repeats to false, a następnie tylko 1 segment zniżka (1–4 noce).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Przypisuje tej promocji pozycję i umożliwia jej wybór na liście wyników, przy czym zostanie zastosowana tylko promocja o najniższej pozycji. Wartości musi mieścić się w przedziale od 1 do 99 włącznie. Jeśli wiele promocji zawiera te same w rankingu, wartość ta jest wybierana i zastosowana losowo.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Dokładnie jedno z tych elementów: Discount lub Trzeba określić BestDailyDiscount.

Określa rabat dzienny, który można zastosować w przypadku noclegu na dłużej. Jest to sprzeczne z zasadą Discount, która ma zastosowanie rabaty na całe pobyty.

Każdy obiekt może mieć 1 grupę promocji, które są uważanych za „najlepsze codziennie”. Oznacza to, że dla każdej nocy singiel „najlepsze codziennie” kwalifikującą się promocję i głęboką został wybrany rabat za tę noc i może zostać zastosowany.

Stacking nie można określić za pomocą parametru BestDailyDiscount „Najlepsze na dziś” rabaty, które zapewniają najniższy rabat za każdą noc są łączone i traktowane jako jeden rabat na pobyt (tj. Discount) z typem grupowania ustawionym na base Ten połączony rabat jest porównywany z łączyć się z innymi kwalifikującymi się promocjami <Rabat>. w celu znalezienia jedną lub kombinację, która zapewnia największy rabat. Zarówno kombinacji wartości BestDailyDiscount lub pojedynczej wybierana jest opcja Discount (w zależności od tego, która z kolei zapewnia niższą cenę); zastosowano do typu stosu base.

Dla tego typu rabatu można określić StayDates, ale pole application musi mieć wartość overlap

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

Dokładnie jeden z tych elementów: percentage, Wymagana jest wartość fixed_amount lub fixed_price.

Wartość dziesiętna od 0 do 100, która określa rabat procentowy. Zostanie on zastosowany do AmountAfterTax (lub AmountBeforeTax, jeśli AmountAfterTax nie jest ).

Przykłady:

  • Jeśli AmountAfterTax za noc pobytu to 100, percentage ma 20 lat, a potem

    współczynnik promocji = AmountAfterTax * (1 – wartość procentowa rabat)

    80,00 = 100 * (1 – 0,2)

  • Jeśli AmountBeforeTax za 1 obiekt za pobyt wynosi 100, percentage to 20, a TaxFeeInfo określa podatek w wysokości 10, a następnie

    współczynnik promocji = AmountBeforeTax * (1 – wartość procentowa rabat) + podatek

    90,00 = 100 * (1 - 0,2) + 10

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

Dokładnie jeden z tych elementów: percentage, Wymagana jest wartość fixed_amount lub fixed_price.

Ustalona kwota do odjęcia od pojedynczej wartości AmountAfterTax cena za noc (lub Cena za noc: AmountBeforeTax, jeśli: nie podano wartości (AmountAfterTax). Przyjmuje się, w tej samej walucie co stawki za noc. Jeśli jest większa niż suma cen za noc, wynik wyniesie zero.

Przykłady:

  • Jeśli AmountBeforeTax za jedną noc to 90 dni, AmountAfterTax to 100 i fixed_amount to 20, to

    współczynnik promocji = AmountAfterTax – stały rabat

    80,00 = 100 – 20

  • Jeśli AmountBeforeTax za 1 noc to 100, fixed_amount to 20, a TaxFeeInfo określa podatek w wysokości 8%, a następnie

    współczynnik promocji = (AmountBeforeTax – stałe rabat) * (1 + podatek procentowy)

    86,40 = (100 – 20) * 1,08

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

Dokładnie jeden z tych elementów: percentage, Wymagana jest wartość fixed_amount lub fixed_price.

Jeśli określono stawki za noc w usłudze AmountAfterTax, ustawia cenę za noc pobytu, w tym podatki i opłaty, na określoną wartość. Jeśli określono AmountBeforeTax, niezależnie od tego, czy określono AmountAfterTax, ustawia to cenę przed naliczeniem podatku za pobyt o określonej wartości. Przyjmuje się, w tej samej walucie co stawki za noc.

Przykłady:

  • Jeśli AmountBeforeTax za jedną noc to 90 dni, AmountAfterTax to 100 i fixed_price wynosi 80, a stawka promocji wynosi 80.
  • Jeśli AmountBeforeTax za 1 noc to 100, fixed_amount to 80, a TaxFeeInfo określa podatek w wysokości 8%, a następnie

    stawka promocji = stała cena * (1 + podatek procentowy)

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Określa ograniczenia liczby pomieszczeń, w których muszą być dostępne aby promocja mogła zostać zastosowana. Rabat jest stosowany tylko do które spełniają wymagania. Niedozwolone w: Rabat fixed_amount. Pamiętaj, że liczba dostępnych sal jest określone za pomocą: OTA_HotelInvCountNotifRQ (InvCount) lub OTA_HotelAvailNotifRQ (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer Minimalna liczba sal, jaka musi być dostępna w ramach promocji który zostanie zastosowany do stawki za noc. Jeśli nie podasz żadnej wartości, nie będzie wartość minimalną.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer Maksymalna liczba sal, które muszą być dostępne w ramach promocji który zostanie zastosowany do stawki za noc. Jeśli nie podasz żadnej wartości, nie będzie maksimum.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay Określa limity długości pobytu, w ramach których można skorzystać z promocji zastosowano. Promocja nie jest stosowana, jeśli długość pobytu jest poza między limitami minimalną i maksymalną.
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer Minimalna liczba nocy dozwolona w trakcie pobytu w okresie obowiązywania promocji zastosowano. Jeśli ta wartość nie zostanie określona, nie ma minimalnej wartości.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer Maksymalna dozwolona liczba nocy w trakcie pobytu w ramach promocji zastosowano. Jeśli nie podasz żadnej wartości, nie będzie maksymalnej wartości.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

Kontener na regułę dotyczącą ceny członkostwa, która uruchamia określony interfejs użytkownika dotyczące powiązanego rabatu.

Tego elementu nie należy określać, chyba że Podano także <Discount>.

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

Identyfikator reguła cenowa powiązana z programem członkostwa.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Określa minimalną sumę dziennych stawek za pokój (stosując większą z AmountBeforeTax lub AmountAfterTax), który musi zostanie przekroczony, aby można było zastosować promocję.
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer Wartość, którą należy przekroczyć, aby zastosować promocję.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy Określa ograniczenia dotyczące liczby osób, w przypadku których obowiązuje ta promocja zastosowano. Promocja nie jest stosowana, gdy liczba osób jest poza minimalny i maksymalny limit.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer Liczba osób określona przez użytkownika musi wynosić co najmniej tę wartość, aby który ma zostać zastosowany.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer Liczba osób określona przez użytkownika musi wynosić maksymalnie tę wartość, aby który ma zostać zastosowany.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Kontener listy planów stawek, których dotyczy promocja. Jeśli nie określisz wartości <RatePlans>, zostanie zastosowana promocja. dotyczy wszystkich planów stawek.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan 1..n RatePlan Określa plan stawek. Plan stawek jest definiowany przez pakiet, stawki i dostępność, zgodnie z definicją w transakcji (dane obiektu), OTA_HotelRateAmountNotifRQ i OTA_HotelAvailNotifRQ zgodnie z identyfikatorem PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string Unikalny identyfikator abonamentu. Ta wartość jest mapowana na wartość Wartość PackageID w <PackageData> w komunikacie Transakcja (dane usługi) oraz w Atrybut RatePlanCode w <StatusApplicationControl> w obu przypadkach <OTA_HotelRateAmountNotifRQ> i Wiadomości: <OTA_HotelAvailNotifRQ>. Maksymalna dozwolona liczba znaków to 50.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes Kontener przeznaczony na listę typów pomieszczeń, do których ma zastosowanie promocja. Promocja jest stosowana do każdego <RoomType> określone dane. Jeśli nie podasz <RoomTypes>, parametr Promocja dotyczy wszystkich pokojów.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType Określa typ pomieszczenia. Typ pokoju jest określony w <RoomData> element w Transakcja (dane usługi) i jest można się odwoływać za pomocą wartości <RoomID>. (Jest Do wartości <RoomID> odwołują się również Atrybut InvTypeCode w OTA_HotelRateAmountNotifRQ messages.)
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string Unikalny identyfikator zasobów reklamowych (typ pomieszczenia). Ta wartość jest mapowana na <RoomID> w komunikacie transakcji (dane usługi). Maksymalna dozwolona liczba znaków to 50.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking Określa sposób łączenia promocji. Jeśli nie określono tej wartości, pole „type” jest traktowana jako base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

Do jednej stawki można zastosować wiele promocji w zależności od to ustawienie:

  • any: można łączyć z dowolną inną promocją (oprócz none), ale kolejność, w jakiej mają być promocje nie jest gwarantowane.
  • base: najlepsza kwalifikująca się promocja base to wybrane i zastosowane jako pierwsze, przed innymi promocjami. To było Poprzednia nazwa: base_only.
  • second: najlepsza kwalifikująca się promocja second zostanie wybrana i zostanie zastosowana po promocji base (w stosownych przypadkach) i przed any promocjami.
  • none: nie można łączyć z innymi. promocji.

Spośród dozwolonych kombinacji zestaw promocji, który generuje do stawki stosowany jest największy rabat.

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates kontenera dla jednego lub kilku zakresów dat, które określają sposób stosowana jest promocja, np. aby uwzględnić rabaty sezonowe.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

Opisuje sposób stosowania promocji.

Prawidłowe wartości to:

  • all: stosuje promocję do każdej nocy w plan podróży, jeśli wszystkie daty w planie podróży się pokrywają z datami pobytu.
  • any: stosuje promocję do wszystkich nocy w plan podróży, jeśli którakolwiek data w planie podróży pokrywa się z datą w zakres dat pobytu.
  • overlap: stosuje promocję tylko w przypadku wybranych noce w planie podróży, które pokrywają się z datą pobytu zakres dat.

Ten atrybut musi być zawsze określony.

  • Jeśli <Discount> określa percentage a application ma wartość all lub any, rabat jest stosowany jako procent cały pobyt.
  • Jeśli <Discount> określa percentage a application ma wartość overlap, zniżka jest stosowana jako procent stawek za noc w przypadku nakładających się nocy.
  • <Discount> określający fixed_amount a application ustawiony na overlap to nieprawidłowa kombinacja.
  • <FreeNights> obsługuje wszystkie application wartości. Pamiętaj, że w przypadku parametru overlap Tylko pokrywające się noce pobytu są uwzględniane przy obliczaniu rabatu .
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

Zakres dat określający daty zastosowania promocji.

Obsługiwany jest też format YearlessDate.

  • Jeśli wartość start lub end jest całkowita date, oba te muszą być wypełnione jako daty bez roku.
  • Zakresy dat bez roku nie mogą obejmować początku nowego roku. Zamiast tego: przedstawiają zakres w postaci dwóch sąsiednich zakresów dat. Przykład: Pole {"12-29", "01-05"} może być przedstawiane jako {"12-29", "12-31"} i {"01-01", "01-05"}
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate Data rozpoczęcia (na podstawie strefy czasowej usługi) włącznie z datą rozpoczęcia zakres dat. Ta data nie może być wcześniejsza niż Data: end. Jeśli nie określono start, data jest faktycznie nieograniczony w zakresie daty rozpoczęcia.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate Data zakończenia (na podstawie strefy czasowej usługi) włącznie z datą zakończenia zakresu dat. Ta data musi być taka sama jak start lub później datę. Jeśli nie określono end, data jest faktycznie nieograniczony w zakresie daty zakończenia.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

Dni tygodnia, które są dozwolone w zakresie dat. Jeśli nie, oznacza to, że w zakresie dat dozwolone są wszystkie dni. Każdy wskazuje dzień. Na przykład „MTWHF”. określa że dni powszednie są dozwolone w danym zakresie dat.

Prawidłowe znaki to:

  • M na poniedziałek
  • T na wtorek
  • W na środę
  • H na czwartek
  • F na piątek
  • S na sobotę
  • U na niedzielę

Obowiązuje każda kombinacja znaków.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Kontener do wyświetlania odpowiednich lokalizacji użytkowników (krajów) dotyczących promocji. Jeśli została określona, tylko uprawnieni użytkownicy z listy krajów oferujemy obniżoną stawkę. Jeśli nie określono tego ustawienia, kwalifikuje się użytkownicy z dowolnego kraju otrzymują obniżoną cenę.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum Typ specyfikacji krajów użytkowników.

Prawidłowe wartości to include i exclude

Jeśli type – kraj użytkownika jest ustawiony jako include, promocja dotyczy użytkowników z wymienionych krajach.

Jeśli type krajów użytkowników to exclude, promocja dotyczy użytkowników spoza krajów.

Jeśli nie ma wartości atrybutu type User Kraje, jest ona traktowana jako include, a promocja dotyczy użytkowników z: wymienionych krajach.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country Określa jeden kraj, w którym użytkownicy mogą skorzystać z promocji.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string Kraj CLDR , na przykład DE lub FR. Pamiętaj, że w przypadku niektórych krajów, kod kraju CLDR różni się od dwuliterowego kodu ISO dla danego kraju. Kody regionów CLDR nie są też obsługiwane.

Przykłady

Obowiązuje limit 500 promocji na usługę. Więcej informacji znajdziesz w sekcji „Usuwanie jednego”. „promocja” przykład usuwania promocji z usługi.

Podstawowa wiadomość

Ten przykład przedstawia podstawowy komunikat 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>


Stan zasobów reklamowych

Przykład poniżej pokazuje, jak utworzyć rabat w przypadku nadmiaru produktów asortyment w najbliższym czasie dostawy:

<?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>


Usuwanie jednej promocji

Poniższy przykład pokazuje, jak usunąć 1 promocję usługi:

<?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>

Usuń wszystkie promocje

Poniższy przykład pokazuje, jak usunąć wszystkie promocje w usłudze:

<?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>



Nałóż wszystkie promocje

Poniższy przykład pokazuje, jak nałożyć element <HotelPromotions> na usługę z co najmniej jedną nową promocją. Gdy action="overlay", wszystkie zapisane promocji określonych w aktualna wiadomość:

<?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 różne typy układania

Poniższy przykład pokazuje przypadek, w którym byłyby 3 różne promocje. zastosowano (base, second, any). Pamiętaj, że promocja none nie będzie zostanie zastosowane, ponieważ inne promocje zapewniają lepszy rabat. Jeśli oryginał cena wynosi 100 zł, obniżona cena – 72,90 zł.

<?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>


Typ układania: brak

Poniższy przykład pokazuje zastosowanie promocji none, ponieważ: połączenie innych promocji zapewnia mniejszy rabat. Jeśli pierwotna cena wynosiła 100 zł, obniżona cena – 75 zł.

<?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>



Ograniczenia czasu trwania okresu rezerwacji

Poniższy przykład pokazuje przypadek, w którym BookingWindow element jest używany z granicami początkowymi i końcowymi zdefiniowanymi jako czas trwania w standardzie ISO 8601 typu. To ograniczenie okresu rezerwacji wymaga rezerwacji do 18:00 dnia przed przylotem i 12:00 lub po nim drugiego dnia przed przylotem przylot.

<?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>


Ograniczenia daty i godziny rezerwacji

Poniższy przykład pokazuje przypadek, w którym BookingDates element jest używany z atrybutami start i end jako Typy DateTime. To ograniczenie daty rezerwacji wymaga dokonania rezerwacji między 06:30 w 1 lipca 2020 r. a 18:45 2 lipca 2020 r.

<?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>


Zakresy dat bez roku

Poniższy przykład pokazuje przypadek, w którym CheckInDates element zawiera DateRanges z wartościami start i end pól bez lat. W tym przykładzie promocja ma zastosowanie od 29.12 do 2.01, niezależnie od roku. Bez roku zakresy dat, które przekraczają granicę nowego roku, są nieprawidłowe, więc zakres dat jest wyrażony jako dwa sąsiednie zakresy dat.

<?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>



Rabat na FreeNights

W przykładzie poniżej zniżka 50% na 2 noce za każdą 4 noclegi w określonym zakresie dat. W przypadku planu podróży z 10 nocami łącznie: cztery noce będą objęte rabatem w wysokości 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>

W kolejnym przykładzie rabatów wynosi 1 noc 50% za każdą 3 noclegi noclegowe w określonych zakresach dat pobytu. Pod uwagę brane są tylko pokrywające się noce pobytu aby kwalifikować się do skorzystania z rabatu. W przypadku tego planu podróży z zameldowaniem 1 stycznia 2022 r. i wymeldowanie 7 stycznia 2022 r., zakwalifikowany pobyt i rabaty są stosowane w następujący sposób.

  • 1.01.2022 (pobyt)
  • 2.01.2022 r. (nocleg)
  • 2022-01-03
  • 4.01.2022 r. (obniżka)
  • 5.01.2022 r. (pobyt)
  • 6.01.2022 (za pobyt)
<?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>


Wybór według rankingu

W przykładzie poniżej podano 2 rabaty: jeden 20% taniej, a drugi 20% z rabatem 15%. Podczas oceny stosowany jest tylko rabat w wysokości 15% ponieważ ma niższą pozycję.

<?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

W przykładzie poniżej podajemy rabat za pobyt na 2 noce przez zastosowanie Tabela BestDailyDiscount została połączona z kolumną Discount.

<?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>

Rozważ pobyt na 2 noce w okresie od 30 kwietnia do 2 maja 2023 r. Do obliczeń stanowi kombinację najlepszych rabatów dziennych, która daje jako pierwszy znajduje się najniższy rabat.

Pierwszej nocy: „ogólne” to jedyna kwalifikująca się kwota z stały rabat w wysokości 20,

Drugiej nocy „może” daje większy rabat niż „ogólny” rabatem. Kiedy „może” wybrano rabat stały kwota to 50.

Potem podczas pobytu rabatowe do 5 za noc lub Łącznie 10. Można ją łączyć z najlepszymi rabatami dziennymi. bo „fiesta” ma typ stosu ustawiony na any. Jeśli było ustawione do base, a następnie tylko kombinację najlepszych rabatów dziennych lub „fiesta” zostanie zastosowany rabat. Zobacz opis Stacking, aby uzyskać więcej informacji.

Ogólnie cena pobytu otrzymuje stałą kwotę 20 + 50 + 10 = 80 rabatem.

Odpowiedzi

Składnia

Komunikat PromotionsResponse ma taką składnię:

<?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>

Elementy i atrybuty

Wiadomość PromotionsResponse zawiera te elementy i atrybuty:

Element / @Atrybut Wystąpienia Typ Opis
PromotionsResponse 1 Complex element Element główny wskazujący na powodzenie lub problemy odebrane Wiadomość z prośbą o promocję.
PromotionsResponse / @timestamp 1 DateTime Data i godzina utworzenia tej wiadomości.
PromotionsResponse / @id 1 string Unikalny identyfikator powiązanej wiadomości o promocjach.
PromotionsResponse / @partner 1 string Konto partnera, z którego pochodzi ta wiadomość.
PromotionsResponse / Success 0..1 Success Wskazuje, że wiadomość o promocjach została przetworzona bez ostrzeżeń, błędów i błędów.

Dozwolone wartości <Success> albo <Issues> w każdej wiadomości.

PromotionsResponse / Issues 0..1 Issues Kontener dla co najmniej jednego problemu napotkanego podczas przetwarzania Komunikat promocyjny.

Dozwolone wartości <Success> albo <Issues> w każdej wiadomości.

PromotionsResponse / Issues / Issue 1..n Issue Opis ostrzeżenia, błędu lub błędu napotkanych podczas przetwarza wiadomość o promocjach. Szczegóły dotyczące tych problemów można znaleźć cale Komunikaty o błędach dotyczące stanu pliku danych.
PromotionsResponse / Issues / Issue / @code 1 integer Identyfikator problemu.
PromotionsResponse / Issues / Issue / @status 1 enum

Typ napotkanego problemu.

Prawidłowe wartości to warning, error, i failure.

Przykłady

Sukces

Poniżej znajdziesz odpowiedź na pomyślnie przetworzoną wiadomość z promocjami.

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

Problemy

Poniżej znajdziesz odpowiedź na wiadomość o promocjach, która nie została przetworzona z powodu .

<?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>