全球航班延误风险助手。当用户输入任意航班号(如 CA1234、EK201、BA456、UA100 等,国内外均支持)或询问"航班会不会延误""要不要早点去机场""这个航班靠谱吗""会准点吗"时触发。调用 AviationStack API 获取实时航班状态,同时用 wttr.in 查询出发地和目的地机场天气,综合分析后给出延误风险评级(低/中/高)和具体出行建议。只要用户提到航班号、问延误风险、问要不要提前去机场,都应使用这个 skill。
Resources
7Install
npx skillscat add zhanghejunjie/flight-delay-risk Install via the SkillsCat registry.
航班延误风险助手
根据实时航班状态 + 出发地天气,综合判断延误风险,给出明确的评级和行动建议。
准备工作
需要 AviationStack API key,存为环境变量 AVIATIONSTACK_KEY。
免费版地址:https://aviationstack.com(100次/月,够日常使用)。
如果用户没有 key,告知获取方式,并说明没有 key 时只能查天气、无法获取实时航班数据。
工作流程
第一步:解析航班号
用户输入的航班号可能是各种格式:CA1234、ca 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 代码有时会解析到错误地点):
- 优先用 AviationStack 响应中的
departure.city/arrival.city字段 - 如果 city 字段为空,查
references/airports.md的映射表 - 最后才直接用 IATA 代码(可能有偏差)
城市名含空格时用 + 替代,如 Los+Angeles、Hong+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 天气,根据天气单独给出出行建议,注明"无法获取实时航班数据,以下仅为天气参考"。