航班座位分析与推荐助手。查询航班座位图,分析机型布局,给出专业选座建议。
脚本已内置 cookie,可直接运行。cookie 有效期约数天,过期后脚本会报 401 错误,届时需更新 scripts/fetch_seatmap.ts 中的 COOKIE 常量。
从用户消息中提取:
信息不足时直接询问,一次问清。
脚本位于 scripts/fetch_seatmap.ts(相对 SKILL.md 所在目录)。
第一步:拉取航班列表(快,不含座位图)
bun <skill_dir>/scripts/fetch_seatmap.ts flights <FROM> <TO> <DATE> [AIRLINE]
返回 JSON 数组,每个元素含:flightNo、airlineName、departureTime、arrivalTime、travelTime、aircraftName、planeId
根据返回的 airlineCode 和 airlineName,结合自身知识判断航司档次并标注。档次分三级:
| 档次 | 标签 | 典型特征 | 示例 |
|---|---|---|---|
| 全服务 | ✈ 全服务 | 含托运行李、餐食、选座通常免费 | 国泰 CX、新航 SQ、全日空 NH、澳航 QF、国航 CA |
| 中端/混合 | ✈ 中端 | 基础票可能不含行李或餐食,但服务水平介于全服务和廉航之间 | 香港航空 HX、酷航长途 TR、越捷 VJ |
| 廉航 | ⚡ 廉航 | 票价仅含座位,行李/餐食/选座均需另购 | 春秋 9C、乐桃 MM、亚航 AK/D7、捷星 3K/JQ、宿务太平洋 5J、瑞安 FR、易捷 U2 |
上表仅供参考,实际判断以你对该航司的了解为准。如果遇到不确定的航司,标注为"中端"并注明"具体政策请查航司官网"。
若只有一个航班,直接展示航司档次信息后进入 Step 2。
若有多个航班,先列出让用户选择,格式:
找到以下航班,请选择:
1. QF128 澳洲航空 ✈全服务 19:30 → 07:45 (9h 15m) | A330-300
2. HX17 香港航空 ✈中端 22:05 → 10:35 (9h 30m) | A330-300
3. CX181 国泰航空 ✈全服务 00:45 → 12:45 (9h 0m) | 777-300ER
请问你要看哪个航班的座位?
廉航专属提醒:若航班属于廉航,在航班列表后追加醒目提示:
⚡ 提醒:[航司名] 为廉航,请注意:
· 选座通常需额外付费(靠窗/前排/腿部空间座更贵)
· 托运行李需另购,仅含随身小包
· 机上餐食和饮料需付费
· 座距通常比全服务航司更紧凑(28-29" vs 31-32")
用户选择后,再执行 Step 2。记住用户选择的航司档次,后续推荐座位时会用到。
bun <skill_dir>/scripts/fetch_seatmap.ts seatmap <PLANE_ID> "<AIRCRAFT_NAME>"
返回完整座位图 JSON,含:
aircraftName:机型名称classFeatures:各舱等参数(间距、宽度、充电、WiFi)cabins:各舱等布局(排号范围、座位数、layout 如 "3-4-3"、windowCols、aisleCols)defaultFeature:大多数座位的 feature bitmask 值(通常是 1024 即 standardSeat),未出现在 seatExceptions 中的座位均为此值seatExceptions:非默认 feature 的座位,按 feature 值分组,格式为 { "32": ["13A","13K",...], "3": ["22B",...] }F:feature bitmask 解码表,用按位与解码,例如 f & F.standardSeat 非零表示标准座,f & F.nearGalley 非零表示靠近厨房wingRows:机翼遮挡窗口的排号列表推导规则(不在 JSON 中输出,从 cabins 推导):
rowStart~rowEnd 范围内,即属于该舱等windowCols 中aisleCols 中格式要求:专业、有料、不啰嗦。
✈ [航空公司] [航班号] · [出发]-[目的地] · [日期]
航司档次:[✈全服务 / ✈中端 / ⚡廉航] — [一句话说明特点:含托运行李+餐食,选座通常免费 / 基础票可能不含行李或餐食,服务介于全服务和廉航之间 / 票价仅含座位,行李/餐食/选座均需另购]
机型:[专业描述,见下方规则]
舱等配置
─────────────────────────────
[图例]
[各舱等一览表]
─────────────────────────────
⚠ 机翼遮挡说明
机型专业描述规则:
根据 aircraftName 中的机型代码,结合以下知识给出专业介绍:
| 机型关键词 | 描述要点 |
|---|---|
| A380 | 全球最大双层宽体客机,上下两层,四发动机,极其安静,部分航司有淋浴和酒吧——重点突出双层结构和乘坐体验 |
| B747 / 744 | 经典"驼峰"宽体,双层头部,四发,标志性机型 |
| A350 | 新一代宽体,大量碳纤维,超大舷窗,机舱湿度更高,较安静 |
| B787 / 788 / 789 | 梦想客机,碳纤维机身,超大窗户,增压更高,飞行舒适度优秀 |
| A330 / 332 / 333 | 双发中型宽体,经典双通道,经济实惠但历史较长 |
| B777 / 773 / 77W | 最大双发宽体,三舱布局通常是 3-4-3,特别宽 |
| A320 / A321 | 单通道窄体,常见短途,3-3 布局 |
| B737 | 单通道窄体,全球最常见,3-3 布局 |
从 classFeatures 读取实际舱等间距/宽度/充电数据,插入描述中。
seat_pitch、seat_width、seat_recline 均以**英寸(inch)**为单位,展示时同时给出厘米换算(1" = 2.54 cm),格式为 32"(81cm)。
舱等一览表示例(按排号从前到后):
舱等 排数 座位数 布局 间距 宽度
商务舱 11-23 45个 1-2-1 82"(208cm) 21"(53cm)
豪华经济 30-35 48个 2-4-2 38"(97cm) 19.5"(50cm)
经济舱 39-72 268个 3-4-3 32"(81cm) 17.2"(44cm)
机翼遮挡说明:
从 wingRows 计算哪些排受影响,说明影响的是哪个舱等、哪几排、影响哪侧窗口座(通常是最左列 A 和最右列 K)。举例:
⚠ 机翼遮挡:豪华经济舱 31-35 排、经济舱 40-46 排的窗口座(A/K 列)视野会被机翼部分遮挡,靠窗党需注意。
根据出发地、目的地的地理位置、航班起飞时间和月份季节,判断靠窗能看到什么。
推断逻辑:
输出格式(简洁,3-5 条要点):
🪟 沿途景观(左侧 A 列 / 右侧 K 列)
· 航线大致走向:东南→西北
· 左侧(A):飞越珠三角城市群后进入内陆山地,夜间可见城市灯火
· 右侧(K):广东东部山区,光线较暗,景观一般
· 推荐坐:左侧(A 列)
· 备注:夜航为主,云层以下视野取决于云量;22:xx 起飞抵达西安时约 23:xx,全程夜景
若夜航或云层遮挡概率高,如实说明,不过度渲染。若景观两侧相当,说明"两侧无明显差异"。
默认座位偏好取决于航司档次:
isWindow: true),因为座距舒适,靠窗可看风景且不被打扰isAisle: true),原因:廉航座距紧凑(通常 28-29"),走道座进出方便、不用翻越邻座,体感空间也更大;此外廉航靠窗/前排座通常要额外付费,走道座更可能是免费可选的用户明确说了偏好则优先遵循用户意愿,以上仅为默认策略。
目标座位特征:
features 中有 standardSeat:+(免费标准座)wingRows 中(避开机翼遮挡)nearGalley:-、nearLavatory:-、limitedRecline:-、noFloorStorage:-、getColdByExit:-)筛选步骤:
推荐输出格式(全服务航司示例):
💺 为你推荐(1人 · 经济舱 · 靠窗)
首选:42A 或 42K
· 标准座,无额外收费
· 靠窗,机翼遮挡区之外,视野良好
· 距厕所/厨房有足够距离
备选:48A / 48K(更靠后,通常更安静)
推荐输出格式(廉航示例):
💺 为你推荐(1人 · 经济舱 · 靠走道)
首选:12C 或 12D
· 标准座,通常无需额外付费
· 靠走道,进出方便——廉航座距紧凑,走道座体感更宽敞
· 距厕所/厨房有足够距离
备选:15C / 15D(更靠后,登机后上方行李架空间可能更充裕)
💡 提示:廉航靠窗座和前排座通常需额外付费,如果不想加钱,走道座是性价比最高的选择。
从 cabins 读取该舱等的 layout,说明布局并推荐:
输出要清楚说明"你们旁边还有没有陌生人"。
示例:
💺 为你推荐(2人 · 经济舱 · 3-4-3 布局)
推荐:42A + 42B(或 42J + 42K)
· 布局:[A B C] [D E F G] [H J K]
· A/K 靠窗,B/J 紧邻——你们两人相邻,旁边 C/H 位置是陌生人
· 若想完全不被打扰,考虑豪华经济 2-4-2 舱(A+C 或 H+K,整组就你们两人)
推荐带 extraLegroom:+、exitRow:+ 的座位,说明额外收费原因(出口排腿部空间大、紧急出口须配合乘务员)。带婴儿可推荐 bassinet:+ 座位并说明位置特点。
scripts/fetch_seatmap.ts 中的 COOKIE 常量features 为空,说明该座无特殊标注,视为普通座位处理xxx 替换为 planeId)直接查看可视化座位图,作为补充参考