关于 google-hotels
通过 agent-browser 搜索 Google Hotels 的酒店查询技能,提供价格、评分、设施和日期可用性信息。适合比较酒店住宿选项;仅用于搜索,不负责完成预订。
主要功能
- 01按地点或酒店名称搜索
- 02查询指定日期价格与可用性
- 03比较评分、设施和住宿价格
- 04通过独立会话隔离搜索
适用场景
- 01比较不同区域的酒店
- 02查找特定日期的酒店价格
- 03按评分或设施筛选住宿选项
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ skillhq/ hotel-search --skill google-hotels安装后在 Claude Code 中输入/google-hotels确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.md.github/workflows/publish.ymlreferences/interaction-patterns.md详细介绍
Google Hotels 搜索
通过 agent-browser 搜索 Google Hotels,查找酒店价格、评分、设施和可订情况。
适用场景
- 用户要求搜索、查找或比较酒店或住宿
- 用户想了解某个城市、街区或地标附近的酒店价格
- 用户询问特定日期的酒店空房情况
- 用户想找某个区域评分最高或价格最低的酒店
不适用场景
- 预订:此技能仅用于搜索,绝不完成购买
- 度假租赁 / Airbnb:Google Hotels 显示酒店,不显示租赁房源
- 航班:使用航班搜索技能
- 历史价格:Google Hotels 仅显示当前价格
- 搜索期间绝不要离开 Google Hotels——不要转到 Booking.com、Expedia、Hotels.com 或任何 OTA 来绕过搜索限制。例外:展示结果后,可以访问酒店的自有网站,查询直接预订 / 优惠(见搜索后)。
会话约定
始终使用 --session hotels 进行隔离。
URL 快速路径(优先)
构建一个包含地点和日期编码的 URL。可直接加载结果——总共只需 3 条命令。
URL 模板
https://www.google.com/travel/search?q={QUERY}&qs=CAE4AA&ts={TS_PARAM}&ap=MAE
其中 {QUERY} 是地点 / 酒店名称,{TS_PARAM} 是经过 base64 编码的日期参数。
在 URL 中编码日期
Google Hotels 使用经过 protobuf 编码的 ts 参数表示日期。2025 至 2030 年的字节布局固定。使用此 bash 函数生成参数:
hotel_ts() {
local ci_y=$1 ci_m=$2 ci_d=$3 co_y=$4 co_m=$5 co_d=$6 nights=$7
local cyl=$(printf '%02x' $(( ($ci_y & 0x7f) | 0x80 )))
local cyh=$(printf '%02x' $(($ci_y >> 7)))
local col=$(printf '%02x' $(( ($co_y & 0x7f) | 0x80 )))
local coh=$(printf '%02x' $(($co_y >> 7)))
echo -n "08011a200a021a00121a12140a0708${cyl}${cyh}10$(printf '%02x' $ci_m)18$(printf '%02x' $ci_d)120708${col}${coh}10$(printf '%02x' $co_m)18$(printf '%02x' $co_d)18$(printf '%02x' $nights)32020801" \
| xxd -r -p | base64 | tr -d '\n='
}
# Usage: hotel_ts CHECKIN_YEAR MONTH DAY CHECKOUT_YEAR MONTH DAY NIGHTS
# Example: hotel_ts 2026 3 15 2026 3 20 5
# Output: CAEaIAoCGgASGhIUCgcI6g8QAxgPEgcI6g8QAxgUGAUyAggB
约束:年份为 2025-2030,月份为 1-12,日期为 1-31,住宿晚数为 1-127。这些范围涵盖了所有现实中的酒店搜索需求。
地点格式
| 格式 | 示例 |
|---|---|
| 城市 | Hotels+in+Bangkok |
| 城市 + 国家 | Hotels+in+Bangkok+Thailand |
| 街区 | Hotels+in+Shibuya+Tokyo |
| 地标附近 | Hotels+near+Eiffel+Tower |
| 地区 | Hotels+in+Amalfi+Coast |
| 机场 | Hotels+near+BKK+airport |
| 特定酒店 | Haus+im+Tal+Munich |
URL 与交互功能对比
| 功能 | 可通过 URL 设置? |
|---|---|
| 地点 | ✅ 可以(通过 q=) |
| 日期 | ✅ 可以(通过 ts=) |
| 客人 / 房间 | ❌ 通过交互设置(默认:1 间房、2 位客人) |
| 筛选条件(星级、价格、设施) | ❌ 通过交互设置 |
示例:曼谷酒店,3 月 15 日至 20 日
# Step 1: Generate ts parameter
ts=$(hotel_ts 2026 3 15 2026 3 20 5)
# Step 2: Open with location + dates — results load immediately
agent-browser --session hotels open "https://www.google.com/travel/search?q=Hotels+in+Bangkok&qs=CAE4AA&ts=${ts}&ap=MAE"
agent-browser --session hotels wait --load networkidle
agent-browser --session hotels snapshot -i
# Step 3: Extract results from snapshot, then close
agent-browser --session hotels close
示例:指定酒店及日期
ts=$(hotel_ts 2026 3 9 2026 3 12 3)
agent-browser --session hotels open "https://www.google.com/travel/search?q=Haus+im+Tal+Munich&qs=CAE4AA&ts=${ts}&ap=MAE"
agent-browser --session hotels wait --load networkidle
agent-browser --session hotels snapshot -i
agent-browser --session hotels close
不指定日期(仅地点)
如果用户未指定日期,请省略 ts、qs 和 ap 参数:
agent-browser --session hotels open "https://www.google.com/travel/search?q=Hotels+in+Bangkok"
agent-browser --session hotels wait --load networkidle
agent-browser --session hotels snapshot -i
结果将显示“起价”。如果用户之后提供日期,请通过交互设置(见深入参考)。
有关详细的交互式工作流(日期选择器导航、客人 / 房间选择器、筛选条件),请参阅深入参考。
结果格式
将结果作为一张信息丰富的表格呈现:
| # | Hotel | Stars | Rating | Price/Night | Total | Via | Key Amenities |
|---|-------|-------|--------|-------------|-------|-----|---------------|
| 1 | Sukhothai Bangkok | ★★★★★ | 9.2 | $185 | $925 | Hotels.com | Pool, Spa, WiFi |
| 2 | Centara Grand | ★★★★★ | 8.8 | $165 | $825 | Booking.com | Pool, Gym, WiFi |
| 3 | Ibis Sukhumvit | ★★★ | 7.4 | $45 | $225 | Agoda | WiFi, Restaurant |
并行会话
仅当用户明确要求比较不同搜索结果时使用(例如:“比较涩谷和新宿的酒店”)。
agent-browser --session shibuya open "https://www.google.com/travel/search?q=Hotels+in+Shibuya+Tokyo" &
agent-browser --session shinjuku open "https://www.google.com/travel/search?q=Hotels+in+Shinjuku+Tokyo" &
wait
agent-browser --session shibuya wait --load networkidle &
agent-browser --session shinjuku wait --load networkidle &
wait
# Set dates in both sessions, then snapshot both
agent-browser --session shibuya snapshot -i
agent-browser --session shinjuku snapshot -i
agent-browser --session shibuya close &
agent-browser --session shinjuku close &
wait
关键规则
| 规则 | 原因 |
|---|---|
优先使用带 ts= 的 URL 快速路径 | 带日期仅需 3 条命令,交互式操作则需 10 条以上 |
wait --load networkidle | 比固定等待 wait 5000 更智能 |
| 有日期时,始终在 URL 中编码日期 | 使用 hotel_ts 生成 ts 参数 |
输入文本时使用 fill,不要使用 type | 会先清除现有文本 |
| 输入地点后等待 2 秒 | 自动补全需要 API 往返 |
| 点击建议项,绝不要按 Enter | Enter 键对自动补全不可靠 |
| 每次交互后重新获取快照 | DOM 变化会使引用失效 |
| 检查是否显示“查看价格” | 这表示尚未设置日期 |
| 搜索期间绝不要离开 Google Hotels | 例外:显示结果后,可访问酒店自有网站查询直接预订 |
| 使用“<”和“>”切换日历 | 日历可能打开在错误的月份,使用箭头向前或向后切换 |
故障排除
| 问题 | 解决方案 |
|---|---|
| 同意弹窗 | 点击「全部接受」或「全部拒绝」 |
| URL 快捷路径失败 | 回退到 google.com/travel/hotels 交互流程 |
| 没有结果 /「查看价格」 | 设置入住和退房日期 |
| 日历打开在错误的月份 | 使用「<」箭头向前导航,或使用「>」向后导航。导航后务必重新生成快照,以确认目标月份可见 |
| 日历覆盖层阻止生成快照 | 按 Escape 关闭日历,重新生成快照,然后重新打开日期选择器并重试 |
| 价格过时 | 价格为实时参考价——请说明这一点 |
| 货币不匹配 | Google 使用浏览器区域设置中的货币——请指出任何差异 |
| CAPTCHA | 告知用户。不要尝试解决。稍等片刻后重试 |
| 显示地图视图而非列表 | 点击「列表」或「查看列表」切换按钮 |
| 找不到酒店 | 尝试不同写法:全名、较短名称、名称 + 城市、名称 + 街区 |
搜索后:直接预订与优惠
展示结果后,务必询问用户是否希望你查看是否有更优惠的价格。可以这样说:
「要我查看[酒店名称]的官方网站,看看有没有促销代码或会员价吗?直接预订通常比通过 OTA 更便宜。」
何时提供此选项
- 用户按名称搜索特定酒店时,务必提供
- 结果中有一个明显胜出的选项,且用户感兴趣时,务必提供
- 比较多家酒店时,应用户要求提供——针对用户选中的酒店
查看内容
在新会话(--session direct)中打开酒店官网,并查找:
- 直接预订价格——通常比 OTA(Booking.com、Expedia 等)便宜 5-15%
- 促销代码——查找横幅、弹窗或「优惠」/「特惠」/「促销」页面
- 会员/忠诚度计划价格——「注册即可享首次预订 X% 折扣」或免费会员折扣
- 套餐优惠——含早餐、免费取消、停车套餐
- 季节性促销——节假日特惠、提前预订价、最后一分钟优惠
# After Google Hotels search is done, visit hotel's direct site
agent-browser --session direct open "https://www.example-hotel.com"
agent-browser --session direct wait --load networkidle
agent-browser --session direct snapshot -i
# Look for: promo banners, "offers" or "deals" links, booking widget prices
agent-browser --session direct close
连锁酒店忠诚度计划
如果酒店属于大型连锁品牌,请介绍其忠诚度计划——会员通常能享受更优惠的价格、客房升级或积分:
| 连锁品牌 | 品牌 | 忠诚度计划 | 典型会员福利 |
|---|---|---|---|
| IHG | Holiday Inn、InterContinental、Crowne Plaza、Kimpton、Indigo | IHG One Rewards | 会员价(通常最便宜)、赚取积分、奖励住宿第 4 晚免费 |
| Marriott | Marriott、Sheraton、Westin、W、Ritz-Carlton、Courtyard、Aloft | Marriott Bonvoy | 会员价、移动端办理入住、积分/里程 |
| Hilton | Hilton、DoubleTree、Hampton、Conrad、Waldorf Astoria | Hilton Honors | 会员折扣、奖励住宿第 5 晚免费、数字钥匙 |
| Accor | Sofitel、Novotel、ibis、Mercure、Moxy、Fairmont | ALL - Accor Live Limitless | 会员价、会籍等级福利 |
| Hyatt | Hyatt、Andaz、Park Hyatt、Thompson | World of Hyatt | 会员价、免费住宿奖励、套房升级 |
如何识别连锁品牌
Google Hotels 快照通常会包含连锁品牌名称:
"Holiday Inn Express Bangkok Sukhumvit 11 by IHG"→ IHG"Courtyard by Marriott Bangkok"→ Marriott"Hilton Munich City"→ Hilton"Novotel Muenchen City"→ Accor- 不带连锁品牌后缀 → 可能是独立酒店(直接查看其官网)
独立酒店
对于独立/精品酒店(如 Haus im Tal):
- 查看官网是否有促销代码(通常显示在横幅或专门的「优惠」页面中)
- 查找「直接预订」优惠(最低价保证、免费额外服务)
- 查看是否提供订阅新闻邮件的折扣
- 如果网站上没有显示相关信息,可在网页搜索中输入酒店名称 +「促销代码」
展示对比结果
查看后,展示直接预订与 OTA 的价格对比:
## Haus im Tal — Booking Comparison
| Source | Room Type | Price/Night | Total (3 nights) | Notes |
|--------|-----------|-------------|-------------------|-------|
| Booking.com | Downtown Cozy | €183 | €549 | Free cancellation |
| Hotel direct | Downtown Cozy | €175 | €525 | Use code HIT24 for 5% off |
| Hotel direct (with code) | Downtown Cozy | €166 | €499 | Best price |
提示:务必提醒用户,你无法完成预订——只能提供链接和找到的促销代码。
深入参考
请参阅 references/interaction-patterns.md,了解:
- 完整的注释式演练(每条命令及预期输出)
- 位置自动补全的故障模式与恢复方法
- 日期选择器的日历导航
- 房客与客房选择器(最复杂的组件)
- 筛选条件(星级、价格、设施、取消政策)
- 滚动查看更多结果
- 下钻查看酒店详情并比较供应商价格
- 直接预订与促销码检查工作流