Opis
Ten interfejs API umożliwia określenie możliwych rabatów. Spośród podanych promocji Google stosuje kwalifikującą się promocję lub zestaw promocji, które zapewniają najniższą cenę. Jeśli szukasz interfejsu API umożliwiającego dowolne dostosowywanie stawek, które może podnieść lub obniżyć cenę przy spełnieniu warunków, skorzystaj z interfejsu Rate Modifications API. Pamiętaj, że jeśli masz oba interfejsy API, zmiany stawek są stosowane przed promocjami.
Żądania
Składnia
Komunikat Promotions
korzysta z tej 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ść o Promocjach ma następujące elementy i atrybuty:
Element / @Atrybut | Wystąpienia | Typ | Opis |
---|---|---|---|
Promotions | 1 | Complex element | Element główny komunikatu promocyjnego. |
Promotions / @partner | 1 | string | Konto partnera, z którego pochodzi ta wiadomość. Ta wartość ciągu to wartość „Klucz partnera” wymieniona na
stronie Ustawienia konta w Hotel Center.
Jeśli masz backend, który udostępnia pliki danych dla wielu kont, ta wartość musi być zgodna z wartością atrybutu |
Promotions / @id | 1 | string | Unikalny identyfikator tej wiadomości z żądaniem. Ta wartość jest zwracana w wiadomości z odpowiedzią. Dozwolone są znaki 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 | Promowanie miejsca zakwaterowania Każda promocja dotyczy 1 miejsca zakwaterowania. Jeśli nie użyjesz atrybutu |
Promotions / HotelPromotions / @hotel_id | 1 | string | Unikalny identyfikator usługi. Ta wartość musi być zgodna z identyfikatorem hotelu określonym 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 określisz wartość, musi to być Jeśli ich nie podasz, każda promocja określona w bieżącej wiadomości będzie miała postać:
|
Promotions / HotelPromotions / Promotion | 0..99 | Promotion | Pojedyncza promocja miejsca zakwaterowania. Pamiętaj, że jeśli nie określono właściwości Jeśli chcesz wykorzystać więcej niż 99 promocji, skontaktuj się z technicznym menedżerem konta. |
Promotions / HotelPromotions / Promotion / @id | 1 | string | Unikalny identyfikator promocji. Maksymalna 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 określisz wartość, trzeba będzie podać wartość Jeśli określisz atrybut |
Promotions / HotelPromotions / Promotion / BookingDates | 0..1 | BookingDates | Zastosowanie promocji wymaga kontenera zawierającego co najmniej jeden zakres określający, kiedy wystąpiła rezerwacja. |
Promotions / HotelPromotions / Promotion / BookingDates / DateRange | 1..99 | DateRange | Aby można było zastosować promocję, należy określić zakres określający czas rezerwacji. |
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start | 0..1 | Date lub DateTime | Data lub data i godzina rozpoczęcia (na podstawie strefy czasowej usługi) włącznie z zakresem.
|
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end | 0..1 | Date lub DateTime | Data lub godzina zakończenia (na podstawie strefy czasowej usługi) włącznie z zakresem.
|
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week | 0..1 | string | Dni tygodnia dozwolone w zakresie dat. Jeśli nie określisz tu żadnej wartości, w zakresie dat dozwolone będą wszystkie dni. Każdy znak w ciągu znaków określa dzień. Na przykład „MTWHF” określa, że w zakresie dat dozwolone są dni robocze. Prawidłowe znaki:
Każda kombinacja znaków jest prawidłowa. |
Promotions / HotelPromotions / Promotion / BookingWindow | 0..1 | BookingWindow | Określa godzinę, na którą należy dokonać rezerwacji, względem daty zameldowania (zgodnie ze strefą czasową hotelu). Możesz na przykład ustawić okres rezerwacji na co najmniej 7 dni, ale nie więcej niż 180 dni przed datą zameldowania. |
Promotions / HotelPromotions / Promotion / BookingWindow / @min | 0..1 | integer or duration | Aby można było skorzystać z promocji, musi nastąpić minimalny czas trwania poprzedzający zameldowanie w przypadku rezerwacji. Jeśli go nie podasz lub jego wartość wyniesie 0 , nie będzie żadnej wartości minimalnej.
Prawidłowe typy wartości to:
|
Promotions / HotelPromotions / Promotion / BookingWindow / @max | 0..1 | integer or duration | Aby można było zastosować promocję, musi nastąpić maksymalna liczba dni poprzedzających zameldowanie. Jeśli ta wartość nie została określona lub jego wartość wynosi 0 , nie ma górnego limitu.
Prawidłowe typy wartości to:
|
Promotions / HotelPromotions / Promotion / Ceiling | 0..1 | Ceiling |
Określa ograniczenia dotyczące maksymalnej wartości, jaką można ustawić po zastosowaniu promocji. Promocje muszą zawsze zawierać właściwość Jeśli skonfigurujesz skumulowanie się, na jeden pobyt może być stosowanych wiele promocji z atrybutem Przykład: Cena pobytu na 1 noc, przy czym
Oto kolejność obliczeń:
Fakt, że 60 to bardziej rygorystyczny limit, nie ma znaczenia, ponieważ można go zastosować tylko w przypadku własnej promocji i nie ma jednego limitu obejmującego cały stos promocji. |
Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float |
Maksymalna kwota, jaką można ustawić za noc po zastosowaniu rabatu. Jeśli określony jest też element Cena |
Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor |
Określa ograniczenia dotyczące minimalnej wartości, jaką można ustawić po zastosowaniu promocji. Promocje muszą zawsze zawierać właściwość Logika Jeśli skonfigurujesz skumulowanie się, na jeden pobyt może być stosowanych wiele promocji z atrybutem Przykład: Cena pobytu na 1 noc, przy czym
Oto kolejność obliczeń:
Fakt, że 90 to bardziej rygorystyczna cena minimalna, nie ma znaczenia, ponieważ obowiązuje tylko w przypadku własnej promocji i nie może istnieć żaden pojedynczy poziom, który obejmuje cały stos promocji. |
Promotions / HotelPromotions / Promotion / Floor / @amount_per_night | 1 | float |
Minimalna kwota, jaką można ustawić za noc po zastosowaniu rabatu. Jeśli określony jest też element Cena |
Promotions / HotelPromotions / Promotion / CheckinDates | 0..1 | CheckinDates | Kontener na co najmniej 1 zakres dat, który określa, kiedy należy się zarejestrować, aby można było zastosować promocję. |
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange | 1..20 | DateRange | Zakres dat określający, kiedy należy się zarejestrować, aby można było zastosować promocję. Ten element nie jest wymagany, jeśli usuwasz co najmniej 1 promocję. Jest też obsługiwany format YearlessDate.
|
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start | 0..1 | Date or YearlessDate | Data rozpoczęcia (na podstawie strefy czasowej usługi) włącznie z zakresem dat. Ta data musi być wcześniejsza niż data end lub taka sama jak data. Jeśli nie określisz start , zakres dat będzie w rzeczywistości nieograniczony pod względem 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 zakresem dat. Ta data musi być taka sama jak data start lub późniejsza. Jeśli nie podasz end , zakres dat jest w zasadzie nieograniczony pod względem daty zakończenia. |
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week | 0..1 | string | Dni tygodnia dozwolone w zakresie dat. Jeśli nie określisz tu żadnej wartości, w zakresie dat dozwolone będą wszystkie dni. Każdy znak w ciągu znaków określa dzień. Na przykład „MTWHF” określa, że w zakresie dat dozwolone są dni robocze. Prawidłowe znaki:
Każda kombinacja znaków jest prawidłowa. |
Promotions / HotelPromotions / Promotion / CheckoutDates | 0..1 | CheckoutDates | Kontener na co najmniej 1 zakres dat, który określa, kiedy należy wymeldować się, aby została zastosowana promocja. |
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange | 1..20 | DateRange | Aby można było zastosować promocję, należy określić zakres dat, w którym należy wymeldować się. Ten element nie jest wymagany, jeśli usuwasz co najmniej 1 promocję. Jest też obsługiwany format YearlessDate.
|
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start | 0..1 | Date or YearlessDate | Data rozpoczęcia (na podstawie strefy czasowej usługi) włącznie z zakresem dat. Ta data musi być wcześniejsza niż data end lub taka sama jak data. Jeśli nie określisz start , zakres dat będzie w rzeczywistości nieograniczony pod względem 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 zakresem dat. Ta data musi być taka sama jak data start lub późniejsza. Jeśli nie podasz end , zakres dat jest w zasadzie nieograniczony pod względem daty zakończenia. |
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week | 0..1 | string | Dni tygodnia dozwolone w zakresie dat. Jeśli nie określisz tu żadnej wartości, w zakresie dat dozwolone będą wszystkie dni. Każdy znak w ciągu znaków określa dzień. Na przykład „MTWHF” określa, że w zakresie dat dozwolone są dni robocze. Prawidłowe znaki:
Każda kombinacja znaków jest prawidłowa. |
Promotions / HotelPromotions / Promotion / Devices | 0..1 | Devices | Kontener do wyświetlania listy urządzeń użytkowników, które kwalifikują się do promocji. Jeśli określisz rabat, tylko kwalifikujący się użytkownicy wymienionych urządzeń otrzymają zniżkę. Jeśli nie podasz tej wartości, kwalifikujący się użytkownicy dowolnego urządzenia otrzymają zniżkę. |
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 | Należy podać dokładnie jedną wartość Określa rabat, który ma być zastosowany do tej promocji. |
Promotions / HotelPromotions / Promotion / Discount / @percentage | 0..1 | float | Wymagany jest dokładnie 1 z tych elementów: Wartość dziesiętna z zakresu od 0 do 100, która określa rabat procentowy.
Zostanie zastosowane do Przykłady:
|
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount | 0..1 | float | Wymagany jest dokładnie 1 z tych elementów: Stała kwota, która zostanie odjęta od sumy cen za noc ( Przykłady:
|
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night | 0..1 | float | Wymagany jest dokładnie 1 z tych elementów: Stały rabat stosowany do każdej z cen za noc za Przykłady:
|
Promotions / HotelPromotions / Promotion / Discount / @fixed_price | 0..1 | float | Wymagany jest dokładnie 1 z tych elementów: Jeśli określisz stawki za noc ( Jeśli atrybut Przykłady:
|
Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night | 0..1 | float | Wymagany jest dokładnie 1 z tych elementów: Jeśli określono stawki za noc ( Jeśli atrybut Jeśli określono Przykłady:
|
Promotions / HotelPromotions / Promotion / Discount / @applied_nights | 0..1 | integer | Należy go używać tylko w przypadku Liczba nocy, na które rabat ma zastosowanie, począwszy od najtańszych. Musi być liczbą całkowitą z zakresu od 1 do 99. Jeśli go nie podasz, będzie on stosowany do wszystkich nocy. |
Promotions / HotelPromotions / Promotion / Discount / FreeNights | 0..1 | FreeNights | Określa rabat na niektóre noce po osiągnięciu minimalnej długości pobytu. Jeśli ten element jest używany, atrybuty w nadrzędnym elemencie Discount są niedozwolone. |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights | 1 | integer | Liczba nocy wymaganych, aby można było zastosować rabat. Każda zniżka dotyczy osobnego segmentu nocy. Na przykład w przypadku pobytu na 10 nocy, przy czym |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights | 1 | integer | Liczba nocy po obniżonej cenie w każdym segmencie noclegów. |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage | 1 | float | Rabat zastosowany do nocy zniżkowych. Jeśli ta wartość to 50 , każda wybrana noc jest zniżka 50%. |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection | 1 | string | Musi to być wartość cheapest lub last . Jeśli
last , noce pod koniec segmentu pobytów są objęte rabatem. Jeśli ustawiona jest wartość cheapest , rabaty dotyczą najtańszych noclegów w ramach segmentu noclegów. |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats | 1 | boolean | Czy rabat może zostać zastosowany do kilku segmentów noclegów. Jeśli ustawiona jest wartość Jeśli na przykład |
Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | Przypisuje tę promocję do określonej pozycji w rankingu i włącza ją do wyboru rankingowego, w wyniku którego do zastosowania zostanie wybrana tylko promocja o najniższej pozycji. Wartości muszą mieścić się w zakresie od 1 do 99 włącznie. Jeśli wiele promocji ma tę samą pozycję, wybieramy i stosujemy jedną z nich. |
Promotions / HotelPromotions / Promotion / BestDailyDiscount | 1 | Discount | Należy podać dokładnie jedną wartość Określa dzienny rabat, który może być zastosowany do noclegu. Inaczej jest w przypadku operatora Każda usługa może zawierać 1 grupę promocji, które są uznawane za „najlepsze codziennie”. Oznacza to, że w przypadku każdej nocy wybierana jest 1 promocja „najlepsza dzienna”, która daje najwyższy rabat za tę noc i może zostać zastosowana.
Z tym typem rabatu można określić |
Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage | 0..1 | float | Wymagany jest dokładnie 1 z tych elementów: Wartość dziesiętna z zakresu od 0 do 100, która określa rabat procentowy.
Zostanie zastosowane do Przykłady:
|
Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount | 0..1 | float | Wymagany jest dokładnie 1 z tych elementów: Stała kwota, która będzie odejmowana od pojedynczej stawki za noc Przykłady:
|
Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price | 0..1 | float | Wymagany jest dokładnie 1 z tych elementów: Jeśli określono stawki za noc ( Przykłady:
|
Promotions / HotelPromotions / Promotion / InventoryCount | 0..1 | InventoryCount | Określa ograniczenia liczby sal, które muszą być dostępne, aby można było zastosować tę promocję. Rabat jest stosowany tylko w przypadku nocy zgodnych z ograniczeniem. Niedozwolone ze zniżką fixed_amount . Liczba dostępnych pokoi jest określana za pomocą atrybutu OTA_HotelInvCountNotifRQ (InvCount ) lub OTA_HotelAvailNotifRQ (BookingLimit ). |
Promotions / HotelPromotions / Promotion / InventoryCount / @min | 0..1 | integer | Minimalna liczba pokoi, które muszą być dostępne, aby promocja została zastosowana do ceny za noc. Jeśli nie podasz tej wartości, nie będzie żadnej wartości minimalnej. |
Promotions / HotelPromotions / Promotion / InventoryCount / @max | 0..1 | integer | Maksymalna liczba pokoi, które muszą być dostępne, aby promocja została zastosowana do ceny za noc. Jeśli nie podasz żadnej wartości, nie będzie ustalonego maksimum. |
Promotions / HotelPromotions / Promotion / LengthOfStay | 0..1 | LengthOfStay | Określa limity długości pobytu, w ramach których można zastosować tę promocję. Promocja nie ma zastosowania, jeśli długość pobytu przekracza limit minimalny i maksymalny. |
Promotions / HotelPromotions / Promotion / LengthOfStay / @min | 0..1 | integer | Minimalna dozwolona liczba noclegów w hotelu, aby skorzystać z promocji. Jeśli nie podasz tej wartości, nie będzie ceny minimalnej. |
Promotions / HotelPromotions / Promotion / LengthOfStay / @max | 0..1 | integer | Maksymalna dozwolona liczba noclegów w hotelu, aby skorzystać z promocji. Jeśli nie podasz żadnej wartości, nie będzie ustalonego maksimum. |
Promotions / HotelPromotions / Promotion / MembershipRateRule | 0..1 | MembershipRateRule |
Kontener reguły stawki członkostwa, która aktywuje w interfejsie użytkownika określone podejście do powiązanego rabatu. Ten element nie powinien być określony, chyba że określono również |
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 (większą z AmountBeforeTax lub AmountAfterTax ), która musi zostać przekroczona, aby można było zastosować promocję. |
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount | 1 | integer | Wartość, która musi zostać przekroczona, aby zastosować promocję. |
Promotions / HotelPromotions / Promotion / Occupancy | 0..1 | Occupancy | Określa ograniczenia liczby miejsc, do których ma zastosowanie ta promocja. Promocja nie jest stosowana, gdy obłożenie wykracza poza limit minimalny i maksymalny. |
Promotions / HotelPromotions / Promotion / Occupancy / @min | 0..1 | integer | Aby można było zastosować rabat, obłożenie określone przez użytkownika musi mieć co najmniej tę wartość. |
Promotions / HotelPromotions / Promotion / Occupancy / @max | 0..1 | integer | Aby można było zastosować rabat, obłożenie określone przez użytkownika nie może przekraczać tej wartości. |
Promotions / HotelPromotions / Promotion / RatePlans | 0..1 | RatePlans | Kontener na listę abonamentów, których dotyczy promocja.
Jeśli nie podasz <RatePlans> , promocja ma zastosowanie do wszystkich abonamentów. |
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan | 1..n | RatePlan | Określa plan stawek. Abonament jest określany na podstawie kombinacji pakietów, stawek i dostępności określonych w komunikatach Transaction (Dane usługi), OTA_HotelRateAmountNotifRQ i OTA_HotelAvailNotifRQ zgodnie z komunikatami PackageID. |
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id | 1 | string | Unikalny identyfikator abonamentu. Ta wartość jest mapowana na wartość PackageID w <PackageData> w komunikacie Transakcja (dane usługi) i w atrybucie RatePlanCode w <StatusApplicationControl> w komunikatach <OTA_HotelRateAmountNotifRQ> i <OTA_HotelAvailNotifRQ> .
Maksymalna dozwolona liczba znaków to 50. |
Promotions / HotelPromotions / Promotion / RoomTypes | 0..1 | RoomTypes | Kontener na listę typów sal, do których ma zastosowanie promocja.
Promocja jest stosowana do każdego określonego atrybutu <RoomType> . Jeśli nie określisz <RoomTypes> , promocja dotyczy wszystkich sal. |
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType | 1..n | RoomType | Określa rodzaj pokoju. Typ pokoju jest zdefiniowany w elemencie <RoomData> w komunikacie Transakcja (dane usługi) i odwołuje się do niego za pomocą wartości <RoomID> . (Do jej wartości <RoomID> odwołuje się też atrybut InvTypeCode w komunikatach OTA_HotelRateAmountNotifRQ). |
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id | 1 | string | Unikalny identyfikator zasobów reklamowych (typ sali). Ta wartość jest mapowana na <RoomID> w komunikacie dotyczącym transakcji (danych 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 inaczej, przyjmuje się, że „type” to base . |
Promotions / HotelPromotions / Promotion / Stacking / @type | 1 | enum | W zależności od tego ustawienia do jednej stawki można zastosować wiele promocji:
Spośród dozwolonych kombinacji do stawki stosowany jest zestaw promocji generujących największy rabat. |
Promotions / HotelPromotions / Promotion / StayDates | 0..1 | StayDates | Kontener obejmujący co najmniej 1 zakres dat, który określa sposób stosowania promocji, np. na potrzeby uwzględnienia rabatów sezonowych. |
Promotions / HotelPromotions / Promotion / StayDates / @application | 1 | enum | Określa, jak powinna zostać zastosowana promocja. Prawidłowe wartości to:
Ten atrybut musi być zawsze określony.
|
Promotions / HotelPromotions / Promotion / StayDates / DateRange | 1..99 | DateRange | Zakres dat określający daty, kiedy promocja ma zostać zastosowana. Jest też obsługiwany format YearlessDate.
|
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start | 0..1 | Date or YearlessDate | Data rozpoczęcia (na podstawie strefy czasowej usługi) włącznie z zakresem dat. Ta data musi być wcześniejsza niż data end lub taka sama jak data. Jeśli nie określisz start , zakres dat będzie w rzeczywistości nieograniczony pod względem 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 zakresem dat. Ta data musi być taka sama jak data start lub późniejsza. Jeśli nie podasz end , zakres dat jest w zasadzie nieograniczony pod względem daty zakończenia. |
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week | 0..1 | string | Dni tygodnia dozwolone w zakresie dat. Jeśli nie określisz tu żadnej wartości, w zakresie dat dozwolone będą wszystkie dni. Każdy znak w ciągu znaków określa dzień. Na przykład „MTWHF” określa, że w zakresie dat dozwolone są dni robocze. Prawidłowe znaki:
Każda kombinacja znaków jest prawidłowa. |
Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | Kontener na listę lokalizacji użytkowników (krajów), które kwalifikują się do promocji. Jeśli określisz cenę, obniżoną cenę będą mogli zaoferować tylko kwalifikujący się użytkownicy z wymienionych krajów. Jeśli nie podasz tej wartości, kwalifikującym się użytkownikom z dowolnego kraju otrzymasz zniżkę. |
Promotions / HotelPromotions / Promotion / UserCountries / @type | 0..1 | enum | Typ specyfikacji UserKraje.
Prawidłowe wartości to Jeśli w polu UserKraje Jeśli w polu UserKraje Jeśli zasada |
Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | Określa kraj, w którym użytkownicy kwalifikują się do skorzystania z promocji. |
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | Kod kraju CLDR, np. DE lub FR . Pamiętaj, że w niektórych krajach kod kraju CLDR to nie to samo co 2-literowy kod kraju w standardzie ISO. Ponadto kody regionów CLDR nie są obsługiwane. |
Przykłady
Wiadomość podstawowa
Ten przykład pokazuje 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
Z przykładu poniżej dowiesz się, jak utworzyć rabat, jeśli nadmiarowy asortyment przed datą jego dostawy będzie dostępny:
<?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
Z przykładu poniżej dowiesz się, jak usunąć jedną promocję dotyczącą miejsca zakwaterowania:
<?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
Z przykładu poniżej dowiesz się, jak usunąć wszystkie promocje w ramach 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" action="overlay"/>
</Promotions>
Nałóż wszystkie promocje
Z przykładu poniżej dowiesz się, jak dodać atrybut <HotelPromotions>
w przypadku usługi z co najmniej jedną nową promocją. Jeśli wybierzesz action="overlay"
, wszystkie zapisane promocje zostaną usunięte przed zapisaniem promocji określonych w bieżącej wiadomości:
<?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 ułożenia
Poniższy przykład pokazuje przypadek, w którym zastosowanoby 3 różne promocje (base
, second
, any
). Uwaga: promocja none
nie zostanie zastosowana, ponieważ inne promocje zapewniają lepszy rabat. Jeśli pierwotna cena wynosiła 100 zł, obniżona cena wyniesie 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 warstw
Poniższy przykład pokazuje przypadek, w którym używana jest promocja none
, ponieważ połączenie innych promocji daje mniejszy rabat. Jeśli pierwotna cena wynosiła 100 zł, obniżona cena wyniesie 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 rezerwacji
W poniższym przykładzie zastosowano element BookingWindow
z granicami początkowymi i końcowymi określonymi jako czas trwania zgodny z normą ISO 8601. To ograniczenie dotyczące okresu rezerwacji wymaga rezerwacji nie wcześniej niż 18:00 w dniu przyjazdu i na godzinę 00:00 drugiego dnia przed przylotem.
<?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>
Daty rezerwacji i godziny lub godziny
Poniższy przykład pokazuje przypadek, w którym element BookingDates
jest używany z atrybutami start
i end
jako typami DateTime. To ograniczenie dotyczące daty rezerwacji wymaga, aby rezerwacja miała miejsce między 6:30 1 lipca 2020 r. a 18:45 w dniu 02.07.2020.
<?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>
Bezroczne zakresy dat
Poniższy przykład pokazuje przypadek, w którym element CheckInDates
zawiera DateRanges
z polami start
i end
bez lat. W tym przykładzie promocja dotyczy zameldowania się między 29 grudnia a 2 stycznia, niezależnie od roku. Bezroczne zakresy dat, które przekraczają granicę nowego roku, są nieprawidłowe, dlatego zakres dat jest wyrażany 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 poniższym przykładzie zniżki na dwie noce w cenie 50% za każde 4 noce w określonym zakresie dat rezerwacji. W przypadku planu podróży na 10 nocy cena za 4 noce wynosi 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 rabat 50% na jedną noc za każdą 3 noclegi w poszczególnych zakresach dat pobytu. Do zniżki wliczają się tylko pokrywające się noce. W przypadku tego planu podróży z zameldowaniem 1 stycznia 2022 r. i wymeldowaniem 7 listopada 2022 r. kwalifikujące się noce i rabaty są stosowane w podany niżej sposób.
- 1.01.2022 (zostań)
- 02.01.2022 (zostań)
- 2022-01-03
- 4.01.2022 r. (z rabatem)
- 5.01.2022 r. (zostań w hotelu)
- 6.01.2022 r. (zostań)
<?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 pozycjonowany
W przykładzie poniżej znajdują się 2 rabaty: jeden ze zniżką 20%, a drugi 15%. Podczas oceny stosowany jest tylko rabat 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>
NajlepszyCodziennyRabat
W tym przykładzie rabat na pobyt na 2 noce jest stosowany w przypadku właściwości BestDailyDiscount
połączonych ze znakiem 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 od 30 kwietnia 2023 roku do 2 maja 2023 r. W obliczeniach najpierw podajemy połączenie najlepszych dziennych zniżek, które przynoszą największy rabat.
W przypadku pierwszej nocy promocja „ogólna” to jedyna kwalifikująca się kwota ze stałym rabatem w wysokości 20 USD.
W przypadku drugiej nocy promocja „być może” zapewnia większy rabat niż rabat „ogólny”. Jeśli wybierzesz „może”, wysokość rabatu wynosi 50.
Pobyt w promocji „fiesta” wynosi 5 za noc lub łącznie 10. Można ją łączyć z kombinacją najlepszych dziennych zniżek, ponieważ „fiesta” ma typ nakładania ustawiony na any
. Jeśli ustawiona była wartość base
, stosowana jest tylko kombinacja najlepszych zniżek dziennych lub rabatu „fiesta”. Więcej informacji znajdziesz w opisie właściwości Stacking
.
Ogólnie cena za pobyt jest równa 20 + 50 + 10 = 80 zniżki na stałą kwotę.
Odpowiedzi
Składnia
Komunikat PromotionsResponse
korzysta z tej 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
Komunikat PromotionsResponse
ma te elementy i atrybuty:
Element / @Atrybut | Wystąpienia | Typ | Opis |
---|---|---|---|
PromotionsResponse | 1 | Complex element | Element główny wskazujący powodzenie lub problemy dotyczące otrzymanej wiadomości z prośbą o promocję. |
PromotionsResponse / @timestamp | 1 | DateTime | Data i godzina utworzenia tej wiadomości. |
PromotionsResponse / @id | 1 | string | Unikalny identyfikator z powiązanej wiadomości o promocjach. |
PromotionsResponse / @partner | 1 | string | Konto partnera, z którego pochodzi ta wiadomość. |
PromotionsResponse / Success | 0..1 | Success | Oznacza, że wiadomość o promocjach została przetworzona bez ostrzeżeń i błędów.
W każdej wiadomości występuje właściwość |
PromotionsResponse / Issues | 0..1 | Issues | Kontener na co najmniej 1 problem, który wystąpił podczas przetwarzania wiadomości o promocjach.
W każdej wiadomości występuje właściwość |
PromotionsResponse / Issues / Issue | 1..n | Issue | Opis ostrzeżenia, błędu lub niepowodzenia podczas przetwarzania wiadomości o promocjach. Szczegółowe informacje o tych problemach znajdziesz w sekcji Komunikaty o błędach 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 |
Przykłady
Ukończono
To jest odpowiedź na wiadomość dotyczącą promocji, która została przetworzona.
<?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 promocji, która nie została przetworzona z powodu błędów.
<?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>