Чат-боты — это программное обеспечение, которое имитирует общение с пользователями. Сейчас их используют для совершенно любых целей: это может быть простой справочник или сложный сервис с интеграцией в CRM и платежные системы.
Ботов создают для разных мессенджеров. У каждой платформы — свои правила и возможности: где-то нет оплаты, где-то нет гибких клавиатур. В статье говорим о Telegram: он удобен, у него простой API и активная аудитория.
В этой статье мы расскажем:
- как создать чат бот в Телеграме самостоятельно,
- когда удобно использовать конструкторы для разработки,
- как интегрировать чат-бот с внешними сервисами и API,
- что необходимо для бесперебойной работы бота,
- основные функции
aiogram— популярной библиотеки для разработки чат-ботов на Python.
Создание чат-бота в Телеграме без навыков программирования
Сейчас всё более интенсивно набирают популярность конструкторы — это сервисы, где бота собирают через понятный интерфейс «drag-and-drop». Для работы с ними совсем не нужно знать языки программирования. Можно просто выстраивать логику блоками, как в детской игре.
Существуют недостатки подобных решений:
-
Ограниченная функциональность. Большинство конструкторов предлагает пользователям лишь часть функционала Telegram API. Например, интеграция со сторонними сервисами через HTTP-запросы есть не у всех. А те, кто имеет такой функционал, предлагают завышенные тарифы.
-
Одинаковые сценарии. Минимальная гибкость конструкторов приводит к тому, что все боты на конструкторе выглядят и работают одинаково.
-
Зависимость от сервиса. Если платформа «ляжет» или внезапно подорожает, придется переносить бота.
Конструкторы весьма удобны для прототипов и простых сценариев — приветственное сообщение, ответ на пару вопросов, сбор контактных данных. Более сложные алгоритмы требуют знания переменных, логики обработки данных и функционала Telegram API. Даже в конструкторе нужно понимать, как обратиться к пользователю по имени, как работают inline-клавиатуры и обработка состояний.
Зачастую бесплатные версии таких сервисов имеют ограничения: добавляют свои рекламные сообщения, запрещают интеграцию с нужными API или накладывают лимиты на количество пользователей. Это снижает лояльность аудитории, а сам чат-бот может остаться неиспользуемым. Платные версии в перспективе обходятся дороже, чем разработка бота с нуля и его размещение на сервере.
Если чат-бот должен решать реальные бизнес-задачи, автоматизировать процессы или работать с базами данных, конструктора зачастую будет недостаточно. В таком случае проще обратиться к разработчику: он сразу заложит гибкую архитектуру, подберет оптимальные технологии и избавит от технических ограничений, которые могут стать проблемой при масштабировании проекта. В качестве технического задания для разработчика можно использовать алгоритм из конструктора, если он уже есть.
Как создать чат-бота в Телеграме самостоятельно
Теперь обсудим создание чат-бота в Telegram на языке программирования Python. Для работы понадобятся базовые знания о переменных, условных конструкциях, циклах и функциях в Python.
Для разработки чат-ботов чаще всего используют фреймворк — это набор инструментов, библиотек и готовых решений, которые помогают разрабатывать программное обеспечение. Можно использовать чистый Telegram API и реализовывать функционал на HTTP-запросах. Но всё это — тысячи строк кода даже для простых задач.
В статье будем использовать фреймворк aiogram — один из самых популярных фреймворков для разработки чат-ботов в Telegram на Python.
Шаг первый. Создайте виртуальное окружение проекта
Использовать виртуальное окружение в любом проекте на Python считается хорошим тоном. К тому же, чат-боты зачастую устанавливаются на облачных серверах, где потребуется установка зависимостей. Удобно экспортировать список зависимостей, принадлежащих конкретному проекту, поможет виртуальное окружение.
О создании виртуального окружения мы рассказывали в нашей инструкции.
Шаг второй. Установите зависимые библиотеки
Установите саму библиотеку фреймворка через pip:
Добавьте библиотеку для работы с переменными окружения. Мы рекомендуем использовать этот способ передачи токенов в любом проекте, даже если вы не планируете выкладывать его в открытый доступ. Это снижает риск случайной публикации конфиденциальных данных.
Далее можете установить другие зависимости по необходимости.
Шаг третий. Инициализируйте чат-бота через BotFather
Несложный этап, но зачастую именно он вызывает затруднения. Нам самим нужно обратиться к чат-боту, который создаст и пришлет токен нашего проекта.
Перейдите в Телеграм в диалог с @BotFather и нажмите кнопку «Начать».

Бот выдаст приветственное сообщение. Отправьте следующую команду:
Бот спросит название будущего бота, которое будет отображаться в списке чатов пользователя.
Далее нужно ввести имя пользователя (username) бота. Оно должно быть уникальным, чтобы любой пользователь смог найти его в поиске Телеграма. Обратите внимание, что имя пользователя должно оканчиваться на «bot».

Всё готово: BotFather создал чат-бота, присвоил ему имя пользователя и токен.
Внимание! Всегда храните токен в секрете. По нему любой человек сможет писать сообщения от лица вашего чат-бота. Если токен мог быть скомпрометирован, немедленно замените его в BotFather.
Перейдите в чат с только что созданным ботом и нажмите на кнопку «Изм.» (1), чтобы поменять фотографию (2), приветствие (3), описание (4) и предложение команд по умолчанию (5).

Далее создайте файл окружение с названием .env (файл не имеет имени, а название содержит только расширение). Добавьте в файл строку в формате:
В Linux и MacOS для быстрой записи можно использовать команду:
App Platform
и тестирования проектов из GitHub, GitLab, Bitbucket
или любого другого git-репозитория.
Шаг четвертый. Создание скрипта
В рабочей директории создайте файл main.py — тут будет вестись основная работа.
Импортируйте в файл тестовый код, который отправит пользователю приветственное сообщение при получении команды /start.
В примере основные компоненты закомментированы — изучите эти краткие пояснения, если не желаете вникать более глубоко. Можно продолжить узнавать функционал библиотеки aiogram, приняв использование Dispatcher, Router как данность. Далее в статье разберем функционал этих компонентов.
Для начала любого проекта можно использовать эту готовую структуру: по ходу разработки будут добавляться новые обработчики, клавиатуры, состояния.
Шаг пятый. Запуск и проверка работоспособности
Запустите созданный скрипт:
Теперь можно проверить открыть диалог с ботом и начать его:

Обзор основного функционала фреймворка aiogram версии 3.x
Для создания чат-бота в Телеграм необходимое знание немногих компонентов и функций.
В этом разделе будет использоваться версия aiogram v3.x, выпущенная 1 сентября 2023 года. Подойдет любая версия, начинающаяся с тройки. Проекты с версиями ниже встречаются в работе, но aiogram 2.x считается устаревшим.
Ключевые компоненты aiogram
Bot
Bot — это ваш интерфейс к Telegram API. Через него вы отправляете сообщения, картинки и другие данные пользователям.
Токен, разумеется, можно передать напрямую в аргументы класса Bot, без использования переменных окружения. Но мы рекомендуем сразу привыкать к именно такому способу передачи токена бота, во избежание случайного попадания токена в открытый доступ.
Процесс получения токена описан в третьем шаге предыдущего раздела.
Dispatcher
Dispatcher — «сердце» фреймворка. Он принимает апдейты (входящие сообщения и события) и передает их нужным обработчикам. В v3 используется новая схема с Router (см. ниже), но Dispatcher остается для инициализации и запуска.
Router
В aiogram v3 обработчики группируют в Router. Это отдельная сущность, которая хранит логику — хендлеры команд, сообщений, колбэков и т.д.
router = Router()
Потом разработчики регистрируют хендлеры внутри роутера и добавляют router в экземпляр Dispatcher:
Обзор возможностей фреймворка aiogram v3.x
Знание следующих инструментов и умение их использовать позволит разработчику реализовать большинство алгоритмов чат-ботов.
Обработка команд
Самый популярный сценарий — реагировать на команды вроде /start или /help.
F.text == "/start" — это новый способ фильтрации сообщений через объект F.
message.answer(...) отправляет ответ пользователю.
Обработка обычных сообщений
Для реакции на любое сообщение уберите фильтр или сделайте другой:
В этом примере бот возвращает текст, который прислал пользователь.
Inline-кнопки и клавиатуры
Когда пользователь нажмет кнопку, бот получит callback_data="press_button" — обработать это можно отдельно:
Визуально в чате inline-кнопки выглядят так:

Обычные кнопки (Reply Keyboard)
Обычные кнопки отличаются от inline-кнопок тем, что появляются вместо клавиатуры. Пользователь видит сразу список готовых вариантов для ответа. Отслеживать такие кнопки надо через текст сообщения, а не через callback_data.
Модули filters, middlewares и т.д.
Filters (фильтры) помогают гибко определять, какие сообщения ловить. Например, можно составлять кастомные фильтры.
Middlewares (промежуточные слои) вставляются между входящим запросом и хендлером. Можно перехватывать сообщения, редактировать их, проверять права доступа и т.д.
Работа с состояниями (FSM)
Aiogram 3 поддерживает машину состояний (Finite State Machine). Это удобно, когда нужно пошагово собирать данные (например, регистрацию пользователя). FSM — это основной инструмент реализации ветвлений.
Представим, что перед нами стоит задача разработать чат-бот для заказа пиццы. Нам нужно узнать у пользователя размер пиццы и адрес доставки. Сделать это нужно последовательно: нельзя сразу перепрыгнуть на второй шаг без первого. Причем нужно сохранять данные, которые отправляет пользователь, на всех этапах работы с чат-ботом.
-
Объявите состояния:
-
Переключайтесь между состояниями:
Обратите внимание, как хранится информация в промежуточных состояниях — используется внутреннее хранилище, принадлежащее конкретному пользователю, без использования базы данных.
Так пользователь идет по цепочке вопросов, а в конце можно отправить информацию о заказе на внутренний API.

Подбор конфигурации сервера для размещения бота
Мы подготовили таблицу для универсального подбора конфигурации в зависимости от задач чат-бота. Поля в первой колонке кликабельны — там ссылки на создание сервера выбранной конфигурации в панели управления Timeweb Cloud.
|
Конфигурация |
Стоимость облачного сервера + публичный IP |
Стоимость размещения через Dockerfile в App Platform от Timeweb Cloud |
Задачи |
Вывод |
|
300 ₽/мес |
188 ₽/мес |
Простые текстовые боты, легкие aiogram-боты без БД, inline-кнопки, парсеры по расписанию |
Только для самых базовых ботов без лишней нагрузки |
|
|
550 ₽/мес |
355 ₽/мес |
Боты с небольшой базой (SQLite, PostgreSQL), API-интеграции, простые аудиоботы, парсеры |
Стандартный сервер для небольшого коммерческого бота |
|
|
850 ₽/мес |
555 ₽/мес |
Боты с активной БД (PostgreSQL, MySQL), чат-боты с анализом сообщений, легкие торговые боты |
Подходит для средних проектов с активной базой данных |
|
|
1000 ₽/мес |
655 ₽/мес |
Боты с несколькими модулями, обработка изображений (QR-коды, ресайз), API-серверы с ботами, OpenAI API |
Универсальный сервер для большинства ботов |
|
|
1650 ₽/мес |
1100 ₽/мес |
Многопользовательские боты (до 10 000+), работа с Telegram API, распознавание аудио, обработка изображений и видео |
Оптимально для ботов с высокой нагрузкой |
|
|
2800 ₽/мес |
1833 ₽/мес |
Боты с AI-функциями, мультиязычные боты, торговые боты для криптобирж |
Для сложных задач, но без GPU |
|
|
4200 ₽/мес |
2777 ₽/мес |
AI-боты с ML, мультитрединг с Redis и MongoDB, боты с видеообработкой в реальном времени |
Максимальные возможности, но для AI лучше использовать GPU-сервер |
Развертывание бота: запуск на сервере
Разберем два основных способа деплоя (развертывания проекта на сервере)
Быстрый способ: Docker + App Platform от Timeweb Cloud
Этот способ не требует никаких знаний системного администрирования, весь деплой производится автоматически. К тому же, этот способ позволяет сэкономить (стоимость минимальной конфигурации — 188 рублей в месяц). Следуйте этим шагам:
- Выгрузите все зависимости проекта в файл
requirements.txt. Здесь пригождается использование виртуального окружения, чтобы не тянуть библиотеки со всего компьютера. Выполните в Терминале в директории проекта:
-
Добавьте в директорию проекта новый файл для деплоя — Dockerfile. Расширения у файла нет, только имя. Вставьте следующее содержимое:
-
Создайте Git-репозиторий и выложите его на GitHub. Для этого можно воспользоваться минимальным набором команд git из нашей статьи, выполнив эти команды последовательно.
Не забудьте добавить файл переменных окружения.envв.gitignore— он не должен попасть в общий доступ. -
Осталось немного: перейдите в панель управления Timeweb Cloud, выберите таб «App Platform», нажмите кнопку «Добавить» или «Создать». Во вкладке «Тип» перейдите на таб «Dockerfile».
-
Привяжите свой аккаунт GitHub или подключите Git-репозиторий по URL.

-
Выберите репозиторий из списка после того, как привязали свой аккаунт с GitHub.

-
Выберите конфигурацию. В App Platform доступна конфигурация CPU 1 x 3.3ГГц, RAM 1Гб, NVMe 15Гб стоимостью 188 рублей в месяц. Она отлично подходит для простых текстовых ботов, проектов с небольшими inline-клавиатурами, базовой FSM-логикой, не требовательными API-запросами, работы с SQLite или легковесными JSON-файлами. Такая конфигурация может обрабатывать до 50-100 пользователей в минуту.
-
Добавьте токен в переменные окружения. Во вкладке «5. Настройка приложения» нажмите на кнопку «+ Добавить». Ключ —
BOT_TOKEN, а в значение вставьте токен, полученный из BotFather.

-
Запустите деплой и дождитесь его окончания. После этого бот будет запущен.

Стандартный способ: Ubuntu + systemd
-
Выгрузите все зависимости проекта в файл
requirements.txt. Выполните следующую команду в Терминале, находясь в директории проекта:
-
Создайте облачный сервер в панели Timeweb Cloud с нужной конфигурацией и ОС Ubuntu.
-
Перенесите файлы проекта в директорию на удаленном сервере. Проще всего это сделать с помощью утилиты
rsync, если используете Ubuntu / MacOS:
Не забудьте вставить IP сервера и исправить конечную директорию.

Для пользователей на Windows — используйте отправку файлов через FileZilla. Об этом рассказано в нашей документации.
-
Подключитесь к серверу по SSH. Если возникают сложности, воспользуйтесь информацией из нашей документации по UNIX-системам.
-
Установите пакет для виртуального окружения:
- Перейдите в директорию проекта, куда прежде отправили файлы. Создайте виртуальное окружение и выполните установку зависимостей.
-
Проверьте работоспособность бота — запустите его с помощью:
Если всё работает, то переходите к следующему шагу.
-
Создайте юнит-файл
/etc/systemd/system/telegram-bot.service:
Добавьте в файл следующее содержимое содержимое:
Измените значения следующих переменных:
WorkingDirectory— директория проектаExecStart— команда для запуска чат-бота в формате<интерпретатор> <полный путь до файла>
При использовании виртуального окружения интерпретатор находится по тому же пути, как в примере. Если работаете без venv, то используйте /usr/local/bin/python3.
-
Перезапустите
systemdи включите службу:
-
Проверьте статус службы и просмотрите логи, при необходимости:
При нормальном запуске в поле «Active» находится значение «active (running)».

Просмотр логов бота:
-
При необходимости, управляйте службой следующими командами:
-
Перезапуск бота
-
-
-
Остановка бота
-
-
-
Удаление службы (если нужно)
-
Надежное облако для ваших проектов
477 ₽/мес
657 ₽/мес
Заключение
Создание чат-бота в Telegram на Python — задача, которую можно решить даже без опыта в программировании, используя конструкторы.
Если вам нужна гибкость и более широкие возможности, лучше освоить фреймворк aiogram и развернуть собственный проект. Вы сразу получите контроль над кодом, сможете легко дорабатывать функционал, управлять интеграциями и не зависеть от ограничений платных тарифов. Для запуска бота на продакшене достаточно выбрать подходящую конфигурацию сервера и настроить автоматический деплой. Уделите внимание безопасности: храните токен в переменной окружения и шифруйте важные данные.
В будущем бота можно масштабировать, добавлять поддержку вебхуков, подключать платёжные системы, системы аналитики и работать с ML-моделями, если потребуются AI-функции.
