Promozioni

Panoramica

Questa API consente di specificare possibili sconti. Tra le promozioni specificate, Google applica la promozione idonea o l'insieme di promozioni che genera il prezzo più basso. Se cerchi un'API che supporti aggiustamenti delle tariffe arbitrarie in grado di aumentare o diminuire il prezzo quando le condizioni sono soddisfatte, prendi in considerazione la nostra API Rate Modifications. Tieni presente che, se sono presenti entrambe le API, le modifiche alle tariffe vengono applicate prima delle promozioni.

Richieste

Sintassi

Il messaggio Promotions utilizza la seguente sintassi:

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

Elementi e attributi

Il messaggio Promozioni contiene i seguenti elementi e attributi:

Elemento / @attributo Occorrenze Tipo Descrizione
Promotions 1 Complex element L'elemento principale di un messaggio di promozioni.
Promotions / @partner 1 string L'account partner per questo messaggio. Questo valore di stringa è il valore "Chiave del partner" elencato nella pagina Impostazioni account in Hotel Center.

Se disponi di un backend che fornisce feed per più account, questo valore deve corrispondere al valore dell'attributo ID specificato nell'elemento <RequestorID> dei messaggi <OTA_HotelRateAmountNotifRQ> e <OTA_HotelAvailNotifRQ> per lo stesso account.

Promotions / @id 1 string Un identificatore univoco per questo messaggio di richiesta. Questo valore viene restituito nel messaggio di risposta. I caratteri consentiti sono a-z, A-Z, 0-9, _ (trattino basso) e - (trattino).
Promotions / @timestamp 1 DateTime La data e l'ora di creazione di questo messaggio.
Promotions / HotelPromotions 0..n HotelPromotions

Promozioni di una proprietà. Ogni promozione viene applicata a una singola struttura.

A meno che non venga utilizzato <Stacking>, la promozione con lo sconto maggiore viene applicata alla prenotazione quando sono idonee più promozioni.

Promotions / HotelPromotions / @hotel_id 1 string L'identificatore univoco della struttura. Questo valore deve corrispondere all'ID hotel specificato utilizzando <id> nell'elemento <listing> nel feed elenco hotel. L'ID hotel è indicato anche in Hotel Center.
Promotions / HotelPromotions / @action 0..1 enum

Se specificato, il valore deve essere "overlay". Se il valore è "overlay", tutte le promozioni archiviate vengono eliminate prima di archiviare le promozioni specificate nel messaggio corrente.

Se non specificato, ogni promozione specificata nel messaggio corrente sarà:

  • Added (se nessuna delle promozioni archiviate ha lo stesso id)
  • Updated (se una promozione archiviata ha lo stesso id)
  • Deleted (se una promozione archiviata ha lo stesso id e il valore dell'attributo action per la promozione specificata nel messaggio corrente è "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

Una singola promozione per una struttura. Tieni presente che se action="overlay" e <Promotion> non sono specificati, tutte le promozioni per la proprietà vengono eliminate.

Se devi utilizzare più di 99 promozioni, contatta il tuo Technical Account Manager (TAM).

Promotions / HotelPromotions / Promotion / @id 1 string Un identificatore univoco per la promozione. Il numero massimo di caratteri consentiti è 40. I caratteri consentiti sono a-z, A-Z, 0-9, _ (trattino basso), - (trattino) e . (punto).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Se specificato, il valore deve essere delete. Se non specificato e non viene archiviata una promozione con lo stesso id, questa promozione viene archiviata. In caso contrario, se non specificato e se viene archiviata una promozione con lo stesso id, viene aggiornata la promozione esistente.

Se delete viene specificato, la promozione archiviata con lo stesso id viene eliminata. Quando utilizzi delete, non includere elementi secondari in <Promotion>. Inoltre, delete non è consentito insieme a <HotelPromotions action="overlay"/>.

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates Un contenitore di uno o più intervalli che definiscono il periodo in cui deve essere effettuata la prenotazione affinché venga applicata la promozione.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange Un intervallo che specifica quando deve essere effettuata la prenotazione affinché venga applicata la promozione.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date o DateTime

La data di inizio o la data e l'ora (in base al fuso orario della proprietà), inclusa, dell'intervallo.

  • La data o la data e l'ora specificate da start devono essere precedenti (o uguali) alla data o data/ora specificate da end.
  • Se start non è specificato, l'intervallo è a tutti gli effetti illimitato in termini di ora di inizio.
  • Se il campo start viene compilato come la data "AAAA-MM-GG", viene interpretato come data/ora "AAAA-MM-GGT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date o DateTime

La data di fine o la data e l'ora di fine (in base al fuso orario della proprietà), incluso, dell'intervallo.

  • La data o la data/ora specificate da end deve essere successiva o uguale alla data o data/ora specificate da start.
  • Se end non è specificato, l'intervallo è a tutti gli effetti illimitato in termini di ora di fine.
  • Se end viene fornita come data "AAAA-MM-GG", viene interpretata come data/ora "AAAA-MM-GGT23:59:59".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

I giorni della settimana consentiti nell'intervallo di date. Se non specificato, sono consentiti tutti i giorni nell'intervallo di date. Ogni carattere nella stringa specifica un giorno. Ad esempio, "MTWHF" specifica che nell'intervallo di date sono consentiti i giorni feriali.

I caratteri validi sono:

  • M per lunedì
  • T per martedì
  • W per mercoledì
  • H per giovedì
  • F per venerdì
  • S per sabato
  • U per domenica

È valida qualsiasi combinazione di caratteri.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow Specifica il periodo di tempo in cui deve essere effettuata la prenotazione rispetto alla data del check-in (in base al fuso orario della proprietà). Ad esempio, la finestra di prenotazione può essere impostata su un minimo di 7 giorni, ma di un massimo di 180 giorni, prima del check-in.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration La durata minima prima del check-in in cui deve essere effettuata la prenotazione affinché venga applicata la promozione. Se non è specificato o se il suo valore è 0, non è previsto un valore minimo.

I tipi di valore validi sono:

  • Numero intero: il numero di giorni prima della data del check-in. Ad esempio, un valore 30 indica che la promozione si applica solo alle prenotazioni almeno 30 giorni prima della data del check-in.
  • Durata ISO 8601 (giorni, ore e minuti): il numero di giorni (e facoltativamente ore/minuti) prima della data del check-in. Ad esempio, un valore P30D indica che la promozione si applica solo alle prenotazioni almeno 30 giorni prima della data del check-in. Un valore di P30DT6H richiede la prenotazione entro le 18:00 del 30° giorno prima dell'arrivo.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration Il numero massimo di giorni prima del check-in in cui deve essere effettuata la prenotazione affinché la promozione venga applicata. Se non è specificato o se il suo valore è 0, non è previsto un limite massimo.

I tipi di valore validi sono:

  • Numero intero: il numero di giorni prima della data del check-in. Ad esempio, un valore 30 indica che la promozione si applica solo alle prenotazioni al massimo 30 giorni prima della data del check-in.
  • Durata ISO 8601 (giorni, ore e minuti): il numero di giorni (e facoltativamente ore/minuti) prima della data del check-in. Ad esempio, un valore P30D indica che la promozione si applica solo alle prenotazioni al massimo 30 giorni prima della data del check-in. Un valore di P30DT6H richiede la prenotazione a partire dalle 18:00 del 30° giorno prima dell'arrivo.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Definisce le limitazioni relative al valore massimo su cui può essere impostata una tariffa dopo l'applicazione delle promozioni.

Le promozioni devono sempre specificare un <Discount> o un <BestDailyDiscount>. Di conseguenza, per creare una promozione che applichi solo un <Ceiling>, un'opzione è impostare un <Discount> con un percentage pari a 0.

Se è configurata l'aggregazione, più promozioni con <Ceiling> potrebbero essere applicate a un singolo soggiorno. A ogni promozione viene applicato lo sconto, seguito immediatamente dal tetto massimo. L'esempio seguente mostra in che modo ogni limite contribuisce al calcolo della promozione successiva nello stack.

Esempio:

Prezzo per un soggiorno di 1 notte in cui AmountBeforeTax è 100 ed è presente una serie di due promozioni:

  1. Promozione con tipo di sovrapposizione base, fixed_amount di 25 e limite amount_per_night di 60
  2. Promozione con tipo di sovrapposizione second, fixed_amount di 25 e un limite amount_per_night di 90

Ecco l'ordine di calcolo:

  1. La promozione base viene applicata per prima e sconti AmountBeforeTax a 75, ma poi il tetto lo abbassa a 60.
  2. La promozione second prevede uno sconto su AmountBeforeTax da 60 a 35. Poiché risulta inferiore al limite di 90, il secondo massimale non viene applicato. La tariffa finale è 35.

Il fatto che 60 sia un tetto complessivo più rigido è irrilevante poiché è valido solo per la propria promozione e non può esistere un tetto singolo che copra l'intero stack di promozioni.

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

L'importo massimo su cui è possibile impostare una tariffa per notte dopo l'applicazione dello sconto.

Se viene specificato anche un elemento <Floor>, questo deve essere impostato su un valore maggiore o uguale all'attributo amount_per_night in <Floor>.

amount_per_night viene applicato a tasse e commissioni quando sono incluse nella tariffa per notte utilizzando AmountAfterTax, ma non quelle specificate utilizzando TaxFeeInfo.

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

Definisce le limitazioni relative al valore minimo su cui può essere impostata una tariffa dopo l'applicazione delle promozioni.

Le promozioni devono sempre specificare un <Discount> o un <BestDailyDiscount>. Di conseguenza, per creare una promozione che applichi solo un <Floor>, un'opzione è impostare un <Discount> con un percentage pari a 0.

La logica <Floor> continua a essere applicata agli sconti <FreeNights>, anche se alla notte senza costi è applicato uno sconto di 100%.

Se è configurata l'aggregazione, più promozioni con <Floor> potrebbero essere applicate a un singolo soggiorno. A ogni promozione viene applicato il proprio sconto, seguito subito dal relativo prezzo minimo. L'esempio seguente mostra in che modo ogni prezzo minimo contribuisce al calcolo successivo della promozione nella pila.

Esempio:

Prezzo per un soggiorno di 1 notte in cui AmountBeforeTax è 100 ed è presente una serie di due promozioni:

  1. Promozione con tipo di sovrapposizione base, fixed_amount di 25 e prezzo minimo amount_per_night di 90
  2. Promozione con tipo di sovrapposizione second, fixed_amount di 25 e un prezzo minimo amount_per_night di 60

Ecco l'ordine di calcolo:

  1. La promozione base viene applicata per prima e sconti AmountBeforeTax a 75, ma poi il prezzo minimo aumenta fino a 90.
  2. La promozione second prevede uno sconto su AmountBeforeTax da 90 a 65. Questo valore è superiore al prezzo minimo di 60, pertanto il secondo piano non viene applicato. La tariffa finale è 65.

Il fatto che 90 sia un prezzo minimo complessivo più rigido è irrilevante in quanto è valido solo per la propria promozione e non può esserci un prezzo minimo che si estende all'intero stack di promozioni.

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

L'importo minimo su cui può essere impostata una tariffa per notte dopo l'applicazione dello sconto.

Se viene specificato anche un elemento <Ceiling>, questo deve essere impostato su un valore inferiore o uguale all'attributo amount_per_night in <Ceiling>.

amount_per_night viene applicato a tasse e commissioni quando sono incluse nella tariffa per notte utilizzando AmountAfterTax, ma non quelle specificate utilizzando TaxFeeInfo.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates Un contenitore di uno o più intervalli di date che definiscono il periodo in cui deve essere effettuato il check-in affinché venga applicata la promozione.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

Un intervallo di date che specifica il periodo in cui deve essere effettuato il check-in affinché venga applicata la promozione. Questo elemento non è necessario se stai eliminando una o più promozioni.

È supportato anche il formato YearlessDate.

  • Se una delle date start o end è senza anno, entrambe devono essere compilate come date senza anno.
  • Gli intervalli di date senza anni non devono aggregarsi al nuovo anno. Rappresenta invece l'intervallo come due intervalli di date adiacenti. Ad esempio, {"12-29", "01-05"} può essere rappresentato come {"12-29", "12-31"} e {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate La data di inizio (inclusa) dell'intervallo di date (in base al fuso orario della proprietà). Questa data deve essere precedente o uguale alla data di end. Se start non è specificato, l'intervallo di date è a tutti gli effetti illimitato in termini di data di inizio.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate La data di fine (inclusa) dell'intervallo di date (in base al fuso orario della proprietà). Questa data deve essere uguale o successiva alla data di start. Se end non è specificato, l'intervallo di date è a tutti gli effetti illimitato in termini di data di fine.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

I giorni della settimana consentiti nell'intervallo di date. Se non specificato, sono consentiti tutti i giorni nell'intervallo di date. Ogni carattere nella stringa specifica un giorno. Ad esempio, "MTWHF" specifica che nell'intervallo di date sono consentiti i giorni feriali.

I caratteri validi sono:

  • M per lunedì
  • T per martedì
  • W per mercoledì
  • H per giovedì
  • F per venerdì
  • S per sabato
  • U per domenica

È valida qualsiasi combinazione di caratteri.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates Un contenitore di uno o più intervalli di date che definiscono il periodo in cui deve essere effettuato il pagamento affinché venga applicata la promozione.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

Un intervallo di date che specifica il periodo in cui deve essere effettuato il pagamento affinché venga applicata la promozione. Questo elemento non è necessario se stai eliminando una o più promozioni.

È supportato anche il formato YearlessDate.

  • Se una delle date start o end è senza anno, entrambe devono essere compilate come date senza anno.
  • Gli intervalli di date senza anni non devono aggregarsi al nuovo anno. Rappresenta invece l'intervallo come due intervalli di date adiacenti. Ad esempio, {"12-29", "01-05"} può essere rappresentato come {"12-29", "12-31"} e {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate La data di inizio (inclusa) dell'intervallo di date (in base al fuso orario della proprietà). Questa data deve essere precedente o uguale alla data di end. Se start non è specificato, l'intervallo di date è a tutti gli effetti illimitato in termini di data di inizio.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate La data di fine (inclusa) dell'intervallo di date (in base al fuso orario della proprietà). Questa data deve essere uguale o successiva alla data di start. Se end non è specificato, l'intervallo di date è a tutti gli effetti illimitato in termini di data di fine.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

I giorni della settimana consentiti nell'intervallo di date. Se non specificato, sono consentiti tutti i giorni nell'intervallo di date. Ogni carattere nella stringa specifica un giorno. Ad esempio, "MTWHF" specifica che nell'intervallo di date sono consentiti i giorni feriali.

I caratteri validi sono:

  • M per lunedì
  • T per martedì
  • W per mercoledì
  • H per giovedì
  • F per venerdì
  • S per sabato
  • U per domenica

È valida qualsiasi combinazione di caratteri.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices Contenitore dell'elenco dei dispositivi utente idonei alla promozione. Se specificato, la tariffa scontata viene offerta solo agli utenti idonei sui dispositivi elencati. Se non specificato, agli utenti idonei che utilizzano qualsiasi dispositivo viene offerta la tariffa scontata.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device Definisce un tipo di dispositivo dell'utente idoneo alla promozione.
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum Un tipo di dispositivo. Il valore deve essere desktop, tablet o mobile.
Promotions / HotelPromotions / Promotion / Discount 1 Discount

È necessario specificare in modo esatto uno tra Discount o BestDailyDiscount.

Specifica lo sconto da applicare a questa promozione.

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

È obbligatorio specificare un valore tra percentage, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Un valore decimale compreso tra 0 e 100 che specifica la percentuale di sconto. Viene applicato a AmountAfterTax (o AmountBeforeTax se AmountAfterTax non è specificato).

Esempi:

  • Se AmountAfterTax è 100 e percentage è 20, allora

    tariffa promozionale = AmountAfterTax * (1 - percentuale di sconto)

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

  • Se AmountBeforeTax è 100, percentage è 20 e TaxFeeInfo specifica una tassa pari a 10, allora

    tariffa promozionale = AmountBeforeTax * (1 - percentuale di sconto) + tasse

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

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

È obbligatorio specificare un valore tra percentage, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Un importo fisso da sottrarre dalla somma delle tariffe per notte di AmountAfterTax (o dalla somma di AmountBeforeTax tariffe per notte se AmountAfterTax non è specificato). Si presume che la valuta sia la stessa delle tariffe per notte. Se questo valore è maggiore della somma delle tariffe per notte, il valore risultante è zero.

Esempi:

  • Se si sta definendo il prezzo di un soggiorno di una notte in cui AmountBeforeTax è 90, AmountAfterTax è 100 e fixed_amount è 20, allora

    tariffa promozionale = AmountAfterTax - sconto fisso

    80,00 = 100 - 20

  • Se si sta definendo il prezzo di un soggiorno di una notte in cui AmountBeforeTax è 100, fixed_amount è 20 e TaxFeeInfo specifica una tassa pari all'8%,

    tariffa promozionale = (AmountBeforeTax - sconto fisso) * (1 + imposta percentuale)

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

  • Se si sta definendo il prezzo di un soggiorno di una notte in cui AmountBeforeTax è 50, fixed_amount è 60 e TaxFeeInfo specifica una tassa pari a 10, allora

    tariffa promozionale = (AmountBeforeTax - sconto fisso) * tasse

    10,00 = 0 + 10

  • Se si sta definendo il prezzo di un soggiorno di 3 notti in cui i valori di AmountAfterTax sono 100, 110 e 120, e fixed_amount è 150, allora

    tariffa promozionale = somma(AmountAfterTax) - (sconto fisso)

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

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

È obbligatorio specificare un valore tra percentage, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Uno sconto fisso applicato a ciascuna delle AmountAfterTax tariffe per notte (o alla N più economica se è specificato applied_nights). Se AmountAfterTax non è specificato, viene applicato a AmountBeforeTax. Si presume che la valuta sia la stessa delle tariffe per notte. Se fixed_amount_per_night è superiore a una tariffa per notte, tale tariffa per notte viene ridotta a zero: lo sconto non può far sì che una tariffa per notte diventi negativa.

Esempi:

  • Se si sta definendo il prezzo di un soggiorno di 3 notti in cui i valori di AmountAfterTax sono 100, 110 e 120, con fixed_amount_per_night pari a 10,

    tariffa promozionale = somma(AmountBeforeTax - sconto importo fisso)

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

  • Se si sta definendo il prezzo di un soggiorno di 3 notti in cui i valori di AmountAfterTax sono 10, 50 e 100, e il fixed_amount_per_night è 20, allora

    tariffa promozionale = somma(AmountAfterTax - sconto importo fisso)

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

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

È obbligatorio specificare un valore tra percentage, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Se vengono specificate le tariffe per notte di AmountAfterTax, viene impostato il prezzo del soggiorno, incluse tasse e commissioni, sul valore specificato. Se AmountBeforeTax viene specificato, indipendentemente dal fatto che AmountAfterTax sia specificato o meno, il prezzo al lordo delle imposte per il soggiorno verrà impostato sul valore specificato. Si presume che la valuta sia la stessa delle tariffe per notte.

Se AmountAfterTax intende riflettere una percentuale di imposta, l'impostazione di un prezzo fisso per AmountBeforeTax può comportare l'applicazione di tasse e commissioni non accurate. In generale, consigliamo vivamente di utilizzare TaxFeeInfo per specificare tasse e commissioni di una proprietà.

Esempi:

  • Se si sta definendo il prezzo di un soggiorno di una notte in cui AmountBeforeTax è 90, AmountAfterTax è 100 e fixed_price è 80, la tariffa promozionale è 80.
  • Se si sta definendo il prezzo di un soggiorno di una notte in cui AmountBeforeTax è 100, fixed_amount è 80 e TaxFeeInfo specifica una tassa pari all'8%,

    tariffa promozionale = prezzo fisso * (1 + imposta percentuale)

    86,40 = 80 * 1,08

  • Se si sta definendo il prezzo di un soggiorno di 3 notti in cui i valori di AmountAfterTax sono 100, 110 e 120; e fixed_amount è 300, allora

    tariffa promozionale = 300

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

È obbligatorio specificare un valore tra percentage, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Se vengono specificate le tariffe per notte di AmountAfterTax, viene impostato il prezzo di ogni notte di soggiorno, incluse tasse e commissioni, sul valore specificato. Se AmountBeforeTax viene specificato, indipendentemente dal fatto che AmountAfterTax sia specificato o meno, il prezzo al lordo delle imposte per ogni notte di soggiorno viene impostato sul valore specificato. Si presume che la valuta sia la stessa delle tariffe per notte.

Se AmountAfterTax intende riflettere una percentuale di imposta, l'impostazione di un prezzo fisso per AmountBeforeTax può comportare l'applicazione di tasse e commissioni non accurate. In generale, consigliamo vivamente di utilizzare TaxFeeInfo per specificare tasse e commissioni di una proprietà.

Se viene specificato applied_nights, il nuovo prezzo viene applicato alle N notti più economiche.

Esempi:

  • Se si sta definendo il prezzo di un soggiorno di 2 notti in cui i valori di AmountBeforeTax sono 90, 90, i valori di AmountAfterTax sono 100, 100 e fixed_price è 80, la tariffa promozionale è 80 + 80 = 160.
  • Se si sta definendo il prezzo di un soggiorno di 2 notti in cui AmountBeforeTax è 100, 100; fixed_amount è 80 e TaxFeeInfo specifica una tassa dell'8%, la tariffa promozionale è (80 + 80) * 1,08 = 172,8.
  • Se si sta definendo il prezzo di un soggiorno di 3 notti in cui i valori di AmountAfterTax sono 100, 110 e 120; e fixed_amount è 110, la tariffa promozionale è 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Deve essere utilizzato solo con percentage o fixed_amount_per_night.

Il numero di notti a cui viene applicato lo sconto, a partire dal meno costoso. Deve essere un numero intero compreso tra 1 e 99. Se non specificato, lo sconto viene applicato a tutte le notti.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Specifica uno sconto per determinate notti di soggiorno quando viene raggiunta la durata minima del soggiorno. Gli attributi dell'elemento Discount principale non sono consentiti se viene utilizzato questo elemento.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

Numero di notti richieste per l'applicazione dello sconto. Ogni sconto viene applicato a un segmento separato di notti di soggiorno.

Ad esempio, per un soggiorno di 10 notti in cui stay_nights è 4 (e repeats è vero), esistono due segmenti di pernottamenti: dalla 1a alla 4a notte e la dalla 5a all'8a notte; la 9a e la 10a notte non fanno parte di un segmento per notte.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer Il numero di notti scontate in ogni segmento di notti di soggiorno.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float Lo sconto applicato alle notti scontate. Se questo valore è 50, ogni notte selezionata è scontata del 50%.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Deve essere cheapest o last. Se last, le notti alla fine del segmento di notti di soggiorno sono scontate. Se cheapest, vengono scontate le notti più economiche all'interno del segmento di notti di soggiorno.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

Indica se lo sconto può essere applicato a più segmenti di notti per soggiorni. Se false, viene scontato solo il segmento di notti di soggiorno all'inizio dell'itinerario. Se true, qualsiasi segmento di notti di soggiorno è scontato.

Ad esempio, se stay_nights è 4 e l'itinerario è di 10 notti, se repeats è true, allora due tratti sono scontati (notti 1-4 e notti 5-8); ma, se repeats è false, solo 1 tratto è scontato (notti 1-4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Assegna un ranking a questa promozione e la attiva nella selezione classificata, dove viene selezionata solo la promozione con il ranking più basso per l'applicazione. I valori devono essere compresi tra 1 e 99 inclusi. Se più promozioni condividono lo stesso ranking, ne viene selezionata e applicata una arbitrariamente.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

È necessario specificare in modo esatto uno tra Discount o BestDailyDiscount.

Specifica uno sconto giornaliero che può essere applicato a una notte di soggiorno. Questo è in contrasto con Discount, che applica sconti a interi soggiorni.

Ogni proprietà può avere un singolo gruppo di promozioni considerate "le migliori del giorno". Ciò significa che, per ogni notte di soggiorno, viene selezionata e può essere applicata la singola promozione "migliore del giorno" idonea e che offre lo sconto più vantaggioso per la notte in questione.

Stacking non può essere specificato con BestDailyDiscount. Gli sconti "migliori giornalieri" che generano lo sconto più alto per ogni notte vengono combinati e trattati come uno sconto per soggiorno singolo (ad es. Discount) con tipo di sovrapposizione impostato su base. Questo sconto combinato viene confrontato con altre promozioni <Discount> idonee, e può essere cumulabile con, per trovare quella o la combinazione che offre lo sconto più consistente. Viene selezionata e applicata la combinazione di BestDailyDiscount o Discount per il tipo di stack base.

È possibile specificare StayDates con questo tipo di sconto, ma il valore application deve essere impostato su overlap

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

È obbligatorio specificare un valore tra percentage, fixed_amount o fixed_price.

Un valore decimale compreso tra 0 e 100 che specifica la percentuale di sconto. Viene applicato a AmountAfterTax (o AmountBeforeTax se AmountAfterTax non è specificato).

Esempi:

  • Se AmountAfterTax per una notte di soggiorno è 100 e percentage è 20, allora

    tariffa promozionale = AmountAfterTax * (1 - percentuale di sconto)

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

  • Se AmountBeforeTax per un ottavo di soggiorno è 100, percentage è 20 e TaxFeeInfo specifica una tassa pari a 10,

    tariffa promozionale = AmountBeforeTax * (1 - percentuale di sconto) + tasse

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

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

È obbligatorio specificare un valore tra percentage, fixed_amount o fixed_price.

Un importo fisso da sottrarre da una singola tariffa per notte AmountAfterTax (o AmountBeforeTax per notte se AmountAfterTax non è specificato). Si presume che la valuta sia la stessa delle tariffe per notte. Se questo valore è maggiore della somma delle tariffe per notte, il valore risultante è zero.

Esempi:

  • Se AmountBeforeTax per una singola notte è 90, AmountAfterTax è 100 e fixed_amount è 20, allora

    tariffa promozionale = AmountAfterTax - sconto fisso

    80,00 = 100 - 20

  • Se AmountBeforeTax per una singola notte è 100, fixed_amount è 20 e TaxFeeInfo specifica una tassa pari all'8%,

    tariffa promozionale = (AmountBeforeTax - sconto fisso) * (1 + imposta percentuale)

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

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

È obbligatorio specificare un valore tra percentage, fixed_amount o fixed_price.

Se vengono specificate le tariffe per notte di AmountAfterTax, viene impostato il prezzo della notte di soggiorno, incluse tasse e commissioni, sul valore specificato. Se AmountBeforeTax viene specificato, indipendentemente dal fatto che AmountAfterTax sia specificato o meno, il prezzo al lordo delle imposte per il soggiorno verrà impostato sul valore specificato. Si presume che la valuta sia la stessa delle tariffe per notte.

Esempi:

  • Se AmountBeforeTax per una singola notte è 90, AmountAfterTax è 100 e fixed_price è 80, la tariffa promozionale è 80.
  • Se AmountBeforeTax per una singola notte è 100, fixed_amount è 80 e TaxFeeInfo specifica una tassa pari all'8%,

    tariffa promozionale = prezzo fisso * (1 + imposta percentuale)

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Definisce le limitazioni relative al numero di camere che devono essere disponibili affinché venga applicata questa promozione. Lo sconto viene applicato solo alle notti che soddisfano il vincolo. Non consentito con lo sconto fixed_amount. Tieni presente che il numero di camere disponibili viene specificato con OTA_HotelInvCountNotifRQ (InvCount) o OTA_HotelAvailNotifRQ (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer Il numero minimo di camere che devono essere disponibili affinché la promozione venga applicata alla tariffa per notte. Se non specificato, non è previsto un valore minimo.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer Il numero massimo di camere che devono essere disponibili affinché la promozione venga applicata alla tariffa per notte. Se non specificato, non è previsto un limite massimo.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay Definisce i limiti di durata del soggiorno entro i quali è possibile applicare questa promozione. La promozione non viene applicata se la durata del soggiorno non supera i limiti minimo e massimo.
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer Il numero minimo di notti consentito per il soggiorno affinché venga applicata la promozione. Se non specificato, non è previsto un limite minimo.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer Il numero massimo di notti consentito per il soggiorno affinché venga applicata la promozione. Se non specificato, non è previsto un limite massimo.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

Contenitore di una regola tariffaria di adesione che attiva una specifica interfaccia utente per lo sconto associato.

Questo elemento non deve essere specificato a meno che non venga specificato anche <Discount>.

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

ID della regola tariffaria associata a un programma di abbonamento.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Specifica la somma minima delle tariffe giornaliere della camera (utilizzando il valore maggiore tra AmountBeforeTax o AmountAfterTax) che deve essere superata affinché la promozione venga applicata.
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer Il valore che deve essere superato affinché la promozione venga applicata.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy Definisce le limitazioni relative al numero di persone a cui viene applicata questa promozione. La promozione non viene applicata se il numero di persone è al di fuori dei limiti minimo e massimo.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer Il numero di persone specificato dall'utente deve essere almeno pari a questo valore affinché venga applicato lo sconto.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer Il numero di persone specificato dall'utente deve essere al massimo di questo valore affinché venga applicato lo sconto.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Contenitore di un elenco di piani tariffari a cui si applica la promozione. Se <RatePlans> non è specificato, la promozione si applica a tutti i piani tariffari.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan 1..n RatePlan Specifica un piano tariffario. Un piano tariffario viene definito da una combinazione di pacchetto, tariffe e disponibilità, come definito nei messaggi Transaction (Property Data), OTA_HotelRateAmountNotifRQ e OTA_HotelAvailNotimul e come identificato da PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string L'identificatore univoco del piano tariffario. Questo valore è mappato al valore PackageID in <PackageData> in un messaggio Transaction (Property Data) e nell'attributo RatePlanCode in <StatusApplicationControl> in entrambi i messaggi <OTA_HotelRateAmountNotifRQ> e <OTA_HotelAvailNotifRQ>. Il numero massimo di caratteri consentiti è 50.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes Contenitore di un elenco dei tipi di camera a cui si applica la promozione. La promozione viene applicata a ogni <RoomType> specificato. Se <RoomTypes> non è specificato, la promozione si applica a tutte le camere.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType Specifica un tipo di camera. Un tipo di camera è definito in un elemento <RoomData> in un messaggio Transaction (Property Data) e viene fatto riferimento tramite il relativo valore <RoomID>. (al valore <RoomID> viene fatto riferimento anche tramite l'attributo InvTypeCode nei messaggi OTA_HotelRateAmountNotifRQ).
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string L'identificatore univoco dell'inventario (tipo di camera). Questo valore è mappato a <RoomID> in un messaggio Transaction (Property Data). Il numero massimo di caratteri consentiti è 50.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking Specifica il modo in cui le promozioni possono essere combinate. Se non specificato, si presume che il "tipo" sia base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

In base a questa impostazione, è possibile applicare più promozioni a una singola tariffa:

  • any: può essere combinata con qualsiasi altra promozione (tranne none), ma l'ordine in cui devono essere applicate le promozioni non è garantito.
  • base: la promozione base idonea migliore viene selezionata e applicata per prima, prima delle altre promozioni. In precedenza era denominato base_only.
  • second: viene selezionata e applicata la migliore promozione second idonea dopo una promozione base (se applicabile) e prima delle promozioni any.
  • none: non è cumulabile con altre promozioni.

Tra le combinazioni consentite, alla tariffa viene applicato l'insieme di promozioni che genera lo sconto maggiore.

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates Un contenitore di uno o più intervalli di date che determinano il modo in cui viene applicata la promozione, ad esempio per rispecchiare gli sconti stagionali.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

Descrive come deve essere applicata la promozione.

I valori validi sono:

  • all: applica la promozione a ogni notte nell'itinerario se tutte le date nell'itinerario si sovrappongono alle date del soggiorno.
  • any: applica la promozione a tutte le notti nell'itinerario se una qualsiasi data nell'itinerario si sovrappone a una data nell'intervallo di date del soggiorno.
  • overlap: applica la promozione solo alle notti dell'itinerario che si sovrappongono a una data compresa nell'intervallo di date del soggiorno.

Questo attributo deve essere sempre specificato.

  • Se per <Discount> è specificato percentage e application è impostato su all o any, lo sconto viene applicato come percentuale dell'intero soggiorno.
  • Se per <Discount> è specificato percentage e application è impostato su overlap, lo sconto viene applicato come percentuale delle tariffe per notte per le notti sovrapposte.
  • <Discount> con fixed_amount e application impostato su overlap è una combinazione non valida.
  • <FreeNights> supporta tutti i valori application. Tieni presente che per overlap, per i requisiti di sconto vengono prese in considerazione solo notti di soggiorno sovrapposte.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

Un intervallo di date che specifica le date in cui deve essere applicata la promozione.

È supportato anche il formato YearlessDate.

  • Se una delle date start o end è senza anno, entrambe devono essere compilate come date senza anno.
  • Gli intervalli di date senza anni non devono aggregarsi al nuovo anno. Rappresenta invece l'intervallo come due intervalli di date adiacenti. Ad esempio, {"12-29", "01-05"} può essere rappresentato come {"12-29", "12-31"} e {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate La data di inizio (inclusa) dell'intervallo di date (in base al fuso orario della proprietà). Questa data deve essere precedente o uguale alla data di end. Se start non è specificato, l'intervallo di date è a tutti gli effetti illimitato in termini di data di inizio.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate La data di fine (inclusa) dell'intervallo di date (in base al fuso orario della proprietà). Questa data deve essere uguale o successiva alla data di start. Se end non è specificato, l'intervallo di date è a tutti gli effetti illimitato in termini di data di fine.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

I giorni della settimana consentiti nell'intervallo di date. Se non specificato, sono consentiti tutti i giorni nell'intervallo di date. Ogni carattere nella stringa specifica un giorno. Ad esempio, "MTWHF" specifica che nell'intervallo di date sono consentiti i giorni feriali.

I caratteri validi sono:

  • M per lunedì
  • T per martedì
  • W per mercoledì
  • H per giovedì
  • F per venerdì
  • S per sabato
  • U per domenica

È valida qualsiasi combinazione di caratteri.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Contenitore dell'elenco delle località degli utenti (paesi) idonee per la promozione. Se specificato, la tariffa scontata viene offerta solo agli utenti idonei nei paesi elencati. Se non specificato, agli utenti idonei di qualsiasi paese viene offerta la tariffa scontata.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum Il tipo di specifica UserCountries.

I valori validi sono include e exclude.

Se il valore type UserCountries è impostato su include, la promozione si applica agli utenti dei paesi elencati.

Se il valore type UserCountries è exclude, la promozione si applica agli utenti al di fuori dei paesi elencati.

Se il valore type UserCountries non viene configurato, viene trattato come include e la promozione viene applicata agli utenti dei paesi elencati.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country Definisce un paese in cui gli utenti sono idonei alla promozione.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string Un codice paese CLDR, ad esempio DE o FR. Tieni presente che, per alcuni paesi, il codice paese CLDR non corrisponde al codice paese ISO di due lettere. Inoltre, i codici regione CLDR non sono supportati.

Esempi

Messaggio di base

L'esempio seguente mostra un messaggio Promotions di base:

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


Condizione dell'inventario

L'esempio seguente mostra come creare uno sconto se è presente inventario in eccesso vicino alla data di arrivo:

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


Eliminare una promozione

L'esempio seguente mostra come eliminare una promozione per una proprietà:

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

Elimina tutte le promozioni

L'esempio seguente mostra come eliminare tutte le promozioni per una proprietà:

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



Sovrapponi tutte le promozioni

L'esempio seguente mostra come sovrapporre <HotelPromotions> per una proprietà con una o più nuove promozioni. Quando action="overlay", tutte le promozioni archiviate vengono eliminate prima di archiviare le promozioni specificate nel messaggio corrente:

<?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 diversi tipi di sovrapposizione

L'esempio seguente mostra un caso in cui vengono applicate tre diverse promozioni (base, second, any). Tieni presente che la promozione none non viene applicata, in quanto le altre promozioni offrono uno sconto migliore. Se il prezzo originale era 100 $, il prezzo scontato sarebbe 72,90 $.

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


Nessuno Tipo di impilamento

L'esempio seguente mostra un caso in cui viene utilizzata la promozione none perché la combinazione di altre promozioni offre uno sconto minore. Se il prezzo originale era 100 $, il prezzo scontato sarebbe 75 $.

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



Limiti della durata della finestra di prenotazione

L'esempio seguente mostra un caso in cui viene utilizzato l'elemento BookingWindow con i limiti di inizio e fine definiti come tipo Durata ISO 8601. Per limitare la finestra di prenotazione, è necessario prenotare entro le 18:00 del giorno prima dell'arrivo e entro le 12:00 del 2° giorno prima dell'arrivo.

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


Limiti DateTime e date di prenotazione

L'esempio seguente mostra un caso in cui l'elemento BookingDates viene utilizzato con gli attributi start e end come tipi DateTime. Questa limitazione relativa alle date di prenotazione richiede che la prenotazione venga effettuata tra le 06:30 del 01-07-2020 e le 18:45 del 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>


Intervalli di date senza anni

L'esempio seguente mostra un caso in cui l'elemento CheckInDates contiene DateRanges con campi start e end senza anni. In questo esempio, la promozione si applica alle date di check-in tra il 29/12 e il 2/12, indipendentemente dall'anno. Gli intervalli di date senza anno che superano il limite del nuovo anno non sono validi, pertanto il valore DateRange viene espresso come due intervalli di date adiacenti.

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



Sconto FreeNights

L'esempio seguente applica uno sconto del 50% per due notti ogni quattro notti per l'intervallo di date di prenotazione specificato. Per un itinerario di dieci notti, un totale di quattro notti viene scontato del 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>

Nel prossimo esempio viene scontato il 50% di una notte per ogni tre notti di soggiorno per gli intervalli specificati di date del soggiorno. Per l'idoneità allo sconto vengono conteggiate solo le notti di soggiorno sovrapposte. Per il seguente itinerario con check-in 01/01/2022 e check-out il giorno 07/01/2022, le notti di soggiorno qualificate e gli sconti vengono applicati come segue.

  • 01/01/2022 (soggiorno)
  • 02/01/2022 (soggiorno)
  • 2022-01-03
  • 04/01/2022 (scontato)
  • 05-01-2022 (soggiorno)
  • 06-01-2022 (soggiorno)
<?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>


Selezione classificata

L'esempio seguente offre due sconti, uno per il 20% e un altro per il 15%. Durante la valutazione, viene applicato solo lo sconto del 15% perché ha un ranking inferiore.

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

L'esempio seguente sconta un soggiorno di due notti applicando BestDailyDiscount insieme a un 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>

Considera un soggiorno di due notti dal 30 aprile 2023 al 2 maggio 2023 Ai fini del calcolo, viene trovata per prima la combinazione dei migliori sconti giornalieri che genera lo sconto più profondo.

Per la prima notte, la promozione "generale" è l'unico importo idoneo con uno sconto fisso di 20.

Per la seconda notte, la promozione "maggio" offre uno sconto maggiore rispetto allo sconto "generale". Se selezioni "maggio", l'importo dello sconto fisso è 50.

Poi per il soggiorno, la promozione "fiesta" sconto a 5 a notte, o 10 in totale. Può essere cumulabile con la combinazione dei migliori sconti giornalieri perché il tipo di sovrapposizione "fiesta" è impostato su any. Se è stato impostato su base, viene applicata solo la combinazione dei migliori sconti giornalieri o lo sconto "fiesta". Consulta la descrizione di Stacking per ulteriori informazioni.

`Nel complesso, il prezzo del soggiorno riceve uno sconto fisso di 20 + 50 + 10 = 80.

Risposte

Sintassi

Il messaggio PromotionsResponse utilizza la seguente sintassi:

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

Elementi e attributi

Il messaggio PromotionsResponse contiene i seguenti elementi e attributi:

Elemento / @attributo Occorrenze Tipo Descrizione
PromotionsResponse 1 Complex element L'elemento principale che indica se l'esito è positivo o negativo per un messaggio di richiesta di promozioni ricevuto.
PromotionsResponse / @timestamp 1 DateTime La data e l'ora di creazione di questo messaggio.
PromotionsResponse / @id 1 string L'identificatore univoco del messaggio Promotions associato.
PromotionsResponse / @partner 1 string L'account partner per questo messaggio.
PromotionsResponse / Success 0..1 Success Indica che il messaggio Promotions è stato elaborato correttamente senza avvisi, errori o problemi.

In ogni messaggio è presente <Success> o <Issues>.

PromotionsResponse / Issues 0..1 Issues Un contenitore per uno o più problemi riscontrati durante l'elaborazione del messaggio Promozioni.

In ogni messaggio è presente <Success> o <Issues>.

PromotionsResponse / Issues / Issue 1..n Issue La descrizione di un avviso, un errore o un errore riscontrato durante l'elaborazione del messaggio Promozioni. Per informazioni dettagliate su questi problemi, consulta la sezione Messaggi di errore relativi allo stato dei feed.
PromotionsResponse / Issues / Issue / @code 1 integer L'identificatore del problema.
PromotionsResponse / Issues / Issue / @status 1 enum

Il tipo di problema riscontrato.

I valori validi sono warning, error e failure.

Esempi

Operazione riuscita

Di seguito è riportata una risposta a un messaggio Promotions elaborato correttamente.

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

Problemi

Di seguito è riportata una risposta a un messaggio di Promotions non elaborato a causa di errori.

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