一个简洁优雅的挪车通知服务,通过网页输入车牌号,系统自动向 Telegram 群组发送挪车通知,并支持重复提醒直到车主响应。
- 🎨 舒缓配色设计 - 青绿粉色渐变,缓解用户焦急情绪
- 📱 响应式界面 - 完美适配 PC 端和移动端
- 🔤 智能车牌输入 - 省份字块选择 + 车牌号输入,避免输入法冲突
- ✅ 车牌验证 - 格式验证 + 白名单验证
- 🔔 智能通知 - 授权车牌重复通知,非授权车牌单次通知
- 📍 位置追踪 - 自动记录提交者 IP、地理位置、设备信息
- 🤖 Telegram 集成 - 实时推送通知到 Telegram 群组
- 📊 数据记录 - SQLite 数据库记录所有通知历史
- 🐳 Docker 部署 - 一键启动,开箱即用
- 🔗 二维码生成 - 方便生成网址二维码张贴车窗
- 省份字块选择器 - 31个省份字块,点击选择
- 车牌输入框 - 省份显示 + 车牌号输入
- 实时通知 - Telegram 推送包含位置和设备信息
- Docker & Docker Compose
- Telegram Bot Token
- Telegram 群组/频道 ID
git clone <repository-url>
cd CarAlertcp .env.example .env编辑 .env 文件:
# Telegram Bot配置
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_CHAT_ID=your_chat_id_here
TELEGRAM_BASEURL=https://api.telegram.org
# 有效车牌号列表(用逗号分隔)
VALID_LICENSE_PLATES=粤BB8888,京A12345
# 默认省份
DEFAULT_PROVINCE=粤
# 通知间隔(秒)
NOTIFICATION_INTERVAL=60
# 服务端口
PORT=3080docker compose up -d打开浏览器访问:http://localhost:3080
- 在 Telegram 中搜索
@BotFather - 发送
/newbot创建新 Bot - 按提示设置 Bot 名称和用户名
- 复制获得的 Bot Token
方法1:使用 Bot
- 将 Bot 添加到目标群组
- 在群组中发送任意消息
- 访问:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates - 在返回的 JSON 中找到
chat.id
方法2:使用第三方 Bot
- 添加
@userinfobot到群组 - Bot 会自动显示群组 ID
确保 Bot 在群组中有以下权限:
- ✅ 发送消息
- ✅ 接收消息
- 访问网页
- 点击选择省份字块
- 输入车牌号码(如:B12345)
- 可选:填写联系电话
- 点击"发送通知"
在 Telegram 群组中回复:
/d
系统会停止重复通知并标记为已处理。
- 授权车牌:每隔设定时间重复通知,直到收到
/d响应 - 非授权车牌:用户侧报错,实际上也会发送通知,但发送一次通知,自动标记为已完成
| 变量名 | 说明 | 默认值 | 必填 |
|---|---|---|---|
TELEGRAM_BOT_TOKEN |
Telegram Bot Token | - | ✅ |
TELEGRAM_CHAT_ID |
群组/频道 ID | - | ✅ |
TELEGRAM_BASEURL |
Telegram API 地址 | https://api.telegram.org | ❌ |
VALID_LICENSE_PLATES |
有效车牌列表(逗号分隔) | - | ✅ |
DEFAULT_PROVINCE |
默认省份 | 粤 | ❌ |
NOTIFICATION_INTERVAL |
通知间隔(秒) | 60 | ❌ |
PORT |
服务端口 | 3080 | ❌ |
在 .env 中配置有效车牌号:
VALID_LICENSE_PLATES=粤BB8888,京A12345,沪C67890只有白名单中的车牌才会触发重复通知。
系统使用 SQLite 数据库存储通知记录:
data/notifications.db
数据表结构:
id- 记录IDlicense_plate- 车牌号is_valid- 是否为授权车牌created_at- 创建时间responded_at- 响应时间status- 状态(pending/completed)ip_address- 提交者IPlocation_info- 地理位置信息user_agent- 浏览器信息device_info- 设备信息
CarAlert/
├── public/ # 前端静态文件
│ ├── index.html # 主页面
│ ├── style.css # 样式文件
│ └── script.js # 前端逻辑
├── utils/ # 工具类
│ └── locationService.js # 地理位置服务
├── data/ # 数据目录
│ └── notifications.db # SQLite 数据库
├── server.js # 后端服务
├── package.json # 依赖配置
├── Dockerfile # Docker 镜像
├── docker-compose.yml # Docker Compose 配置
├── .env # 环境变量
└── README.md # 项目文档
# 安装依赖
npm install
# 启动开发服务器
npm start
# 或使用 nodemon 自动重启
npm run dev提交车牌通知
POST /api/notify
Content-Type: application/json
{
"licensePlate": "粤BB8888",
"contactPhone": "13800138000" // 可选
}
获取通知历史
GET /api/notifications
获取系统配置
GET /api/config
docker compose builddocker compose up -ddocker compose logs -fdocker compose downdocker compose restart- ✅ 检查
TELEGRAM_BOT_TOKEN是否正确 - ✅ 确认 Bot 已添加到群组
- ✅ 验证
TELEGRAM_CHAT_ID是否正确 - ✅ 确保 Bot 有发送消息权限
- ✅ 确保
data目录存在 - ✅ 检查目录写权限
- ✅ 查看容器日志排查错误
# 修改 .env 中的 PORT 配置
PORT=8080
# 重启服务
docker compose restart- ✅ 检查网络连接
- ✅ 确认 IP-API 服务可访问
- ✅ 查看后端日志
- ✨ 初始版本发布
- 🎨 舒缓配色设计
- 📱 响应式界面
- 🔤 省份字块选择器
- 📍 位置信息追踪
- 🤖 Telegram 集成
- 🐳 Docker 支持
欢迎提交 Issue 和 Pull Request!
有 Telegram 和服务器的车主。
⭐ 如果这个项目对你有帮助,请给个 Star!