ZhangHejunjie

flight-delay-risk

全球航班延误风险助手。当用户输入任意航班号(如 CA1234、EK201、BA456、UA100 等,国内外均支持)或询问"航班会不会延误""要不要早点去机场""这个航班靠谱吗""会准点吗"时触发。调用 AviationStack API 获取实时航班状态,同时用 wttr.in 查询出发地和目的地机场天气,综合分析后给出延误风险评级(低/中/高)和具体出行建议。只要用户提到航班号、问延误风险、问要不要提前去机场,都应使用这个 skill。

ZhangHejunjie 0 Updated 2w ago

Resources

7
GitHub

Install

npx skillscat add zhanghejunjie/flight-delay-risk

Install via the SkillsCat registry.

SKILL.md

航班延误风险助手

根据实时航班状态 + 出发地天气,综合判断延误风险,给出明确的评级和行动建议。


准备工作

需要 AviationStack API key,存为环境变量 AVIATIONSTACK_KEY
免费版地址:https://aviationstack.com(100次/月,够日常使用)。

如果用户没有 key,告知获取方式,并说明没有 key 时只能查天气、无法获取实时航班数据。


工作流程

第一步:解析航班号

用户输入的航班号可能是各种格式:CA1234ca 1234国航1234——统一转成 IATA 格式(两字母航司代码 + 数字)。

常见航司代码(用于中文名称识别):

中国大陆:国航 → CA,南航 → CZ,东航 → MU,海航 → HU,厦航 → MF,深航 → ZH,四川航空 → 3U,山东航空 → SC,吉祥航空 → HO,春秋航空 → 9C

港澳台:国泰 → CX,香港快运 → UO,澳门航空 → NX,长荣 → BR,华航 → CI,台湾虎航 → IT

美洲:美航 → AA,达美 → DL,美联航 → UA,西南航空 → WN,加拿大航空 → AC,墨西哥国际 → AM,LATAM → LA

欧洲:英航 → BA,法航 → AF,汉莎 → LH,荷航 → KL,北欧航空 → SK,瑞士航空 → LX,奥地利航空 → OS,伊比利亚 → IB,易捷 → U2,瑞安 → FR,土耳其航空 → TK,北欧 → AY

中东 / 非洲:阿联酋 → EK,阿提哈德 → EY,卡塔尔 → QR,以色列 → LY,肯尼亚 → KQ,南非航空 → SA

亚太:新加坡航空 → SQ,全日空 → NH,日航 → JL,韩航 → KE,亚航 → AK,泰航 → TG,越南航空 → VN,菲律宾航空 → PR,印尼鹰航 → GA,澳航 → QF,新西兰航空 → NZ,印度航空 → AI

如果用户用中文名称说航班(如"新加坡航空 SQ321"),根据上表转换成 IATA 格式再查询。如果用户直接输入 IATA 格式(如 EK201),直接使用。

第二步:查询实时航班状态

调用 AviationStack API:

GET http://api.aviationstack.com/v1/flights?access_key={AVIATIONSTACK_KEY}&flight_iata={航班号}

从响应中提取:

  • flight_status:scheduled(计划中)/ active(飞行中)/ landed(已落地)/ cancelled(取消)/ diverted(备降)
  • departure.iata:出发机场 IATA 代码
  • departure.airport:出发机场名称
  • departure.scheduled:计划起飞时间
  • departure.estimated:预计起飞时间
  • departure.delay:已有延误(分钟)
  • arrival.airport:目的地机场

⚠️ 时间处理注意:AviationStack 返回的时间戳虽然标注 +00:00,实际上是各机场的本地时间,并非 UTC。展示时间时直接使用 API 返回的时间值,并注明是"出发地本地时间"或"目的地本地时间",不要做时区换算。

如果 API 返回空数据:可能是航班号错误、该航班今日不飞、或超出免费额度。告知用户并给出提示。

第三步:查询出发 + 目的地机场天气

同时查询两个机场的天气(并行发请求,节省时间):

GET https://wttr.in/{查询名称}?format=j1

查询名称的优先顺序(wttr.in 用 IATA 代码有时会解析到错误地点):

  1. 优先用 AviationStack 响应中的 departure.city / arrival.city 字段
  2. 如果 city 字段为空,查 references/airports.md 的映射表
  3. 最后才直接用 IATA 代码(可能有偏差)

城市名含空格时用 + 替代,如 Los+AngelesHong+Kong

两个机场各自提取 current_condition[0] 中:

  • weatherDesc[0].value:天气描述
  • temp_C:温度
  • visibility:能见度(原始值 ÷ 10 = km)
  • windspeedKmph:风速
  • precipMM:降水量

目的地天气影响判断:目的地天气恶劣可能导致飞机无法降落、返航或备降,同样是延误的重要因素。

第四步:综合分析,给出风险评级

综合以下因素判断(出发地和目的地天气都纳入考量):

直接判高风险的情况(任意一条成立):

  • 航班已取消或备降
  • 现有延误 ≥ 45 分钟
  • 出发地或目的地天气含雷暴(Thunderstorm)
  • 出发地或目的地天气含大雪(Heavy Snow / Blizzard)
  • 出发地或目的地能见度 < 1 km
  • 出发地风速 > 65 km/h

中风险(没有高风险情况,但有以下任意一条):

  • 现有延误 15–44 分钟
  • 出发地或目的地天气含中到大雨(Moderate/Heavy Rain)
  • 出发地或目的地天气含小雪(Light Snow / Sleet)
  • 出发地或目的地能见度 1–3 km
  • 出发地风速 40–65 km/h

低风险:

  • 无延误或延误 < 15 分钟
  • 出发地和目的地天气均晴好或多云,无降水
  • 能见度 > 3 km,风速 < 40 km/h

输出格式

用清晰的结构输出,不要只列数据——重点是让用户知道"我该怎么做"。

✈️ [航班号]  [出发机场] → [目的地机场]
计划起飞:[时间]  |  预计起飞:[时间](如有变化)

📊 延误风险:[🟢 低 / 🟡 中 / 🔴 高]

📋 状态摘要
• 航班状态:[状态]
• 当前延误:[X 分钟 / 暂无]
• 出发地天气:[描述],[温度]°C,能见度 [X] km,风速 [X] km/h
• 目的地天气:[描述],[温度]°C,能见度 [X] km,风速 [X] km/h

📍 目的地[城市]:[温度]°C [天气描述]
建议带:[物品1]、[物品2]、[物品3]
不需要带:[物品1]、[物品2]

💡 出行建议
[2–4 条具体建议,根据风险等级调整语气和内容,如目的地天气是风险来源要单独说明]

建议内容参考:

  • 低风险:正常出发即可,建议提前 XX 分钟到机场
  • 中风险:建议关注航班动态,提前出发,保留候补计划
  • 高风险:强烈建议提前联系航空公司确认、了解改签政策、预留充足缓冲时间

📍 目的地携带建议逻辑

根据目的地的实时天气,判断建议携带和不需要携带的物品:

温度参考:

  • ≥ 33°C:轻薄衣物、防晒霜、墨镜、防晒帽;不需要:外套、厚衣物
  • 26–32°C:短袖、透气衣物;酌情带薄外套(室内冷气);不需要:厚外套
  • 18–25°C:薄外套 / 长袖;不需要:羽绒服
  • 10–17°C:外套、厚长裤;不需要:夏装
  • 3–9°C:厚外套、保暖内衣、围巾;不需要:短袖
  • ≤ 2°C:羽绒服、手套、围巾、厚袜子;不需要:单薄衣物

降水判断:

  • 有雨(Rain / Drizzle / Shower):雨伞 / 雨衣
  • 无雨:不需要带雨伞

特殊天气:

  • 大风(风速 > 40 km/h):建议带防风外套
  • 高湿度(> 80%)且高温:建议带吸汗速干衣物、多带一套换洗衣物
  • 雪天:防滑靴、保暖手套
  • 强紫外线(晴天且温度 ≥ 28°C):防晒霜、墨镜、防晒帽
  • 沙尘 / 雾霾(能见度 < 3 km 且非雨雪):口罩

建议精简实用,每项 3–5 个物品即可,不要列太长。


边缘情况处理

航班已在飞行中(active):告知当前状态,重点提供落地机场天气和预计到达时间。

航班已落地(landed):说明航班已完成,如用户查错了询问正确信息。

查不到航班:可能是日期问题(AviationStack 默认查当日)或航班号有误,提示用户核实。

没有 AVIATIONSTACK_KEY:只查 wttr.in 天气,根据天气单独给出出行建议,注明"无法获取实时航班数据,以下仅为天气参考"。