Back to skills
SKILL.md
Travel Query
ASecurity查询机票航班、火车车次和酒店的班次/舱位/房型信息,并给出两地之间的直达/中转线路建议,用于给用户做出行推荐。当用户提到出行、差旅、出差、机票、航班、火车票、动车、高铁、酒店、住哪、住哪家、中转、换乘、转机、转车、没有直达时触发。
- 417 stars
- 0 votes
- 0 copies
- 0 views
- Added November 8, 2026
Security analysis
100/100Pro scans all 4 files and shows the line behind each finding
npx -y skills add infometa/workbuddyskills --skill travel-query --agent claude-codeAre you the author of Travel Query?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/infometa-travel-query)---
name: travel-query
description: 查询机票航班、火车车次和酒店的班次/舱位/房型信息,并给出两地之间的直达/中转线路建议,用于给用户做出行推荐。当用户提到出行、差旅、出差、机票、航班、火车票、动车、高铁、酒店、住哪、住哪家、中转、换乘、转机、转车、没有直达时触发。
description_zh: 查询航班、车次、舱位、酒店与房型信息,并给出两地之间的中转线路建议,面向差旅推荐场景。
description_en: Query flights, trains, flight cabins, hotels and room plans, and suggest direct/transfer routes, for business travel recommendations.
version: 1.0.0
author: 梓如商旅
---
# 出行查询
帮用户查机票、火车、酒店的可用班次与价格,作为推荐依据。
## 工具总览
| 工具 | 用途 | 什么时候用 |
|---|---|---|
| `ziru_flight_list` | 某航线某天的航班列表 | 用户问"有哪些航班""几点的飞机",或要推荐航班 |
| `ziru_flight_cabin` | 某个具体航班的全部舱位 | 已选定航班,要看舱位/票价/退改/行李 |
| `ziru_train_list` | 某线路某天的车次列表 | 用户问"有哪些车次",或要推荐火车 |
| `ziru_hotel_list` | 某城市的酒店列表 | 用户问"住哪""有哪些酒店",或要推荐酒店 |
| `ziru_hotel_room` | 某个具体酒店的房型与价格方案 | 已选定酒店,要看房型/房价/取消政策 |
| `ziru_transfer_plan` | 跨城走廊全景(有哪几条路径、经哪个枢纽换乘、每段的城市与枢纽、火车/飞机、预估耗时,**不含班次**) | 任何跨城出行都**先**用它取走廊,再逐段落实班次;用户问"怎么转""经哪走"时更要先查 |
详细参数与返回字段见 `@references/flight.md`、`@references/train.md`、`@references/hotel.md`。
## 核心规则
### 1. 一律先查列表,再用列表里的标识查详情
不要凭用户口述的航班号/酒店名去猜详情,必须:
- `ziru_flight_list` 拿到 `flightNo` → 再用 `ziru_flight_cabin` 查该航班舱位
- `ziru_hotel_list` 拿到 `hotelId` 和 `hotelName` → 再用 `ziru_hotel_room` 查房型(**这两个都是必填**)
`ziru_flight_cabin` 和 `ziru_hotel_room` 的入参都来自对应列表接口的返回,不要自己编。
### 2. 火车传站名/城市名,**不带行政后缀**
出发地/到达地传 **12306 口径**的地名,支持两种:
- 城市名:`北京`、`南京`、`上海`(✅)/`北京市`、`南京市`(❌ 会查空)
- 站名:`北京南`、`上海虹桥`、`南京南`(✅)/`北京南站`(❌ 会查空)
用户说的地名带后缀("南京市""北京南站")时,**去掉 `市/县/站` 等后缀再传**。只查 15 天内的车次。
### 3. 机票传机场三字码
`fromAirportCode` / `toAirportCode` 传 IATA 三字码(如 `PEK`、`SHA`),不要传城市名。一个城市有多个机场时,按用户实际想去哪个区判断。
### 4. 酒店必传 `cityCode`,位置筛选用经纬度
`cityCode`(城市行政区划代码)是**必填**,例如南京 `320100`;`cityName` 是补充说明。用户提了"靠近某地"时,把该地的经纬度传 `lon`/`lat`(高德坐标),并用 `distanceMeters` 控制范围(不传默认 4 公里)。用户的偏好(安静、交通便利、周边美食多)传 `intent`。
### 5. 价格:列表里的是**预估价**,实时价以详情接口为准
- 航班的 `priceFare`、酒店的 `lowPrice` 都是预估价
- 真实可订价格以 `ziru_flight_cabin` 的 `cost`、`ziru_hotel_room` 的 `averagePrice` 为准
报价时说清是预估价;只有在查过舱位/房型后,才能说"这个价格可以订"。
### 6. 查不到就是没有,如实说,不要编
- `ziru_train_list` 返回空数组 = 该线路当天没有车次
- 规划跨城交通时**先用 `ziru_transfer_plan` 取走廊**(见规则 11);换乘城市只能来自它的返回,不要凭地理知识编一个中转城市出来
- `ziru_hotel_room` 返回失败且 message 里写明"无可售房型" = 这家酒店这些日期没房
不要为了"给个方案"而编造班次、酒店或价格,也不要拿别的日期/城市的数据顶上。
### 7. 退改签、行李、取消政策都是现成的文字,直接引用
`ziru_flight_cabin` 的 `refundRule` / `changeRule` / `luggage`,`ziru_hotel_room` 的 `cancelRule.refundStr`,都已经是拼好的中文说明。**原样转述,不要自己改写、不要补充未返回的内容。**
### 8. 车次未开售要提示开售时间
`ziru_train_list` 的每个车次带 `saleStatus`(`正常`/`暂停发售`/`未开售`/`暂售至`)和 `saleDateTime`。**未开售的车次也会正常返回**,此时要明确告诉用户"该车次 **{saleDateTime} 才开售**",不要当成已可预订推荐出去。
### 9. 引用具体方案时要带上标识
用户选定某个方案后,记下它的标识,后续追问、或交由 `travel-booking` 预订时都用它:
- 舱位:`cabinId`
- 酒店房型产品:`hotelId` + `roomTypeKeyID` + `productNo`(三者才能确定唯一一个房型+产品)
- 车次:`trainNo` + 出发日期 + `fromStation`/`toStation`
### 10. 参数不确定就先问
出发地、目的地、日期这三样缺任何一样,都要先向用户确认,不要用"今天/明天"之类的假设去查。
### 11. 跨城出行先用 `ziru_transfer_plan` 取走廊,再逐段落实班次
规划任何跨城交通都**先**调 `ziru_transfer_plan(fromCity, toCity)` 拿走廊全景,再按走廊里的城市逐段落实班次——**不要先只试直达、直达不满足才回头查它**。它返回**有哪几条路径、经哪个枢纽换乘、换乘几次、每段的出发/到达城市与枢纽、火车还是飞机、预估耗时**。
**它只给规划方式,不含班次**(返回文本末尾也写明了)。拿到走廊后必须按里面的城市继续查真实班次:
- 按走廊里的换乘城市,分别查 A→枢纽、枢纽→C 两段的班次(`ziru_train_list` / `ziru_flight_list`)
- 两段都查到班次、且换乘时间接得上,才能推荐给用户
- 走廊里出现「**需自行从 X 前往 Y**」时,表示这两段分属**不同城市/枢纽**、中间要自行接驳,**不是**同一枢纽内换乘——不要把两段之间当零距离,要给用户留出接驳时间或如实说明
- **核不到就换下一条,但要有上限**:它是由**历史运营数据汇总**的,图上有的走廊当天可能一班都没有(**走廊有服务 ≠ 当天有班次**)。某条查不出班次、或两段接不上,就回返回里换下一条重查;**依次最多试 3 条**(避免一次行程打几十个查询),仍走不通就如实告诉用户"这条线路暂无可行中转",**不要硬凑、不要编造班次**
- **不能把 `ziru_transfer_plan` 的返回直接当成方案报出去**——那里面没有车次、没有时刻
换乘城市**只能来自它的返回,严禁凭地理知识自己猜**。
它的城市名口径**比火车宽松**:带不带行政后缀都行(`北京市`、`北京` 都可以),还支持 `PEK` 这类机场三字码和景点名——**不要套用规则 2 那条"去掉后缀"**。**县级地名(如 鲁山)先照原话传**,返回"城市名不认识/图上没线路"时再试上位地级市(平顶山)或就近枢纽名(平顶山西)。
可选参数 `mode`:`all` 不限(默认)/`flight` 仅飞机/`rail` 仅火车。**`rail` 含普速 K/T/Z,不是只含高铁动车**——用户只要动车组时,要在 `ziru_train_list` 结果里按车次首字母(G/C/D)或 `trainTypeName` 自行筛,不要以为 `rail` 已经替用户筛好。
## 典型调用链
**"明天北京到上海有什么高铁"**
```
ziru_train_list(date=明天, fromStation=北京, toStation=上海)
→ 按 departureDate 升序列出车次,标注耗时最短/价格最低的几趟
→ 检查 saleStatus,未开售的提示开售时间
```
**"后天上海飞北京,帮我看看哪个航班合适"**
```
ziru_flight_list(date=后天, fromAirportCode=SHA, toAirportCode=PEK)
→ 从列表里挑出几趟候选(时间合适、价格较低)
→ ziru_flight_cabin(date, fromAirportCode, toAirportCode, flightNo=候选航班号)
→ 用舱位的 cost/退改/行李给推荐理由
```
**"南京出差住哪,要交通便利的"**
```
ziru_hotel_list(cityName=南京, cityCode=320100, intent=交通便利)
→ 按 rating/品牌/价格挑几家
→ ziru_hotel_room(hotelId=选中酒店的 hotelId, hotelName=..., checkInDate, checkOutDate)
→ 用房型的 averagePrice/含早/取消政策给推荐理由
```
**"北京到敦煌没有直达,怎么走"**
```
ziru_transfer_plan(fromCity=北京市, toCity=敦煌市)
→ 先拿走廊全景(有哪几条路径、经哪个枢纽换乘)
→ 按走廊里的城市查真实班次:A→枢纽、枢纽→C 各查一次 ziru_train_list / ziru_flight_list
→ 两段班次都拿到、换乘时间接得上,才能推荐
→ transferPlan 只给规划方式、不含班次,不能直接当方案报给用户
```
**"上海到鲁山怎么走"(有直达也要先取走廊)**
```
ziru_transfer_plan(fromCity=上海市, toCity=鲁山)
→ 鲁山是县级地名:先照用户原话传;返回"城市名不认识/图上没线路"时,
改传上位地级市(平顶山)或就近枢纽(平顶山西)重试
→ 拿到走廊后再逐段查真实班次
→ 不要因为直达查得到就跳过这一步
```
## 异常与鉴权
- 鉴权失败或提示凭据无效时,告知用户**重新授权**(凭据已失效,请在所用平台的连接器设置中重新登录授权),不要反复重试。
- 接口返回失败时,把 message 里的原因如实转达给用户(例如"该酒店 2026-09-20 至 2026-09-22 无可售房型"),不要吞掉或改写成模糊说法。
## 不做的事
- 本技能只负责查询;用户要买(买/订/预订/生成购票链接)走 `travel-booking`,本技能不生成购票链接、不创建订单。
- 不编造班次、酒店、价格、退改规则。
- 不跨日期、跨城市"借用"数据凑方案。
Files in this skill
- SKILL.md
- references/flight.md
- references/hotel.md
- references/train.md
Attribution
Related skills
View all in documentation →Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.