2026-09-09 · 原文发布日
Telegram机器人盯周末机票:语音也能下监控指令
在Telegram里发文字或语音就能管理周末机票价格提醒:语音先用OpenAI转写,再解析出创建、列表、取消或查询意图及机场、预算、周末范围等偏好,新提醒会先经SerpAPI抓Google Flights验证预算合理性后存入n8n Data Table;每天早上定时对所有生效提醒抓价,汇总每个周末最便宜的选择,符合通知规则就把带订票链接的榜单发回Telegram。
原文要点
该n8n模板把Telegram触发器与每日08:00定时器接在同一流程:语音消息先下载音频经OpenAI转写,再用OpenAI解析意图(创建/列表/取消/查状态)与机场、预算、周末窗口等偏好;新建提醒会先调SerpAPI的Google Flights取样验证预算,存入n8n Data Table;定时运行时按周末日期对抓价、聚合每周末最低价,满足通知规则就把带订票链接的榜单发回Telegram并更新Data Table中的最近检查时间与价格。
这次做成什么
照此搭建一个可在Telegram用文字或语音管理周末机票提醒、并每日自动比价推送的n8n工作流;本站补一份意图解析提示词、Data Table建表字段与一条完整测试指令,便于按图施工。
准备什么
- n8n实例(Data Table功能可用的版本)与管理员权限
- Telegram账号及用@BotFather创建的机器人Token
- OpenAI API凭据(用于语音转写与意图解析)
- SerpAPI账号且套餐含Google Flights搜索配额
- 明确的出发机场、预算上限与接收错误通知的admin_chat_id
具体怎么做
建Telegram机器人并配触发器
在Telegram找@BotFather发送/newbot拿到Token;n8n中新建Telegram凭据填入Token,添加Telegram Trigger节点接收message与voice两类更新,激活前先用一条测试消息确认能收到update。
接入语音转写与意图解析
触发器后加分支:若为语音,用Telegram节点按file_id下载音频,交给OpenAI转写节点得到文本;文本统一进OpenAI Chat节点,用下方提示词解析出intent与airports、budget、weekend_window等字段,输出严格JSON。
新建提醒的预算验证与落库
意图为create时,先按解析出的机场与最近周末日期调SerpAPI的Google Flights接口取样一条结果,若最低价高于预算则回复用户建议调整;合理则生成提醒卡片写入Data Table的alerts表,并回Telegram确认。
列表/取消/查询分支
list、cancel、status意图分别读取alerts表与run_log表;cancel只把该提醒status字段改为cancelled而不是删除;每步操作后都向Telegram回复结果摘要。
每日定时比价与推送
加Schedule Trigger设为每天08:00(服务器时区):读取status为active的提醒,按周末日期对逐个调SerpAPI抓价,聚合出每个周末最低价,排序生成带订票链接的榜单;符合通知规则才发到Telegram,随后写run_log并更新每条提醒的last_checked与last_price。
填Config并激活
在Config节点填home_airport、max_searches_per_run(控制单次运行的SerpAPI调用数)和admin_chat_id,用下方测试指令走通create→list→cancel全流程后再激活定时器。
可直接复制的材料
意图解析提示词(粘贴进OpenAI Chat节点)
本站独立编写;默认机场建议用表达式引用Config里的home_airport,不要把机场写死。
你是机票提醒助手的指令解析器。把用户的Telegram文字或语音转写文本解析为严格JSON,不要输出多余文字。
字段定义:
- intent:create(新建提醒)/ list(查看全部)/ cancel(取消某条)/ status(查询运行状态)
- origin:出发机场IATA三字码,用户没提就填默认机场
- destinations:目的地机场三字码数组,用户说"随便去哪"时填["ANY"]
- budget_cny:单程或往返预算上限,整数,币种换算为人民币
- weekend_span:未来几周内的周末,整数,默认8
- cadence:通知频率,daily 或 only_deals,默认 only_deals
- alert_id:cancel时用户指的提醒编号,无法判断填 null
无法识别的字段填 null,意图不明确时 intent 填 "clarify" 并给出一句反问。
用户输入:{{ $json.text }}Data Table建表字段(alerts表与run_log表)
本站按原说明归纳的建表方案,列名可自定但需在所有Data Table节点中重新选择对应表ID。
alerts表列:alert_id(文本,主键如WKN-001)、origin(文本)、destinations(文本,逗号分隔)、budget_cny(数字)、weekend_span(数字)、cadence(文本)、status(文本:active/cancelled)、created_at(日期时间)、last_checked(日期时间,可空)、last_price_cny(数字,可空)
run_log表列:run_id(文本)、run_date(日期)、alerts_checked(数字)、deals_found(数字)、serpapi_calls(数字)、notes(文本,可空)一条测试指令与预期解析
本站虚构测试数据;CTU/KIX按你实际航线替换,预算验证环节的SerpAPI取样会真实消耗配额。
{"telegram_input": "帮我盯一下成都出发去大阪的周末机票,预算2500以内,未来两个月每个周末都看", "expected_parse": {"intent": "create", "origin": "CTU", "destinations": ["KIX"], "budget_cny": 2500, "weekend_span": 8, "cadence": "only_deals", "alert_id": null}}输入与输出示例
本站虚构演示,解析与价格数字均为示例,非原作者运行结果。
输入
在Telegram发语音:"帮我建个提醒,成都飞大阪,周末往返别超过2500块,盯两个月",转写后进入意图解析节点。对应输出
解析结果{"intent":"create","origin":"CTU","destinations":["KIX"],"budget_cny":2500,"weekend_span":8};SerpAPI取样显示近期周末最低价约2380元≤预算,提醒写入alerts表(alert_id=WKN-001,status=active),Telegram收到确认卡片:"已创建提醒WKN-001:CTU→KIX,预算2500元,未来8个周末,仅在低于预算时通知。"做完检查这些
- 文字和语音消息都能触发工作流,语音经下载与转写后与文字走同一解析分支
- create指令在SerpAPI取样价高于预算时不落库,并回复用户建议调整预算
- alerts表中新建提醒status为active,cancel后同一行status变为cancelled而非被删除
- 08:00定时运行后run_log新增一行,且每条active提醒的last_checked被更新
- 榜单仅在符合通知规则时发出,消息内含每个周末最低价与订票链接
容易卡住的地方
- SerpAPI每次Google Flights搜索都会消耗套餐配额,提醒数量×周末对数会放大每日调用量,务必先用max_searches_per_run限制单次运行搜索数并确认套餐额度够用。
- 定时器使用服务器时区,自托管n8n若非本地时区,08:00对应的本地时间会偏移
- Telegram语音文件需先按file_id下载,直接转发语音消息体给OpenAI会失败
- Data Table列名或类型建错会导致节点选不到字段,建表后需在每一个Data Table节点重新选择表ID
- 机场三字码解析错误(如把城市名原样传出)会让Google Flights查询为空,建议在解析后加一层三字码校验
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Track weekend flight prices with Google Flights, SerpAPI, OpenAI and Telegram
- 原作者
- Friedrich Bremer
- 原始发布日期
- 2026-09-08T20:45:47.642Z
- 来源
- https://n8n.io/workflows/19410