Promozioni

Panoramica

Questa API ti consente di specificare possibili sconti. Tra le promozioni specificate, Google applica la promozione o l'insieme di promozioni idonee che genera il prezzo più basso. Se stai cercando un'API che supporti aggiustamenti arbitrari delle tariffe che possono aumentare o diminuire il prezzo quando le condizioni sono soddisfatte, ti consigliamo di utilizzare 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

La sintassi del messaggio Promotions è la seguente:

<?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, percentage_of_base, 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" percentage_of_base="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 contenente promozioni.
Promotions / @partner 1 string L'account partner di questo messaggio. Il valore della stringa è il valore "Chiave del partner" presente 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 viene applicata a una singola proprietà.

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

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". Quando il valore è "overlay", tutte le promozioni archiviate vengono eliminate prima di archiviare le promozioni specificate nel messaggio corrente.

Se non specificato, allora ogni promozione specificata nel messaggio corrente viene:

  • 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 relative alla proprietà verranno 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 . (periodo).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

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

Se specifichi delete, la promozione archiviata con lo stesso id viene eliminata. Quando utilizzi delete, non includere nessun elemento secondario 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 il periodo in cui deve essere effettuata la prenotazione affinché la promozione venga applicata.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date o DateTime

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

  • La data o la data/ora specificata da start deve essere precedente (o uguale) alla data o alla data/ora specificata da end.
  • Se start non è specificato, l'intervallo è effettivamente illimitato in termini di ora di inizio.
  • Se start viene compilato come data "AAAA-MM-GG", viene interpretato come data e ora "AAAA-MM-GGT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date o DateTime

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

  • La data o la data/ora specificata da end deve essere successiva (o uguale) alla data o alla data/ora specificata da start.
  • Se end non è specificato, l'intervallo è effettivamente illimitato in termini di ora di fine.
  • Se end viene fornito come data "AAAA-MM-GG", viene interpretato come data e 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 il valore non viene specificato, saranno 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

Sono valide tutte le combinazioni di caratteri.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow Specifica il periodo di tempo in cui deve essere effettuata la prenotazione rispetto alla data di check-in (in base al fuso orario della proprietà). Ad esempio, è possibile impostare una finestra di prenotazione di almeno 7 giorni, ma non oltre 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 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 effettuate 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 di check-in. Ad esempio, un valore P30D indica che la promozione si applica solo alle prenotazioni effettuate almeno 30 giorni prima della data di check-in. Un valore 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 valore è 0, non è previsto 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 al 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 di check-in. Ad esempio, un valore P30D indica che la promozione si applica solo alle prenotazioni effettuate al massimo 30 giorni prima della data di check-in. Un valore P30DT6H richiede la prenotazione a partire dalle ore 18:00 del trentesimo giorno prima dell'arrivo.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Definisce le restrizioni relative al valore massimo che può essere impostato per 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 un <Ceiling>, un'opzione è impostare un <Discount> con un percentage di 0.

Se è configurato l'accatastamento, a un singolo soggiorno possono essere applicate più promozioni con <Ceiling>. A ogni promozione viene applicato il relativo sconto, immediatamente seguito dal relativo limite. L' esempio seguente mostra in che modo ogni limite contribuisce al calcolo della promozione successiva nello stack.

Esempio:

Definizione del prezzo di un soggiorno di una notte in cui AmountBeforeTax è equale a 100 e sono presenti due promozioni in serie:

  1. Promozione con tipo di cumulo base, un fixed_amount di 25 e un amount_per_night massimo di 60
  2. Promozione con tipo di cumulo second, fixed_amount pari a 25 e un limite superiore amount_per_night pari a 90

Ecco l'ordine di calcolo:

  1. La promozione base viene applicata per prima e consente di ottenere uno sconto di AmountBeforeTax a 75, ma il limite massimo viene ridotto a 60.
  2. La promozione second applica uno sconto sul AmountBeforeTax da 60 a 35. Questo valore è inferiore al limite di 90, pertanto il secondo limite non viene applicato. La tariffa finale è 35.

Il fatto che 60 sia un limite massimo complessivo più rigoroso è irrilevante poiché è valido solo per la promozione in questione e non può esserci un singolo limite massimo che si estenda all'intero stack di promozioni.

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

L'importo massimo che può essere impostato per 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>.

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

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

Definisce le restrizioni relative al valore minimo che può essere impostato per 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 un <Floor>, un'opzione è impostare un <Discount> con un percentage di 0.

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

Se è configurato l'accatastamento, a un singolo soggiorno possono essere applicate più promozioni con <Floor>. A ogni promozione viene applicato il relativo sconto, immediatamente seguito dal prezzo minimo. L' esempio seguente mostra in che modo ogni livello contribuisce al calcolo della promozione successiva nello stack.

Esempio:

Definizione del prezzo di un soggiorno di una notte in cui AmountBeforeTax è equale a 100 e sono presenti due promozioni in serie:

  1. Promozione con tipo di cumulo base, un fixed_amount di 25 e un minimo amount_per_night di 90
  2. Promozione con tipo di cumulo second, fixed_amount pari a 25 e un valore minimo amount_per_night pari a 60

Ecco l'ordine di calcolo:

  1. La promozione base viene applicata per prima e sconta il AmountBeforeTax a 75, ma il prezzo minimo viene poi aumentato a 90.
  2. La promozione second applica uno sconto sul AmountBeforeTax da 90 a 65. Questo valore è superiore al limite minimo di 60, pertanto il secondo limite non viene applicato. La tariffa finale è 65.

Il fatto che 90 sia un limite inferiore complessivo più rigoroso è irrilevante poiché è valido solo per la promozione in questione e non può esserci un singolo limite inferiore che si estenda all'intero stack di promozioni.

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

L'importo minimo che può essere impostato per una tariffa per notte dopo l'applicazione dello sconto.

Se viene specificato anche un elemento <Ceiling>, questo deve essere impostato su un valore minore 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 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 è richiesto se stai eliminando una o più promozioni.

È supportato anche il formato YearlessDate.

  • Se una delle date (start o end) non include l'anno, entrambe devono essere compilate come date senza anno.
  • Gli intervalli di date senza anno non devono includere 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 end. Se start non è specificato, l'intervallo di date risulta 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 risulta 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 il valore non viene specificato, saranno 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

Sono valide tutte le combinazioni 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 è richiesto se stai eliminando una o più promozioni.

È supportato anche il formato YearlessDate.

  • Se una delle date (start o end) non include l'anno, entrambe devono essere compilate come date senza anno.
  • Gli intervalli di date senza anno non devono includere 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 end. Se start non è specificato, l'intervallo di date risulta 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 risulta 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 il valore non viene specificato, saranno 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

Sono valide tutte le combinazioni di caratteri.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices Contenitore dell'elenco di dispositivi utente idonei alla promozione. Se specificato, la tariffa scontata viene offerta solo agli utenti idonei che utilizzano i dispositivi inseriti nell'elenco. 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 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 esattamente un valore per Discount o BestDailyDiscount.

Specifica lo sconto da applicare a questa promozione.

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

È obbligatorio specificare un solo valore tra percentage, percentage_of_base, 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) + tassa

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

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

È obbligatorio specificare un solo valore tra percentage, percentage_of_base, 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 base. Come per percentage, viene applicato a AmountAfterTax (o AmountBeforeTax se AmountAfterTax non è specificato).

A differenza di percentage, questo sconto viene sempre calcolato come percentuale delle tariffe di base, indipendentemente dalle promozioni precedenti che sono state applicate in sequenza.

Esempio:

  • Supponiamo di avere due promozioni applicate in sequenza a un soggiorno di una notte al prezzo di 100. Il primo è uno sconto percentuale regolare del 10%, mentre il secondo è una percentuale di sconto base del 10%. Il tasso scontato sarà quindi 80, poiché entrambe le promozioni fanno uno sconto di 10. Tieni presente che se anche la seconda promozione fosse uno sconto percentuale normale, il tasso scontato sarebbe 81, poiché la seconda promozione offre uno sconto del 10% di 90.
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

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

Un importo fisso che deve essere sottratto dalla somma delle AmountAfterTax tariffe per notte (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 è maggiore della somma delle tariffe per notte, si avrà un valore pari a 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%, allora

    tariffa promozionale = (AmountBeforeTax - sconto fisso) * (1 + tassa 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) * tassa

    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, con fixed_amount pari a 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 solo valore tra percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price o fixed_price_per_night.

Uno sconto fisso applicato a ogni tariffa 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 è maggiore di una tariffa per notte, questa tariffa viene ridotta a zero poiché lo sconto non può far diventare negativa una tariffa per notte.

Esempi:

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

    tariffa promozionale = somma(AmountBeforeTax - importo sconto 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, con fixed_amount_per_night pari a 20, allora

    tariffa promozionale = somma(AmountAfterTax - importo sconto fisso)

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

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

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

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

Se AmountAfterTax deve riflettere una imposta percentuale, l'impostazione di un prezzo fisso per AmountBeforeTax può comportare tasse e commissioni imprecise. In generale, è vivamente consigliato di utilizzare TaxFeeInfo per specificare le tasse e le 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%, allora

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

    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, con fixed_amount pari a 300, allora

    tariffa promozionale = 300

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

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

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

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

Se viene specificato applied_nights, il nuovo prezzo viene applicato alle N notti meno costose.

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 pari all'8%, allora la tariffa della promozione è (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, con fixed_amount pari a 110, il tasso di promozione è 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 dalla 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 per determinate notti di un soggiorno se viene soddisfatta una durata minima del soggiorno. Gli attributi dell'elemento principale Discount non sono consentiti se viene utilizzato questo elemento.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

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

Ad esempio, per un soggiorno di 10 notti in cui stay_nights è equale a 4 (e repeats è true), esistono due segmenti di notti di soggiorno: dalla prima alla quarta notte e dalla quinta all'ottava notte; la nona e la decima notte non fanno parte di un segmento di notti di 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, ogni notte selezionata ha il 50% di sconto.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Deve essere cheapest o last. Se last, le notti alla fine del segmento di notti del soggiorno sono scontate. Se cheapest, le notti più convenienti all'interno del 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 di notti di soggiorno. Se false, viene scontato solo il segmento di notti di soggiorno all'inizio dell'itinerario. Se true, viene applicato uno sconto a qualsiasi segmento di notti del soggiorno.

Ad esempio, se stay_nights è 4 e l'itinerario è di 10 notti, se repeats è true, vengono scontati 2 segmenti (notti 1-4 e notti 5-8); ma se repeats è false, viene scontato solo un segmento (notti 1-4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Assegna a questa promozione un ranking e la seleziona per la selezione in base al ranking, dove viene selezionata solo la promozione con il ranking più basso da applicare. I valori devono essere compresi tra 1 e 99 inclusi. Se più promozioni condividono lo stesso ranking, ne viene selezionata e applicata una in modo arbitrario.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

È necessario specificare esattamente un valore per Discount o BestDailyDiscount.

Specifica un sconto giornaliero che può essere applicato a una notte di soggiorno. Questo è in contrasto con Discount, che applica gli 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 giornaliera" idonea che offre lo sconto più elevato per quella notte.

Stacking può essere specificato con BestDailyDiscount. Deve essere impostato su base o none. Gli sconti "migliori giornalieri" che generano lo sconto più elevato per ogni notte vengono combinati e trattati come uno sconto per un singolo soggiorno (ovvero Discount), rispettando il tipo di cumulo configurato. Questo sconto combinato viene confrontato con altre promozioni <Discount> idonee e può essere cumulato con queste per trovare la promozione o la combinazione che offre lo sconto più elevato. 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 cumulo 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

È necessario specificare un solo valore tra percentage, fixed_amount e 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 una notte di soggiorno è 100, percentage è 20 e TaxFeeInfo specifica una tassa pari a 10, allora

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

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

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

È necessario specificare un solo valore tra percentage, fixed_amount e fixed_price.

Un importo fisso da sottrarre a una singola AmountAfterTax tariffa per notte (o AmountBeforeTax tariffa 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, si avrà un valore pari a zero.

Esempi:

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

    tariffa promozionale = AmountAfterTax - sconto fisso

    80,00 = 100 - 20

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

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

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

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

È necessario specificare un solo valore tra percentage, fixed_amount e fixed_price.

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

Esempi:

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

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

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Definisce le restrizioni relative al numero di camere che devono essere disponibili affinché la promozione venga applicata. 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) oppure OTA_HotelAvailNotifRQ (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer Il numero minimo di camere che deve essere disponibile 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 è applicabile questa promozione. La promozione non viene applicata quando la durata del soggiorno non è compresa tra il limite 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 per una regola della tariffa per membri che attiva un'opzione di interfaccia utente specifica per lo sconto associato.

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

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

ID della regola tariffaria associata a un programma fedeltà.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Specifica la somma minima delle tariffe giornaliere della camera (utilizzando il valore più grande tra AmountBeforeTax e 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 restrizioni relative al numero di persone per le quali viene applicata questa promozione. La promozione non viene applicata quando il numero di persone non è compreso tra i 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é lo sconto possa essere applicato.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer Il numero di persone specificato dall'utente deve essere al massimo pari a questo valore affinché lo sconto possa essere applicato.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Contenitore di un elenco dei 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. Il piano tariffario viene definito da una combinazione di pacchetti, tariffe e disponibilità, come definito nei messaggi Transaction (Property Data), OTA_HotelRateAmountNotifRQ e OTA_HotelAvailNotifRQ 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> all'interno di un messaggio Transaction (Property Data) e nell'attributo RatePlanCode in <StatusApplicationControl> nei 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> all'interno di un messaggio Transaction (Property Data) e vi 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 in che modo possono essere combinate le promozioni. Se non specificato, si presume che "type" sia base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

Questa impostazione specifica se a una singola tariffa sono applicabili più promozioni:

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

Tra le combinazioni consentite, alla tariffa verrà applicato l'insieme di promozioni che offre lo sconto più elevato.

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

Descrive in che modo 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 che si sovrappongono.
  • La combinazione di <Discount> con specificato fixed_amount e application impostato su overlap non è valida.
  • <FreeNights> supporta tutti i valori application. Tieni presente che per overlap, solo le notti di soggiorno sovrapposte vengono prese in considerazione 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) non include l'anno, entrambe devono essere compilate come date senza anno.
  • Gli intervalli di date senza anno non devono includere 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"}.

Se vuoi impostare l'intervallo StayDates per consentire la promozione in giorni specifici della settimana, devi impostare la data start come data corrente senza end in modo che la promozione non scada.

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 end. Se start non è specificato, l'intervallo di date risulta a tutti gli effetti illimitato in termini di data di inizio.

Devi specificare il valore start se il valore end non è fornito.

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 start. Se end non è specificato, l'intervallo di date risulta a tutti gli effetti illimitato a partire dalla data start.

Devi specificare il valore end se il valore start non è fornito.

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

I giorni della settimana consentiti nell'intervallo di date. Se il valore non viene specificato, saranno 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

Sono valide tutte le combinazioni di caratteri.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Contenitore dell'elenco relativo alle località degli utenti (paesi) idonee per la promozione. Se specificato, la tariffa scontata viene offerta solo agli utenti idonei che si trovano nei paesi inseriti nell'elenco. Se non specificato, la tariffa scontata viene offerta agli utenti idonei che si trovano in qualunque paese.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum Il tipo di specifica UserCountries.

I valori validi sono include e exclude.

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

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

Se type UserCountries non è impostato, 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 a quello ISO di due lettere. Inoltre, non sono supportati i codici regione CLDR.

Esempi

Esiste un limite di 500 promozioni per proprietà. Fai riferimento all'esempio "Eliminare una promozione" per rimuovere le promozioni da una proprietà.

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 inventario

L'esempio seguente mostra come creare uno sconto se è presente un 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>

Eliminare tutte le promozioni

L'esempio seguente mostra come eliminare tutte le promozioni relative a 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>



Sostituire 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 dell'archiviazione delle 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 accatastamento

L'esempio seguente mostra un caso in cui vengono applicate tre promozioni diverse (base, second, any). Tieni presente che la promozione none non verrà applicata poiché le altre promozioni offrono 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>


Nessun tipo di accoppiamento

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

L'esempio seguente mostra un caso in cui l'elemento BookingWindow viene utilizzato con i limiti di inizio e di fine definiti come tipo di durata ISO 8601. Questa limitazione del periodo di prenotazione richiede la prenotazione entro le 18:00 del giorno prima dell'arrivo e a partire dalle 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>


Date di prenotazione - Limiti di data e ora

L'esempio seguente mostra un caso in cui l'elemento BookingDates viene utilizzato con gli attributi start e end come tipi DateTime. Questa limitazione della data 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 anno

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/1, indipendentemente dall'anno. Gli intervalli di date senza anno che attraversano il confine del nuovo anno non sono validi, pertanto DateRange è 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 verrebbe 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 seguente applica uno sconto del 50% per una notte per ogni tre notti di soggiorno per gli intervalli di date di soggiorno specificati. Solo le notti del soggiorno che si sovrappongono vengono conteggiate per l'idoneità allo sconto. Per il seguente itinerario con check-in il 1° gennaio 2022 e check-out il 7 gennaio 2022, le notti di soggiorno idonee e gli sconti vengono applicati come segue.

  • 2022-01-01 (soggiorno)
  • 2022-01-02 (soggiorno)
  • 2022-01-03
  • 04-01-2022 (scontato)
  • 05-01-2022 (soggiorno)
  • 2022-01-06 (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 del 20% e un altro del 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 applica uno sconto a un soggiorno di due notti applicando BestDailyDiscount con 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>

Prendiamo in considerazione un soggiorno di due notti dal 30 aprile 2023 al 2 maggio 2023 Per il calcolo, viene trovata prima la combinazione di sconti giornalieri migliori che genera lo sconto più elevato.

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

Per la seconda notte, la promozione "maggio" offre uno sconto più elevato rispetto allo sconto "generale". Pertanto, quando è selezionato "maggio", l'importo dello sconto fisso è 50.

Per il soggiorno, la promozione "fiesta" prevede uno sconto di 5 € a notte, ovvero 10 € in totale. Può essere cumulato con la combinazione dei migliori sconti giornalieri perché il tipo di cumulo di "fiesta" è impostato su any. Se fosse impostato su base, verrà applicata solo la combinazione dei migliori sconti giornalieri o dello sconto "fiesta". Per ulteriori informazioni, consulta la descrizione di Stacking.

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

Risposte

Sintassi

La sintassi del messaggio PromotionsResponse è la seguente:

<?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 Promotions 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 di 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 problema riscontrato durante l'elaborazione del messaggio Promotions. 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 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>