Телеграм-бот на Python поднимается за 5 шагов: зарегистрировать бота в @BotFather, настроить виртуальное окружение venv, написать bot.py с обработчиками, протестировать и задеплоить на сервер. Простой эхо-бот готов примерно за 30 минут. Понадобятся: Python 3.8+, аккаунт в Telegram и любая IDE — PyCharm или VS Code.
Telegram-бот — программа внутри мессенджера, которая общается с пользователями через Telegram API. Весной 2025 года Telegram преодолел отметку в 1 миллиард активных пользователей в месяц — это делает платформу одной из самых востребованных для автоматизации. Бот получает обновления двумя способами: через long-polling или через webhook — разбираем каждый вариант ниже.
Не знаете, с чего ребёнку начать в IT?
Дайте попробовать разные направления: Python, веб-разработку и робототехнику
Чат-боты на Python решают самые разные задачи: отвечают на вопросы клиентов вместо живого оператора, рассылают уведомления о статусах заказов, собирают анкеты и проводят опросы. Торговый бот следит за ценами и отправляет сигналы в нужный момент. Более сложные сценарии — FAQ-бот, бот-рассылка или AI-помощник на основе RAG (Retrieval-Augmented Generation — технология ответов на основе документов). Автоматизация через бот экономит часы ручной работы — в этом и есть главная причина их популярности.
Три основных инструмента: pyTelegramBotAPI, python-telegram-bot и aiogram. Выбор зависит от сложности задачи и знакомства с асинхронным программированием. Для первого проекта оптимален pyTelegramBotAPI — его синтаксис самый простой, а порог входа — самый низкий.
| Библиотека |
Сложность |
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.

@BotFather — официальный бот Telegram для регистрации и настройки других ботов. Регистрация занимает около 2 минут.
Пошагово:
Это всё, что нужно для первого запуска. Остальные настройки — по желанию.
Дополнительные команды BotFather:
Эти настройки не влияют на работу бота, но делают его профессиональнее в глазах пользователей.
Лимиты Telegram API: не более 30 сообщений в секунду и 20 запросов к одному методу в минуту. Максимальная длина сообщения — 4096 символов, максимальный размер файла — 50 МБ.
Главное правило: API-токен нельзя публиковать в чатах, хранить прямо в коде или пушить в открытый репозиторий. Попавший в чужие руки токен даёт полный контроль над вашим ботом — если это произошло, немедленно перевыпустите токен через /revoke в @BotFather.

Минимальный набор для старта: Python 3.8+ (актуальная версия — 3.13), IDE — PyCharm или VS Code — и пакетный менеджер pip. Перед установкой библиотек создайте виртуальное окружение — это защитит проект от конфликтов зависимостей.
Виртуальное окружение 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.
Структура минимального проекта: 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 — бот готов к работе.
В 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-бота, сайт и веб-приложение
Для интерактивных меню предпочтительны Inline-кнопки — они не перекрывают пространство клавиатуры и выглядят опрятнее.

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

bot.infinity_polling() заставляет бота самостоятельно запрашивать Telegram о новых сообщениях через равные промежутки времени. HTTPS не требуется — это главное преимущество для локальной разработки.
Запустите python bot.py и напишите боту в Telegram. Проверьте все сценарии: /start, произвольный текст, нажатие кнопок. Частые ошибки: нет infinity_polling() — скрипт завершится сразу после запуска; неверный токен — бот вернёт ошибку Unauthorized. Добавьте logging.basicConfig(level=logging.DEBUG) — диагностика ошибок станет намного проще.
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 без боевого сервера.
Для постоянной работы бот должен быть запущен на удалённом сервере. Платформы различаются по сложности настройки, цене и возможностям.
| Платформа |
Тип |
Бесплатный план |
Сложность настройки |
|---|---|---|---|
| VPS (Timeweb, REG.RU) | Виртуальный сервер | Нет | Высокая |
| Heroku | PaaS | Да (dyno засыпает) | Средняя |
| PythonAnywhere | PaaS | Да | Низкая |
| AWS Lambda | Serverless | Да (лимиты) | Высокая |
VPS — стандартный выбор для production-ботов: полный контроль над сервером, стабильная работа, автоматический перезапуск при сбоях.
6 шагов деплоя:
[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
Параметры autostart=true и autorestart=true гарантируют, что бот стартует при перезагрузке сервера и автоматически перезапускается при падении.
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 API. Обновления поступают двумя способами: long-polling (бот сам запрашивает сервер) или webhook (Telegram отправляет обновления на ваш HTTPS-адрес). Каждый бот авторизуется через уникальный API-токен — его выдаёт @BotFather при регистрации.
Зависит от задачи. pyTelegramBotAPI идеален для старта: простой синтаксис, низкий порог входа, подходит для большинства ботов. python-telegram-bot — для сложных многофункциональных ботов с полным покрытием API. aiogram — для высоконагруженных ботов с сотнями одновременных пользователей: строится на async/await и asyncio.
Никогда не вставляйте токен прямо в код. Создайте файл .env с записью TELEGRAM_API_TOKEN=ваш_токен и добавьте .env в .gitignore. В коде загружайте через from dotenv import load_dotenv; load_dotenv() и os.getenv(‘TELEGRAM_API_TOKEN’). Так токен не попадёт в открытый репозиторий.
Long-polling: бот регулярно сам запрашивает Telegram о новых сообщениях — HTTPS не нужен, легко настроить локально. Webhook: Telegram сам присылает обновления на ваш сервер при каждом новом сообщении — требует публичный HTTPS-адрес, реагирует мгновенно и меньше нагружает сервер. Для разработки подходит long-polling, для production — webhook.
Используйте ngrok: он создаёт временный HTTPS-тоннель от вашего компьютера в интернет. Запустите ngrok http 5000, скопируйте выданный адрес https://xxx.ngrok.io и зарегистрируйте вебхук: bot.set_webhook(url=’https://xxx.ngrok.io/’ + TOKEN). Telegram начнёт слать обновления на ваш локальный Flask-сервер.
VPS — полный контроль, автозапуск через Supervisor, оптимально для production. Heroku — простой деплой через git, есть бесплатный план (dyno засыпает при бездействии). PythonAnywhere — специализируется на Python, минимальная настройка. AWS Lambda — только для webhook-ботов, тарификация по запросам. Для стабильного боевого бота выбирайте VPS.
Два типа: Reply-клавиатура (ReplyKeyboardMarkup) — фиксируется под полем ввода, нажатие отправляет текст. Inline-кнопки (InlineKeyboardMarkup) — встроены в сообщение, передают callback_data. Нажатия обрабатывает @bot.callback_query_handler. Для интерактивных меню предпочтительны Inline-кнопки — они не перекрывают клавиатуру.
@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 — диагностика станет проще.
Да. Популярный подход — RAG (Retrieval-Augmented Generation, генерация с поиском по документам): бот отвечает на вопросы на основе ваших файлов. Интегрируется через внешние API с помощью библиотеки requests. Если хотите освоить создание ботов с нуля и дойти до AI-интеграций, курс «Программирование: Уверенный старт» включает практический мини-проект — собственный Telegram-бот уже в первом модуле. Узнайте подробнее на странице курса.
Пусть ребёнок сделает первый IT-проект уже в этом месяце
Бесплатный онлайн-курс с понятной программой, поддержкой и проектами для портфолио