W tej sekcji znajdziesz informacje o opartych na języku XML komunikatach z żądaniem podpowiedzi, wiadomościach z odpowiedziami na wskazówki i wiadomościach z zapytaniami.
<Hint>
(wiadomość z odpowiedzią)
Główny element wiadomości z odpowiedzią. Wiadomości z odpowiedziami na wskazówki określają, za które kombinacje hotelu i planu podróży mają zostać zmienione ceny. To Twoja odpowiedź na wiadomość z prośbą o wskazówki od Google.
Komunikat z odpowiedzią powinien wskazywać tylko te hotele, których ceny zmieniły się od czasu ostatniego odebrania przez Google prawidłowej odpowiedzi z Twoich serwerów.
Wiadomości z odpowiedziami na wskazówki używają jednej z tych metod, aby określić, które hotele i plany podróży Google ma zmienić cenę:
Dokładne plany podróży: połączenie daty zameldowania i długości pobytu.
Zakresy dat zameldowania: określa zakres dat zameldowania zaczynający się od pierwszej daty zameldowania, a kończący ostatnią datą zameldowania.
Pokoje o określonym zakresie (lub różne plany podróży).
Każda z tych metod wymaga innej składni wiadomości z odpowiedzią podpowiedzi.
Więcej informacji znajdziesz w artykule Wiadomości z odpowiedziami na wskazówki.
Składnia
Element <Hint>
używa różnej składni w zależności od typu wiadomości z odpowiedzią:
Dokładne plany podróży
Poniżej widać składnię dokładnych planów podróży w wiadomości z odpowiedzią:
<!-- 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 zameldowań
Poniżej widać składnię zakresów zameldowania w wiadomości odpowiedzi podpowiedzi:
<!-- 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>
Zakresy długości pobytu
Poniżej widać składnię pozostań z zakresem w wiadomości odpowiedzi podpowiedzi:
<!-- 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, zostanie uwzględniony jako atrybut hintId
w wiadomościach <Query>
wysyłanych na podstawie tego <Hint>
.
Elementy potomne
Element <Hint>
ma 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 odpraw i różne plany podróży | Pierwsza data zakresu dat dla zakresu zameldowania lub zakresu dat. Daty są uwzględnione. |
<Item> | Required | Object | Wszystko | Kontener do aktualizacji hotelu lub planu podróży. |
<LastDate> | Required* | Date | Zakresy odpraw i różne plany podróży | Ostatnia data zakresu dat dla zakresu zameldowania lub zakresu dat, pozostając w zakresie odpowiedzi na pytanie. Daty są uwzględnione. * Ten element jest opcjonalny w przypadku pobytu z zakresu zakresu. |
<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 używany z tym samym identyfikatorem co na liście hoteli. Liczba elementów
|
<Stay> | Required | Object | Dokładne plany podróży | Kontener elementów <CheckinDate> i <LengthOfStay> w wiadomości z odpowiedzią na plan podróży. Każdy obiekt <Item> może zawierać tylko jeden obiekt <Stay> . |
<StaysIncludingRange> | Required | Object | Różne plany podróży | Kontener elementów <FirstDate> i <LastDate> w wiadomości z odpowiedzią o zakresie pozostającą w zakresie. |
Przykłady
Dokładne plany podróży
Ten przykład zdefiniował wiele planów podróży dla 1 usługi w ramach wiadomości z odpowiedzią:
<!-- 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 zameldowań
Ten przykład wskazuje 2 hotele, których ceny uległy zmianie i należy pobrać je ponownie. Google otrzymuje wszystkie plany podróży pomiędzy 3 a 6 lipca dla 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>
Aby wiadomość dotycząca zakresu zameldowania mogła określić wiele właściwości w jednym <Item>
, wartość <MultipleItineraries>
w <QueryControl>
musi być ustawiona na "checkin_range"
.
Zakresy długości pobytu
Poniższy przykład pokazuje 2 różne zastosowania noclegów o różnej długości: jednego dla określonej liczby nocy i drugiego dla jednej nocy:
<!-- 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>
Aby można było określić kilka właściwości w pojedynczym <Item>
w wiadomości z zakresu pobytu z zakresu, wartość właściwości <MultipleItineraries>
w <QueryControl>
musi być ustawiona na "affected_dates"
.
W przypadku każdego z tych przykładów Google przesyła w odpowiedzi <Query>
, na które należy wysłać odpowiedź <Transaction>
, która zawiera zmiany cen w podanych hotelach lub planach podróży.
<HintRequest>
Główny element wiadomości żądania podpowiedzi. Google wysyła do serwera wiadomość żądania podpowiedzi i oczekuje odpowiedzi określającej hotele i plany podróży, których ceny zmieniły się od czasu ostatniego odebrania przez Google odpowiedzi podpowiedzi z Twojego serwera.
Jeśli ceny się zmienią, Google wysyła wtedy <Query>
, który pobiera zaktualizowane dane o cenach w przypadku wskazanych hoteli i planów podróży.
Więcej informacji znajdziesz w artykule Wiadomości z prośbami o wskazówki.
Składnia
Element <HintRequest>
ma taką składnię:
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>
ma te elementy podrzędne:
Element podrzędny | Typ | Opis |
---|---|---|
<LastFetchTime> | DateTime | Ostatni raz, gdy Google udało się pobrać wiadomość z odpowiedzią na wiadomość z prośbą o podpowiedź.
Jeśli jest on starszy niż czas ostatniej aktualizacji cen na serwerze, w odpowiedzi wyślij wiadomość z odpowiedzią, która wskaże, które hotele się zmieniły. Jeśli nie odbyło się ostatnio udanego pobierania, zostanie ustawiona stała wartość odstępu (aby uniknąć poważnych problemów z dużymi zaległościami). Obecna stała wartość interwału wynosi 1000 sekund, ale może się zmienić. Więcej informacji znajdziesz w artykule Komunikaty z odpowiedziami na podpowiedzi. |
Przykłady
Poniższy przykład pokazuje wiadomość z żądaniem podpowiedzi:
Wiadomość z prośbą o podpowiedź
Oto przykład prośby 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>
Główny element wiadomości Query
. Wiadomości typu Query
to prośby od Google o aktualizację cen lub metadanych. Są one używane w trybach wyświetlania pull i zmiana cen.
Istnieją 3 typy wiadomości typu Query
:
Aktualna cena: w odpowiedzi na konkretne pytanie użytkownika Google prosi o aktualizację cen w czasie rzeczywistym. Gdy partnerzy otrzymają wiadomość
Live pricing query
, powinni w odpowiedzi przesłać wiadomość<Transaction>
zawierającą prośby o informacje o cenie w elementach<Result>
.Za pomocą cen kontekstowych: Google aktualizuje swoją pamięć podręczną cen na podstawie popularnych w przeszłości kontekstów. Gdy otrzymasz wiadomość
With context query
, w odpowiedzi prześlij wiadomość<Transaction>
zawierającą żądane informacje o cenie w elementach<Result>
.Metadane: Google żąda aktualizacji metadanych pokoi i pakietów pokojów w wybranych hotelach. Gdy otrzymasz wiadomość
Metadata Query
, w odpowiedzi musisz umieścić komunikat<Transaction>
, który określa dane o pokojach i pakietach pokojów w elementach<PropertyDataSet>
.
Więcej informacji znajdziesz w sekcji Informacje o cenach w przypadku zapytań o ceny i Metadane pakietu pokoi w przypadku zapytań o metadane.
Poniżej znajdziesz składnię 3 różnych typów.
Składnia
Element <Query>
ma taką składnię:
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ć 1 atrybut: latencySensitive
.
Atrybut latencySensitive
jest opcjonalny. Jeśli podasz wartość true
i będziesz mieć wartość true
, oznacza to, że zapytanie to Live Pricing Query
. Jeśli chcesz, aby zapytania do Google wysyłały z atrybutem latencySensitive
, skontaktuj się z technicznym menedżerem konta (TAM).
Elementy potomne
Element <Query>
ma te elementy podrzędne:
Element podrzędny | Typ zapytania | Typ | Opis |
---|---|---|---|
<AffectedNights> | Pricing | integer | Liczba nocy w przypadku pobytu o określonym zakresie. Ten element jest używany tylko w zapytaniach o ceny za zakres rezerwacji używanych ze zmianą cen. |
<Checkin> | Pricing | Date | Daty konkretnej zmiany ceny. |
<Context> | Pricing (Live Pricing Queries only) | <Context> | W przypadku zapytań z cenami na żywo określa określone parametry, za pomocą których wysyłane jest zapytanie. Do elementów podrzędnych należą:
Element |
<FirstDate> | Pricing | Date | Data rozpoczęcia zakresu planów podróży, do których mają zastosowanie opłaty. Ten element jest używany tylko w zapytaniach o ceny z zakresu dat zameldowania używanych ze zmianą cen. |
<HotelInfoProperties> | Metadata | string | Co najmniej 1 usługa, w której Google chce zaktualizować metadane pokoju i pakietu 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ń o ceny zakresu dat zameldowania używanych z pobieraniem i podpowiedziami. |
<Nights> | Pricing | integer | Liczba nocy w przypadku konkretnego planu podróży (do 30). |
<PropertyList> | Pricing | Object | Co najmniej 1 identyfikator hotelu, który wymaga aktualizacji cen. Zdefiniuj każdy hotel w elemencie <PropertyList> <Property>pid1</Property> <Property>pid2</Property> </PropertyList> |
Przykłady
Pytanie o cenę
Ten przykład przedstawia wiadomość z zapytaniem o cenę, która prosi o aktualizację cen zestawu hoteli dostępnych na 3 noce od 10 czerwca 2018 r.:
<?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ę
Poniższy przykład przedstawia zapytanie o cenę w czasie rzeczywistym z czasem 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>
Za pomocą zapytania kontekstowego
<?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, takich jak zapytania o ceną pobytu z zakresu dat i zakresu dat zameldowania, znajdziesz w przykładach wiadomości w języku: Query
.
<Context>
Element <Context>
opisuje informacje o Live pricing query
, w tym liczbę i rodzaj gości, kraj użytkownika oraz jego urządzenie.
Wiele właściwości <Context>
nie będzie nigdy używane w przypadku różnych krajów lub urządzeń użytkowników. Jeśli do zapytań dotyczących kilku osób używasz kilku obiektów <Context>
, podaj każdą cenę za obłożenie jako dodatkowy pakiet pokoi dla odpowiedniego obiektu lub planu podróży. Każdy obiekt/plan podróży powinien mieć 1 blok <Result>
z uwzględnieniem cen dla wielu miejsc.
Szczegółowe informacje o odpowiedzi na zapytanie <Context>
znajdziesz w sekcji <OccupancyDetails>
.
Składnia
Element <Context>
ma taką składnię:
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>
ma 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 parametrem Uwaga: |
<OccupancyDetails> | Pricing | Object | Jest poprzedzone znakiem <Occupancy> . Określa gości według typu, na przykład:
Chociaż nie jest to obowiązkowe, zapytania z parametrem Uwaga: |
<UserCountry> | Pricing | string | Filtruje stawki według kraju, w którym znajduje się użytkownik. Wartość to 2-literowy kod kraju, np. Zapytania ze zdefiniowanym parametrem |
<UserDevice> | Pricing | string | Filtruje dane na podstawie typu urządzenia, na którym użytkownik przeprowadza wyszukiwanie. Możliwe wartości:
Zapytania ze zdefiniowanym parametrem |
Przykłady
Obecność
Przykład poniżej pokazuje zapytanie o rzeczywistą cenę dla zasobu <Occupancy>
w polu <Context>
. Zapytanie o cenę w czasie rzeczywistym dotyczy 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>
Informacje o obłożeniu
Przykład poniżej pokazuje zapytanie o rzeczywistą cenę z parametrem <OccupancyDetails>
w polu <Context>
.
Zapytanie o cenę w czasie rzeczywistym dotyczy 4 osób, z których 2 są dzieci, i poszukuje ceny obowiązującej w Stanach Zjednoczonych przy rezerwacji gości z urządzenia mobilnego:
<?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 aktualną 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>