Zapytanie i dokument XML wskazówek

Ta sekcja zawiera informacje na temat opartych na formacie XML wiadomości z prośbą o podpowiedź, wiadomości z odpowiedziami na podpowiedź i wiadomości z zapytań.

<Hint> (wiadomość z odpowiedzią na podpowiedź)

Element główny wiadomości z odpowiedzią. Wiadomości z odpowiedziami na podpowiedź określają, dla których połączeń hoteli i planów podróży należy zmienić cenę. Jest to Twoja odpowiedź na wiadomość z prośbą o podpowiedź od Google.

Odpowiedź z odpowiedzią powinna wskazywać tylko te hotele, których ceny zmieniły się od ostatniego otrzymania przez Google udanej odpowiedzi z podpowiedzią z Twoich serwerów.

W odpowiedziach na podpowiedź używa się jednej z tych metod, aby określić, które hotele i plany podróży Google ma zmienić ceny:

  • Dokładne plany podróży: data zameldowania i długość pobytu.

  • Zakresy dat zameldowania: określa zakres dat zameldowania, począwszy od daty pierwszego zameldowania i kończąc na datę ostatniego zameldowania.

  • Pobyty na pewien obszar (lub plany podróży)

Każda z tych metod wymaga innej składni wiadomości z odpowiedzią.

Więcej informacji znajdziesz w artykule Wiadomości z odpowiedzią na podpowiedź.

Składnia

Element <Hint> używa innej składni w zależności od typu komunikatu z odpowiedzią na podpowiedź:

Dokładne plany podróży

Poniżej znajdziesz składnię dokładnych planów podróży w wiadomości z odpowiedzią z podpowiedzią:

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

Zakresy zameldowania

Poniżej przedstawiamy składnię zakresów zameldowania w wiadomości z odpowiedzią:

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

Pobyty na dłuższy okres

Tak wygląda składnia wiadomości z zakresu zakresu w odpowiedzi na podpowiedź:

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

Atrybuty

Element <Hint> zawiera opcjonalny atrybut: id. Jeśli zostanie podany, będzie uwzględniany jako atrybut hintId w wiadomościach <Query> wysyłanych na podstawie tego <Hint>.

Elementy potomne

Element <Hint> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Typ odpowiedzi na podpowiedź Opis
<CheckInDate> Required Date Dokładne plany podróży Data zameldowania w planie podróży.
<FirstDate> Required Date Zakresy zameldowania i plany podróży Pierwsza data zakresu dat odpowiadającego zakresowi zameldowania lub przedziałowi czasu w wiadomości z odpowiedzią na pytanie. Daty są uwzględnione.
<Item> Required Object Wszystko Kontener hotelu lub planu podróży do zaktualizowania.
<LastDate> Required* Date Zakresy zameldowania i plany podróży

Ostatni dzień zakresu dat odpowiadającego zakresowi zameldowania lub przedziałowi czasu w wiadomości z odpowiedzią na pytanie. Daty są uwzględnione.

* Ten element jest opcjonalny w przypadku pobytów ograniczonych.

<LengthOfStay> Required integer Dokładne plany podróży Liczba nocy w planie podróży wyrażona jako dodatnia liczba całkowita.
<Property> Required string Wszystko

Identyfikator hotelu, mający ten sam identyfikator co Lista hoteli. Liczba elementów <Property>, które możesz określić w pojedynczym bloku <Item>, zależy od typu wiadomości z odpowiedzią na podpowiedź:

  • Dokładne plany podróży: do 100 hoteli.
  • Zakresy zameldowania: więcej niż jeden, jeśli w wiadomości <QueryControl> ustawisz <MultipleItineraries> na "checkin_range" .
  • Zakres pobytu: więcej niż jeden, jeśli w wiadomości <QueryControl> ustawisz <MultipleItineraries> na "affected_dates" .
<Stay> Required Object Dokładne plany podróży Kontener elementów <CheckinDate> i <LengthOfStay> w wiadomości z podpowiedzią dotyczącą planu podróży. Każdy element <Item> może zawierać tylko 1 element <Stay>.
<StaysIncludingRange> Required Object Wybrane plany podróży Kontener elementów <FirstDate> i <LastDate> w wiadomości z odpowiedzią na temat pobytu o zakresie długości.

Przykłady

Dokładne plany podróży

W tym przykładzie zdefiniowano wiele planów podróży dla jednej usługi (wiadomość z odpowiedzią na podpowiedź):

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

Zakresy zameldowania

Ten przykład określa 2 hotele, których ceny uległy zmianie i powinien zostać ponownie pobrany. Google otrzymuje wszystkie plany podróży z okresu od 3 do 6 lipca dotyczące usług 12345 i 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>

Pamiętaj, że aby komunikat o zakresie zameldowania mógł określić kilka właściwości w jednym elemencie <Item>, wartość <MultipleItineraries> w polu <QueryControl> musi być ustawiona na "checkin_range".

Pobyty na dłuższy okres

Poniższy przykład przedstawia 2 zastosowania pobytów ograniczonych – jedno na wiele nocy, a drugie – na 1 noc:

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

Pamiętaj, że aby wiadomość dotycząca pobytu na wybranym zakresie mogła określić kilka właściwości w pojedynczym elemencie <Item>, wartość <MultipleItineraries> w polu <QueryControl> musi być ustawiona na "affected_dates".

W przypadku każdego z tych przykładów Google wysyła w odpowiedzi <Query>, a Ty musisz przesłać w odpowiedzi <Transaction> z informacjami o aktualizacjach cen wybranych hoteli lub planów podróży.

<HintRequest>

Element główny wiadomości z prośbą o podpowiedź. Google wysyła na Twój serwer wiadomość z prośbą o podpowiedź i oczekuje odpowiedzi zawierającej informacje o hotelach i planach podróży, których ceny zmieniły się od czasu ostatniego otrzymania z Twojego serwera udanej odpowiedzi na podpowiedź.

Jeśli ceny się zmienią, Google wyśle kod <Query>, który pobiera zaktualizowane dane o cenach dla wskazanych hoteli i planów podróży.

Więcej informacji znajdziesz w artykule Wiadomości z prośbami o podpowiedź.

Składnia

W elemencie <HintRequest> używana jest taka składnia:

Składnia

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

Atrybuty

Element <HintRequest> nie ma atrybutów.

Elementy potomne

Element <HintRequest> zawiera te elementy podrzędne:

Element podrzędny Typ Opis
<LastFetchTime> DateTime Czas ostatniego otrzymania przez Google wiadomości z odpowiedzią na prośbę o podpowiedź.

Jeśli ten czas jest starszy niż przy ostatniej aktualizacji cen na serwerze, w odpowiedzi wyślij wiadomość z odpowiedzią z informacją, które hotele się zmieniły.

Jeśli ostatnio nie było udanego pobierania, zostanie ustawiona wartość stałego odstępu (aby uniknąć poważniejszych problemów z dużymi zaległościami). Bieżąca wartość stałego odstępu to 1000 sekund, ale może się zmienić.

Więcej informacji znajdziesz w artykule Wiadomości z odpowiedzią na podpowiedź.

Przykłady

Ten przykład przedstawia komunikat z prośbą o podpowiedź:

wiadomość z prośbą o podpowiedź

Ten przykład przedstawia komunikat z prośbą o podpowiedź:

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

Element główny wiadomości Query. Wiadomości (Query) to żądania od Google dotyczące aktualizacji cen lub metadanych. Są używane w trybach dostawy pobierania i zmiany cen.

Są 3 typy wiadomości Query:

  • Aktualne ceny: Google odpowiada na konkretne prośby użytkowników i prosi o aktualizację cen w czasie rzeczywistym. Gdy partnerzy otrzymają wiadomość Live pricing query, powinni w odpowiedzi wysłać wiadomość <Transaction>, która będzie zawierać żądane informacje o cenie w elementach <Result>.

  • Z cenami kontekstowymi: Google aktualizuje pamięć podręczną cen na podstawie kontekstów, które były dotychczas popularne. Gdy otrzymasz wiadomość With context query, w odpowiedzi prześlij wiadomość <Transaction> zawierającą żądane informacje o cenie w elementach <Result>.

  • Metadane: Google prosi o aktualizację metadanych pokoi i pakietów pokojów w przypadku określonych hoteli. Gdy otrzymasz wiadomość Metadata Query, w odpowiedzi na tego e-maila prześlij wiadomość <Transaction>, która będzie zawierać dane o pokojach i pakietach pokoi w elementach <PropertyDataSet>.

Więcej informacji znajdziesz w sekcji omówienie cen w przypadku zapytań o cenę, a w przypadku zapytań o metadane dotyczące metadanych pakietów sal.

Składnia trzech różnych typów została opisana poniżej.

Składnia

W elemencie <Query> używana jest taka składnia:

Aktualna cena

<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true_or_false">
  <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>
  <!-- See documentation below for <Context> -->
  <Context>
   ...
  </Context>
</Query>

Z kontekstem

<?xml version="1.0" encoding="UTF-8"?>
<Query>
  <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>
  <PropertyContextList>
    <PropertyContext>
      <Property>hotel_id</Property>
      ...
      <!-- See documentation below for <Context> -->
      <Context>
      ...
      </Context>
    </PropertyContext>
  </PropertyContextList>
</Query>

Metadane

<HotelInfoProperties>
  <Property>property_ID</Property>
  ...
</HotelInfoProperties>

Atrybuty

Element <Query> może zawierać jeden atrybut: latencySensitive.

Atrybut latencySensitive jest opcjonalny. Po podaniu wartości true wskazuje, że zapytanie ma typ Live Pricing Query. Aby umożliwić Google wysyłanie zapytań z atrybutem latencySensitive, skontaktuj się z technicznym menedżerem konta (TAM).

Elementy potomne

Element <Query> zawiera te elementy podrzędne:

Element podrzędny Typ zapytania Typ Opis
<AffectedNights> Pricing integer Liczba nocy za pobyt na czas. Ten element jest używany tylko w przypadku zapytań dotyczących cen za ograniczony czas pobytu używanych w przypadku zmiany cen.
<Checkin> Pricing Date daty określonej zmiany ceny.
<Context> Pricing (Live Pricing Queries only) <Context> W przypadku zapytań o ceny na żywo określa parametry, przy użyciu których jest wykonywane zapytanie. Elementy podrzędne to:
  • <Occupancy>: łączna liczba gości
  • <OccupancyDetails>: typ gości, np. dorośli lub dzieci.
  • <UserCountry>: kraj, w którym znajduje się użytkownik
  • <UserDevice>: typ urządzenia, którego gość użył, aby wyszukać hotel, np. "mobile, „tablet” lub „desktop”.

Element <Context> może się powtarzać w pojedynczym żądaniu, co pozwala na wysyłanie zapytań o różne liczbę miejsc. Listę elementów podrzędnych, składnię i przykłady znajdziesz w artykule <Context>.

<FirstDate> Pricing Date Data rozpoczęcia zakresu planów podróży, których dotyczą te ceny. Ten element jest używany tylko w przypadku zapytań dotyczących zakresu dat zameldowania, które są używane w przypadku zmiany ceny.
<HotelInfoProperties> Metadata string Co najmniej 1 usługa, w przypadku której Google chce zaktualizować metadane dotyczące sal i pakietów pokoi w wiadomości z metadanymi Query. Ten element może zawierać co najmniej 1 element <Property>, który określa identyfikatory obiektów hotelowych.
<LastDate> Pricing Date Data zakończenia zakresu planów podróży, których dotyczą te ceny. Ten element jest używany tylko w przypadku zapytań dotyczących zakresu dat zameldowania, które są używane w przypadku metod pull i podpowiedzi.
<Nights> Pricing integer Liczba nocy w ramach określonego planu podróży, do 30.
<PropertyList> Pricing Object

Co najmniej jeden identyfikator hotelu, który wymaga aktualizacji cen.

Określ każdy hotel w elemencie <Property>. Wartość jest ciągiem znaków pasującym do identyfikatora hotelu na Liście hoteli. Na przykład:

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

Przykłady

Zapytanie o cenę

Ten przykład przedstawia komunikat Zapytanie o ceny, który prosi o aktualizację cen grupy hoteli dostępnych na 3 noce od 10 czerwca 2018 roku:

<?xml version="1.0" encoding="UTF-8"?>
<Query>
  <Checkin>2023-05-23</Checkin>
  <Nights>3</Nights>
  <PropertyList>
    <Property>pid5</Property>
    <Property>pid8</Property>
    <Property>pid13</Property>
    <Property>pid21</Property>
  </PropertyList>
</Query>

Pytanie o rzeczywistą cenę

Ten przykład przedstawia zapytanie o rzeczywistą cenę z limitem czasu odpowiedzi wynoszącym 500 milisekund:

<?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="8"/>
        <Child age="5"/>
      </Children>
    </OccupancyDetails>
    <UserCountry>US</UserCountry>
    <UserDevice>mobile</UserDevice>
  </Context>
</Query>

Z zapytaniem kontekstowym

<?xml version="1.0" encoding="UTF-8"?>
<Query>
  <Checkin>2023-05-23</Checkin>
  <Nights>2</Nights>
  <PropertyContextList>
    <PropertyContext>
      <Property>8675309</Property>
      <!-- In the future, occupancy and device might be specified -->
      <Context><UserCountry>US</UserCountry></Context>
      <Context><UserCountry>GB</UserCountry></Context>
    </PropertyContext>
    <PropertyContext>
      <Property>8675310</Property>
      <Property>8675311</Property>
      <Context><UserCountry>CA</UserCountry></Context>
    </PropertyContext>
  </PropertyContextList>
</Query>

Zapytanie o metadane

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

Więcej przykładów, m.in. zapytania o ceny pobytu na przedział czasu i zakres dat zameldowania, znajdziesz w przykładach wiadomości (Query).

<Context>

Element <Context> zawiera informacje o elemencie Live pricing query, w tym liczbę i rodzaj gości, kraj i urządzenie użytkownika.

Różne <Context> nigdy nie będą używane w przypadku różnych krajów lub urządzeń. Jeśli w przypadku zapytań dotyczących wielu osób posługuje się wieloma obiektami typu <Context>, podaj każdą cenę za pobyt jako dodatkowy pakiet pokoi w przypadku danego obiektu lub planu podróży. Każda usługa lub plan podróży powinien mieć 1 blok <Result> z cenami dla wielu miejsc.

Szczegółowe informacje o odpowiedzi na zapytanie <Context> znajdziesz w sekcji <OccupancyDetails>.

Składnia

W elemencie <Context> używana jest taka składnia:

Składnia

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

Elementy potomne

Element <Context> zawiera te elementy podrzędne:

Element podrzędny Typ zapytania Typ Opis
<Occupancy> Pricing integer Określa łączną liczbę gości.

Chociaż nie jest to obowiązkowe, zapytania z funkcją <Occupancy> powinny skutkować komunikatem o transakcji zawierającym odpowiednie pakiety pokoi zdefiniowane dla każdego zapytania <Occupancy>.

Uwaga:<Occupancy> nie zawsze występuje w zapytaniu. W takich przypadkach musisz zwrócić ceny wszystkich miejsc.

<OccupancyDetails> Pricing Object Jest poprzedzony ciągiem <Occupancy>. Określa gości według typu, w tym:

  • <NumAdults>: liczba dorosłych gości
  • <Children> i <Child="age">: określa, którzy goście są dziećmi (zwykle w wieku 0–17 lat), i opcjonalnie uwzględnia wiek każdego dziecka.
  • Chociaż nie jest to obowiązkowe, zapytania z parametrem <OccupancyDetails> powinny prowadzić do komunikatu o transakcji z odpowiednimi pakietami pokoi zdefiniowanymi dla każdego zapytania <Occupancy>.

    Uwaga: <OccupancyDetails> może nie zawsze występować w zapytaniu. W takich przypadkach należy zakładać, że wszyscy goście są osobami dorosłymi.

<UserCountry> Pricing string

Filtruje stawki według kraju, w którym znajduje się użytkownik. Wartość to dwuliterowy kod kraju, np. “US” dla Polski lub kod regionu, np. "EU" w przypadku „Europy”.

Zapytania ze zdefiniowaną wartością <UserCountry> powinny skutkować komunikatem o transakcji z odpowiednim blokiem <Rates> zdefiniowanym dla kraju, którego dotyczy zapytanie.

<UserDevice> Pricing string

Filtruje współczynniki według typu urządzenia, na którym użytkownik wyszukuje informacje. Możliwe wartości:

  • mobile
  • desktop
  • tablet

Zapytania ze zdefiniowaną wartością <UserDevice> powinny skutkować komunikatem transakcji z odpowiednim blokiem <Rates> zdefiniowanym dla typu urządzenia, którego dotyczy zapytanie.

Przykłady

Obecność

Przykład poniżej pokazuje zapytanie o rzeczywistą cenę dla danych <Occupancy> w obrębie <Context>. Zapytanie o cenę w czasie rzeczywistym jest przeznaczone dla 3 dorosłych gości.

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

Szczegółowe informacje o obłożeniu

Ten przykład przedstawia zapytanie o rzeczywistą cenę z użyciem właściwości <OccupancyDetails> w obrębie <Context>. Zapytanie o cenę w transmisji w czasie rzeczywistym jest przeznaczone dla 4 gości, z których 2 są dzieci, i szuka stawki obowiązującej w przypadku rezerwacji gości w USA na urządzeniu mobilnym:

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

Wiele kontekstów

Przykład poniżej pokazuje wykorzystanie dodatkowego elementu <Context> w zapytaniu o rzeczywistą cenę.

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