Travel Search
Search for flights, tours, and excursions with real prices and booking links.
Available tools
Run the HTTP client to call APIs:
CODEBLOCK0
INLINECODE0 , --body, and --headers must be valid JSON objects. Do not pass query strings like a=1&b=2.
1. Flights (Aviasales)
Cached flight prices. Read references/aviasales-data-api.md for all endpoints and parameters.
Quick example — cheapest flights:
CODEBLOCK1
After getting prices, create a booking link on aviasales.ru. See references/aviasales-links.md for URL format, then get a short link:
CODEBLOCK2
2. Tours (Travelata)
Package tours (flight + hotel). Read references/travelata-api.md for all parameters and search strategy. Use references/travelata-directories.md only if you need to look up IDs.
Important: The API returns one cheapest tour per check-in date. Always search a date range (±7 days), never a single day. If strict filters return 0, retry without filters first, then widen the date range.
Quick example — cheapest tours in Turkey, 7 nights around June 15:
CODEBLOCK3
The response includes hotelName, hotelRating, hotelCategoryName, and tourPageUrl directly. Convert tourPageUrl through /short-link:
CODEBLOCK4
3. Excursions (Sputnik8)
Read references/sputnik8-api.md for endpoints.
Quick example — excursions in Kemer:
CODEBLOCK5
4. Utilities
- - City/airport lookup: references/travelpayouts-utils.md — autocomplete and IATA resolver
- Short links:
GET https://api.botclaw.ru/short-link?url=<URL> — get a short booking link for any travel URL - Airline logos:
http://pics.avs.io/{width}/{height}/{IATA}.png (e.g. http://pics.avs.io/200/200/SU.png) - Currency rates to RUB: INLINECODE13
Workflow
- 1. Resolve locations — if user says city names, use the autocomplete or IATA resolver to get IATA codes (for flights). For tours, resolve the country first. Only narrow to a specific Travelata resort when the user explicitly asks for an exact area such as Kemer, Belek, Side, or Alanya. For package-tour requests like "Antalya", start broad with Turkey (
countries[]=92) because users often mean the Antalya coast, not only the exact municipality. - Search — call the appropriate API(s) based on user request
- Get short links — convert result URLs via INLINECODE15
- Present results — show prices, hotel names, ratings, and booking links
Rules
- - ALWAYS convert ALL URLs to short links via
/short-link before showing to users — this applies to Aviasales, Travelata, AND Sputnik8 links. Never show raw URLs from API responses directly. - For flights: show cached prices from Data API + link to full search on aviasales.ru
- For tours: default to 4-5 star, all-inclusive, rating 4+. Always search a date range (±7 days from requested date), never a single day. Show hotel name, stars, meal, price, check-in date, and booking link.
- For tours: if strict filters return 0, retry WITHOUT filters first (same dates and tourists), then widen date range. Only say "no tours" if the unfiltered search is also empty.
- For tours: if results are few (under 3) or none match the user's preferences well, recommend checking more options on these services:
-
Яндекс Путешествия
-
Ostrovok
-
Level.travel
- - For tours with a budget: if results exceed budget, present the cheapest options clearly marked as "above budget".
- For tours with an exact area request: pass
resorts[] (array format). Verify the returned resortId field in each result. - For combined requests (flights + tours): search both and compare
- Prices from Data API are cached (2-7 days old) — mention this to users. If no data found for requested dates, the API automatically returns nearest available dates.
- When user asks for tours plus excursions, always search Sputnik8 too, even if tour results are empty or only slightly above budget.
- When showing flight or tour results, suggest searching for activities and excursions at the destination via Sputnik8 (e.g. "Want me to find excursions and things to do in Antalya?")
旅行搜索
搜索航班、跟团游和短途游,提供实时价格和预订链接。
可用工具
运行HTTP客户端调用API:
bash
python scripts/api_call.py --method GET --url --params
python scripts/api_call.py --method POST --url --body
--params、--body和--headers必须是有效的JSON对象。不要传递像a=1&b=2这样的查询字符串。
1. 航班(Aviasales)
缓存航班价格。阅读references/aviasales-data-api.md了解所有端点和参数。
快速示例——最便宜航班:
bash
python scripts/api_call.py --method GET \
--url https://api.botclaw.ru/v1/prices/cheap \
--params {origin:MOW,destination:AYT,depart_date:2026-06,currency:rub}
获取价格后,在aviasales.ru上创建预订链接。参见references/aviasales-links.md了解URL格式,然后获取短链接:
bash
python scripts/api_call.py --method GET \
--url https://api.botclaw.ru/short-link \
--params {url:https://www.aviasales.ru/search?originiata=MOW&destinationiata=AYT&departdate=2026-06-01&returndate=2026-06-15&adults=1&children=0&infants=0&trip_class=0}
2. 跟团游(Travelata)
打包旅游(航班+酒店)。阅读references/travelata-api.md了解所有参数和搜索策略。仅在需要查找ID时使用references/travelata-directories.md。
重要提示: API为每个入住日期返回一个最便宜的旅游套餐。始终搜索日期范围(±7天),切勿只搜索单日。如果严格筛选返回0条结果,先不加筛选条件重试,然后扩大日期范围。
快速示例——土耳其最便宜旅游套餐,7晚,6月15日前后:
bash
python scripts/api_call.py --method GET \
--url https://api.botclaw.ru/travelata/statistic/cheapestTours \
--params {countries[]:[92],departureCity:2,nightRange[from]:7,nightRange[to]:10,touristGroup[adults]:2,touristGroup[kids]:0,touristGroup[infants]:0,hotelCategories[]:[7,4],meals[]:[1,8],ratingMin:4,checkInDateRange[from]:2026-06-08,checkInDateRange[to]:2026-06-22}
响应中直接包含hotelName、hotelRating、hotelCategoryName和tourPageUrl。通过/short-link转换tourPageUrl:
bash
python scripts/api_call.py --method GET \
--url https://api.botclaw.ru/short-link \
--params {url:<响应中的tourPageUrl>}
3. 短途游(Sputnik8)
阅读references/sputnik8-api.md了解端点。
快速示例——凯梅尔短途游:
bash
python scripts/api_call.py --method GET \
--url https://api.botclaw.ru/sputnik8/v1/products \
--params {cityid:420,limit:10,lang:ru,currency:rub,order:rating,ordertype:desc}
4. 实用工具
- - 城市/机场查询: references/travelpayouts-utils.md — 自动补全和IATA解析器
- 短链接: GET https://api.botclaw.ru/short-link?url= — 为任何旅行URL获取短预订链接
- 航空公司标志: http://pics.avs.io/{宽度}/{高度}/{IATA}.png(例如 http://pics.avs.io/200/200/SU.png)
- 货币兑卢布汇率: GET http://yasen.aviasales.ru/adaptors/currency.json
工作流程
- 1. 解析地点 — 如果用户提到城市名称,使用自动补全或IATA解析器获取IATA代码(用于航班)。对于跟团游,先解析国家。仅在用户明确要求具体区域(如凯梅尔、贝莱克、锡德或阿拉尼亚)时,才缩小到特定的Travelata度假村。对于像安塔利亚这样的打包旅游请求,从土耳其(countries[]=92)开始广泛搜索,因为用户通常指的是安塔利亚海岸,而不仅仅是该市本身。
- 搜索 — 根据用户请求调用相应的API
- 获取短链接 — 通过api.botclaw.ru/short-link转换结果URL
- 呈现结果 — 显示价格、酒店名称、评分和预订链接
规则
- - 始终在向用户展示前,将所有URL通过/short-link转换为短链接 — 这适用于Aviasales、Travelata和Sputnik8链接。切勿直接显示API响应中的原始URL。
- 对于航班:显示Data API中的缓存价格 + 指向aviasales.ru完整搜索的链接
- 对于跟团游:默认为4-5星级、全包、评分4+。始终搜索日期范围(请求日期±7天),切勿只搜索单日。显示酒店名称、星级、餐饮、价格、入住日期和预订链接。
- 对于跟团游:如果严格筛选返回0条结果,先不加筛选条件重试(相同日期和游客人数),然后扩大日期范围。仅当无筛选条件的搜索也为空时,才说没有旅游套餐。
- 对于跟团游:如果结果很少(少于3个)或没有符合用户偏好的,建议在这些服务上查看更多选项:
-
Яндекс Путешествия
-
Ostrovok
-
Level.travel
- - 对于有预算限制的跟团游:如果结果超出预算,清晰标注最便宜的选项为超出预算。
- 对于有具体区域要求的跟团游:传递resorts[](数组格式)。验证每个结果中返回的resortId字段。
- 对于组合请求(航班+跟团游):同时搜索并比较
- Data API的价格是缓存的(2-7天前的数据)——向用户说明这一点。如果请求日期未找到数据,API会自动返回最近的可用日期。
- 当用户询问旅游套餐加短途游时,即使旅游结果为空或仅略超预算,也要始终搜索Sputnik8。
- 显示航班或旅游结果时,建议通过Sputnik8搜索目的地的活动和短途游(例如需要我查找安塔利亚的短途游和活动吗?)