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 / @Attribute Wystąpienia Typ Opis
Promotions 1 Complex element Element główny wiadomości z promocjami.
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żywana opcja <Stacking>, w przypadku wielu kwalifikujących się promocji do rezerwacji zostanie zastosowana promocja z największym rabatem.

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ż widoczny w Hotel Center.
Promotions / HotelPromotions / @action 0..1 enum

Jeśli została określona, wartość musi być "overlay" Jeśli wartość to "overlay", wszystkie zapisane promocje są usuwane przed zapisaniem promocji określonych 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 zostanie określona i nie będzie przechowywana promocja z tym samym id, zostanie przechowywana ta promocja. Jeśli nie określisz tego ustawienia, a promocja z tą samą wartością id jest przechowywana, istniejąca promocja zostanie zaktualizowana.

Jeśli podasz wartość delete, przechowywana promocja o tej samej wartości id zostanie usunięta. 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 nie podasz wartości start, zakres będzie nieograniczony pod względem 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 parametr end nie zostanie określony, zakres będzie w efekcie nieograniczony pod względem czasu zakończenia.
  • Jeśli end jest podana jako data „RRRR-MM-DD”, jest interpretowana 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 znak w ciągu odpowiada jednemu dniowi. Na przykład „MTWHF” określa, że w zakresie dat dozwolone są dni robocze.

Prawidłowe znaki to:

  • M na poniedziałek
  • T na wtorek
  • W w ś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:

  • 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 wskazuje, że promocja dotyczy tylko rezerwacji dokonanych maksymalnie 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 kumulacji second, wartością fixed_amount 25 i pułapem amount_per_night 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ć dla stawki za noc po zastosowaniu zniżki.

Jeśli podano też element <Floor>, musi on mieć wartość większą lub równą atrybucie amount_per_night w elemencie <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.

Logika <Floor> nadal ma zastosowanie do rabatów <FreeNights>, nawet jeśli bezpłatna noc jest objęta rabatem 100%.

Jeśli skonfigurowano stosowanie, wiele promocji z <Floor> może odnosić się do jednego pobytu. Każda promocja miałaby swój rabat, a zaraz za nim cenę minimalną. 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 ze typem tworzenia stosu base, wartością fixed_amount 25 i wartością minimalną amount_per_night 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 Pojemnik zawierający co najmniej jeden zakres dat, który określa, kiedy musi nastąpić potwierdzenie, aby promocja mogła zostać zastosowana.
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 znak w ciągu odpowiada jednemu dniowi. 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 w ś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 jedna z wartości start lub end jest datą bez roku, obie wartości muszą być wypełnione jako daty bez roku.
  • Zakresy dat bez roku nie mogą obejmować nowego roku. Zamiast tego: przedstawiają zakres w postaci dwóch sąsiednich zakresów dat. Na przykład: {"12-29", "01-05"} może być reprezentowane 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 musi być wcześniejsza lub taka sama jak 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 znak w ciągu odpowiada jednemu dniowi. 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 w środę
  • H na czwartek
  • F na piątek
  • S na sobotę
  • U na niedzielę

Dozwolona jest dowolna 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. Jest ona stosowana do AmountAfterTax (lub AmountBeforeTax, jeśli AmountAfterTax nie został określony).

Przykłady:

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

    stopa promocji = AmountAfterTax * (1 – procentowy 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 ona większa niż suma stawek za noc, wynik jest równy 0.

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 ustalamy cenę za pobyt na 1 noc, gdzie: AmountBeforeTax to 50, fixed_amount to 60, a TaxFeeInfo określa podatek w wysokości 10,

    Stawka promocyjna = (AmountBeforeTax - stała zniżka) * 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 zniżka)

    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 fixed_amount_per_night jest większa niż cena za noc, cena za noc jest zmniejszana do zera – rabat nie może spowodować, że cena za noc stanie się 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 ustalamy cenę za pobyt na 1 noc, gdzie: AmountBeforeTax to 100, fixed_amount to 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. Przyjmuje się, że jest ona podana w tej samej walucie co ceny za noc.

Jeśli AmountAfterTax ma odzwierciedlać podatek procentowy, ustawienie stałej ceny dla AmountBeforeTax może spowodować nieprawidłowe podatki i opłaty. 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 cena za 3 noclegi wynosi odpowiednio 100, 110 i 120, a wartość parametru fixed_amount to 110, stawka promocyjna wyniesie 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 ma zastosowanie rabat, począwszy od najtańszej. 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. Jeśli użyto tego elementu, atrybuty elementu nadrzędnego Discount są niedozwolone.
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 objęta 50% rabatem.
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

Czy rabat może być stosowany w przypadku wielu segmentów dotyczących liczby nocy pobytu. 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 kilka promocji ma ten sam ranking, losowo wybierana i stosowana jest jedna z nich.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Musisz podać dokładnie jedną z tych właściwości: Discount lub BestDailyDiscount.

Określa Dzienny rabat, który może zostać zastosowany do noclegu. To jest w kontrastuje z wartością Discount, która stosuje rabaty do całych na dłużej.

Każda usługa może mieć jedną grupę promocji, która jest uważana za „najlepszą codzienną”. 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.

Pole Stacking można określić za pomocą: BestDailyDiscount Musi być ustawiona na base lub none. „Najlepsze na dziś” rabaty które zapewniają największą zniżkę za każdą noc, są łączone i traktowane jako zniżki na jeden pobyt (tj. Discount) z poszanowaniem skonfigurowany typ układania. Ten połączony rabat jest porównywany i można łączyć z innymi kwalifikującymi się promocjami <Rabat>. w celu znalezienia takiej kombinacji lub kombinacji, które zapewniają najszerszą rabatem. Może to być kombinacja BestDailyDiscount lub pojedyncze Discount, w zależności od tego, która z tych wartości zostanie obniżona, jest wybrano i zastosowano do typu stosu base.

Dla tego typu rabatu można określić StayDates, ale 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. Jest ona stosowana do AmountAfterTax (lub AmountBeforeTax, jeśli AmountAfterTax nie został określony).

Przykłady:

  • Jeśli AmountAfterTax za nocleg wynosi 100, a percentage to 20, to

    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

Wymagane jest dokładnie jedno z tych atrybutów: percentage, 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

    Stawka promocyjna = (AmountBeforeTax – rabat stały) * (1 + stawka podatku w procentach)

    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ę, że jest ona wyrażona w tej samej walucie co ceny za nocleg.

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 pokoi jest określana za pomocą parametru 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 pokoi, które muszą być dostępne, aby promocja mogła zostać zastosowana 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 nie określisz tu żadnej wartości, nie będzie limitów.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer Maksymalna liczba noclegów, które można wykorzystać w ramach promocji. 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ły dotyczącej stawek powiązanej 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óra musi zostać przekroczona, aby promocja mogła zostać zastosowana.
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 zarówno w przypadku minimalnej, jak i maksymalnej wartości.
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 Aby można było zastosować rabat, liczba osób określona przez użytkownika nie może przekraczać tej wartości.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Kontener z listą planów cenowych, do których ma zastosowanie 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>. (jej wartość <RoomID> jest też używana przez atrybut InvTypeCode w wiadomościach OTA_HotelRateAmountNotifRQ).
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 go łączyć z innymi promocjami (z wyjątkiem none), ale kolejność stosowania promocji nie jest gwarantowana.
  • base: najlepsza kwalifikująca się promocja base jest wybierana i stosowana jako pierwsza, 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 promocjami.

Spośród dozwolonych kombinacji do stawki zostanie zastosowany zestaw promocji, który zapewnia 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: promocja jest stosowana do wszystkich nocy w planie podróży, jeśli którakolwiek z tych dat pokrywa się z jakiś dniem w zakresie 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 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ć przedstawiane jako {"12-29", "12-31"} i {"01-01", "01-05"}

Jeśli chcesz ustawić zakres funkcji StayDates na zezwolić na promocję w określone dni tygodnia, ustaw Data start jako bieżąca bez end, więc że promocja nie wygaśnie.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate Data rozpoczęcia (według strefy czasowej usługi) włącznie z zakresem dat. Ta data musi być wcześniejsza lub taka sama jak data end. Jeśli nie określono start, data jest faktycznie nieograniczony w zakresie daty rozpoczęcia.

Określ wartość start, jeśli Wartość end nie została podana.

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 data lub później Data: start. Jeśli nie podasz wartości end, zakres dat będzie obejmował wszystkie daty od start.

Określ wartość end, jeśli Wartość start nie została podana.

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

Dni tygodnia dozwolone w wybranym 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 w środę
  • H na czwartek
  • F na piątek
  • S na sobotę
  • U na niedzielę

Dozwolona jest dowolna kombinacja znaków.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Kontener do wyświetlania listy 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 kod kraju 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>



Nakładanie wszystkich promocji

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>


Brak typu układania

W tym przykładzie wykorzystano promocję none, ponieważ kombinacja innych promocji daje 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

Ten przykład pokazuje przypadek, w którym element CheckInDates zawiera element DateRanges, który ma pola start i end bez lat. W tym przykładzie promocja obowiązuje w dniach zameldowania od 29 grudnia do 2 stycznia, 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 następnym przykładzie każda z 3 nocy jest objęta 50% rabatem w przypadku pobytu w określonych przedziałach dat. Do rabatu wliczane są tylko noce pobytu, które się pokrywają. W przypadku tej trasy z zameldowaniem w dniu 2022-01-01 i wymeldowaniem w dniu 2022-01-07 rabaty i noclegi kwalifikujące się do rabatu są stosowane w następujący sposób:

  • 1.01.2022 (pobyt)
  • 2.01.2022 r. (nocleg)
  • 2022-01-03
  • 2022-01-04 (z rabatem)
  • 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 jest obniżona o 20 + 50 + 10 = 80 zł.

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.

W każdej wiadomości występuje element <Success> lub <Issues>.

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 znajduje się 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>