Что это
Библиотека на Python для ботов Telegram. Отвечает за приём сообщений, кнопки и сценарии; сам бот, его база и интеграции пишутся поверх неё.
Как используем
Основа всех наших Telegram-ботов: продажи подписок, тикет-система, финансовый ассистент. Бот запускается в контейнере на сервере заказчика.
Где это важно бизнесу
Сам aiogram заказчик не видит, но от него зависит, как бот себя ведёт:
- бот отвечает многим людям одновременно, пока чей-то тяжёлый запрос ещё выполняется;
- сотрудник видит только меню своей роли, а заблокированный пользователь не попадает в меню вовсе;
- оформление заявки идёт по шагам, и бот помнит, на каком шаге человек остановился;
- бот работает без открытого порта и публичного адреса.
Как мы это используем
- Роли через middleware. В электронной очереди роль читается из базы перед каждым обработчиком, поэтому студент физически не видит меню старосты. Там же защита от частых нажатий: не больше одного запроса в 0,5 секунды. В тикет-системе так же подставляются четыре роли.
- Пошаговые диалоги (FSM). Запись дня рождения, заявка в IT-отдел, создание очереди — машина состояний помнит шаг диалога. В тикет-системе незаконченные диалоги лежат в Redis и переживают перезапуск.
- Polling или webhook. Бот продажи подписок по умолчанию сам опрашивает Telegram, а режим webhook включается настройкой. Бот входа в «Переговорку» работает на long polling, потому что публичного адреса у него нет.
- Тяжёлую работу — в сторону. В боте для полисов обработка PDF идёт в отдельном потоке, в боте загрузки видео yt-dlp и FFmpeg — в отдельных процессах, а число одновременных загрузок ограничено.
- Версия на виду. Версия бота пишется в лог при старте, а скрытая команда
/version показывает её только администратору: видно, что на самом деле запущено на сервере.
Ботов на aiogram делаем в разделе Боты для Telegram и ВКонтакте.
Типичные проблемы
- Состояния в памяти пропадают. В боте дней рождений и электронной очереди незаконченный диалог после перезапуска начинается заново. Если это критично, состояния переносятся в Redis.
- Один экземпляр. Когда состояния и ограничение частоты хранятся в памяти процесса, бот рассчитан на один запущенный экземпляр.
- Блокирующий код вешает всех. Долгая операция в основном потоке задерживает ответы всем пользователям, поэтому её выносят в поток или процесс.
- Права проверяются на сервере. Скрытая команда должна отвечать чужому как на опечатку, а не «у вас нет прав».
Когда это не нужно
Если вы хотите бота, которого будете править сами в визуальном конструкторе, aiogram не подойдёт: это код. Для простой рассылки или уведомления о заявке иногда хватает сценария в n8n без отдельного бота.