WhatsApp Agent 实战:多工具编排的完整案例
展示了 Twilio+n8n+FastAPI+LangChain 的技术栈如何构建出行 AI 助手,包含路线规划、票价计算、自动订票等功能。
完整中文译文
我是如何使用 n8n、FastAPI、LangChain 和 GTFS 数据,构建 MetroMind——一个基于 WhatsApp、面向 Kochi Metro 的 Agentic AI 通勤助手,并在 OpenAI Codex Nightline Hackathon 中跻身前十的。
canonical_url: https://midhunpm.in
说实话,Kochi Metro 的 app 非常难用。打开之后要等它加载,再连续点过四个页面,而等你操作完,可能已经错过了那班列车。
于是我开发了 MetroMind——一个 WhatsApp AI Agent,通过聊天就能处理你在 Kochi Metro 的整个通勤过程。不需要来回切换 app,也没有加载页面。只要像给朋友发消息一样跟它交流即可。
它在 OpenAI Codex Nightline Hackathon 中进入了前十。下面来看看它是如何工作的。
-
路线规划——询问“How do I get from Aluva to MG Road?”,它会准确告诉你该乘坐哪些列车、在哪里换乘以及对应时间
-
票价计算——从实时 GTFS 数据中获取真实票价,而不是使用硬编码的估算值
-
车票预订——由于 KMRL 没有公开的预订 API,因此通过 Playwright 实现自动化预订(下文会详细介绍)
-
自然语言——可以使用普通英语或 Malayalam 询问任何问题,它会自行判断你的需求
所有功能都通过 WhatsApp 完成,无须安装 app。
WhatsApp (Twilio) → n8n → FastAPI → LangChain → GTFS Data
↓
Playwright (booking automation)
-
n8n 作为编排层——处理来自 Twilio 的 WhatsApp webhook、路由消息并管理对话状态
-
FastAPI 后端——负责核心业务逻辑、GTFS 解析和路线计算
-
LangChain——作为 Agent 层,解释用户意图并决定调用哪些工具
-
GTFS——Kerala 的开放交通数据格式,包含所有车站信息、路线和时刻表
-
Twilio——提供消息交互界面的 WhatsApp Business API
有意思的部分——逆向工程 KMRL 的 API
KMRL 没有公开的预订 API。他们的 app 使用 AES 对所有流量进行加密。
所以,我对它进行了逆向工程。
我反编译了 APK,追踪加密密钥,并弄清楚请求和响应的格式。随后,我构建了一套基于 Playwright 的自动化系统,以无头模式完成预订流程——本质上,这是一个能够以远超人工操作速度填写预订表单的 bot。
这不是最优雅的解决方案,但确实可用,而且比手动操作快得多。
为什么选择 n8n,而不是只使用 FastAPI
我在自己的 homeserver 上自托管 n8n(Dell i5、Ubuntu 24.04,位于 Cloudflare Tunnel
Traefik 之后)。使用 n8n 意味着我可以:
Traefik 之后)。使用 n8n 意味着我可以:
-
以可视化方式连接 WhatsApp → Agent → 响应这条 pipeline
-
以可视化方式连接 WhatsApp → Agent → 响应这条 pipeline
-
无须修改代码即可添加新的 trigger 和集成
-
无须修改代码即可添加新的 trigger 和集成
-
通过完整的执行日志监控每一次 workflow 运行
-
通过完整的执行日志监控每一次 workflow 运行
对于一个本质上围绕编排展开的项目来说,使用可视化编排工具非常合理。
如果重来一次,我会做哪些改进
GTFS 数据时效性——KMRL 更新 GTFS feed 的时间并不稳定,导致我最终不得不手动刷新数据。如果使用带有 diff 检查的正规 cron job,方案会更整洁。
Session 管理——WhatsApp 对话没有原生的 session 概念。我使用 n8n 的 static data 临时绕过了这个问题,但正规的 Redis session store 会是更好的选择。
AES 逆向工程——做起来很有趣,维护起来却是一场噩梦。如果 KMRL 更新了 app,整个预订流程都会失效。显然,如果能与官方合作并获得正规的 API,才是最理想的方案。
这个项目是我在 midhunpm.in 上个人作品集的一部分。
我是 Midhun,Sahrdaya College of Engineering 的计算机科学本科生,目前正在构建 AI Agent 和全栈系统。如果你也在开发类似项目,或者想聊聊公共交通技术、AI Agent 或自托管基础设施,可以在 LinkedIn 或 GitHub 上找到我。
这个项目使用 n8n、FastAPI、LangChain、Twilio 和 Playwright 构建,也源于我对 KMRL app 究竟如何运行的强烈好奇心——可能好奇得有点过头了。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。