Медиаблог /

Как создать Telegram-бота на Python: пошаговое руководство с нуля до деплоя

7 июля 2026

Как создать Telegram-бота на Python: пошаговое руководство с нуля до деплоя

Телеграм-бот на Python поднимается за 5 шагов: зарегистрировать бота в @BotFather, настроить виртуальное окружение venv, написать bot.py с обработчиками, протестировать и задеплоить на сервер. Простой эхо-бот готов примерно за 30 минут. Понадобятся: Python 3.8+, аккаунт в Telegram и любая IDE — PyCharm или VS Code.

Схема Telegram-бота на Python — архитектура с нуля

Что такое Telegram-бот и зачем он нужен

Telegram-бот — программа внутри мессенджера, которая общается с пользователями через Telegram API. Весной 2025 года Telegram преодолел отметку в 1 миллиард активных пользователей в месяц — это делает платформу одной из самых востребованных для автоматизации. Бот получает обновления двумя способами: через long-polling или через webhook — разбираем каждый вариант ниже.

image

Не знаете, с чего ребёнку начать в IT?

Дайте попробовать разные направления: Python, веб-разработку и робототехнику

Смотреть программу

Практическое применение ботов

Чат-боты на Python решают самые разные задачи: отвечают на вопросы клиентов вместо живого оператора, рассылают уведомления о статусах заказов, собирают анкеты и проводят опросы. Торговый бот следит за ценами и отправляет сигналы в нужный момент. Более сложные сценарии — FAQ-бот, бот-рассылка или AI-помощник на основе RAG (Retrieval-Augmented Generation — технология ответов на основе документов). Автоматизация через бот экономит часы ручной работы — в этом и есть главная причина их популярности.

Выбор библиотеки для разработки бота

Три основных инструмента: pyTelegramBotAPI, python-telegram-bot и aiogram. Выбор зависит от сложности задачи и знакомства с асинхронным программированием. Для первого проекта оптимален pyTelegramBotAPI — его синтаксис самый простой, а порог входа — самый низкий.

Сравнение pyTelegramBotAPI, python-telegram-bot и aiogram

Библиотека
Сложность
Async
Лучше для
Установка
pyTelegramBotAPI Низкая Нет Прототипы, старт pip install pyTelegramBotAPI
python-telegram-bot Высокая Да Сложные боты pip install python-telegram-bot
aiogram Средняя Да Высокие нагрузки pip install aiogram

pyTelegramBotAPI работает синхронно и не требует знания асинхронности — достаточен для большинства реальных ботов. Идеальный старт без лишней сложности.

python-telegram-bot предоставляет полную поддержку Telegram API и поддерживает async/await. Порог входа выше, зато функциональность шире — подходит для сложных многофункциональных ботов.

aiogram строится на asyncio (асинхронный фреймворк Python): async/await встроен в архитектуру, что делает его лучшим выбором для высоконагруженных ботов с сотнями одновременных пользователей. Требует понимания асинхронного программирования.

Если пишете бота впервые — стартуйте с pyTelegramBotAPI.

Шаг 1 — Регистрация бота через @BotFather

Диалог с @BotFather: команда /newbot и получение API-токена

@BotFather — официальный бот Telegram для регистрации и настройки других ботов. Регистрация занимает около 2 минут.

Пошагово:

  1. Откройте Telegram, найдите @BotFather и отправьте /start.
  2. Введите /newbot, задайте имя (отображается в чате) и username — он должен заканчиваться на «bot», например my_echo_bot.
  3. Получите API-токен: строку вида 123456789:ABCdef…. Сохраните его — он понадобится в коде.

Это всё, что нужно для первого запуска. Остальные настройки — по желанию.

Дополнительные команды BotFather:

  • /setdescription — описание, которое видят пользователи перед запуском;
  • /setcommands — добавить меню из 5–7 команд;
  • /setuserpic — загрузить аватар (рекомендуемый размер: 640×640 пикселей).

Эти настройки не влияют на работу бота, но делают его профессиональнее в глазах пользователей.

Лимиты Telegram API: не более 30 сообщений в секунду и 20 запросов к одному методу в минуту. Максимальная длина сообщения — 4096 символов, максимальный размер файла — 50 МБ.

Главное правило: API-токен нельзя публиковать в чатах, хранить прямо в коде или пушить в открытый репозиторий. Попавший в чужие руки токен даёт полный контроль над вашим ботом — если это произошло, немедленно перевыпустите токен через /revoke в @BotFather.

Шаг 2 — Настройка среды разработки

Терминал: активация venv и pip install pyTelegramBotAPI для Python-бота

Минимальный набор для старта: Python 3.8+ (актуальная версия — 3.13), IDE — PyCharm или VS Code — и пакетный менеджер pip. Перед установкой библиотек создайте виртуальное окружение — это защитит проект от конфликтов зависимостей.

Создание виртуального окружения venv

Виртуальное окружение venv изолирует зависимости проекта: библиотеки одного бота не конфликтуют с библиотеками другого. venv встроен в Python 3 — отдельная установка не нужна.

# Создать окружение

python -m venv venv

# Активировать (Linux / macOS)

source venv/bin/activate

# Активировать (Windows)

venv\Scripts\activate

После активации в терминале появится префикс (venv) — все дальнейшие команды pip работают внутри изолированного окружения. Золотое правило: создавайте отдельный venv для каждого проекта, без исключений.

Установка библиотек и безопасное хранение токена

Установите нужные пакеты одной командой:

pip install pyTelegramBotAPI python-dotenv requests

Создайте файл .env в корне проекта:

TELEGRAM_API_TOKEN=ваш_токен_здесь

Добавьте .env в .gitignore — иначе токен окажется в репозитории. В коде токен загружается через python-dotenv:

from dotenv import load_dotenv

import os

load_dotenv()

TOKEN = os.getenv(‘TELEGRAM_API_TOKEN’)

Зафиксируйте зависимости командой pip freeze > requirements.txt. Этот файл позволит воспроизвести окружение на любом сервере через pip install -r requirements.txt.

Шаг 3 — Написание бота: готовый код на Python

Структура минимального проекта: bot.py с логикой бота, .env с токеном и requirements.txt со списком зависимостей. Для более крупных проектов выносите обработчики в папку handlers/ и конфигурацию — в отдельный config.py.

Готовый эхо-бот — минимальный рабочий пример

Простой телеграм-бот на Python — около 20 строк кода:

import telebot

from dotenv import load_dotenv

import os

load_dotenv()

TOKEN = os.getenv(‘TELEGRAM_API_TOKEN’)

bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=[‘start’])

def send_welcome(message):

bot.reply_to(message, ‘Привет! Я эхо-бот. Напишите что-нибудь.’)

@bot.message_handler(func=lambda message: True)

def echo(message):

bot.reply_to(message, message.text)

bot.infinity_polling()

Что здесь происходит: TeleBot(TOKEN) создаёт экземпляр бота с вашим токеном. Декоратор @bot.message_handler(commands=[‘start’]) перехватывает команду /start и отправляет приветствие. Второй обработчик с func=lambda message: True реагирует на любое текстовое сообщение и повторяет его обратно — это и есть эхо. bot.infinity_polling() запускает бесконечный цикл опроса сервера. Запустите командой python bot.py — бот готов к работе.

Кнопки: Reply-клавиатура и Inline-кнопки

В Telegram-боте на Python доступны два вида кнопок.

Reply-клавиатура (ReplyKeyboardMarkup) закрепляется под полем ввода — нажатие отправляет текст кнопки как обычное сообщение пользователя.

Inline-кнопки (InlineKeyboardMarkup) встроены прямо в сообщение и передают callback_data — строку-идентификатор действия. Нажатия обрабатывает декоратор @bot.callback_query_handler:

from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton

markup = InlineKeyboardMarkup()

markup.add(InlineKeyboardButton(‘Узнать больше’, callback_data=’info’))

bot.send_message(chat_id, ‘Выберите действие:’, reply_markup=markup)

@bot.callback_query_handler(func=lambda c: True)

def handle_callback(call):

bot.answer_callback_query(call.id, ‘Вы нажали кнопку!’)

Ребенок хочет изучать программирование? Пусть начнёт с реальных проектов

На курсе школьники создают Telegram-бота, сайт и веб-приложение

  • Бесплатно — 0 ₽ за обучение
  • Портфолио — 4 готовых проекта
  • 7–11 классы — Онлайн, с нуля
Оставить заявку
image

Для интерактивных меню предпочтительны Inline-кнопки — они не перекрывают пространство клавиатуры и выглядят опрятнее.

Кнопки Telegram-бота: Reply-клавиатура и Inline-кнопки в чате

Шаг 4 — Тестирование бота

Два подхода к получению обновлений: long-polling удобен для разработки, webhook — для production. Выбор влияет на архитектуру бота и требования к серверу.

Схема: long-polling против webhook для Telegram-бота на Python

Локальный запуск через long-polling

bot.infinity_polling() заставляет бота самостоятельно запрашивать Telegram о новых сообщениях через равные промежутки времени. HTTPS не требуется — это главное преимущество для локальной разработки.

Запустите python bot.py и напишите боту в Telegram. Проверьте все сценарии: /start, произвольный текст, нажатие кнопок. Частые ошибки: нет infinity_polling() — скрипт завершится сразу после запуска; неверный токен — бот вернёт ошибку Unauthorized. Добавьте logging.basicConfig(level=logging.DEBUG) — диагностика ошибок станет намного проще.

Тестирование webhook локально с ngrok

Webhook требует публичный HTTPS-адрес: локальная машина без него не подходит напрямую. ngrok создаёт временный тоннель — ваш localhost:5000 становится доступен по адресу вида https://xxx.ngrok.io.

ngrok http 5000

Скопируйте выданный HTTPS-адрес и зарегистрируйте его как вебхук:

bot.set_webhook(url=’https://xxx.ngrok.io/’ + TOKEN)

Flask-сервер на localhost:5000 начнёт получать обновления от Telegram в реальном времени. Это позволяет тестировать webhook без боевого сервера.

Шаг 5 — Деплой бота на сервер

Для постоянной работы бот должен быть запущен на удалённом сервере. Платформы различаются по сложности настройки, цене и возможностям.

Платформа
Тип
Бесплатный план
Сложность настройки
VPS (Timeweb, REG.RU) Виртуальный сервер Нет Высокая
Heroku PaaS Да (dyno засыпает) Средняя
PythonAnywhere PaaS Да Низкая
AWS Lambda Serverless Да (лимиты) Высокая

VPS с автозапуском через Supervisor

VPS — стандартный выбор для production-ботов: полный контроль над сервером, стабильная работа, автоматический перезапуск при сбоях.

6 шагов деплоя:

  1. Подключитесь по SSH: ssh user@your-server-ip.
  2. Установите Python и pip: sudo apt install python3 python3-pip.
  3. Создайте и активируйте venv.
  4. Загрузите файлы проекта на сервер через git clone или scp.
  5. Создайте конфиг Supervisor /etc/supervisor/conf.d/tgbot.conf:

[program:tgbot]

command=/home/user/tgbot/venv/bin/python bot.py

directory=/home/user/tgbot

autostart=true

autorestart=true

stderr_logfile=/var/log/tgbot.err.log

stdout_logfile=/var/log/tgbot.out.log

  1. Примените конфиг и запустите: supervisorctl reread && supervisorctl update.

Параметры autostart=true и autorestart=true гарантируют, что бот стартует при перезагрузке сервера и автоматически перезапускается при падении.

Облачные платформы: Heroku и альтернативы

Heroku — проще всего для первого деплоя. Создайте два файла в корне проекта.

Procfile:

worker: python bot.py

runtime.txt:

python-3.13.0

Деплой одной командой: git push heroku master. На бесплатном тарифе dyno засыпает при бездействии — для постоянно активного бота нужен платный план или VPS.

PythonAnywhere специализируется на Python, требует минимальной настройки — подходит для учебных и тестовых проектов. AWS Lambda работает только с webhook-ботами и тарифицируется по реальному потреблению запросов. Для стабильного боевого бота выбирайте VPS.

Безопасность и поддержка бота

Несколько правил, которые предотвращают большинство типичных проблем.

Токен: храните только в .env, загружайте через python-dotenv. Файл .env — всегда в .gitignore. Если токен утёк — немедленно перевыпустите его через /revoke в @BotFather.

Webhook-защита: используйте случайный секрет в пути URL и настройте IP-фильтрацию — принимайте запросы только от серверов Telegram.

Логирование:

import logging

logging.basicConfig(

level=logging.INFO,

filename=’bot.log’,

format=’%(asctime)s %(levelname)s %(message)s’

)

Логи в файл и консоль позволяют диагностировать сбои и при необходимости отправлять уведомления администратору.

Антиспам: валидируйте входные данные пользователей, ограничивайте частоту запросов с одного аккаунта. Регулярно обновляйте зависимости: pip install —upgrade pyTelegramBotAPI.

Хотите написать собственного бота с нуля — с реальным проектом в портфолио? На курсе «Программирование: Уверенный старт» школьники создают Telegram-бота уже в первом модуле: Python, обработчики сообщений, деплой — всё под руководством практикующих IT-специалистов. Узнайте подробнее на странице курса.

Часто задаваемые вопросы

Что такое Telegram-бот и как он работает?

Telegram-бот — программа внутри мессенджера, которая взаимодействует с пользователями через Telegram API. Обновления поступают двумя способами: long-polling (бот сам запрашивает сервер) или webhook (Telegram отправляет обновления на ваш HTTPS-адрес). Каждый бот авторизуется через уникальный API-токен — его выдаёт @BotFather при регистрации.

Какую библиотеку выбрать для Telegram-бота на Python?

Зависит от задачи. pyTelegramBotAPI идеален для старта: простой синтаксис, низкий порог входа, подходит для большинства ботов. python-telegram-bot — для сложных многофункциональных ботов с полным покрытием API. aiogram — для высоконагруженных ботов с сотнями одновременных пользователей: строится на async/await и asyncio.

Как безопасно хранить токен Telegram-бота?

Никогда не вставляйте токен прямо в код. Создайте файл .env с записью TELEGRAM_API_TOKEN=ваш_токен и добавьте .env в .gitignore. В коде загружайте через from dotenv import load_dotenv; load_dotenv() и os.getenv(‘TELEGRAM_API_TOKEN’). Так токен не попадёт в открытый репозиторий.

В чём разница между long-polling и webhook?

Long-polling: бот регулярно сам запрашивает Telegram о новых сообщениях — HTTPS не нужен, легко настроить локально. Webhook: Telegram сам присылает обновления на ваш сервер при каждом новом сообщении — требует публичный HTTPS-адрес, реагирует мгновенно и меньше нагружает сервер. Для разработки подходит long-polling, для production — webhook.

Как протестировать webhook локально без сервера?

Используйте ngrok: он создаёт временный HTTPS-тоннель от вашего компьютера в интернет. Запустите ngrok http 5000, скопируйте выданный адрес https://xxx.ngrok.io и зарегистрируйте вебхук: bot.set_webhook(url=’https://xxx.ngrok.io/’ + TOKEN). Telegram начнёт слать обновления на ваш локальный Flask-сервер.

Где разместить Telegram-бота на постоянной основе?

VPS — полный контроль, автозапуск через Supervisor, оптимально для production. Heroku — простой деплой через git, есть бесплатный план (dyno засыпает при бездействии). PythonAnywhere — специализируется на Python, минимальная настройка. AWS Lambda — только для webhook-ботов, тарификация по запросам. Для стабильного боевого бота выбирайте VPS.

Как добавить кнопки в Telegram-бота на Python?

Два типа: Reply-клавиатура (ReplyKeyboardMarkup) — фиксируется под полем ввода, нажатие отправляет текст. Inline-кнопки (InlineKeyboardMarkup) — встроены в сообщение, передают callback_data. Нажатия обрабатывает @bot.callback_query_handler. Для интерактивных меню предпочтительны Inline-кнопки — они не перекрывают клавиатуру.

Зачем нужен BotFather и как через него создать бота?

@BotFather — официальный инструмент Telegram для регистрации ботов. Отправьте /newbot, задайте имя и username (заканчивается на «bot»), получите API-токен. Дополнительно: /setdescription — описание, /setcommands — меню из 5–7 команд, /setuserpic — аватар 640×640 пикселей. Без токена от BotFather запустить бота невозможно.

Что делать, если бот не отвечает на сообщения?

Пройдите чек-лист: 1) есть ли bot.infinity_polling() в конце кода — без него скрипт завершается сразу; 2) корректен ли API-токен (ошибка Unauthorized — именно он); 3) активировано ли виртуальное окружение и установлены ли библиотеки; 4) нет ли второго запущенного экземпляра с тем же токеном. Добавьте logging.basicConfig — диагностика станет проще.

Можно ли добавить ИИ в Telegram-бота на Python?

Да. Популярный подход — RAG (Retrieval-Augmented Generation, генерация с поиском по документам): бот отвечает на вопросы на основе ваших файлов. Интегрируется через внешние API с помощью библиотеки requests. Если хотите освоить создание ботов с нуля и дойти до AI-интеграций, курс «Программирование: Уверенный старт» включает практический мини-проект — собственный Telegram-бот уже в первом модуле. Узнайте подробнее на странице курса.

Пусть ребёнок сделает первый IT-проект уже в этом месяце

Бесплатный онлайн-курс с понятной программой, поддержкой и проектами для портфолио

  • Онлайн
  • 4 недели
  • Бесплатно
  • Школьникам 7–11 классов
Подать заявку
icon