关于 fallback-and-resilience
为旅行规划 Agent 提供故障恢复指南,列出航班、酒店等搜索来源的替代方案,并说明工具报错、限流及访问限制时的处理方式。
主要功能
- 01按来源列出备用方案
- 02提供 API 与服务器故障处理规则
- 03指导识别 IP 白名单错误
- 04说明浏览器自动化常见故障
- 05规范故障时的信息披露
适用场景
- 01航班搜索来源发生故障时切换服务
- 02API 限流时寻找替代数据源
- 03首次调用遭遇 IP 拒绝时排查
- 04搜索结果为空时核实航线是否运营
MCP 相关
该技能说明 MCP 服务调用失败后的处理方式,包括尝试替代来源;要求实际调用后再判断服务是否不可用。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ borski/ travel-hacking-toolkit --skill fallback-and-resilience安装后在 Claude Code 中输入/fallback-and-resilience确认已加载。
详细介绍
故障回退与韧性
工具会停用,API 会出故障。每次搜索都要准备备用方案。
| 主要工具 | 失效时的情况 | 备用方案 |
|---|---|---|
| Duffel | API 错误或超时 | Ignav、Google Flights 技能、Skiplagged |
| Ignav | API 错误 | Duffel、Google Flights 技能、Skiplagged |
| Google Flights | agent-browser 错误 | Duffel、Ignav、Skiplagged |
| Skiplagged | 502/超时(Cloudflare 问题) | Kiwi.com MCP、Duffel、Ignav |
| Kiwi.com | 服务端错误 | Skiplagged MCP、Duffel |
| Seats.aero | API 错误或数据过时 | 直接查看航空公司网站,使用 Duffel 查询 GDS 库存 |
| Southwest | SW 限流或机器人检测 | 等几分钟后重试。如果在本地运行失败,请使用 Docker(ghcr.io/borski/sw-fares)。如需快速备用方案,可使用 Google Flights 技能查询 SW 现金票价。 |
| SerpAPI | 达到速率限制(免费版每月 100 次) | 酒店查询用 Trivago,目的地发现用网页搜索 |
| Trivago | 服务端错误 | 酒店查询用 LiteAPI,或使用 SerpAPI Google Hotels |
| LiteAPI | 身份验证错误(401) | Trivago MCP、SerpAPI Google Hotels |
| Airbnb | 抓取被拦截 | 建议用户直接查看 airbnb.com |
| AwardWallet | API 错误 | 直接询问用户的积分余额 |
| Ferryhopper | 服务端错误 | 使用 SerpAPI 或网页搜索查询渡轮路线 |
| Atlas Obscura | 脚本错误 | 搜索 "unusual things to do in [destination]" |
| Chase Travel | 登录失败或 CSRF 问题 | 使用 Duffel/Ignav 查询现金票价。请注意,Points Boost 和 Edit 检测仅适用于 Chase。 |
| Amex Travel | 登录失败或表单变更 | 使用 Duffel/Ignav 查询现金票价。请注意,IAP 票价和 FHR/THC 检测仅适用于 Amex。 |
| Deutsche Bahn(db-vendo) | 库出错或 bahn.de 停运 | 使用 SerpAPI Google Travel Explore、搜索 "DB train [origin] [dest]",或改为确认可选航班。 |
| Wikipedia 机场 | API 速率限制(罕见)或页面缺失 | 搜索 "[airport name] airlines destinations",通过 Google 获取相同数据。 |
| 票价工具显示 "no results" | 可能是无余票,也可能是没有航线 | 使用 wikipedia-airports 确认该航线是否实际运营。 如果 Wikipedia 列出了该目的地,说明票价工具在该日期没有余票。如果 Wikipedia 未列出该目的地,则该航线不存在。这样可以避免让用户重试永远不会成功的搜索。 |
一般规则
- **如果 MCP 服务返回错误,**尝试使用基于 curl 的技能替代方案(反之亦然)。
- **如果付费 API 达到速率限制,**切换到免费替代方案。
- **一个工具失效后绝不要放弃。**至少尝试一个备用方案。
- 告知用户你使用了哪个来源。“Skiplagged 无法使用,所以我改查了 Kiwi.com。”
未实际调用前,绝不要声称 MCP 不可用
不要只看一眼工具列表就宣称 MCP 服务“不可用”——**先实际调用工具。**Skiplagged 和 Kiwi 服务无需 API 密钥,并且已接入所有受支持的 harness 配置;从仓库目录启动的会话可以使用它们。如果调用确实失败,请向用户说明错误,然后再使用备用方案。
使用备用方案时,**绝不要悄悄用临时浏览器抓取替代工具包的数据源。**临时抓取(例如手动操控浏览器访问 Google Flights)会漏掉市场上的大多数价格。如果不得不采用这种方式,请明确说明,并将抓取到的每个价格标记为低可信度:“MCP 数据源无法访问,因此这里只提供一个抓取到的报价——请将其视为上限,而非市场价格。”
IP 白名单错误(首次使用时的常见故障)
工具包中的多个 API 会对开发者密钥强制实施 IP 白名单。如果你看到以下错误特征,请勿在身份验证或配额问题上钻牛角尖。建议用户先将自己的 IP 加入白名单。
| API | 错误特征 | 白名单页面 |
|---|---|---|
| AwardWallet | {"error": "access_denied", "code": "IP_DENIED"} | https://business.awardwallet.com/profile/api |
| TripAdvisor | User is not authorized to access this resource with an explicit deny | https://www.tripadvisor.com/developers |
首次使用时,如果 API 调用因类似身份验证的错误而失败,请按以下流程排查:
- 运行
curl ifconfig.me,获取用户当前的出站 IP。 - 检查错误特征是否与 IP 白名单问题相符(见上表,或类似“explicit deny”/“IP_DENIED”/“not whitelisted”的表述)。
- 告诉用户:“这看起来是 IP 白名单问题,而不是密钥问题。请在 添加
<their IP>,等待 1-5 分钟,让 AWS 边缘缓存完成传播,然后重试。” - 用户添加白名单期间,请妥善降级处理:继续执行,不使用该数据源,并说明该数据源仍在等待中。不要因此阻塞工作流的其他部分。
- 多 IP 注意事项:住宅 CGNAT、VPN 出口、酒店 Wi-Fi 和旅行地点都需要单独添加。如果用户在新网络中遇到相同错误,说明 IP 已变更。
“没有缓存的可用性”并非最终结论
当 Seats.aero 对某个航线与计划组合未返回结果时,这意味着 Seats.aero 最近没有抓取到相关数据,并不意味着该奖励无法预订。如果某个可访问的计划没有缓存结果,请先直接搜索航空公司的网站,再判定奖励已失效。
基于 Patchright 的技能(Southwest、AA、Chase、Amex、TaW)
这些技能通过未被检测到的浏览器直接访问网站。常见故障模式:
- 登录表单已更改。 网站更新了 DOM,导致选择器失效。请更新技能。
- 双重身份验证循环。 一些技能(AA、Amex)支持通过电子邮件进行双重身份验证。请确保账户中的双重身份验证接收方式设置正确。
- 机器人检测。 如果出现“异常活动”或 CAPTCHA 页面,持久化配置文件可能已被标记。请尝试使用新的配置文件,或等待一小时。
- 无头模式检测。 Patchright 以有头模式运行。如果在本地运行失败,请使用 Docker 镜像(xvfb 提供虚拟显示器)。
Docker 镜像故障
如果 docker pull ghcr.io/borski/... 失败:
unauthorized: 运行docker logout ghcr.io后重试。也可以使用具有read:packages权限的 GitHub PAT 登录,或在本地通过docker build -t <tag> skills/<skill>/构建。- 网络超时: 如果你使用 ARM 设备且遇到校验和不匹配,请使用
--platform linux/amd64重试。