Инженерная база
Что внутри любого нашего бота
Бот — это обычный backend-сервис, у которого вместо веб-формы Telegram. Поэтому несущие части в проекте за 25 000 ₽ и в проекте за 250 000 ₽ одни и те же — те же, что в нашей ERP-платформе, только меньшего масштаба.
Роли и права
Администратор, модератор, кассир и обычный пользователь видят разные меню. Право проверяется на сервере в каждом обработчике, а не прячется невидимой кнопкой.
middleware · проверка роли до действия
PostgreSQL как хранилище
Клиенты, баллы, заявки и настройки лежат в реляционной базе с вашей схемой, ограничениями и миграциями. Не в памяти процесса и не в таблице, которую однажды кто-то отсортирует не по тому столбцу.
миграции · бэкап · прямой SQL-доступ
Админка
Тексты, кнопки, правила начисления, расписание уроков и список модераторов меняются через веб-панель. Правка контента не должна требовать разработчика и выкладки новой версии.
веб-панель на вашем домене
Фоновые задачи и очереди
Рассылка, сборка отчёта и обращение к чужому API уходят в очередь. Диалог не подвисает на ожидании ответа, а упавшая задача повторяется с задержкой вместо тихой потери.
Celery / asynq · повторные попытки
Рассылки по сегментам
Сегмент собирается запросом к базе: кто не приходил давно, у кого сгорают баллы, кто не открыл третий урок. Отправка идёт с ограничением скорости, чтобы не упереться в лимиты Telegram и не потерять часть сообщений.
сегмент · расписание · статус доставки
Выгрузки в Excel и таблицы
Любой список — клиенты, начисления, заявки, участники чата — выгружается в Excel с применённым фильтром. Если отчётность живёт в таблицах, отдаём данные в Google Таблицы и Яндекс Таблицы по API.
xlsx · Google Sheets API
Идемпотентность обработчиков
Telegram может доставить один и тот же апдейт дважды, а человек — нажать кнопку три раза подряд. Операции защищены ключом идемпотентности, поэтому повтор не создаёт вторую заявку и не начисляет баллы заново.
ключ операции · уникальный индекс в базе
Логи и журнал действий
По каждому пользователю видно, что он нажимал, что ответил бот и чем закончилась операция. Когда клиент спорит про списанные баллы, спор решается выпиской из журнала, а не догадками.
структурные логи · журнал операций