Мхитар Манасян bestmdidi Паспорт верифицирован
Сайты, Telegram-боты и Mini Apps - Next.js, Nest.js, Node.js
Рейтинг
46 136
№ 12 в каталоге
Отзывы
Профессионализм
10/10
Коммуникация
9 /10
Город
Москва
Опыт работы
6 лет
На сайте с
2022 года
Юридический статус
Самозанятый
Эксперт
Национальной Гильдии Фрилансеров
Freelance.Boutique
Премиум-сервис для лучших исполнителей
Безопасная сделка
Деньги списываются после приёмки

Чат-бот приёма заявок в мессенджере MAX для производства изделий из акрила: заявка с чертежами, срочный вопрос, статус заказа, чат менеджеров и админ-панель. NestJS + React

Используемые навыки Nest.js Node.js React.js Typescript Чат-боты

Описание

Заказчик - производство изделий из акрила и оргстекла на заказ (Москва). До бота заявки приходили вразнобой: звонки, почта, мессенджеры. Клиенты присылали чертежи как получится, менеджеры теряли файлы и переспрашивали контакты.

Нужен был единый вход: чат-бот в мессенджере MAX, который собирает всё нужное в одном диалоге и передаёт готовую заявку менеджерам. Отдельное требование заказчика: бот не консультирует по технике. Материалы, размеры, конструктив, цены - всегда «этот вопрос уточнит менеджер». Задача бота - дать первый ответ, собрать контакты и файлы и передать человеку, а не изображать эксперта.

Плюс рабочее место для менеджеров: видеть заявки, брать их в работу, менять статус, править тексты бота без разработчика. Срок: от заказа до работы в бою - полторы недели.

Решение

Сделал бота, чат менеджеров и админ-панель как один продукт на Node.js и TypeScript: сервер на NestJS с Prisma и SQLite, панель на React (Vite, Ant Design).

Бот: три сценария кнопками в меню.

- Заявка на расчёт: пять вопросов по одному (телефон, почта, город и адрес доставки, имя и компания, описание задачи), необязательные пропускаются кнопкой. Затем приём файлов: чертежи, 3D-модели, фото, документы - до 10 файлов по 20 МБ. Шаг согласия на обработку персональных данных, и только после него создаётся заявка с номером.

- Срочный вопрос: укороченный сценарий на три шага (суть, телефон, имя), чтобы быстрее свести человека с живым менеджером. Кнопка выключается из панели, когда менеджеры перегружены.
- Статус заказа: клиент вводит номер заявки или почту, бот находит обращение и уведомляет менеджера.

Бот знает рабочие часы (9:00-18:00, пн-пт, Москва) и в нерабочее время честно предупреждает, когда ответят.

Работа менеджеров. Готовая заявка уходит в групповой чат карточкой: контакты, задача, список файлов, кнопка «Взять в работу». Кто первый нажал, тот и ведёт клиента: карточка перерисовывается и показывает исполнителя, менеджер заводится в системе автоматически при первом нажатии. Файлы клиента приходят в тот же чат вложениями. Если заявку никто не взял, бот напоминает с нарастающим интервалом.

Админ-панель: список заявок с поиском по номеру, имени, телефону, почте и компании, фильтры по статусу и типу, пометка «пришла в нерабочее время»; карточка заявки с правкой контактов, историей изменений, примечаниями и скачиванием файлов; статусы (новая, взята в работу, идёт расчёт, закрыта, отменена); выгрузка в Excel; удаление с подтверждением и счётчик занятого места; переключатели «сегодня работаем» и «приём срочных вопросов». Редактор текстов бота: 19 фраз (приветствие, вопросы, подсказки, подтверждения, отказы) заказчик правит сам, бот говорит по-новому сразу, без перезапуска.

Технически интересное.

- MAX Bot API - новая платформа с сырой документацией, каждое утверждение проверял на живом API: токен без префикса Bearer, строковые идентификаторы сообщений, отрицательный ID группового чата, который узнаётся только из события, клавиатура вложением, ответ на кнопку без пустого тела.

- API мессенджера отдаёт сертификат российского удостоверяющего центра, которого нет в стандартных хранилищах доверия. Корневой сертификат добавлен в систему явно, проверка не отключалась: через это соединение идут токен и персональные данные.

- Загрузка файлов в мессенджер в два шага, вложение «дозревает» на их стороне, отправка повторяется с нарастающей задержкой.

- Два транспорта за одним интерфейсом: webhook и long polling переключаются одной строкой, остальной код о транспорте не знает. Перенос бота в другой мессенджер - новый транспортный слой, а не новый проект.

- Очередь событий по пользователям: сообщения одного человека обрабатываются строго по порядку, разные люди друг друга не ждут.

- Форма задаётся конфигом, а не кодом: заказчик менял состав полей пять раз за две недели, каждый раз это правка нескольких строк. Тест следит, чтобы новое поле нельзя было завести без отображения в карточке менеджера и в выгрузке.

- 152-ФЗ: явный шаг согласия, база на сервере в России, файлы под обезличенными именами, отдача только вложением с запретом угадывания типа, написана политика обработки персональных данных.

Инфраструктура: Ubuntu на VDS в Москве, systemd с автоперезапуском, nginx, Let's Encrypt, ufw; у технического домена бота наружу один путь приёма событий, остальное отдаёт 404. С сервера заказчика недоступны GitHub и стандартный реестр пакетов: выкладка синхронизацией с машины разработчика, зависимости с зеркала, сертификат по DNS-подтверждению.

Результат

Заявки идут одним потоком: клиент в MAX за пять вопросов оставляет контакты и чертежи, менеджеры получают готовую карточку в чат и забирают её одной кнопкой, ничего не теряется и не переспрашивается. Бот в бою у заказчика с 8 августа 2026, от заказа до запуска - полторы недели.

Цифры: 3 900 строк на сервере и 900 в панели без учёта тестов, 17 модулей, 8 таблиц в базе, 52 автоматических теста, которые проходят без доступа к мессенджеру, 19 фраз бота, редактируемых заказчиком без разработчика.

Что дальше: этот же бот переносится в Telegram. Код общий, база и панель одни, заявки из обоих мессенджеров лягут в один список.

Ссылка на бота публичная и согласована с заказчиком. Скриншоты в портфолио сделаны на тестовой базе с выдуманными данными.

Оценили проект:

Другие проекты

Все проекты →
Веб-разработка и IT PropFirmWay - платформа для сравнения проп-трейдинговых фирм: каталог челленджей, рейтинги и отзывы трейдеров, AI-скрейпер, SEO-ядро | Next.js, Nest.js, Node.js
PropFirmWay - платформа для сравнения проп-трейдинговых фирм: каталог челленджей, рейтинги и отзывы трейдеров, AI-скрейпер, SEO-ядро | Next.js, Nest.js, Node.js
162
Веб-разработка и IT Trenergy - SaaS для фитнес-тренеров: Telegram Mini App, бот и панель управления. Тренировки, питание с КБЖУ, прогресс, чаты, оплата | React.js, Nest.js, Node.js
Trenergy - SaaS для фитнес-тренеров: Telegram Mini App, бот и панель управления. Тренировки, питание с КБЖУ, прогресс, чаты, оплата | React.js, Nest.js, Node.js
93
Веб-разработка и IT CommerceAPI - SaaS-платформа для интернет-магазинов с динамическим ORM и no-code конструктором каталогов | Next.js, Nest.js, PostgreSQL, Redis
CommerceAPI - SaaS-платформа для интернет-магазинов с динамическим ORM и no-code конструктором каталогов | Next.js, Nest.js, PostgreSQL, Redis
155
Веб-разработка и IT TMS для американской грузоперевозочной компании: рейсы и документы, мобильные экраны водителя, расчёт зарплат и P&L-отчёты. Fullstack на NestJS + React, PostgreSQL, TypeScript
TMS для американской грузоперевозочной компании: рейсы и документы, мобильные экраны водителя, расчёт зарплат и P&L-отчёты. Fullstack на NestJS + React, PostgreSQL, TypeScript
22