
Telegram предоставляет официальный интерфейс Bot API, который позволяет управлять чатами, отправлять сообщения, обрабатывать команды и интегрировать внешние сервисы. Для работы с ним на Python чаще всего используют библиотеку python-telegram-bot, так как она обеспечивает удобные методы и поддержку асинхронного программирования.
Перед началом необходимо получить токен доступа у @BotFather. Этот токен – ключ к управлению ботом, его нельзя публиковать в открытых источниках. После получения токена стоит сразу организовать хранение секретных данных в переменных окружения или использовать файл конфигурации, исключённый из репозитория.
Разработка начинается с установки зависимостей через pip. Для большинства проектов достаточно подключить python-telegram-bot и библиотеку для работы с запросами, например requests. Такая подготовка позволяет быстро перейти к созданию минимального кода, который реагирует на команды и запускается локально.
В процессе важно учитывать структуру проекта: отдельные модули для логики, обработки команд и интеграции с API упрощают масштабирование. Это избавляет от проблем при расширении функциональности и делает код более читаемым.
Создание telegram бота на Python пошаговое руководство

Для разработки потребуется установленный Python версии не ниже 3.9 и библиотека python-telegram-bot. Установка выполняется командой:
pip install python-telegram-bot --upgrade
Далее необходимо получить токен. В Telegram откройте @BotFather, создайте нового бота и сохраните выданный ключ. Этот токен используется в коде для авторизации.
Минимальный рабочий пример бота:
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Бот активен")
app = Application.builder().token("ВАШ_ТОКЕН").build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Компоненты, которые чаще всего применяются:
| Элемент | Назначение | Пример |
|---|---|---|
CommandHandler |
Реакция на команды вида /start |
CommandHandler("help", help_func) |
MessageHandler |
Обработка текстовых сообщений | MessageHandler(filters.TEXT, echo_func) |
CallbackQueryHandler |
Кнопки с inline-разметкой | CallbackQueryHandler(button_func) |
Рекомендации: храните токен в переменных окружения, используйте отдельные модули для команд, применяйте логирование через модуль logging для отладки.
Регистрация и получение токена у BotFather

В Telegram найдите официального пользователя @BotFather через строку поиска и начните диалог кнопкой Start.
Для создания нового бота отправьте команду /newbot. Сначала введите отображаемое имя (может содержать пробелы и кириллицу), затем уникальное имя пользователя, которое обязательно должно заканчиваться на bot (например, my_test_bot).
После подтверждения BotFather выдаст сообщение с токеном доступа в формате 123456789:ABC-123xyz…. Этот ключ необходим для подключения библиотеки python-telegram-bot или других SDK.
Сохраните токен в безопасном месте. Не публикуйте его в открытых репозиториях и не передавайте третьим лицам. При утечке можно сгенерировать новый токен командой /revoke и получить замену через /token.
Установка необходимых библиотек Python для работы с API
Для взаимодействия с Telegram Bot API чаще всего применяют библиотеку pyTelegramBotAPI или aiogram. Первая проще для начала, вторая оптимальна для асинхронных задач.
Установка pyTelegramBotAPI выполняется командой:
pip install pyTelegramBotAPI
Для асинхронной разработки используйте:
pip install aiogram
Чтобы работать с HTTP-запросами и внешними API, установите:
pip install requests
Для хранения данных в формате JSON достаточно встроенного модуля, но для удобной сериализации и валидации стоит подключить:
pip install pydantic
Если бот будет работать с базами данных, используйте:
pip install SQLAlchemy
Рекомендуется фиксировать версии пакетов в requirements.txt, чтобы избежать конфликтов:
pip freeze > requirements.txt
Создание базовой структуры кода бота
Для начала потребуется минимальный набор файлов. Чаще всего достаточно одного файла bot.py, в котором размещается основной код. В дальнейшем можно разделять логику по модулям.
- Импортировать необходимые модули:
from telegram import Updatefrom telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
- Определить точку входа
async def main(), где создаётся объектApplicationс токеном. - Добавить обработчики:
CommandHandler("start", start)для команды запуска;MessageHandler(filters.TEXT & ~filters.COMMAND, echo)для ответа на текстовые сообщения.
- Запустить метод
application.run_polling(), чтобы бот начал получать обновления.
Минимальный пример:
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Бот запущен.")
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(update.message.text)
async def main():
application = Application.builder().token("ВАШ_ТОКЕН").build()
application.add_handler(CommandHandler("start", start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
await application.run_polling()
if __name__ == "__main__":
import asyncio
asyncio.run(main())
Такой каркас позволяет сразу проверить работу и в дальнейшем расширять функционал.
Реализация обработки команд и сообщений

Для обработки команд и сообщений в Telegram боте на Python используется библиотека python-telegram-bot. Основной механизм – регистрация обработчиков через Dispatcher. Например, команды регистрируются с помощью CommandHandler, а текстовые сообщения – через MessageHandler с фильтрами.
Пример регистрации команды /start:
from telegram.ext import CommandHandler
def start(update, context):
update.message.reply_text("Привет! Я бот, готовый к работе.")
dispatcher.add_handler(CommandHandler("start", start))
Для обработки текстовых сообщений применяются фильтры из Filters. Например, чтобы реагировать на любое текстовое сообщение:
from telegram.ext import MessageHandler, Filters
def echo(update, context):
update.message.reply_text(update.message.text)
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))
Важно использовать ~Filters.command, чтобы исключить команды из обработки общих сообщений. Это предотвращает конфликт с CommandHandler.
Для сложных сценариев, например выбора из меню или обработки последовательности шагов, применяются ConversationHandler. Он позволяет задавать состояния и переходы между ними, обеспечивая контролируемую логику диалога.
Пример базового ConversationHandler:
from telegram.ext import ConversationHandler, CommandHandler, MessageHandler, Filters
STATE_INPUT = 1
def start_conv(update, context):
update.message.reply_text("Введите данные:")
return STATE_INPUT
def process_input(update, context):
data = update.message.text
update.message.reply_text(f"Вы ввели: {data}")
return ConversationHandler.END
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start_conv)],
states={STATE_INPUT: [MessageHandler(Filters.text, process_input)]},
fallbacks=[]
)
dispatcher.add_handler(conv_handler)
Рекомендуется использовать отдельные функции для каждого обработчика и избегать вложенных условий внутри одного метода. Это повышает читаемость кода и упрощает отладку. Для логирования ошибок применяйте CallbackContext и метод error в Dispatcher.
Добавление кнопок и клавиатур для взаимодействия с пользователем
В Telegram боты могут использовать две основные формы интерактивных элементов: Inline-кнопки и Reply-клавиатуры. Inline-кнопки отображаются прямо под сообщением и поддерживают callback-запросы, что позволяет обрабатывать действия пользователя без отправки новых сообщений. Reply-клавиатуры заменяют стандартную клавиатуру пользователя и отправляют выбранное значение как текст.
Для создания Inline-кнопок используется класс InlineKeyboardButton и InlineKeyboardMarkup. Например, чтобы добавить кнопку с текстом «Подписаться» и callback_data=»subscribe»:
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
keyboard = [[InlineKeyboardButton("Подписаться", callback_data="subscribe")]]
reply_markup = InlineKeyboardMarkup(keyboard)
bot.send_message(chat_id=chat_id, text="Выберите действие:", reply_markup=reply_markup)
Для обработки нажатий кнопок необходимо зарегистрировать callback-обработчик. В библиотеке python-telegram-bot это делается через CallbackQueryHandler. В обработчике можно получить callback_data через query.data и выполнить нужное действие без отправки нового сообщения.
Reply-клавиатуры создаются через KeyboardButton и ReplyKeyboardMarkup. Они полезны для быстрых ответов. Например, чтобы создать клавиатуру с кнопками «Да» и «Нет»:
from telegram import ReplyKeyboardMarkup, KeyboardButton
keyboard = [[KeyboardButton("Да"), KeyboardButton("Нет")]]
reply_markup = ReplyKeyboardMarkup(keyboard, resize_keyboard=True, one_time_keyboard=True)
bot.send_message(chat_id=chat_id, text="Выберите вариант:", reply_markup=reply_markup)
Рекомендуется использовать resize_keyboard=True для компактного отображения и one_time_keyboard=True, чтобы клавиатура скрывалась после выбора. Inline-кнопки предпочтительнее для действий, требующих мгновенного ответа, а Reply-клавиатуры – для упрощения ввода повторяющихся команд.
Для сложных сценариев можно комбинировать оба типа: основное меню с Reply-клавиатурой и действия внутри диалогов через Inline-кнопки. Это улучшает навигацию и снижает количество вводимого текста пользователем.
Важно тестировать клавиатуры на разных устройствах: iOS и Android по-разному отображают размеры кнопок и поведение callback-запросов. Также стоит ограничивать количество кнопок на одной строке до 3-4, чтобы интерфейс оставался удобным.
Запуск и тестирование бота в локальной среде

Для запуска Telegram-бота локально потребуется установленный Python версии 3.10 или выше и пакетный менеджер pip. Рекомендуется использовать виртуальное окружение для изоляции зависимостей:
- Создайте виртуальное окружение в каталоге проекта:
python -m venv venv - Активируйте окружение:
# Windows venv\Scripts\activate # macOS/Linux source venv/bin/activate - Установите необходимые библиотеки:
pip install python-telegram-bot==20.5
После настройки окружения подготовьте основной скрипт бота, например bot.py, с корректно указанным токеном Telegram API. Для безопасного хранения токена рекомендуется использовать переменные окружения:
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Бот запущен и готов к работе!")
app = ApplicationBuilder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Тестирование бота проводится через локальный запуск:
- В терминале перейдите в каталог проекта и выполните:
python bot.py - Проверьте реакцию бота в Telegram, отправив команду
/start. - Для отладки используйте
print()или логирование через модульlogging:import logging logging.basicConfig(level=logging.INFO) - При внесении изменений скрипт необходимо перезапускать. Для автоматического перезапуска удобно использовать
watchdogилиpython -m uvicorn bot:app --reloadпри интеграции с асинхронными фреймворками.
Рекомендуется проверять работу обработчиков команд и inline-кнопок отдельно, создавая тестовые сообщения. Для сложных сценариев полезно использовать модуль pytest-asyncio для эмуляции Update и Context объектов.
Локальное тестирование позволяет убедиться в стабильности бота до его деплоя на сервер, минимизируя вероятность ошибок из-за неправильной конфигурации токена или зависимостей.
Вопрос-ответ:
Какие библиотеки Python нужны для создания Telegram-бота?
Для работы с Telegram-ботами обычно используют библиотеку `python-telegram-bot`, которая предоставляет удобный интерфейс для взаимодействия с API Telegram. Дополнительно могут понадобиться `requests` для отправки HTTP-запросов и `logging` для ведения журналов работы бота. В некоторых случаях используют `dotenv` для хранения токена бота в отдельном файле окружения.
Как получить токен для бота и зачем он нужен?
Токен создаётся через официальный бот Telegram @BotFather. Он нужен для идентификации вашего бота при обращении к API Telegram. Без токена бот не сможет отправлять сообщения и реагировать на действия пользователей. После получения токена его обычно хранят в защищённом месте и используют в коде для инициализации объекта бота.
Каким образом можно обрабатывать команды пользователей в боте?
Команды пользователей обрабатываются с помощью специальных обработчиков (handlers). В библиотеке `python-telegram-bot` есть `CommandHandler` для команд типа /start или /help. При поступлении команды бот вызывает функцию-обработчик, в которой можно задать любую логику: отправку текста, изображения, кнопок или взаимодействие с базой данных. Также можно использовать `MessageHandler` для реакции на произвольные сообщения.
Можно ли сделать так, чтобы бот отвечал на определённые слова в сообщениях?
Да, это реализуется через фильтры. Например, `MessageHandler` с фильтром `Filters.text` позволяет проверять текст сообщений и сравнивать его с нужными ключевыми словами. После обнаружения нужного слова бот может отправить ответное сообщение, картинку или выполнить другое действие. Такой подход помогает создавать интерактивные диалоги и автоматизированные ответы без использования сложного машинного обучения.
Как поддерживать бота в рабочем состоянии 24/7?
Для непрерывной работы бота его можно разместить на сервере или в облачном сервисе, например, Heroku, AWS или Vercel. Скрипт бота запускается и работает в фоновом режиме. Для автоматического перезапуска при сбое можно использовать менеджеры процессов типа `systemd` или `pm2`. Также стоит настроить логирование и уведомления об ошибках, чтобы быстро реагировать на проблемы.
