Задача
Клиент — небольшой оптовый поставщик строительных материалов. Менеджеры тратили 3–4 часа в день на одни и те же вопросы в мессенджерах: «А сколько стоит?», «Когда привезёте?», «Есть ли в наличии?». Потенциальные заказы уходили конкурентам пока менеджер спал.
Задача: снять рутинную нагрузку с менеджеров и дать клиентам возможность делать заказы в любое время без ожидания.
Решение
За 5 рабочих дней собрал бота на Node.js + Telegraf с MongoDB. Вот что получилось:
- ◆Каталог с ценами — бот подтягивает актуальные цены из базы. Менеджер обновляет прайс через команду /update, клиент видит актуальные данные мгновенно.
- ◆Проверка наличия — синхронизация с таблицей остатков через Google Sheets API. Клиент спрашивает — бот отвечает сразу.
- ◆Оформление заявки — пошаговый диалог: товар → количество → адрес → контакт. Заявка падает менеджеру с уведомлением.
- ◆Оплата депозита через ЮКасса — для постоянных клиентов, чтобы зафиксировать товар.
Стек
- ◆Node.js + Telegraf 4 — основа бота
- ◆MongoDB Atlas — каталог, заявки, пользователи
- ◆Google Sheets API — синхронизация остатков
- ◆ЮКасса — приём депозитов
Подводные камни
Кэш inline-клавиатур
Telegraf кэширует кнопки на стороне клиента. Если цена изменилась — кнопки показывают старые данные. Решение: добавил timestamp к callback_data.
Rate limits Telegram
При рассылке 300+ пользователей бот упирался в лимиты API. Добавил очередь с задержкой 50ms между сообщениями — проблема ушла.
Конкурентные обновления
Два менеджера могут одновременно подтвердить заказ одного товара. Добавил atomic updateOne с условием на статус заявки.