ivan-bot-max
Max-бот «Иван»: заявки клиентов, веб-панель, рассылки
Диалоговый сценарий в мессенджере Max собирает заявку по шагам (с отложенной фиксацией, чтобы пользователь успел дописать). Параллельно — Express-панель: заказы, подписчики, массовые рассылки с вложениями, настройки и несколько ботов из одной SQLite-базы. Уведомления на почту по новым заявкам и локальный HTTP-мост между веб-процессом и воркерами ботов.
Страница портфолио: здесь только описание выполненного проекта для заказчиков и коллег. Мы не предлагаем установку программ и не запрашиваем пароли, платежи или данные карт.
# Контекст
«Нужен бот в Max, который не просто отвечает шаблонами, а ведёт клиента до заявки: части заказа, контакты, подтверждение. Чтобы заявки падали в одну базу, их можно было разбирать в панели, а подписчикам — иногда слать новости и файлы без ручного копипаста в чаты.»
# Задача
- ✓ Собрать сценарий приёма заявки в Max с состояниями и задержкой перед финальной отправкой
- ✓ Сохранять подписчиков, заказы и статусы в SQLite с индексами и эволюцией схемы по мере роста
- ✓ Сделать веб-панель: вход, заказы, рассылки, вложения, учёт доставки по каждому user_id
- ✓ Дать возможность завести несколько ботов (ключ API Max, порт уведомлений, ссылка на чат) без клонирования репозитория
- ✓ Отправлять письмо при новой заявке и не упираться в лимиты API — очередь на отправку сообщений в Max
- ✓ Учесть особенности апдейтов Max (в том числе когда user в payload приходит неполным)
# Архитектура
┌─────────────────────────────────────────────────────────────┐
│ MAX MESSENGER │
│ clients ---- dialogs ---- keyboards / attachments │
└────────────────────────────┬────────────────────────────────┘
│ @maxhub/max-bot-api + send queue
┌────────────────────────────▼────────────────────────────────┐
│ BOT WORKER (bot.js) NOTIFY HTTP (per bot) │
│ state machine | orders | subscribers | broadcast runner │
└────────────────────────────┬────────────────────────────────┘
│ better-sqlite3
┌────────────────────────────▼────────────────────────────────┐
│ SQLITE (WAL) │
│ bots | orders | subscribers | broadcasts | broadcast_files │
│ web_users | settings | ... │
└────────────────────────────┬────────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────────┐
│ WEB APP (server.js) + static public/ │
│ REST + cookies | uploads | trigger notify to bot workers │
└─────────────────────────────────────────────────────────────┘
│ SMTP (Nodemailer)
▼
order notifications
# Модули системы
Сбор заявки по шагам, таймер отложенной отправки, клавиатуры Max, вложения к заказу
Список заявок и подписчиков, смена статусов, админы рассылок, настройки в том числе per-bot
Очередь, счётчики sent/failed, файлы с безопасной отдачей по id, пинг воркера по HTTP
Таблица bots и супервизор процессов: один инстанс поднимает bot.js на каждого активного бота
Транзакционные письма по новым заявкам через настраиваемый SMTP
Абсолютные пути к .env и статике под PM2, отдельные порты notify, ключ для служебных запросов между процессами
# Технологии
# Результат
Заявки из Max оказываются в одной базе рядом с подписчиками и историей рассылок
Сценарий с отложенной отправкой снижает число обрезанных и случайных заявок
Мультибот и отдельные notify-порты дают масштабирование без дубля кода
Веб-слой и воркеры разведены процессами; к панели доступ по сессии в cookie