Riferimento XML per messaggi Query e Hint

Questa sezione fornisce un riferimento per i messaggi Google basati su XML di tipo Hint Request, Hint Response e Query.

<Hint> (messaggio Hint Response)

L'elemento principale di un messaggio Hint Response. I messaggi Hint Response specificano le combinazioni hotel/itinerario di cui rideterminare il prezzo. Sono la tua risposta a un messaggio Hint Request di Google.

Un messaggio Hint Response deve specificare solo gli hotel i cui prezzi sono cambiati dall'ultima volta in cui Google ha ricevuto un messaggio Hint Response valido dai tuoi server.

I messaggi Hint Response utilizzano uno dei seguenti metodi per specificare gli hotel e gli itinerari per i quali Google deve rideterminare i prezzi:

  • Itinerari esatti: una combinazione di data di check-in e durata del soggiorno.
  • Intervalli di date di check-in: specifica un intervallo di date di check-in, che inizia con la prima data di check-in e termina con l'ultima data di check-in.
  • Soggiorni con intervallo di date (o itinerari con intervallo di date).

Ognuno di questi metodi richiede una sintassi diversa per il messaggio Hint Response.

Per ulteriori informazioni, consulta la sezione Messaggi Hint Response.

Sintassi

L'elemento <Hint> utilizza una sintassi diversa a seconda del tipo di messaggio Hint Response:

Itinerari esatti

Di seguito è riportata la sintassi per gli itinerari esatti in un messaggio Hint Response:

<!-- Exact Itinerary Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
  <Item>
    <Property>hotel_ID</Property>
    ...
    <Stay>
      <CheckInDate>checkin_date</CheckInDate>
      <LengthOfStay>number_of_nights</LengthOfStay>
    </Stay>
  </Item>
  ...
</Hint>

Intervalli di check-in

Di seguito è riportata la sintassi per gli intervalli di check-in in un messaggio Hint Response:

<!-- Check-in Ranges Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
  <Item>
    <!-- At least one is required -->
    <!-- Can be > 1 if MultipleItineraries is "checkin_range" in your QueryControl message -->
    <Property>hotel_ID</Property>
    [...]

    <!-- Required -->
    <FirstDate>first_checkin_date</FirstDate>
    <!-- Required -->
    <LastDate>last_checkin_date</LastDate>
  </Item>
  ...
</Hint>

Soggiorni con intervallo di date

Di seguito è riportata la sintassi per i soggiorni con intervallo di date in un messaggio Hint Response:

<!-- Ranged Stay Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
  <Item>
    <!-- At least one is required -->
    <!-- Can be > 1 if MultipleItineraries is "affected_dates" in your QueryControl message -->
    <Property>hotel_ID</Property>
    [...]

    <StaysIncludingRange>
      <!-- Required -->
      <FirstDate>first_date</FirstDate>

      <!-- Optional -->
      <LastDate>last_date</LastDate>
    </StaysIncludingRange>
  </Item>
  ...
</Hint>

Attributi

L'elemento <Hint> non ha attributi.

Elementi secondari

L'elemento <Hint> prevede i seguenti elementi secondari:

Elemento secondario Obbligatorio? Tipo Tipo di Hint Response Descrizione
<CheckInDate> Obbligatorio Date Itinerari esatti La data di check-in per l'itinerario.
<FirstDate> Obbligatorio Date Intervalli di check-in e itinerari con intervallo di date La prima data dell'intervallo di date per un messaggio Hint Response relativo a un intervallo di check-in o a un soggiorno con intervallo di date. Le date indicate sono incluse.
<Item> Obbligatorio Object Tutti Un contenitore per la combinazione hotel/itinerario da aggiornare.
<LastDate> Obbligatorio* Date Intervalli di check-in e itinerari con intervallo di date L'ultima data dell'intervallo di date per un messaggio Hint Response relativo a un intervallo di check-in o a un soggiorno con intervallo di date. Le date indicate sono incluse.

* Questo elemento è facoltativo per i soggiorni con intervallo di date.

<LengthOfStay> Obbligatorio Integer Itinerari esatti Definisce il numero di notti per l'itinerario, espresso sotto forma di numero intero positivo.
<Property> Obbligatorio String Tutti L'ID di un hotel, corrispondente all'ID nell'elenco di hotel. Il numero di elementi <Property> che puoi specificare in un singolo blocco <Item> è determinato dal tipo di messaggio Hint Response:

  • Itinerari esatti: fino a 100 hotel.
  • Intervalli di check-in: più di un elemento se imposti <MultipleItineraries> su "checkin_range" nel tuo messaggio <QueryControl>.
  • Soggiorno con intervallo di date: più di un elemento se imposti <MultipleItineraries> su "affected_dates" nel tuo messaggio <QueryControl>.
<Stay> Obbligatorio Object Itinerari esatti Un contenitore per gli elementi <CheckinDate> e <LengthOfStay> in un messaggio Hint Response relativo a un itinerario esatto. Ogni elemento <Item> può contenere un solo elemento <Stay>.
<StaysIncludingRange> Obbligatorio Object Itinerari con intervallo di date Un contenitore per gli elementi <FirstDate> e <LastDate> in un messaggio Hint Response relativo a un soggiorno con intervallo di date.

Esempi

Itinerari esatti

L'esempio seguente definisce più itinerari per una singola proprietà in un messaggio Hint Response:

<!-- Exact Itinerary Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
  <Item>
    <Property>12345</Property>
    <Stay>
      <CheckInDate>2018-07-03</CheckInDate>
      <LengthOfStay>3</LengthOfStay>
    </Stay>
  </Item>
  <Item>
    <Property>12345</Property>
    <Stay>
      <CheckInDate>2018-07-03</CheckInDate>
      <LengthOfStay>4</LengthOfStay>
    </Stay>
  </Item>
</Hint>

Intervalli di check-in

L'esempio seguente specifica due hotel i cui prezzi sono stati modificati e devono essere recuperati di nuovo. Google individua tutti gli itinerari tra il 3 e il 6 luglio per le proprietà 12345 e 67890:

<!-- Check-in Ranges Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
  <Item>
    <Property>12345</Property>
    <Property>67890</Property>
    <FirstDate>2018-07-03</FirstDate>
    <LastDate>2018-07-06</LastDate>
  </Item>
</Hint>

Tieni presente che, affinché un messaggio relativo all'intervallo di check-in possa specificare più proprietà in un singolo elemento <Item>, il valore di <MultipleItineraries> in <QueryControl> deve essere impostato su "checkin_range".

Soggiorni con intervallo di date

L'esempio seguente mostra due diversi utilizzi dei soggiorni con intervallo di date, uno per un intervallo di notti e l'altro per una singola notte:

<!-- Ranged Stay Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
  <!-- Google fetches prices for all itineraries (first and last date are set) -->
  <Item>
    <Property>12345</Property>
    <StaysIncludingRange>
      <FirstDate>2018-07-03</FirstDate>
      <LastDate>2018-07-06</LastDate>
    </StaysIncludingRange>
  </Item>

  <!-- Google fetches prices for a single night (first date only) -->
  <Item>
    <Property>67890</Property>
    <StaysIncludingRange>
      <FirstDate>2018-07-03</FirstDate>
    </StaysIncludingRange>
  </Item>
</Hint>

Tieni presente che, affinché un messaggio relativo a un soggiorno con intervallo di date possa specificare più proprietà in un singolo elemento <Item>, il valore di <MultipleItineraries> in <QueryControl> deve essere impostato su "affected_dates".

Per ognuno di questi esempi, Google risponde con un elemento <Query> a cui dovrai rispondere con un elemento <Transaction> che include gli aggiornamenti dei prezzi per le combinazioni hotel/itinerario specificate.

<HintRequest>

L'elemento principale di un messaggio Hint Request. Google invia un messaggio Hint Request al tuo server e richiede una risposta che specifica gli hotel e gli itinerari con prezzi modificati dall'ultima volta in cui Google ha ricevuto un messaggio Hint Response valido dal tuo server.

In caso di modifiche ai prezzi, Google invia un elemento <Query> che recupera i dati aggiornati sui prezzi per gli hotel e gli itinerari indicati.

Per saperne di più, consulta la sezione Messaggi Hint Request.

Sintassi

La sintassi dell'elemento <HintRequest> è la seguente:

Sintassi

<?xml version="1.0" encoding="UTF-8"?>
<HintRequest>
  <LastFetchTime>last_fetch_time</LastFetchTime>
</HintRequest>

Attributi

L'elemento <HintRequest> non ha attributi.

Elementi secondari

L'elemento <HintRequest> prevede i seguenti elementi secondari:

Elemento secondario Tipo Descrizione
<LastFetchTime> DateTime La data e ora in cui Google ha ricevuto correttamente l'ultimo messaggio Hint Response in risposta a un messaggio Hint Request.

Se la data e ora espressa da questo valore è precedente all'ultima volta in cui hai aggiornato i prezzi sul tuo server, devi rispondere con un messaggio Hint Response specificando quali hotel hanno subito modifiche.

Per ulteriori informazioni, consulta la sezione Messaggi Hint Response.

Esempi

Messaggio Hint Request

L'esempio seguente mostra un messaggio Hint Request:

<?xml version="1.0" encoding="UTF-8"?>
<HintRequest id="ABCDEF" timestamp="2018-06-07T16:20:00Z">
  <LastFetchTime>2018-03-25T00:04:09Z</LastFetchTime>
</HintRequest>

<Query>

L'elemento principale di un messaggio Query. I messaggi Query sono richieste di aggiornamenti relativi a prezzi o metadati inviate da Google. Vengono utilizzati con le modalità di invio Pull e Prezzo modificato.

Esistono due tipi di messaggi Query:

  • Prezzi: Google richiede gli aggiornamenti dei prezzi per gli hotel specificati. Quando ricevi un messaggio Query sui prezzi, devi rispondere con un messaggio <Transaction> che contiene le informazioni sui prezzi richieste negli elementi <Result>.

    I messaggi Query sui prezzi in tempo reale sono un tipo speciale di messaggi Query sui prezzi, in cui Google richiede aggiornamenti sui prezzi in tempo reale.

    Per ulteriori informazioni, consulta la sezione Panoramica dei prezzi.

  • Metadati: Google richiede aggiornamenti dei metadati per le camere e i pacchetti camera per gli hotel specificati. Quando ricevi un messaggio Query sui metadati, devi rispondere con un messaggio <Transaction> che specifica i dati relativi alle camere e ai pacchetti camera negli elementi <PropertyDataSet>.

    Per ulteriori informazioni, consulta la sezione Metadati dei pacchetti camera.

La sintassi dei messaggi è diversa a seconda del tipo. Questa sezione descrive entrambi i tipi.

Sintassi

La sintassi dell'elemento <Query> è la seguente:

Sintassi

<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true_or_false">
<!-- The "latencySensitive" attribute appears only with Live Pricing Queries -->

  <!-- PRICING QUERIES -->
    <Checkin>YYYY-MM-DD</Checkin>

    <Nights>number_of_nights</Nights>

    <!-- Only for Check-in Date Range pricing queries (Changed Pricing) -->
    <FirstDate>YYYY-MM-DD</FirstDate>
    <LastDate>YYYY-MM-DD</LastDate>

    <!-- Only for Ranged Stay pricing queries (Changed Pricing) -->
    <AffectedNights>number_of_nights</AffectedNights>

    <PropertyList>
      <Property>hotel_id</Property>
       ...
    </PropertyList>

    <!-- Only for Live Pricing Queries -->
    <DeadlineMs>deadline</DeadlineMs>
    <Context>
      <Occupancy>total_number_of_guests</Occupancy>
      <UserCountry>country_code</UserCountry>
      <UserDevice>device_type</UserDevice>
    </Context>

  <!-- METADATA QUERIES -->
    <HotelInfoProperties>
      <Property>property_ID</Property>
      ...
    </HotelInfoProperties>

</Query>

Attributi

L'elemento <Query> può contenere un attributo: <LatencySensitive>.

L'attributo <LatencySensitive> è facoltativo. Se fornito e impostato su true, indica che si tratta di una query sui prezzi in tempo reale. Per consentire a Google di inviare query con l'attributo <LatencySensitive>, invia una richiesta al tuo Technical Account Manager.

Elementi secondari

L'elemento <Query> prevede i seguenti elementi secondari:

Elemento secondario Tipo di query Tipo Descrizione
<AffectedNights> Prezzi Integer Il numero di notti per un soggiorno con intervallo di date. Questo elemento viene utilizzato solo per le query sui prezzi dei soggiorni con intervallo di date utilizzate con la modalità Prezzo modificato.
<Checkin> Prezzi Date Specifica le date di una determinata variazione di prezzo.
<Context> Prezzi (solo query sui prezzi in tempo reale) Object Per le query sui prezzi in tempo reale, specifica determinati parametri in base ai quali viene eseguita la query. Gli elementi secondari includono:
  • <Occupancy>: numero totale di ospiti
  • <OccupancyDetails>: tipo di ospiti, ovvero adulti o bambini
  • <UserCountry>: paese in cui si trova l'utente
  • <UserDevice>: tipo di dispositivo utilizzato dall'ospite per cercare un hotel, ad esempio "mobile", "tablet" o "desktop".

L'elemento <Context> può essere ripetuto in una singola richiesta, consentendo query per numeri di persone diversi. Per l'elenco degli elementi secondari, la sintassi e gli esempi, consulta la sezione <Context>.

<FirstDate> Prezzi Date La data di inizio per un intervallo di itinerari a cui si applica il prezzo. Questo elemento è utilizzato solo per le query sui prezzi relative a intervalli di date di check-in utilizzate con la modalità Prezzo modificato.
<HotelInfoProperties> Metadati String Una o più proprietà per le quali Google richiede metadati di camere e pacchetti camera aggiornati in un messaggio Query sui metadati. Questo elemento può contenere uno o più elementi <Property> che specificano gli ID proprietà degli hotel.
<LastDate> Prezzi Date La data di fine per un intervallo di itinerari a cui si applica il prezzo. Questo elemento è utilizzato solo per le query sui prezzi relative a intervalli di date di check-in utilizzate con la modalità Pull + Hints.
<Nights> Prezzi Integer Il numero di notti per un determinato itinerario, fino a 30.
<PropertyList> Prezzi Object Uno o più ID hotel che richiedono aggiornamenti sui prezzi.

Definisci ciascun hotel in un elemento <Property>. Il valore è una stringa che corrisponde a un ID hotel nel tuo elenco di hotel. Ad esempio:


<PropertyList>
  <Property>pid1</Property>
  <Property>pid2</Property>
</PropertyList>

Esempi

Query sui prezzi

L'esempio seguente mostra un messaggio Query sui prezzi che richiede gli aggiornamenti dei prezzi per un insieme di hotel, disponibili per 3 notti, a partire dal 10 giugno 2018:

<?xml version="1.0" encoding="UTF-8"?>
<Query>
  <Checkin>2018-06-10</Checkin>
  <Nights>3</Nights>
  <PropertyList>
    <Property>pid5</Property>
    <Property>pid8</Property>
    <Property>pid13</Property>
    <Property>pid21</Property>
  </PropertyList>
</Query>

Query sui metadati

L'esempio seguente mostra un messaggio Query sui metadati:

<?xml version="1.0" encoding="UTF-8"?>
<Query>
  <HotelInfoProperties>
    <Property>pid5</Property>
    <Property>pid8</Property>
    <Property>pid13</Property>
    <Property>pid21</Property>
  </HotelInfoProperties>
</Query>

Per ulteriori esempi, incluse le query sui prezzi per soggiorni con intervallo di date e per intervalli di date di check-in, consulta la sezione Esempi di messaggi Query.

<Context>

L'elemento <Context> fornisce informazioni per una query sui prezzi in tempo reale, che includono il numero e il tipo di ospiti, il paese e il dispositivo dell'utente.

Non vengono mai utilizzati più elementi <Context> con paesi o dispositivi utente diversi. Quando vengono utilizzati più elementi <Context> per eseguire query per valori di numero di persone diversi, fornisci ogni prezzo per il numero di persone sotto forma di pacchetto camera aggiuntivo per la combinazione proprietà/itinerario corrispondente. Ogni combinazione proprietà/itinerario deve avere un singolo blocco <Result> che include i prezzi per più valori di numero di persone.

Per i dettagli sulla risposta alla query <Context>, consulta la sezione <OccupancyDetails>.

Sintassi

La sintassi dell'elemento <Context> è la seguente:

Sintassi

<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true_or_false">
  <Checkin>date</Checkin>
  <Nights>number_of_nights</Nights>
  <DeadlineMs>number_of_milliseconds</DeadlineMs>
  <PropertyList>
    <Property>property_ID</Property>
  </PropertyList>
  <Context>
   <Occupancy>total_number_of_guests</Occupancy>
   <OccupancyDetails>
     <NumAdults>number_of_adults</NumAdults>
     <Children>
       <Child age=age_of_one_child_guest/>
       <Child age=age_of_one_child_guest/>
     </Children>
   </OccupancyDetails>
   <UserCountry>end_user_country</UserCountry>
   <UserDevice>user_device_type</UserDevice>
  </Context>
</Query>

Elementi secondari

L'elemento <Context> prevede i seguenti elementi secondari:

Elemento secondario Tipo di query Tipo Descrizione
<Occupancy> Prezzi Integer Specifica il numero totale di ospiti.

Anche se non è obbligatorio, le query con <Occupancy> dovrebbero generare un messaggio Transaction con i pacchetti camera appropriati definiti per ogni <Occupancy> sottoposto a query.

Nota: <Occupancy> potrebbe non essere sempre presente in una query. In questi casi, devi restituire i prezzi per tutti i valori di numero di persone.

<OccupancyDetails> Prezzi Object È preceduto da <Occupancy>. Specifica gli ospiti per tipo, tra cui:

  • <NumAdults>: numero di ospiti adulti
  • <Children> e <Child "age">: specifica quali ospiti sono bambini (in genere di età 0-17 anni); facoltativamente, include anche l'età di ogni bambino.
  • Anche se non è obbligatorio, le query con <OccupancyDetails> dovrebbero generare un messaggio Transaction con i pacchetti camera appropriati definiti per ogni <Occupancy> oggetto di una query.

    Nota: <OccupancyDetails> potrebbe non essere sempre presente in una query. In tali casi, si presume che tutti gli ospiti siano adulti.

<UserCountry> Prezzi String

Filtra le tariffe in base al paese in cui si trova l'utente. Il valore è un codice paese di due lettere come "US" per gli Stati Uniti o un codice di area geografica, come "EU" per "Europa".

Le query con <UserCountry> definito devono generare un messaggio Transaction con il blocco <Rates> appropriato definito per il paese della query.

<UserDevice> Prezzi String

Filtra le tariffe in base al tipo di dispositivo da cui l'utente sta eseguendo la ricerca. Valori possibili:

  • mobile
  • desktop
  • tablet

Le query con <UserDevice> definito devono generare un messaggio Transaction con il blocco <Rates> appropriato definito per il tipo di dispositivo della query.

Esempi

Numero di persone

L'esempio seguente mostra una query sui prezzi in tempo reale per <Occupancy> all'interno di <Context>. La query sui prezzi in tempo reale è relativa a tre ospiti adulti.

<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true">
  <Checkin>2017-06-07</Checkin>
  <Nights>4</Nights>
  <DeadlineMs>500</DeadlineMs>
  <PropertyList>
    <Property>45617</Property>
  </PropertyList>
  <Context>
    <Occupancy>3</Occupancy>
    <UserCountry>US</UserCountry>
    <UserDevice>mobile</UserDevice>
  </Context>
</Query>

Dettagli sul numero di persone

L'esempio seguente mostra una query sui prezzi in tempo reale con <OccupancyDetails> all'interno di <Context>. La query sui prezzi in tempo reale si riferisce a 4 ospiti, 2 dei quali sono bambini, e cerca una tariffa applicabile a un ospite dagli Stati Uniti che esegue la prenotazione da un dispositivo mobile:

<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true">
  <Checkin>2017-06-07</Checkin>
  <Nights>5</Nights>
  <DeadlineMs>500</DeadlineMs>
  <PropertyList>
    <Property>8675309</Property>
  </PropertyList>
  <Context>
    <Occupancy>4</Occupancy>
    <OccupancyDetails>
      <NumAdults>2</NumAdults>
      <Children>
        <Child age="4"/>
        <Child age="12"/>
      </Children>
    </OccupancyDetails>
    <UserCountry>US</UserCountry>
    <UserDevice>mobile</UserDevice>
  </Context>
</Query>

Contesti multipli

L'esempio seguente mostra l'utilizzo di un elemento <Context> aggiuntivo in una query sui prezzi in tempo reale.

<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true">
  <Checkin>2017-06-07</Checkin>
  <Nights>4</Nights>
  <DeadlineMs>500</DeadlineMs>
  <PropertyList>
    <Property>45617</Property>
  </PropertyList>
  <Context>
    <Occupancy>3</Occupancy>
    <UserCountry>US</UserCountry>
    <UserDevice>mobile</UserDevice>
  </Context>
  <Context>
    <Occupancy>6</Occupancy>
    <OccupancyDetails>
      <NumAdults>4</NumAdults>
      <Children>
        <Child age="6"/>
        <Child age="10"/>
      </Children>
    </OccupancyDetails>
    <UserCountry>US</UserCountry>
    <UserDevice>mobile</UserDevice>
  </Context>
</Query>