Phần này cung cấp thông tin tham khảo cho thông báo Yêu cầu gợi ý, thông báo Phản hồi gợi ý và thông báo Truy vấn dựa trên XML của Google.
<Hint>
(thông báo Phản hồi gợi ý)
Phần tử gốc của thông báo Phản hồi gợi ý. Thông báo Phản hồi gợi ý xác định tổ hợp khách sạn hoặc hành trình nào cần được đặt giá lại. Thông báo là phản hồi của bạn cho thông báo Yêu cầu gợi ý do Google gửi về.
Thông báo Phản hồi gợi ý chỉ nên xác định những khách sạn có giá đã thay đổi kể từ lần gần nhất Google nhận được Phản hồi gợi ý thành công từ máy chủ của bạn.
Thông báo Phản hồi gợi ý sử dụng một trong các phương thức sau để xác định khách sạn và hành trình mà Google cần đặt giá lại:
Hành trình chính xác: Một tổ hợp ngày nhận phòng và thời gian lưu trú.
Phạm vi ngày nhận phòng: Xác định phạm vi ngày nhận phòng, bắt đầu từ ngày nhận phòng đầu tiên và kết thúc vào ngày nhận phòng cuối cùng.
Thời gian lưu trú theo phạm vi ngày (hay còn gọi là hành trình theo phạm vi)
Mỗi phương thức dùng một cú pháp riêng cho thông báo Phản hồi gợi ý.
Để biết thêm thông tin, hãy tham khảo bài viết Thông báo phản hồi gợi ý.
Cú pháp
Cú pháp của thành phần <Hint>
sẽ không giống nhau, tuỳ thuộc vào loại thông báo Phản hồi gợi ý:
Hành trình chính xác
Dưới đây là cú pháp khi dùng hành trình chính xác trong thông báo Phản hồi gợi ý:
<!-- 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>
Phạm vi ngày nhận phòng
Dưới đây là ví dụ về cú pháp khi dùng phạm vi ngày nhận phòng trong một thông báo Phản hồi gợi ý:
<!-- Check-in Ranges Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
<Item>
<!-- At least one is required -->
<Property>hotel_ID</Property>
[...]
<!-- Required -->
<FirstDate>first_checkin_date</FirstDate>
<!-- Required -->
<LastDate>last_checkin_date</LastDate>
</Item>
...
</Hint>
Thời gian lưu trú theo phạm vi ngày
Dưới đây là cú pháp khi dùng thời gian lưu trú theo phạm vi ngày trong thông báo Phản hồi gợi ý:
<!-- Ranged Stay Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
<Item>
<!-- At least one is required -->
<Property>1458700</Property>
<Property>5418701</Property>
<StaysIncludingRange>
<!-- Required -->
<FirstDate>2025-04-28</FirstDate>
<!-- Optional -->
<LastDate>2025-04-29</LastDate>
</StaysIncludingRange>
</Item>
...
</Hint>
Thuộc tính
Phần tử <Hint>
chứa một thuộc tính không bắt buộc: id
. Khi được cung cấp, thuộc tính này sẽ được đưa vào dưới dạng thuộc tính hintId
trong các thông báo <Query>
được gửi dựa trên <Hint>
này.
Phần tử con
Phần tử <Hint>
có các phần tử con sau:
Phần tử con | Bắt buộc? | Loại | Loại phản hồi gợi ý | Mô tả |
---|---|---|---|---|
<CheckInDate> | Required | Date | Hành trình chính xác | Ngày nhận phòng trong hành trình. |
<FirstDate> | Required | Date | Phạm vi ngày nhận phòng và hành trình theo phạm vi ngày | Ngày đầu tiên trong phạm vi ngày của thông báo Phản hồi gợi ý theo phạm vi ngày nhận phòng hoặc thời gian lưu trú theo phạm vi ngày. Ngày được tính toàn bộ. |
<Item> | Required | Object | Tất cả | Vùng chứa khách sạn/hành trình cần cập nhật. |
<LastDate> | Required* | Date | Phạm vi ngày nhận phòng và hành trình theo phạm vi ngày | Ngày cuối cùng trong phạm vi ngày của thông báo Phản hồi gợi ý sử dụng phương thức phạm vi ngày nhận phòng hoặc thời gian lưu trú theo phạm vi ngày. Ngày được tính toàn bộ. * Thành phần này là không bắt buộc đối với thời gian lưu trú theo phạm vi ngày. |
<LengthOfStay> | Required | integer | Hành trình chính xác | Số đêm trong hành trình, được biểu thị bằng số nguyên dương. |
<Property> | Required | string | Tất cả | Mã của khách sạn, sử dụng cùng một mã trong Danh sách khách sạn. Số lượng thành phần
|
<Stay> | Required | Object | Hành trình chính xác | Vùng chứa các phần tử <CheckinDate> và <LengthOfStay> trong thông báo Phản hồi gợi ý sử dụng phương thức hành trình chính xác. Mỗi <Item> chỉ có thể chứa một <Stay> . |
<StaysIncludingRange> | Required | Object | Hành trình theo phạm vi ngày | Vùng chứa các thành phần <FirstDate> và <LastDate> trong thông báo Phản hồi gợi ý sử dụng phương thức thời gian lưu trú theo phạm vi ngày. |
Ví dụ
Hành trình chính xác
Dưới đây là ví dụ về cách xác định nhiều hành trình cho một cơ sở lưu trú duy nhất trong thông báo Phản hồi gợi ý:
<!-- 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>
Phạm vi ngày nhận phòng
Dưới đây là ví dụ về cách xác định hai khách sạn có giá đã thay đổi và cần phải cập nhật lại. Google sẽ lấy tất cả các hành trình từ ngày 3 tháng 7 đến ngày 6 tháng 7 đối với cơ sở lưu trú 12345 và 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>
Thời gian lưu trú theo phạm vi ngày
Dưới đây là ví dụ về hai cách sử dụng thời gian lưu trú theo phạm vi ngày khác nhau, một cách cho phạm vi nhiều đêm và một cách cho một đêm duy nhất:
<!-- 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>
Trong mỗi ví dụ trên, Google sẽ phản hồi bằng một thông báo <Query>
, sau đó bạn nên phản hồi bằng một thông báo <Transaction>
chứa thông tin cập nhật về giá cho các khách sạn/hành trình được xác định.
<HintRequest>
Phần tử gốc của thông báo Yêu cầu gợi ý. Google sẽ gửi một thông báo Yêu cầu gợi ý đến máy chủ của bạn và bạn phản hồi với thông tin xác định những khách sạn và hành trình có giá đã thay đổi so với lần gần nhất mà Google nhận được thông báo Phản hồi gợi ý thành công từ máy chủ của bạn.
Nếu có bất kỳ thay đổi nào về giá, Google sẽ gửi <Query>
để tìm nạp dữ liệu giá mới cho các khách sạn và hành trình đã chỉ định.
Để biết thêm thông tin, hãy tham khảo bài viết Thông báo yêu cầu gợi ý.
Cú pháp
Phần tử <HintRequest>
sử dụng cú pháp sau:
Cú pháp
<?xml version="1.0" encoding="UTF-8"?>
<HintRequest>
<LastFetchTime>last_fetch_time</LastFetchTime>
</HintRequest>
Thuộc tính
Phần tử <HintRequest>
không có thuộc tính nào.
Phần tử con
Phần tử <HintRequest>
có các phần tử con sau:
Phần tử con | Loại | Mô tả |
---|---|---|
<LastFetchTime> | DateTime | Lần gần nhất mà Google nhận được thông báo Phản hồi gợi ý cho một thông báo Yêu cầu gợi ý.
Nếu thời gian này cũ hơn thời gian gần nhất mà bạn cập nhật giá lên máy chủ của mình thì bạn nên phản hồi bằng thông báo Phản hồi gợi ý cho biết giá của khách sạn nào đã thay đổi. Nếu gần đây chưa có lần tìm nạp nào thành công, thì giá trị này sẽ được đặt thành giá trị khoảng thời gian cố định (để tránh các vấn đề nghiêm trọng hơn với lượng hàng tồn đọng lớn). Giá trị khoảng thời gian cố định hiện tại là 1000 giây, nhưng có thể thay đổi. Để biết thêm thông tin, hãy tham khảo bài viết Thông báo phản hồi gợi ý. |
Ví dụ
Ví dụ sau đây cho thấy một thông báo Yêu cầu gợi ý:
Thông báo Yêu cầu gợi ý
Dưới đây là ví dụ về một thông báo Yêu cầu gợi ý:
<?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>
Phần tử gốc của thông báo Query
. Thông báo Query
là yêu cầu của Google về việc cập nhật giá hoặc siêu dữ liệu. Chúng được sử dụng cho cả chế độ phân phối Lấy dữ liệu và Mức giá đã thay đổi.
Thông báo truy vấn giá
Thông báo Truy vấn giá chỉ định các tổ hợp cơ sở lưu trú và hành trình mà bạn cung cấp giá.
Khi nhận được Thông báo truy vấn giá, máy chủ của bạn sẽ phản hồi bằng thông báo <Transaction>
chứa thông tin về giá được yêu cầu cung cấp.
Để biết thêm thông tin, hãy xem bài viết Tổng quan về giá.
Có ba loại thông báo Query
đặc biệt:
Cung cấp mức giá hiện tại: Google phản hồi một yêu cầu cụ thể của người dùng, yêu cầu cập nhật giá theo thời gian thực. Khi nhận được thông báo
Live pricing query
, đối tác phải phản hồi bằng thông báo<Transaction>
chứa thông tin về giá được yêu cầu trong phần tử<Result>
.Khi có tính năng định giá theo bối cảnh: Google sẽ cập nhật bộ nhớ đệm giá dựa trên các bối cảnh phổ biến trước đây. Khi nhận được thông báo
With context query
, bạn cần phản hồi bằng thông báo<Transaction>
chứa thông tin về giá được yêu cầu trong các phần tử<Result>
.Siêu dữ liệu: Google sẽ yêu cầu thông tin cập nhật về siêu dữ liệu cho các phòng và Gói dịch vụ phòng của các khách sạn nhất định. Khi nhận được thông báo
Metadata Query
, bạn cần phản hồi bằng thông báo<Transaction>
để chỉ định dữ liệu về phòng và Gói dịch vụ phòng trong phần tử<PropertyDataSet>
. Để biết thêm thông tin, hãy tham khảo mục Siêu dữ liệu của gói dịch vụ Room.
Cú pháp
Phần tử <Query>
sử dụng cú pháp sau:
Truy vấn giá
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<Checkin>YYYY-MM-DD</Checkin>
<Nights>number_of_nights</Nights>
<PropertyList>
<Property>hotel_id</Property>
...
</PropertyList>
</Query>
Cung cấp mức giá hiện tại
<?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>
Có ngữ cảnh
<?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>
Metadata
<HotelInfoProperties>
<Property>property_ID</Property>
...
</HotelInfoProperties>
Thuộc tính
Phần tử <Query>
có thể chứa một thuộc tính: latencySensitive
.
Thuộc tính latencySensitive
là không bắt buộc. Khi được cung cấp và đặt là true
, thuộc tính này cho biết đây là truy vấn Live Pricing Query
. Để yêu cầu Google gửi truy vấn có thuộc tính latencySensitive
, hãy liên hệ với Nhà quản lý tài khoản về kỹ thuật (TAM) của bạn.
Phần tử con
Phần tử <Query>
có các phần tử con sau:
Phần tử con | Loại truy vấn | Loại | Mô tả |
---|---|---|---|
<AffectedNights> | Pricing | integer | Số đêm trong một thời gian lưu trú theo phạm vi ngày. Thành phần này chỉ được dùng cho những truy vấn mức giá của Thời gian lưu trú theo phạm vi ngày sử dụng chế độ phân phối Mức giá đã thay đổi. |
<Checkin> | Pricing | Date | Ngày mà mức giá cụ thể có thay đổi. |
<Context> | Pricing (Live Pricing Queries only) | <Context> | Đối với các Truy vấn Yêu cầu cung cấp giá hiện tại, thành phần này xác định các thông số cụ thể được dùng để thực hiện truy vấn. Các thành phần con bao gồm:
Có thể sử dụng nhiều phần tử |
<FirstDate> | Pricing | Date | Ngày bắt đầu của phạm vi các hành trình có áp dụng mức giá này. Chỉ dùng thành phần này cho các truy vấn giá của Phạm vi ngày nhận phòng sử dụng chế độ phân phối Mức giá đã thay đổi. |
<HotelInfoProperties> | Metadata | string | Một hoặc nhiều cơ sở lưu trú mà Google muốn cập nhật siêu dữ liệu về phòng và Gói dịch vụ phòng bằng một thông báo Query về siêu dữ liệu.
Phần tử này có thể chứa một hoặc nhiều phần tử <Property> chỉ định mã thuộc tính của cơ sở lưu trú. |
<LastDate> | Pricing | Date | Ngày kết thúc của phạm vi các hành trình có áp dụng mức giá này. Chỉ dùng thành phần này cho các truy vấn giá của Phạm vi ngày nhận phòng sử dụng chế độ phân phối Lấy dữ liệu và Gợi ý. |
<Nights> | Pricing | integer | Số đêm trong một hành trình cụ thể, tối đa 30 đêm. |
<PropertyList> | Pricing | Object | Một hoặc nhiều mã khách sạn yêu cầu thông tin cập nhật về giá. Hãy xác định từng khách sạn trong phần tử <PropertyList> <Property>pid1</Property> <Property>pid2</Property> </PropertyList> |
Ví dụ
Truy vấn giá
Dưới đây là ví dụ về thông báo Truy vấn giá yêu cầu thông tin cập nhật về giá đối với một tập hợp khách sạn, có phòng cho 3 đêm và bắt đầu từ ngày 23 tháng 5 năm 2023:
<?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>
Truy vấn về chế độ cung cấp mức giá hiện tại
Ví dụ sau đây cho thấy một Truy vấn giá hiện tại có giới hạn thời gian phản hồi là 500 mili giây:
<?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>
Có truy vấn theo ngữ cảnh
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<Checkin>2023-05-23</Checkin>
<Nights>2</Nights>
<PropertyContextList>
<PropertyContext>
<Property>8675309</Property>
<!-- In the future, 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>
Truy vấn siêu dữ liệu
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<HotelInfoProperties>
<Property>pid5</Property>
<Property>pid8</Property>
<Property>pid13</Property>
<Property>pid21</Property>
</HotelInfoProperties>
</Query>
Để xem thêm ví dụ, bao gồm các truy vấn giá dùng phương thức thời gian lưu trú theo phạm vi ngày và phạm vi ngày nhận phòng, hãy xem ví dụ về thông báo Query
.
<Context>
Thành phần <Context>
mô tả thông tin của một Live pricing query
, bao gồm số lượng và loại khách, quốc gia của người dùng và thiết bị của người dùng.
Không bao giờ dùng nhiều <Context>
với nhiều quốc gia của người dùng hoặc thiết bị của người dùng khác nhau. Khi dùng nhiều <Context>
để truy vấn nhiều mức sức chứa, hãy cung cấp mỗi mức giá của mức sức chứa dưới dạng một Gói dịch vụ phòng bổ sung cho cơ sở lưu trú hoặc hành trình tương ứng. Mỗi cơ sở lưu trú hoặc hành trình cần có một khối <Result>
có cùng các mức giá cho nhiều mức sức chứa.
Để biết thông tin chi tiết về phản hồi cho truy vấn <Context>
, hãy xem phần <OccupancyDetails>
.
Cú pháp
Phần tử <Context>
sử dụng cú pháp sau:
Cú pháp
<?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>
Phần tử con
Phần tử <Context>
có các phần tử con sau:
Phần tử con | Loại truy vấn | Loại | Mô tả |
---|---|---|---|
<Occupancy> | Pricing | integer | Chỉ định tổng số khách. Mặc dù không bắt buộc, các truy vấn có Lưu ý: |
<OccupancyDetails> | Pricing | Object | Bắt đầu bằng <Occupancy> . Xác định loại khách, bao gồm:
Mặc dù không bắt buộc, các truy vấn có Lưu ý: |
<UserCountry> | Pricing | string | Lọc đơn giá theo quốc gia nơi người dùng đang có mặt. Giá trị này là một mã quốc gia gồm 2 chữ cái, chẳng hạn như Các truy vấn có xác định |
<UserDevice> | Pricing | string | Lọc giá theo loại thiết bị mà người dùng sử dụng để tìm kiếm. Các loại tệp có thể được thu thập dữ liệu bao gồm:
Các truy vấn có xác định |
Ví dụ
Số người lưu trú
Ví dụ sau đây cho thấy một truy vấn Yêu cầu cung cấp giá hiện tại cho <Occupancy>
trong <Context>
. Truy vấn Yêu cầu cung cấp giá hiện tại dành cho 3 khách người lớn.
<?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>
Thông tin về số người lưu trú
Ví dụ sau đây cho thấy một truy vấn Yêu cầu cung cấp giá hiện tại có <OccupancyDetails>
trong <Context>
.
Truy vấn Yêu cầu cung cấp giá hiện tại cho 4 khách, 2 trong số đó là trẻ em và đang tìm kiếm một mức giá phù hợp cho yêu cầu đặt phòng tại Hoa Kỳ từ một thiết bị di động:
<?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>
Nhiều ngữ cảnh
Dưới đây là ví dụ về việc sử dụng thành phần <Context>
bổ sung trong một truy vấn Yêu cầu cung cấp giá hiện tại.
<?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>