# Контекст
В логистике всё держится на предсказуемости: машина должна выйти в рейс, доехать, вернуться и снова быть готовой к работе. На деле же каждая поломка начиналась одинаково: звонок, голосовое, сообщение в общем чате.
Кто‑то записал проблему в таблицу, кто‑то забыл, кто‑то «обязательно занесёт потом». Через пару месяцев никто не мог честно ответить на вопрос:
# Задача
Заказчику нужен был не очередной «портал для галочки», а рабочий инструмент:
# Архитектура
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ ВОДИТЕЛИ │ │ МЕХАНИКИ │ │ ЛОГИСТЫ │ │ РУКОВОДСТВО │
│ (MAX Bot) │ │ (Web Panel) │ │ (Web Panel) │ │ (Web Panel) │
└──────┬─────┘ └──────┬─────┘ └──────┬─────┘ └──────┬─────┘
└───────────────┴───────┬───────┴───────────────┘
│
┌────────────▼────────────┐
│ REST API │
│ Express.js + RBAC-auth │
└────────────┬────────────┘
┌────────────────────┼────────────────────┐
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ SQLite DB │ │ Медиа (Multer) │ │ Уведомления │
│ заявки·авто·ТО │ │ фото/видео │ │ → MAX-бот │
└────────────────┘ └────────────────┘ └────────────────┘
# Решение
→ Бот для водителей
- Работает в MAX — там, где команда общается каждый день
- Пошаговый сценарий: номер авто → пробег → тип → описание
- Фото и видео поломки прикрепляются прямо из чата
- Регулярные опросы состояния авто (чек-ины) — бот сам спрашивает водителя
- Режим механика: просмотр и закрытие поломок по номеру авто
- Для водителя это диалог, для системы — структурированная заявка с ID
→ Веб-панель: 11 модулей для механиков, логистов и руководства
# Как выглядит панель
Стилизованные мокапы ключевых экранов веб-панели. Данные условные — для демонстрации структуры интерфейса.
| # | Авто | Проблема | Тип | Статус |
|---|---|---|---|---|
| 1847 | А012ВХ23 | Стук в подвеске спереди слева | не электрика | Активна |
| 1846 | В884КС23 | Не работают габариты | электрика | Активна |
| 1845 | Е551МР123 | Замена тормозных колодок | не электрика | Исправлено |
| 1844 | К203ОТ23 | Течь антифриза | не электрика | Исправлено |
ТО: 12.06.2025
электрика: ок
ТО: 28.05.2025
в ремонте
ТО: 04.06.2025
след. ТО через 1 240 км
// демонстрационный интерфейс — реальные данные клиента не публикуются
# Технические особенности
notifications
Уведомления админов через MAX-бота с гибкой настройкой событий и шаблонов
media
Загрузка фото/видео поломок (Multer), хранение и привязка к заявкам
scheduler
Планировщик опросов водителей и очередь отправки сообщений в бота
rbac
Ролевой доступ (admin/mechanic/driver/accountant), пароли через bcrypt
database
SQLite (better-sqlite3): индексы по ключевым полям, история пробега и ТО
reliability
PM2 + watchdog-скрипт: автоперезапуск бота и контроль доступности
frontend
SPA-подход на Fetch API без тяжёлых фреймворков, тёмная/светлая тема
scaling
План миграции на PostgreSQL при росте нагрузки
# Результат
Заявки перестали теряться в чатах: у каждой есть ID, статус, автор
Руководство увидело реальную картину: какие машины тянут бюджет вниз
Водителям не нужно осваивать новый интерфейс — просто пишут боту
У механиков появился единый инструмент вместо десятка чатов
Плановое ТО и опросы водителей перевели парк из режима «тушим пожары» в профилактику
Фото и видео в заявках убрали споры «было/не было» при приёмке работ