esdeeekiddoo/BangonPinoy
GitHub: esdeeekiddoo/BangonPinoy
面向菲律宾灾害响应的 Web 应用,集市民报灾、实时调度与 AI 语音热线于一体,实现从事件报告到响应解决的闭环管理。
Stars: 0 | Forks: 0
# BangonPilipinas — 概念图
## 一句话应用介绍
**BangonPilipinas** 是一款面向菲律宾的灾害响应 Web 应用:市民可以报告事件并发送 SOS,响应人员可以实时调度,管理员可以在实时仪表板上查看全貌。我们的核心差异化在于:**我们自己的 REST API**(不仅仅是现成的 Supabase)以及一个**你不仅能打字还能与其进行语音通话的 AI 机器人**——全部基于免费的 AI 构建。
## 概念图
```
CITIZENS
(report / SOS / view alerts)
│
▼
┌─────────────────────────────────────────────┐
│ BANGONPILIPINAS APP │
│ React + TypeScript + MUI (frontend) │
│ Login · Dashboard · Live Map · SOS · │
│ Report Incident · My Reports · Weather · │
│ Earthquake · AI Assistant · Notifications │
│ Responder · Admin │
└──────────────┬──────────────────────────────┘
│ fetch() → JSON (our API)
▼
┌─────────────────────────────────────────────┐
│ OUR OWN REST API (the USP) │
│ Node/Express (or Supabase Functions) │
│ /auth · /reports · /sos · /missions · │
│ /notifications · /ai/chat · /ai/call │
└───┬─────────────────────────────┬───────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌──────────────────────────────┐
│ DATABASE │ │ EXTERNAL DATA │
│ Postgres/Supabase │ │ USGS → earthquakes │
│ users · reports │ │ Open-Meteo → weather │
│ sos · missions │ │ Overpass → hospitals etc │
└──────────────────────┘ │ OSRM → driving routes│
└──────────────────────────────┘
AI LAYER (free, via OpenRouter):
OpenRouter API → Ling-flash-2.0 / ling-3.0-flash:free (LLM brain)
Voice call = browser speech (Web Speech API) + LLM, no phone needed
RESPONDERS ADMIN
(claim + update status) (stats, charts, oversight)
```
## 功能图
| 功能 | 市民 | 响应人员 | 管理员 | 目前状态 |
|---|---|---|---|---|
| 登录 / 注册 | ✅ | ✅ | ✅ | Mock → 黑客松实现的后端 |
| 仪表板(警报、统计、实时地图) | ✅ | | | 已构建(Mock 数据) |
| 实时地图(附近的医院/警察局/消防局/避难所) | ✅ | ✅ | | 已构建(真实的 OSM 数据) |
| 报告事件(类型、严重程度、地图定位) | ✅ | | | 已构建(Mock 数据) — 描述支持**语音转文字听写** |
| SOS(发送警报 + 位置) | ✅ | | | 已构建(Mock 数据) |
| 我的报告 / 追踪状态时间线 | ✅ | | | 已构建(Mock 数据) |
| 天气 + 地震监控 | ✅ | | | 已构建(真实的 USGS/Open-Meteo) |
| 通知(红点提醒、已读/未读) | ✅ | ✅ | ✅ | 已构建(Mock 数据) |
| AI 助手(安全提示) | ✅ | | | 已构建(基于规则) → **升级:情境感知聊天 + 语音通话 + 自动升级上报** |
| 响应人员调度 + 任务导航 | | ✅ | | 已构建(Mock,真实的 OSM 路线规划) |
| 管理员监控 + 图表 | | | ✅ | 已构建(Mock 数据) |
## 我们的 REST API(核心卖点)
我们构建了自己的 REST API,以便团队可以控制业务逻辑——而不仅仅是使用现成的 Supabase。前端通过 `fetch()` 调用我们的 endpoint;底层数据库依然使用 Postgres/Supabase。
| Endpoint | 用途 |
|---|---|
| `POST /api/auth/login · register` | 身份验证(封装 Supabase auth) |
| `GET/POST /api/reports` | 提交 + 列出事件报告 |
| `POST /api/sos` | 带有位置的紧急警报 |
| `GET/PATCH /api/missions` | 响应人员调度 + 状态更新 |
| `GET/PATCH /api/notifications` | 通知,已读/未读 |
| `POST /api/ai/chat` | 与 AI 机器人文字聊天(OpenRouter → Ling-flash-2.0) |
| `POST /api/ai/call` | 语音通话回合 — 发送情况 + 对话记录,返回机器人回复 |
| `PATCH /api/reports/{id}/ai-summary` | 通话结束后:保存对话记录 + 提取的事实 + 严重程度升级上报 |
## AI 热线语音通话 — 流程
```
SITUATION BUILT → SOS pressed (GPS) OR incident reported (category/severity/desc/GPS)
│
▼
"CALL AI HOTLINE" → full-screen call UI (no real phone, no telecom, no money)
│
▼
1. CONNECT → bot speaks the situation back:
"This is a CRITICAL FIRE report at your location. Are you safe?"
(TTS = browser speechSynthesis, free)
│
▼
2. TALK → citizen holds the mic and speaks
(Web Speech API "dictation" turns audio → text, free in Chrome/Edge)
│
▼
3. THINK → POST /api/ai/call { context, conversation }
system prompt = disaster-safety rules + THE SITUATION
→ OpenRouter → Ling-flash-2.0 / ling-3.0-flash:free (free LLM)
│
▼
4. REPLY → bot speaks situation-specific guidance
(reuses per-category safety tips) + asks checklist questions:
"How many people are trapped? Anyone injured?"
│
▼
5. LOOP steps 2–4 → citizen ends the call
│
▼
6. ACT → AI does something with what it heard:
• extracts facts (trapped=2, 1 injured, gas smell)
• PATCH /api/reports/{id}/ai-summary → saved to the report
• auto-ESCALATES severity (hears "unconscious" → Critical)
• transcript added to the report timeline
│
▼
RESPONDER sees enriched mission: "AI Call Summary — 2 trapped, 1 injured, gas leak"
```
## 为什么语音系统成本为零
| 任务 | 工具 | 免费的原因 |
|---|---|---|
| 听(音频 → 文字) | Web Speech API 听写 | 内置于 Chrome/Edge/Safari — 浏览器直接转写,无需 API key |
| 想(文字 → 回答) | OpenRouter → `ling-flash-2-0` / `inclusionai/ling-3.0-flash:free` | 只需一个免费 API key;模型为开源 |
| 说(文字 → 音频) | `speechSynthesis` | 内置于所有浏览器,无限次,本地运行 |
| 记忆 + 行动 | 我们的 REST API + Postgres | 我们自己的代码 |
所谓的“热线”是应用内的语音聊天,而不是真正的电话通话——不需要 Twilio/SMS/电信服务。适用于带有麦克风和网络连接的 Chrome/Edge 浏览器。Firefox → 回退为文字聊天。
## AI 机器人聊天 + 语音通话(运作方式,全免费)
- **大脑:** OpenRouter 免费模型 — `inclusionai/ling-3.0-flash:free`(2026 年 8 月 3 日前免费)或 `ling-flash-2.0`(非常便宜)。只需一个 API key,兼容 OpenAI 的 `POST /v1/chat/completions`。
- **文字聊天:** `POST /api/ai/chat` → OpenRouter → 回复显示在聊天 UI 中(已存在于 AI 助手页面)。
- **语音通话(“与机器人交谈”):** 无需电话服务 — 浏览器 **Web Speech API**(`SpeechRecognition` 负责听你说话,`speechSynthesis` 负责回复语音)→ 音频文本发送至同一个 OpenRouter endpoint。适用于桌面版 Chrome/Edge;这是适合黑客松的稳妥方案。
- **安全防护:** system prompt 将机器人锁定在灾害响应主题内(安全提示、应对措施、最近的求助点、冷静的指导)。
## 端到端的功能流程(示例:报告 → 响应)
1. 市民在地图上定位并提交报告 → 保存至 `reports`
2. 仪表板和响应人员信息流实时更新(Supabase Realtime)
3. 响应人员接单 → 状态变为 `en_route` → 使用 OSRM 导航前往
4. 标记为 `on_scene` → `resolved` → 市民在“我的报告”中看到状态
5. 每一步都会向相关用户发送通知
## 团队角色(建议的分工)
| 角色 | 负责内容 |
|---|---|
| **前端 (2)** | 页面、表单、地图集成、调用我们的 REST API |
| **后端 (1–2)** | 我们的 REST API(Express 或 Supabase Functions)、DB schema、auth、realtime |
| **AI (1)** | OpenRouter key、`/api/ai/chat` + `/api/ai/call`、Web Speech API、prompt 调优 |
| **数据 (1)** | USGS / Open-Meteo / Overpass / OSRM endpoint、错误处理 |
| **演示(任何人)** | 5 分钟脚本:地震 → 报告 → SOS → **呼叫 AI 机器人** → 响应人员解决事件 |
## 黑客松黄金法则
- **即使后端宕机,前端也绝对不能崩溃** → 保留 mock-data 回退机制
- 演示**实时闭环**(报告 → 调度 → 解决)以及**AI 热线通话** — 这就是我们的故事:报告火灾 → 与机器人交谈 → 机器人将事件升级为“紧急 (Critical)” → 响应人员看到丰富后的任务详情
- 所有使用的外部 API 均为**免费,无需 API key**(USGS、Open-Meteo、Overpass、OSRM);OpenRouter 只需要一个免费的 key 来驱动 AI 机器人
- **没有 OpenRouter key 或麦克风?Mock 回复也能让 AI 演示继续进行** — 绝不让演示中断
- 预埋 10–20 条真实的报告数据,确保演示界面不会显得空洞
标签:AI助手, MITM代理, REST API, 实时地图, 应急调度, 灾害响应, 自动化攻击