Promozioni

Panoramica

Questa API consente di specificare gli sconti possibili. Tra le promozioni specificate, Google applica la promozione idonea o l'insieme di promozioni che porta al prezzo più basso. Se stai cercando un'API che supporti aggiustamenti delle tariffe arbitrari in grado di aumentare o diminuire il prezzo quando le condizioni sono soddisfatte, ti consigliamo di prendere 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 Promotions contiene i seguenti elementi e attributi:

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

Se hai 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 per una proprietà. Ogni promozione si applica a una singola proprietà.

A meno che non venga utilizzato <Stacking>, la promozione con lo sconto maggiore viene applicata alla prenotazione nel caso in cui siano idonee più promozioni.

Promotions / HotelPromotions / @hotel_id 1 string L'identificatore univoco della proprietà. 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". Quando il valore è "overlay", tutte le promozioni archiviate vengono eliminate prima dell'archiviazione delle promozioni specificate nel messaggio corrente.

Se non specificata, 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 proprietà. 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 della 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 se una promozione con lo stesso id non viene archiviata, questa promozione viene archiviata. In caso contrario, se non specificato e se viene archiviata una promozione con lo stesso id, la promozione esistente viene aggiornata.

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

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates Un contenitore per uno o più intervalli che definiscono i momenti in cui deve essere effettuata la prenotazione affinché la promozione venga applicata.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange Un intervallo che specifica il periodo in cui 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 l'ora (in base al fuso orario della proprietà), inclusa, dell'intervallo.

  • La data o l'ora specificata da start deve essere precedente o uguale alla data o all'ora specificata da end.
  • Se start non è specificato, l'intervallo è effettivamente illimitato in termini di ora di inizio.
  • Se start viene inserito come 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 data/ora (in base al fuso orario della proprietà), inclusa, dell'intervallo.

  • La data o l'ora data/ora specificate da end deve essere successiva o uguale alla data o all'ora specificata da start.
  • Se end non è specificato, l'intervallo è effettivamente illimitato in termini di ora di fine.
  • Se end viene specificato come data "AAAA-MM-GG", è interpretato 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 dell'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 avvenire la prenotazione rispetto alla data di check-in (in base al fuso orario della proprietà). Ad esempio, la finestra di prenotazione può essere impostata su un periodo minimo di 7 giorni, ma non superiore a 180 giorni, prima del check-in.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration La durata minima prima del check-in durante il quale deve essere effettuata la prenotazione affinché venga applicata la promozione. Se non è specificato o se il suo valore è 0, non è previsto un limite minimo.

I tipi di valore validi sono:

  • Numero intero: il numero di giorni prima della data di check-in. Ad esempio, un valore 30 indica che la promozione si applica solo alle prenotazioni almeno 30 giorni prima della data di 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 di check-in. Il 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é venga applicata la promozione. Se non è specificato o se il suo valore è 0, non esiste un limite massimo.

I tipi di valore validi sono:

  • Numero intero: il numero di giorni prima della data di check-in. Ad esempio, un valore 30 indica che la promozione si applica solo alle prenotazioni effettuate massimo 30 giorni prima della data di 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 effettuate massimo 30 giorni prima della data di check-in. Il 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 sul valore massimo su cui può essere impostata una tariffa dopo l'applicazione delle promozioni.

Le promozioni devono sempre specificare un <Discount> o un <BestDailyDiscount>, quindi per creare una promozione che applichi solo <Ceiling>, una possibile opzione è impostare <Discount> con percentage di 0.

Se è configurato l'impilamento, a un singolo soggiorno potrebbero essere applicate più promozioni con <Ceiling>. Ogni promozione applica il proprio sconto, seguito immediatamente dal limite massimo. L'esempio seguente mostra in che modo ogni tetto massimo contribuisce al calcolo della promozione successiva nello stack.

Esempio:

Prezzi di un soggiorno di 1 notte con AmountBeforeTax pari a 100 ed è disponibile una serie di due promozioni:

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

Ecco l'ordine di calcolo:

  1. La promozione base viene applicata prima e sconta AmountBeforeTax a 75, ma poi il limite lo abbassa a 60.
  2. La promozione second riduce il prezzo di AmountBeforeTax da 60 a 35. Questo valore è inferiore al limite di 90, quindi il secondo limite non viene applicato. La tariffa finale è di 35.

Il fatto che 60 sia un limite complessivo più rigido è irrilevante, in quanto è valido solo per la propria promozione e non può esservi un unico limite che si estende all'intero stack di promozioni.

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

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

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

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

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

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

Le promozioni devono sempre specificare un <Discount> o un <BestDailyDiscount>, quindi per creare una promozione che applichi solo <Floor>, una possibile opzione è impostare <Discount> con percentage di 0.

La logica di <Floor> si applica comunque agli sconti <FreeNights>, anche se alla notte senza costi è applicato uno sconto di 100%.

Se è configurato l'impilamento, a un singolo soggiorno potrebbero essere applicate più promozioni con <Floor>. Ogni promozione applica il proprio sconto, seguito immediatamente dal prezzo minimo. Il seguente esempio mostra in che modo ogni piano contribuisce al calcolo della promozione successivo nello stack.

Esempio:

Prezzi di un soggiorno di 1 notte con AmountBeforeTax pari a 100 ed è disponibile una serie di due promozioni:

  1. Promozione con tipo di impilamento base, fixed_amount di 25 e amount_per_night minimo di 90
  2. Promozione con tipo di impilamento 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 prima e sconta AmountBeforeTax a 75, ma poi il prezzo minimo aumenta fino a 90.
  2. La promozione second riduce il prezzo di AmountBeforeTax da 90 a 65. Si tratta di un piano superiore a 60, pertanto il secondo piano non viene applicato. La tariffa finale è di 65.

Il fatto che 90 sia un prezzo minimo complessivo più rigido non è pertinente, in quanto è valido solo per la propria promozione e non può esservi un singolo prezzo che si estende all'intero stack della promozione.

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 è specificato anche un elemento <Ceiling>, questo deve essere impostato su un valore minore o uguale all'attributo amount_per_night in <Ceiling>.

L'importo di amount_per_night viene applicato a tasse e commissioni quando sono incluse nella tariffa per notte usando AmountAfterTax, ma non a 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 è obbligatorio 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 terminare con il 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 è effettivamente 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 è effettivamente 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 dell'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 check-out 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 check-out affinché venga applicata la promozione. Questo elemento non è obbligatorio 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 terminare con il 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 è effettivamente 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 è effettivamente 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 dell'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 che utilizzano i dispositivi elencati. Se non specificato, la tariffa scontata viene offerta agli utenti idonei che utilizzano qualsiasi dispositivo.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device Definisce un tipo di dispositivo utente idoneo per la 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 esattamente un valore tra Discount o BestDailyDiscount.

Specifica lo sconto da applicare a questa promozione.

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

È obbligatorio specificare esattamente 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 un'imposta 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 esattamente un valore tra percentage, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Un importo fisso che deve essere sottratto dalla somma delle tariffe per notte di AmountAfterTax (o dalla somma delle tariffe per notte di AmountBeforeTax se AmountAfterTax non è specificato). Si presume che la valuta sia la stessa delle tariffe per notte. Se questo valore è superiore alla 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 dell'8%, allora

    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) * imposta

    10,00 = 0 + 10

  • Se si sta definendo il prezzo di un soggiorno di tre 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 esattamente un valore tra percentage, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Uno sconto fisso applicato a ciascuna delle tariffe per notte di AmountAfterTax (o alla N più economica se viene 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, quella tariffa per notte viene ridotta a zero, pertanto lo sconto non può far sì che una tariffa per notte diventi negativa.

Esempi:

  • Se si sta definendo il prezzo di un soggiorno di tre notti in cui i valori di AmountAfterTax sono 100, 110 e 120 e il valore di fixed_amount_per_night è 10, allora

    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 tre notti in cui i valori di AmountAfterTax sono 10, 50 e 100 e il valore di 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 esattamente un valore tra percentage, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

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

Se AmountAfterTax deve riflettere un'imposta percentuale, l'impostazione di un prezzo fisso per AmountBeforeTax può comportare tasse e commissioni non precise. In generale, è vivamente consigliato 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 dell'8%, allora

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

    86,40 = 80 * 1,08

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

    tasso promozionale = 300

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

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

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

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

Se applied_nights è specificato, il nuovo prezzo verrà applicato a N notti più economiche.

Esempi:

  • Se si sta definendo il prezzo di un soggiorno di due notti in cui i valori di AmountBeforeTax sono 90 e 90, i valori di AmountAfterTax sono 100 e 100 e fixed_price è 80, la tariffa promozionale è 80 + 80 = 160.
  • Se si sta definendo il prezzo di un soggiorno di due notti in cui AmountBeforeTax è 100, 100; fixed_amount è 80 e TaxFeeInfo specifica un'imposta dell'8%, la tariffa promozionale è (80 + 80) * 1,08 = 172,8.
  • Se si sta definendo il prezzo di un soggiorno di tre notti in cui i valori di AmountAfterTax sono 100, 110 e 120, e fixed_amount è 110, la tariffa promozionale è pari a 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 da quella meno costosa. 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 su determinate notti di un soggiorno quando viene raggiunta una 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 necessarie per applicare lo 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 è true), sono disponibili due segmenti di pernottamento: dalla 1° alla 4° notte e dalla 5° all'8° notti; la 9° e la 10° notte non fanno parte di un segmento per il soggiorno.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer Il numero di notti scontate all'interno di 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, lo sconto del 50% per ogni notte selezionata.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Deve essere cheapest o last. Se last, le notti alla fine del segmento delle notti del soggiorno sono scontate. Se cheapest, le notti più economiche nel segmento di notti del soggiorno sono scontate.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

Indica se lo sconto può essere applicato a più segmenti per pernottamenti. Se false, viene scontato solo il segmento delle 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, vengono scontati due tratti (notti 1-4 e notti 5-8); ma, se repeats è false, viene scontato solo 1 segmento (notti 1-4).

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

È necessario specificare esattamente un valore 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 "migliori giornaliere". Ciò significa che, per ogni notte di soggiorno, viene selezionata e può essere applicata la singola promozione "migliore giornaliero" idonea e che genera lo sconto minimo per quella notte.

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

StayDates può essere specificato con questo tipo di sconto, ma application deve essere impostato su overlap

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

È obbligatorio specificare esattamente 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,

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

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

  • Se AmountBeforeTax per una ponderazione del soggiorno è 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/ BestDailyDiscount / @fixed_amount 0..1 float

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

Un importo fisso che deve essere sottratto da una singola tariffa per notte di AmountAfterTax (o da una tariffa per notte AmountBeforeTax se AmountAfterTax non è specificato). Si presume che la valuta sia la stessa delle tariffe per notte. Se questo valore è superiore alla 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 è pari a 100, fixed_amount è 20 e TaxFeeInfo specifica un'imposta dell'8%, allora

    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 esattamente un valore tra percentage, fixed_amount o fixed_price.

Se vengono specificate tariffe di AmountAfterTax per notte, il prezzo della notte del soggiorno, incluse tasse e commissioni, viene impostato sul valore specificato. Se AmountBeforeTax è specificato, indipendentemente dal fatto che venga specificato AmountAfterTax, il prezzo al lordo delle tasse del soggiorno viene 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, allora la tariffa promozionale è 80.
  • Se AmountBeforeTax per una singola notte è pari a 100, fixed_amount è 80 e TaxFeeInfo specifica un'imposta dell'8%, allora

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

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Definisce le limitazioni sul numero di camere che devono essere disponibili affinché venga applicata questa promozione. Lo sconto viene applicato solo alle notti che rispettano il vincolo. Non consentito con lo sconto fixed_amount. Tieni presente che il numero di camere disponibili viene specificato con OTA_HotelInvCountNoti Analizza (InvCount) o OTA_HotelAvailNoti Analizza (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 limite 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 esiste 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 quando la durata del soggiorno non rientra nei limiti minimi e massimi.
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 per la tariffa di iscrizione che attiva una specifica opzione di interfaccia utente per lo sconto associato.

Questo elemento non deve essere specificato a meno che sia 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é venga applicata la promozione.
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 quando il numero di persone non rientra nei limiti minimi e massimi.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer Affinché lo sconto venga applicato, il numero di persone specificato dall'utente deve essere almeno pari a questo valore.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer Il numero di persone specificato dall'utente deve essere al massimo 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_HotelRateAmountNotistan e OTA_HotelAvailNoti Analizza e come identificato dal valore 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 all'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. Il tipo di camera viene definito in un elemento <RoomData> in un messaggio Transaction (Property Data) e vi viene fatto riferimento tramite il relativo valore <RoomID>. (al valore <RoomID> viene fatto riferimento anche dall'attributo InvTypeCode nei messaggi OTA_HotelRateAmountNoti Analizza).
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 come combinare le promozioni. 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: cumulabile con qualsiasi altra promozione (tranne none), ma l'ordine in cui devono essere applicate le promozioni non è garantito.
  • base: la migliore promozione base idonea viene selezionata e applicata prima di altre promozioni. In precedenza era denominato base_only.
  • second: la migliore promozione second idonea viene selezionata e applicata dopo una promozione base (se applicabile) e prima delle any promozioni.
  • none: non cumulabile con altre promozioni.

Tra le combinazioni consentite, viene applicato alla tariffa 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 come viene applicata la promozione, ad esempio per includere gli sconti stagionali.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

Descrive come applicare la promozione.

I valori validi sono:

  • all: applica la promozione a ogni notte nell'itinerario se tutte le date dell'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 nell'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 che si sovrappongono.
  • La combinazione di <Discount> che specifica fixed_amount e application impostata su overlap è una combinazione non valida.
  • <FreeNights> supporta tutti i valori di application. Tieni presente che per overlap vengono considerate solo le notti di soggiorno sovrapposte per i requisiti di sconto.
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 terminare con il 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 è effettivamente 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 è effettivamente 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 dell'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 per l'elenco delle località degli utenti (paesi) idonee alla promozione. Se specificato, la tariffa scontata viene offerta solo agli utenti idonei nei paesi elencati. Se non specificato, la tariffa scontata viene offerta agli utenti idonei in qualsiasi paese.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum Il tipo di specifica UserCountries.

I valori validi sono include e exclude.

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

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

Se il valore di UserCountries type non viene configurato, viene considerato 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 per la promozione.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string Un codice paese CLDR, ad esempio DE o FR. Per alcuni paesi, il codice paese CLDR non corrisponde al codice paese ISO a 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 in prossimità della 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 di 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à a 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 verranno applicate tre promozioni diverse (base, second, any). Tieni presente che la promozione none non verrà applicata poiché le altre promozioni forniscono uno sconto migliore. Se il prezzo originale era di 100 $, il prezzo scontato sarà di 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 sovrapposizione

L'esempio seguente mostra un caso in cui viene utilizzata la promozione none perché la combinazione di altre promozioni fornisce uno sconto inferiore. Se il prezzo originale era di 100 $, quello 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 durata finestra prenotazione

L'esempio seguente mostra un caso in cui l'elemento BookingWindow viene utilizzato con i relativi limiti di inizio e fine definiti come tipo di durata ISO 8601. Questa limitazione relativa alla finestra di prenotazione richiede la prenotazione entro le 18:00 del giorno prima dell'arrivo o dopo le 12:00 del secondo 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 data/ora per 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 in base 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 comprese tra il 29/12 e il 2/1, indipendentemente dall'anno. Gli intervalli di date senza anno che superano il limite di nuovo anno non sono validi, pertanto l'intervallo di date 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 per ogni quattro notti di soggiorno per l'intervallo di date di prenotazione specificato. Per un itinerario di dieci notti, un totale di quattro notti sarà 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>

L'esempio successivo prevede uno sconto del 50% per una notte per ogni tre notti perse per gli intervalli di date del soggiorno specificati. Ai fini dell'idoneità allo sconto, vengono conteggiate solo le notti che si sovrappongono. Per il seguente itinerario con check-in il 01/01/2022 e check-out il 07/01/2022, le notti di soggiorno idonee e gli sconti vengono applicati come segue.

  • 01/01/2022 (soggiorno)
  • 02/01/2022 (soggiorno)
  • 2022-01-03
  • 2022-01-04 (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 in ordine di importanza

L'esempio seguente offre due sconti, uno per il 20% e l'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>

Miglior sconto giornaliero

Nell'esempio seguente un soggiorno di due notti viene scontato applicando BestDailyDiscount sovrapposto a 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 Per il calcolo, la combinazione dei migliori sconti giornalieri che danno lo sconto più profondo viene trovata per prima.

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

Per la seconda notte, la promozione "potrebbe" offre uno sconto più profondo rispetto allo sconto "generale". Se selezioni "Può", l'importo fisso dello sconto è pari a 50.

Poi, per il soggiorno, la promozione "fiesta" è valida fino a 5 a notte, o 10 in totale. Può essere combinata con la combinazione dei migliori sconti giornalieri perché "fiesta" ha il tipo di stack impostato su any. Se è impostato su base, viene applicata solo la combinazione dei migliori sconti giornalieri o dello sconto per le feste. Per ulteriori informazioni, consulta la descrizione di Stacking.

"Complessivamente, il prezzo del soggiorno riceve uno sconto di 20 + 50 + 10 = 80 sull'importo fisso.

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 tipo 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 Promotions.

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 Promotions. I dettagli su questi problemi sono disponibili nella 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 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>