Hermes skill:监测 国内 + 国际 航班价格,跌破心理价位时推送到智能体 / 飞书 / 微信。
第一步:把下面这段发给 Codex / Workbuddy / 任何智能体:
请阅读 https://github.com/qinthqod/flight-monitor-skill/blob/master/SKILL.md 学习这个 skill。
我要监测一个航班:乌鲁木齐到广州,10 月 5 号出发,盯 CZ6895 这班,
降到 ¥2000 以下提醒我(推飞书)。
第二步:像聊天一样告诉它你的需求:
帮我监测一下机票 ← 最简输入
国庆回广州便宜点告诉我 ← 自然语言
监测北京大兴到上海虹桥,11 月 20 号,低于 1500 推微信
10 月 5 号乌鲁木齐到广州 CZ6895 降到 2000 告诉我
国际机票也行:
监测下个月 PEK 到 NRT 降到 600 美元提醒我 ← v1.2.0
商务舱监测 PEK 到 LHR 降到 3000 美元 ← v1.2.0 多舱位
一次性监测三条航线 ← v1.2.0 多航线
AI 会自动帮你抽取城市 / 日期 / 航班 / 阈值 / 舱位,缺什么问什么,然后装好 cron、自动监控,价格跌破阈值才推你,否则静默。
每 2 小时自动跑一次:
- 抓 携程 batchSearch(国内主源,Playwright 真渲染,绕过风控)
- 抓 携程 fuzzySearch(国内备源)
- 抓 南航 minPrice API(特惠价备源)
- 抓 携程国际(v1.2.0,国际主源)
- 抓 去哪儿国际(v1.2.0,国际备源——当前不可用)
- 对比你盯的那个航班价 vs 你的心理价位
- 跌破阈值时推送到你选的渠道
v1.2.0 新增能力:
- 🌏 国际机票(携程国际,自动识别 USD/EUR/JPY/KRW 等币种)
- 📈 价格趋势(7d/30d 均价 + 相对跌幅% + 30 天新低标记)
✈️ 往返航线(return_date字段)- 📋 多航线同装(
config.json改routes: []数组) - 🛏️ 多舱位(Y=经济/C=商务/F=头等/W=超经)
- 🎉 节假日错峰提示(节前 14 天 / 节中 / 节后 1-3 天窗口)
- 每天 12:00 推 午间总结(v1.1.0)
阈值是针对单个航班,不是全航线最低 —— 所以你只在你要的那班便宜下来时才被打扰,别的航线再便宜也不打扰。
下面是 cron job 真的会推的 markdown 报告样例(基于真实抓取数据 + SQLite 历史快照):
💰 BELOW THRESHOLD ✈️ 国内 · 经济舱
航线 URC → CAN
日期 2026-10-05
抓取 2026-08-13T16:42:03
### 🎯 你盯的 CZ6895
¥1500 南方航空 2026-10-05 10:45:00 → 16:00:00
阈值:¥2000
### 📊 当日直飞最低
¥1500 `CZ6895` (南方航空)
### 📈 价格趋势
- 7d 均价:¥1963(14 个样本)
- 30d 均价:¥1963(14 个样本)
- 相对 7d 均价 🔻 -23.6%
- **🔥 30 天新低**
### 🎉 节假日提示
🎉 国庆中第 5 天(余票紧张)
🔥 NEW LOW 🌏 国际 · 商务舱
航线 PEK → LHR
日期 2026-12-20 → 2026-12-27(往返)
抓取 2026-08-13T16:50:01
### 🎯 你盯的 BA038
$2,800 英国航空 10:30 → 14:45
阈值:$3,000
### 📊 当日直飞最低
$2,800 `BA038` (英国航空)
### 📈 价格趋势
- 7d 均价:$3,150(8 个样本)
- 30d 均价:$3,280(22 个样本)
- 相对 7d 均价 🔻 -11.1%
- **🔥 30 天新低**
### 🎉 节假日提示
✨ 圣诞后 1 天(错峰窗口,价格通常较低)
cron stdout 输出(用户看不到,只在 log 里):
✈️ [2026-08-13 16:42:15] URC→CAN 2026-10-05 cabin=Y focus=CZ6895 ¥2000 CNY [domestic]
[1/3] 携程 batchSearch (国内) ...
77 班
直飞最低 ¥1719 (GS7581)
[2/3] 携程 fuzzySearch ...
2 条
[3/3] 南航 minPrice ...
0 条
📵 CZ6895 当前 CNY 2700 未破阈值 — 静默
没跌破阈值 → 不打扰用户。这是设计意图("有结果才推")。
🌏 [2026-08-13 19:15:24] PEK→NRT 2026-10-01 cabin=Y focus=IJ018 ¥4000 CNY [international]
[1/2] 飞猪 FlyAI (国际主源) ...
10 班 (飞猪官方数据)
---DRY RUN---
💰 BELOW THRESHOLD 🌏 国际 · 经济舱
航线 PEK → NRT
日期 2026-10-01
抓取 2026-08-13T19:15:25
### 🎯 你盯的 IJ018
¥3241 春秋日本航空 2026-10-01 10:45:00 → 15:30:00
阈值:¥4000
### 📊 当日直飞最低
¥3241 `IJ018` (春秋日本航空)
### 📈 价格趋势
- 7d 均价:¥3292(19 个样本)
- 30d 均价:¥3292(19 个样本)
- 相对 7d 均价 🔻 +1.5%
### 🎉 节假日提示
🎉 国庆首日出行(价格通常最高)
v1.3.0 关键变化:国际航线主源从"携程 Playwright 抓取"切到"飞猪 CLI subprocess 调"——
- 飞猪官方数据更准(飞猪有完整航司/代理报价)
- 不需要 Playwright(更轻)
- 失败时自动 fallback 携程国际 + 去哪儿兜底
情景:用户盯 IJ018,3 班双源都覆盖,其中 JL020 偏离 28.2%:
💰 BELOW THRESHOLD 🌏 国际 · 经济舱
航线 PEK → NRT
日期 2026-10-01
### 🎯 你盯的 IJ018
¥3241 春秋日本
阈值:¥4000
### 📈 价格趋势
- 7d 均价:¥3298(18 个样本)
### 🎉 节假日提示
🎉 国庆首日出行
### 🔍 交叉验证(飞猪 vs 携程)
- ⚠️ 置信度:LOW
- 飞猪 3 班 ↔ 携程 3 班
- 匹配航班:3 班
- ✅ `IJ018` ⭐ 飞猪¥3241 ↔ 携程¥3300 (偏离 1.8%)
- ✅ `HU439` 飞猪¥4357 ↔ 携程¥4400 (偏离 1.0%)
- ⚠️ `JL020` 飞猪¥5304 ↔ 携程¥6800 (偏离 28.2%)
- ⚠️ 价格异常(偏离 >15%):
- `JL020` 日航 飞猪¥5304 ↔ 携程¥6800 偏离 28.2%
v1.3.0 交叉验证机制:
- 飞猪跌破阈值时后台触发携程独立验证(concurrent.futures,30s 超时熔断)
- 同航班双源价格对比,偏离 >15% 告警"价格异常"
- 置信度标签:
high(≥3 班一致)/medium(1-2 班)/low(携程 0 班或异常) - dry-run 跳过交叉验证(避免 95s 拖慢 demo)
- 携程超时自动熔断 → 单源参考(不告警异常)
数据源 = SQLite 同一航线的历史快照聚合,无跌破阈值也会每天推(告诉用户当前价 / 24h 变动 / 距阈值空间)。
daily_summary.py直接打印的 markdown(未推飞书前),2026-08-14 13:00 dry-run 输出:
📊 **【机票监控·午间总结】** 2026-08-14
**航线**:乌鲁木齐 URC → 广州 CAN
**日期**:2026-10-05 | **阈值**:¥2000 | **样本**:251 次抓取(窗口 23.5h)
---
### 🎯 你盯的航班 CZ6895
| 指标 | 价格 |
|---|---|
| 当前 | **¥2330** →持平 |
| 历史最低 | ¥2140 |
| 历史最高 | ¥2700 |
| 均价 | ¥2483 |
| 距阈值 | **还差 ¥330** 才能破阈 |
---
### 📉 直飞最低价(参考)
| 航班 | 价格 |
|---|---|
| 当前最低 | **¥1989** ↓¥10 |
| 历史最低 | ¥1989 |
| 历史最高 | ¥2220 |
| 样本量 | 251 次抓取 |
---
### 🛫 中转最低价
| 类型 | 价格 |
|---|---|
| 当前中转最低 | **¥1650** |
| 当前全局最低 | ¥1650 |
| 当日总班次 | 10(直飞 7 / 中转 3) |
_数据来源:携程 batchSearch · 快照窗口 2026-08-11 → 2026-08-17T12:38_
_详细监控每 2h 跑一次,破阈或新低会立即推送_
git clone https://github.com/qinthqod/flight-monitor-skill.git
cd flight-monitor-skill
# 推荐:装 Hermes cronjob(2h 监测 + 12:00 午间总结)
bash scripts/install_hermes_cron.sh
# 旧式:装系统 crontab(仅 2h 监测)
bash scripts/install_cron.sh安装脚本会:
- 装 Playwright Chromium
- 在
~/.flight-monitor/config.json创建默认配置 - 写入 Hermes cronjob 或 crontab
- 跑一次 dry-run 让你看效果
{
"from_city": "URC",
"to_city": "CAN",
"date": "2026-10-05",
"focus_flight": "CZ6895",
"threshold": 2000,
"channels": ["agent"]
}{
"routes": [
{
"from_city": "URC", "to_city": "CAN",
"date": "2026-10-05",
"focus_flight": "CZ6895", "threshold": 2000,
"cabin": "Y"
},
{
"from_city": "PEK", "to_city": "NRT",
"date": "2026-10-01",
"threshold": 600, "cabin": "Y"
},
{
"from_city": "PEK", "to_city": "LHR",
"date": "2026-12-20", "return_date": "2026-12-27",
"threshold": 3000, "cabin": "C"
}
]
}字段说明(v1.2.0):
from_city/to_city:出发/到达 IATA 码(国际 IATA 见references/city-codes.md)date:出发日期(YYYY-MM-DD)return_date:往返返程日期(可选,v1.2.0 新)focus_flight:你盯的航班号(主告警对象)threshold:心理价位(国内用 CNY,国际按原始币种)cabin:舱位 Y=经济/C=商务/F=头等/W=超经(v1.2.0 新)channels:推送渠道数组
| 渠道 | 说明 | 配置 |
|---|---|---|
| agent(默认) | 写到 ~/.hermes/cron/output/flight-monitor/,让智能体拾取 |
无需配置 |
| feishu | 推到你飞书某会话(需要 lark-cli) | export FEISHU_FLIGHT_CHAT_ID=oc_xxx |
| 走 Hermes iLink gateway | export WEIXIN_TOKEN=... |
详细配置见 references/push-channels.md。
flight-monitor-skill/
├── SKILL.md # 给 AI 看的(YAML + 正文)
├── README.md # 本文件(含更新日志)
├── CHANGELOG.md # 完整更新日志
├── scripts/
│ ├── fetch.py # 抓取 + 告警(单文件实现,v1.2.0 866 行)
│ ├── install_cron.sh # 旧式:系统 crontab 装
│ └── install_hermes_cron.sh # 推荐:Hermes cronjob 装
└── references/
├── setup.md # 安装详解
├── push-channels.md # 三渠道配置
├── city-codes.md # 城市 IATA 码表(含 50+ 国际城市)
├── troubleshooting.md # 故障排查
├── dual-cron.md # v1.1.0:双 job 装法
└── v12-features.md # v1.2.0:5+1 大新功能详解
# v1.0.0 单航线
python3 scripts/fetch.py --from URC --to CAN --date 2026-10-05 \
--focus-flight CZ6895 --threshold 2000 --channel agent --dry-run
# v1.2.0 国际航线
python3 scripts/fetch.py --from PEK --to NRT --date 2026-10-01 \
--threshold 600 --cabin Y --channel feishu --dry-run
# v1.2.0 商务舱往返
python3 scripts/fetch.py --from PEK --to LHR --date 2026-12-20 \
--return-date 2026-12-27 --threshold 3000 --cabin C --dry-run
# v1.2.0 多航线同装
python3 scripts/fetch.py --all-routes --dry-run
# 看历史最低价
sqlite3 ~/.flight-monitor/flight.db \
"SELECT flight_no, MIN(adult_price), datetime(fetched_at)
FROM price WHERE flight_date='2026-10-05'
GROUP BY flight_no ORDER BY MIN(adult_price) ASC LIMIT 10"最常见的问题:
- 携程被风控(whaleguard block) →
references/troubleshooting.md第 1 节 - 10/5 这种远期日期查不到价 → OTA 一般只放出 30~60 天内的价
- 国际航线 silent → 主源失败时 silent;手动查携程网页确认价格
- 飞书推送失败 → 检查
FEISHU_FLIGHT_CHAT_ID和lark-cli是否装好 - 微信推送没收到 → 看 gateway URL 和
WEIXIN_TOKEN - 价格趋势为空 → 新装 cron 第一次跑无历史快照,等 2h 后再跑
详细见 references/troubleshooting.md。
精简:完整更新日志见 CHANGELOG.md。
- 症状:v1.5.4 修复后 daily_summary.py 仍报"CZ6895 当天未放出",但 flyai 直接查是有 CZ6895 的
- 根因:
fetch_fliggy_international()没传--transport-no $focus_flight→ flyai 按推荐排序返 TOP10,CZ6895(¥2700 起)被 CZ6014/CZ6883 挤出 → snapshot.focus_price 永远 NULL - 修复:飞猪查两次(带 + 不带 transport-no),合并去重保留最低价
- 验证:8-17 16:26 snapshot.focus_price=2700.0,daily_summary 推"CZ6895 当前 ¥2700 ↑¥370 | 距阈值 还差 ¥700",message_id
om_x100b6718114ac8a8c4e81ed7b1025cc
- 症状:daily_summary.py 把
price表里 CZ6895 全表最新记录当"当前价"。当天携程没返回 CZ6895 时,会拿前一天旧价渲染"已破阈",误导用户以为机票便宜了 - 修复:
focus_now改用最新 snapshot 的 focus_price(即那次抓取实际返回的 CZ6895 价),不再回退到 price 表历史末尾- 缺数据时显示"
⚠️ 当天未放出(携程本次未返回此航班)(@ 抓取时间)(旧价)",避免误判破阈 - 正常数据显示时间戳
(@ YYYY-MM-DDTHH:MM),让用户看到当前价对应几点抓的 - 回归:8-17 15:01 dry-run 输出"当前 ¥2330
⚠️ 当天未放出...(@ 2026-08-16T21:08)(旧价)| 距阈值 还差 ¥330",message_idom_x100b671f522304b4c027cfc5db7b99f
MIT © 2026 qinthqod
daily_summary.py 修复后第一次正确推送(已实推飞书,2026-08-17 16:27 dry-run,message_id om_x100b6718114ac8a8c4e81ed7b1025cc):
📊 **【机票监控·午间总结】** 2026-08-17
**航线**:乌鲁木齐 URC → 广州 CAN
**日期**:2026-10-05 | **阈值**:¥2000 | **样本**:260 次抓取(窗口 23.8h)
---
### 🎯 你盯的航班 CZ6895
| 指标 | 价格 |
|---|---|
| 当前 | **¥2700** ↑¥370 _(@ 2026-08-17T16:26)_ |
| 历史最低 | ¥2140 |
| 历史最高 | ¥3750 |
| 均价 | ¥2495 |
| 距阈值 | **还差 ¥700** 才能破阈 |
---
### 📉 直飞最低价(参考)
| 航班 | 价格 |
|---|---|
| 当前最低 | **¥1989** ↓¥10 |
| 历史最低 | ¥1989 |
| 历史最高 | ¥2220 |
| 样本量 | 260 次抓取 |
---
### 🛫 中转最低价
| 类型 | 价格 |
|---|---|
| 当前中转最低 | **¥600** |
| 当前全局最低 | ¥600 |
| 当日总班次 | 20(直飞 17 / 中转 3) |
_数据来源:携程 batchSearch · 快照窗口 2026-08-11 → 2026-08-17T16:26_
_详细监控每 2h 跑一次,破阈或新低会立即推送_
修复前 → 修复后:
- ❌ v1.5.4:声称"CZ6895 当前 ¥2330
⚠️ 当天未放出" - ✅ v1.5.5:CZ6895 当前 ¥2700 ↑¥370 (@ 2026-08-17T16:26),距阈值还差 ¥700