Transaction (Property Data)

Sintassi

La sintassi del messaggio Transaction (Property Data) è la seguente:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp"
             id="message_ID"
             partner="partner_account_name">
  <PropertyDataSet action="[overlay|delta]">
    <!-- (Required) ID that matches the Hotel List Feed -->
    <Property>HotelID</Property>
    <RoomData>
      <!-- (Required) One room ID per RoomData element -->
      <RoomID>RoomID</RoomID>
      <!-- (Optional) Restricts the rate plans allowed for this room type to
        those listed here. If specified, don't specify AllowableRoomIDs. -->
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID</AllowablePackageID>
      </AllowablePackageIDs>
      <Name>
        <Text text="room_name" language="language_code"/>
      </Name>
      <Capacity>max_number_of_occupants</Capacity>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <!-- (Required) One package ID per PackageData element -->
      <PackageID>PackageID</PackageID>
      <!-- (Optional) Restricts the room types allowed for this rate plan to
        those listed here. If specified, don't specify AllowablePackageIDs. -->
      <AllowableRoomIDs>
        <AllowableRoomID>RoomID</AllowableRoomID>
      </AllowableRoomIDs>
      <Refundable available="[false|true]" refundable_until_days="
        number_of_days"
        refundable_until_time="time"/>
      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Elementi e attributi

Il messaggio Transaction (Property Data) contiene i seguenti elementi e attributi:
Elemento / @attributo Occorrenze Tipo Descrizione
Transaction 1 Complex element In un'implementazione ARI, questo è l'elemento principale di un messaggio che definisce pacchetti e tipi di camera di una singola proprietà.
Transaction / @timestamp 1 DateTime La data e l'ora di creazione di questo messaggio.
Transaction / @id 1 String Un identificatore univoco per ogni messaggio Transaction.
Transaction / @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.

Nota: 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.

Transaction / PropertyDataSet 1 PropertyDataSet Un container per la definizione di pacchetti e tipi di camera di una singola proprietà.
Transaction / PropertyDataSet / @action 0..1 Enum

Il tipo di aggiornamento da applicare alle definizioni della tariffa della camera.

I valori validi sono:

  • overlay: sostituisce tutti gli elementi <RoomData> e <PackageData> definiti in precedenza per la proprietà. Nel messaggio corrente sono validi solo <RoomData> e <PackageData>.
  • delta: aggiunge gli elementi <RoomData> e <PackageData> non definiti in precedenza o modifica quelli esistenti.

Questo attributo è facoltativo e viene impostato su delta come valore predefinito se non specificato.

Transaction / PropertyDataSet / Property 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.
Transaction / PropertyDataSet / RoomData 0..n RoomData

Descrive una camera.

Nota: almeno uno tra <RoomData> e <PackageData> è obbligatorio.

Transaction / PropertyDataSet / RoomData / RoomID 1 RoomID Un identificatore univoco per un tipo di camera. A questo valore viene fatto riferimento tramite l'attributo InvTypeCode nell'elemento <StatusApplicationControl> nei messaggi <OTA_HotelAvailNotifRQ> e <OTA_HotelRateAmountNotifRQ>.
Transaction / PropertyDataSet / RoomData / AllowablePackageIDs 0..1 AllowablePackageIDs Un container per gli elementi <AllowablePackageID>.

Se <AllowablePackageIDs> è specificato, il tipo di camera identificato da <RoomID> nell'elemento <RoomData> principale può essere solo combinato con i piani tariffari definiti dagli elementi <AllowablePackageID>.

Se <AllowablePackageIDs> non è specificato, il tipo di camera identificato da <RoomID> nell'elemento <RoomData> principale può essere combinato con qualsiasi piano tariffario.

Transaction / PropertyDataSet / RoomData / AllowablePackageIDs / AllowablePackageID 1..n AllowablePackageID Specifica l'elemento PackageID di un piano tariffario che può essere combinato con questo tipo di camera. Il piano tariffario viene definito da una combinazione di pacchetti, tariffe e disponibilità. PackageID corrisponde a RatePlanCode nei messaggi OTA_HotelRateAmountNotifRQ e OTA_HotelAvailNotifRQ.
Transaction / PropertyDataSet / RoomData / Name 1 Name Container per il nome della categoria della camera in una o più lingue.
Transaction / PropertyDataSet / RoomData / Name / Text 1..n Text Specifica il nome della categoria della camera in una lingua.
Transaction / PropertyDataSet / RoomData / Name / Text / @text 1..n String Il nome della categoria della camera nella lingua specificata dall'attributo language.
Transaction / PropertyDataSet / RoomData / Name / Text / @language 1..n String Un codice lingua di due lettere.
Transaction / PropertyDataSet / RoomData / Capacity 0..1 Integer Il numero massimo di persone che può ospitare fisicamente una camera. Deve essere maggiore o uguale ai valori NumberOfGuests inviati con le tariffe.

Il valore di <Capacity> deve essere un numero intero positivo compreso tra 1 e 99 inclusi.

Transaction / PropertyDataSet / RoomData / PhotoURL 0..n PhotoURL Un URL e una didascalia facoltativa per una foto di una determinata camera o di un Pacchetto camera. Puoi specificare più di un <PhotoURL> per una camera o un Pacchetto camera.

Questo elemento prevede i seguenti elementi secondari:

  • <URL>: specifica la posizione della foto. La posizione deve essere pubblica (non protetta da un firewall) e deve includere il protocollo (http://).
  • <Caption>: definisce la didascalia della foto. Questo elemento utilizza un unico elemento secondario, <Text>, che ha due attributi obbligatori, text e language. L'attributo text è la didascalia, mentre l'attributo language specifica un codice lingua di due lettere, ad esempio "en".

<PhotoURL>
  <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
  <Caption>
    <Text text="A bright and breezy way to enjoy your mornin'
      cuppa tea." language="en"/>
    <Text text="Une façon lumineuse et aérée pour profiter
      de votre journée tasse de thé." language="fr"/>
  </Caption>
</PhotoURL>
Transaction / PropertyDataSet / RoomData / AllowableRoomIDs 0..1 AllowableRoomIDs Un container per gli elementi <AllowableRoomID>.

Se <AllowableRoomIDs> è specificato, il piano tariffario identificato da <PackageID> nell'elemento <PackageData> principale può essere solo combinato con il tipo di camera definito dagli elementi <AllowableRoomID>.

Se <AllowableRoomIDs> non è specificato, il piano tariffario identificato da <PackageID> nell'elemento <PackageData> principale può essere combinato con qualsiasi tipo di camera.

Transaction / PropertyDataSet / RoomData / AllowableRoomIDs / AllowableRoomID 1..n AllowableRoomID Specifica l'elemento RoomID di un tipo di camera che può essere combinato con questo piano tariffario. Il tipo di camera viene definito in un elemento <RoomData>.
Transaction / PropertyDataSet / PackageData 0..n PackageData Container di elementi che descrivono le caratteristiche e i termini delle tariffe che non fanno parte della descrizione fisica della camera.
Transaction / PropertyDataSet / PackageData / PackageID 1 String In questi messaggi, PackageID corrisponde a RatePlanCode nei messaggi OTA_HotelRateAmountNotifRQ e OTA_HotelAvailNotifRQ.
Transaction / PropertyDataSet / PackageData / Refundable 0..1 Refundable Consente di elencare una tariffa come totalmente rimborsabile o con cancellazione gratuita. Se non viene specificato un valore, le informazioni sul rimborso non verranno visualizzate.

Nota: consigliamo di impostare tutti gli attributi. Quando non vengono impostati uno o più attributi, viene generato un messaggio di avviso relativo allo stato dei feed.

Se non imposti alcun attributo, la tariffa non viene mostrata come rimborsabile.

Quando imposti gli attributi, tieni presente quanto segue:

  • Se available o refundable_until_days non sono impostati, la tariffa non viene mostrata come rimborsabile.
  • Se available è 0 o false, gli altri attributi vengono ignorati. La tariffa non viene mostrata come rimborsabile anche se sono impostati uno o entrambi gli altri attributi.
Transaction / PropertyDataSet / PackageData / Refundable / @available 1 Boolean (Obbligatorio) Deve essere impostato su 1 o true per indicare che la tariffa prevede il rimborso totale; in caso contrario, deve essere impostato su 0 o false.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_days 0..1 Integer (Obbligatorio se available è true) Specifica il numero di giorni prima del check-in in cui è possibile richiedere un rimborso totale. Il valore di refundable_until_days deve essere un numero intero compreso tra 0 e 330 inclusi.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_time 0..1 Time (Fortemente consigliato se available è true) Specifica l'ora precisa del giorno, in base al fuso orario dell'hotel, entro cui la richiesta di rimborso totale verrà accettata. Puoi associare questo valore a refundable_until_days per specificare, ad esempio, che "i rimborsi sono disponibili fino a due giorni prima del check-in entro le ore 16:00". Se refundable_until_time non è impostato, il valore predefinito è mezzanotte.
Transaction / PropertyDataSet / PackageData / BreakfastIncluded 0..1 Boolean Specifica se il tipo di camera comprende la colazione.
Transaction / PropertyDataSet / PackageData / InternetIncluded 0..1 Boolean Indica se la camera comprende la connessione Internet senza costi aggiuntivi, quando nelle altre camere tale servizio non è incluso. Non impostare questo elemento in un hotel che fornisce gratuitamente la connessione Internet in tutte le camere. Questo elemento non si applica all'accesso interno wireless o via cavo a Internet che non è disponibile nelle camere.
Transaction / PropertyDataSet / PackageData / ParkingIncluded 0..1 Boolean

Indica se una camera include il parcheggio senza costi aggiuntivi, laddove questo servizio è a pagamento nell'hotel. Non specificare un valore per questo elemento per un hotel che offre il parcheggio gratuito.

I valori validi sono 0 (o false) e 1 (o true). Il valore predefinito è false.

Esempi

Esempio 1

Di seguito è riportato un esempio di base che mostra come definire i dati del pacchetto e delle camere di una proprietà in un messaggio Transaction (Property Data). L'attributo overlay viene utilizzato per garantire che tutti i dati esistenti, se inaspettatamente esistono già, vengano eliminati e sostituiti con quelli di questo messaggio:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-05-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      <Capacity>2</Capacity>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image.jpg</URL>
        <Caption>
          <Text text="Room with a king bed" language="en"/>
        </Caption>
      </PhotoURL>
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <Name>
        <Text text="Double" language="en"/>
      </Name>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>PackageID_2</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Esempio 2

Di seguito è riportato un esempio che mostra come aggiungere un pacchetto e un tipo di camera ai dati <Transaction> esistenti:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="delta">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_3</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_3</PackageID>
      <Refundable>0</Refundable>
      <BreakfastIncluded>1</BreakfastIncluded>
      <ParkingIncluded>1<ParkingIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Esempio 3

Di seguito è riportato un esempio che mostra come rimuovere pacchetti e tipi di camera esistenti. In questo scenario, se i messaggi negli esempi 1 e 2 fossero stati inviati a Google in precedenza, i tipi di camera King e Doppia non esisterebbero più dopo la ricezione del messaggio seguente da parte di Google. Tieni presente che la rimozione dei dati del pacchetto influisce sul piano tariffario complessivo, come definito nei messaggi Transaction (Property Data), OTA_HotelRateAmountNotifRQ e OTA_HotelAvailNotifRQ (facendo riferimento allo stesso valore PackageID), quindi potrebbero essere necessari aggiornamenti corrispondenti con altri tipi di messaggio, affinché PackageID_2 e PackageID_3 non vengano più definiti qui.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-08-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <Capacity>2</Capacity>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image.jpg</URL>
        <Caption>
          <Text text="Room with a king bed" language="en"/>
        </Caption>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Esempio 4

Di seguito è riportato un esempio che mostra come utilizzare l'elemento <AllowablePackageIDs> per limitare i piani tariffari consentiti per un tipo di camera. In questo esempio, il tipo di camera Queen (RoomID_2) può essere combinato solo con il pacchetto e il piano tariffario identificati come PackageID_1.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-12-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      ...
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID_1</AllowablePackageID>
      </AllowablePackageIDs>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>PackageID_2</PackageID>
      <Refundable>1</Refundable>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>