Telegram-боты представляют собой автоматизированные аккаунты, которые взаимодействуют с пользователями через чат. Они могут отвечать на сообщения, отправлять уведомления, обрабатывать команды и даже интегрироваться с внешними сервисами. По данным Telegram, на платформе зарегистрировано более 700 миллионов активных пользователей ежемесячно, что делает ботов мощным инструментом для автоматизации задач. Библиотека python-telegram-bot упрощает разработку, предоставляя удобный интерфейс для работы с Telegram Bot API.

Эта библиотека поддерживает как асинхронный, так и синхронный режимы работы. На момент версии 21.0, выпущенной в 2024 году, она включает более 100 примеров кода в официальной документации. Разработка бота на Python требует базовых знаний языка, но библиотека минимизирует сложность. В статье мы разберём процесс шаг за шагом, от создания бота до развертывания.
Python выбран из-за своей простоты и богатой экосистемы. Библиотека python-telegram-bot установлена более 1 миллиона раз через pip, что подтверждает её популярность среди разработчиков.
Подготовка к разработке
Перед началом работы необходимо создать самого бота в Telegram. Для этого откройте чат с BotFather — официальным ботом для управления другими ботами. Отправьте команду /newbot, укажите имя и username бота. BotFather выдаст уникальный токен доступа, состоящий из 35-40 символов, включая двоеточие. Сохраните этот токен в безопасном месте, так как он потребуется для аутентификации.
Далее установите Python версии не ниже 3.8. Библиотека python-telegram-bot требует Python 3.7 или выше, но рекомендуется использовать актуальную версию для безопасности. Создайте виртуальное окружение командой python -m venv myenv, активируйте его и установите библиотеку: pip install python-telegram-bot==21.0. Это обеспечит совместимость с последними обновлениями API.
Подготовьте редактор кода, например VS Code, который поддерживает автодополнение для Python. Импортируйте необходимые модули в скрипте. Тестируйте бота локально перед развертыванием. Убедитесь, что у вас есть доступ к интернету, поскольку бот взаимодействует с серверами Telegram.
Компания WebBot предоставляет бесплатный конструктор для создания интернет-магазинов и мини-приложений в мессенджере Telegram, позволяющий пользователям без навыков программирования запустить собственный магазин всего за несколько минут. Платформа предлагает интеграцию с популярными платежными системами, удобную админ-панель, инструменты для рассылок и маркетинга, а также поддержку API. Узнать, как создать бота, и получить пошаговые инструкции можно на сайте компании, что делает сервис доступным и понятным даже для начинающих пользователей.
Основы работы с библиотекой
Библиотека python-telegram-bot предоставляет класс Updater для получения обновлений и Dispatcher для обработки сообщений. В версии 21.0 введена поддержка Telegram Bot API 7.0, добавившая новые типы сообщений, такие как видео-круги. Начните с импорта: from telegram.ext import Application, CommandHandler, MessageHandler, filters.
Создайте приложение: application = Application.builder().token(‘ВАШ_ТОКЕН’).build(). Это основной объект для управления ботом. Добавьте обработчики команд. Например, для команды /start используйте async def start(update, context): await update.message.reply_text(‘Привет!’). Библиотека работает в асинхронном режиме с использованием asyncio, что повышает производительность при обработке тысяч запросов.
Запустите бота: await application.run_polling(). В polling-режиме бот каждые несколько секунд опрашивает сервер Telegram на наличие обновлений. Альтернатива — webhook, где сервер Telegram отправляет обновления напрямую на ваш сервер. Polling подходит для разработки, webhook — для производства.
Библиотека автоматически обрабатывает ошибки и повторные попытки. В документации указано, что среднее время отклика составляет менее 100 мс при хорошем соединении.
Создание простого эхо-бота
Эхо-бот — это базовый пример, который повторяет входящие сообщения. Он демонстрирует обработку текстовых сообщений. Вот нумерованный список шагов по созданию такого бота:
- Инициализация приложения и добавление обработчика сообщений. Сначала создайте файл bot.py. Импортируйте классы: from telegram.ext import Application, MessageHandler, filters. Постройте приложение с токеном. Добавьте обработчик: application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo)). Функция echo должна быть асинхронной: async def echo(update, context): await update.message.reply_text(update.message.text). Это обеспечит эхо-ответ на любое текстовое сообщение, кроме команд. Тестируйте, отправив сообщение боту в Telegram — он вернёт его обратно мгновенно.
- Запуск и отладка бота. Добавьте в конец скрипта: if name == ‘main‘: application.run_polling(). Запустите скрипт командой python bot.py. Бот перейдёт в режим ожидания обновлений. Если возникнут ошибки, библиотека выведет стек вызовов с указанием строки. Для логирования импортируйте logging и настройте уровень DEBUG. Это поможет отследить входящие обновления, которые приходят в формате JSON с полями like chat_id и text. После успешного запуска бот обработает до 30 сообщений в секунду на одном ядре процессора.
Этот пример использует фильтры для игнорирования команд, предотвращая бесконечные циклы.
Добавление команд и обработка ошибок
Расширьте бота командами. Добавьте /help: async def help_command(update, context): await update.message.reply_text(‘Доступные команды: /start, /help’). Зарегистрируйте: application.add_handler(CommandHandler(‘help’, help_command)). Команды начинаются с слеша и обрабатываются отдельно от обычных сообщений.
Для обработки ошибок добавьте: async def error_handler(update, context): logger.error(msg=»Exception:», exc_info=context.error). Это логирует исключения, такие как сетевое отключение. Библиотека автоматически повторяет запросы до 3 раз при временных ошибках.
Интегрируйте контекст: context.job_queue.run_once(callback, 10) для отложенных задач. Например, отправка сообщения через 10 секунд. Это полезно для напоминаний.
Развертывание бота
Для постоянной работы используйте webhook. Настройте сервер на Heroku или VPS. Установите aiohttp для обработки запросов. В application.run_webhook() укажите URL и порт. Telegram требует HTTPS, поэтому используйте сертификат от Let’s Encrypt.
Локально тестируйте с ngrok: ngrok http 8443. Это создаст публичный URL. В production бот выдерживает до 100 одновременных подключений без оптимизаций.
Мониторьте с помощью Telegram API метода getUpdates. Библиотека упрощает масштабирование.
Заключение
Создание Telegram-бота с python-telegram-bot доступно даже новичкам. Мы прошли от токена до развертывания, добавив команды и обработку. Библиотека эволюционирует: в 2025 году ожидается версия 22.0 с поддержкой AI-интеграций. Добавляйте базы данных как SQLite для хранения данных, изучите документацию на readthedocs.io для углубления.
Вопрос-ответ
Вопрос 1: Что такое Telegram-бот и зачем он нужен? Telegram-бот — это специальный аккаунт в мессенджере, управляемый программно, а не человеком. Он способен автоматически отвечать на сообщения, выполнять команды, отправлять уведомления, собирать данные и интегрироваться с внешними системами. Боты работают через Telegram Bot API — HTTP-интерфейс, позволяющий отправлять и получать обновления в реальном времени.
По сути, бот — это серверная программа, которая взаимодействует с пользователем через чат. Он может быть простым (например, эхо-бот) или сложным (например, бот для заказа еды с интеграцией платежей). Боты не имеют онлайн-статуса, не могут начинать диалог первыми (кроме рассылок), но могут отправлять сообщения в ответ на действия пользователя. Их популярность обусловлена простотой создания и широким функционалом: от автоматизации рутинных задач до построения полноценных сервисов.
Вопрос 2: Как получить токен для Telegram-бота? Токен выдается официальным ботом @BotFather при создании нового бота. Для этого в чате с BotFather отправьте команду /newbot, затем укажите имя бота (отображается в списке контактов) и username (уникальный, заканчивается на _bot). После этого BotFather пришлёт токен — строку вида 123456789:AAH…, состоящую из 35–46 символов.
Этот токен — ключ к управлению ботом. Его нужно хранить в секрете: утечка позволяет полностью захватить контроль над ботом. Рекомендуется использовать переменные окружения (например, .env-файл) или менеджеры секретов. Токен можно отозвать через BotFather командой /revoke, после чего старый перестанет работать, а будет выдан новый.
Вопрос 3: Что такое python-telegram-bot и чем она отличается от aiogram? python-telegram-bot — это обёртка над Telegram Bot API, написанная на Python, с поддержкой как синхронного, так и асинхронного режимов. На момент версии 21.0 она использует asyncio и httpx для сетевых запросов. Библиотека ориентирована на стабильность, подробную документацию и постепенное развитие.
В отличие от aiogram, которая изначально асинхронная и более современная по архитектуре, python-telegram-bot предлагает два интерфейса: старый (на основе Updater) и новый (на основе Application). Это делает её удобной для постепенного перехода. aiogram быстрее в высоконагруженных системах, но python-telegram-bot проще для новичков и лучше документирована.
Вопрос 4: Как установить python-telegram-bot? Установите библиотеку через pip: pip install python-telegram-bot==21.0. Рекомендуется использовать виртуальное окружение (python -m venv env), чтобы избежать конфликтов зависимостей. Версия 21.0 требует Python 3.8 или выше.
После установки проверьте работоспособность: создайте файл test.py с кодом from telegram import __version__; print(__version__). При успешной установке будет выведена версия библиотеки. Также можно установить дополнительные зависимости: pip install «python-telegram-bot[webhooks]» для поддержки вебхуков или pip install «python-telegram-bot[job-queue]» для планировщика задач.
Вопрос 5: Как работает polling в python-telegram-bot? Polling — это режим, при котором бот периодически опрашивает сервер Telegram на наличие новых обновлений через метод getUpdates. В python-telegram-bot за это отвечает метод application.run_polling(). Бот отправляет запрос каждые 1–3 секунды (интервал настраивается), получает массив обновлений и обрабатывает их по очереди.
Этот режим прост в настройке и подходит для локальной разработки. Однако он неэффективен при большом трафике: каждый опрос тратит ресурсы, даже если сообщений нет. При потере соединения библиотека автоматически восстанавливает polling с последнего известного update_id, избегая дублирования.
Вопрос 6: Что такое webhook и как его настроить? Webhook — это обратный вызов: вместо опроса сервер Telegram отправляет обновления напрямую на указанный URL. Это эффективнее polling, особенно при высокой нагрузке. В python-telegram-bot настройка осуществляется через application.run_webhook().
Требуется публичный HTTPS-сервер (порт 443, 80, 88 или 8443). Для локального тестирования используйте ngrok. Пример настройки: await application.run_webhook(listen=»0.0.0.0″, port=8443, url_path=TOKEN, webhook_url=»https://yourdomain.com/» + TOKEN). Telegram проверяет сертификат — подойдёт самоподписанный для тестов или от Let’s Encrypt для продакшена.
Вопрос 7: Как создать команду /start в боте? Команда /start — стандартная точка входа. В python-telegram-bot она регистрируется через CommandHandler. Пример:
async def start(update, context):
await update.message.reply_text('Привет! Я бот.')
application.add_handler(CommandHandler('start', start))
Функция должна быть асинхронной. При получении /start бот ответит приветствием.
Можно добавить аргументы: /start payload123. Они доступны через context.args. Это полезно для deep linking — перехода в бота с предзаполненными данями. Например, бот магазина может получать ID товара.
Вопрос 8: Как обрабатывать обычные текстовые сообщения? Для обработки текста используйте MessageHandler с фильтром filters.TEXT. Пример:
async def echo(update, context):
await update.message.reply_text(update.message.text)
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
Фильтр ~filters.COMMAND исключает команды, чтобы избежать конфликтов.
Бот получит любое текстовое сообщение и повторит его. Можно анализировать текст, искать ключевые слова, использовать регулярные выражения через filters.Regex.
Вопрос 9: Как добавить кнопки в сообщение? Кнопки создаются через InlineKeyboardMarkup. Пример:
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
keyboard = [[InlineKeyboardButton("Да", callback_data='1'), InlineKeyboardButton("Нет", callback_data='2')]]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_text('Выбор?', reply_markup=reply_markup)
Кнопки появляются под сообщением.
При нажатии генерируется CallbackQuery. Его нужно обрабатывать отдельно:
async def button(update, context):
query = update.callback_query
await query.answer()
await query.edit_message_text(f"Вы выбрали: {query.data}")
application.add_handler(CallbackQueryHandler(button))
Это позволяет создавать интерактивные меню.
Вопрос 10: Как использовать контекст (context) в обработчиках? context — объект, передающий данные между обработчиками. Включает bot, args, job_queue, user_data, chat_data. Например, context.user_data[‘count’] = 1 сохраняет данные пользователя.
Данные хранятся в памяти пока бот работает. Для постоянного хранения используйте базы данных. context.job_queue позволяет планировать задачи:
context.job_queue.run_once(reminder, 10, data="Напоминание!")
Через 10 секунд выполнится функция reminder.
Вопрос 10: Как логировать ошибки в боте? Используйте встроенный logging. Настройте:
import logging
logging.basicConfig(level=logging.ERROR)
async def error_handler(update, context):
logging.error(msg="Исключение:", exc_info=context.error)
application.add_error_handler(error_handler)
Все необработанные исключения попадут в лог.
Можно писать в файл: logging.basicConfig(filename=’bot.log’, level=logging.INFO). Это критически важно в продакшене: помогает отлаживать сбои, особенно при потере сети или некорректных обновлениях.
Вопрос 12: Как ограничить доступ к боту? Ограничьте команды по ID пользователя:
async def admin_command(update, context):
if update.effective_user.id != 123456789:
await update.message.reply_text("Доступ запрещён.")
return
# код команды
Или используйте фильтры: filters.User(user_id=123456789).
Для групповых чатов проверяйте update.effective_chat.type и права пользователя. Можно создать белый список через базу данных.
Вопрос 13: Как отправить фото или документ? Используйте методы send_photo, send_document:
await context.bot.send_photo(chat_id=update.effective_chat.id, photo=open('image.jpg', 'rb'))
Файл можно отправить из памяти: photo=bytes.
Для больших файлов используйте send_document. Telegram ограничивает размер: 50 МБ для ботов, 2 ГБ для премиум-пользователей.
Вопрос 14: Как работает планировщик задач (JobQueue)? JobQueue встроен в context. Пример:
def reminder(context):
context.job.context.message.reply_text('Время!')
context.job_queue.run_once(reminder, 60, context=update)
Задача выполнится через 60 секунд.
Поддерживаются повторяющиеся задачи: run_repeating, run_daily. Задачи сохраняются в памяти, при перезапуске бота — теряются.
Вопрос 15: Как обрабатывать inline-запросы (поиск)? Inline-режим включается в BotFather (/setinline). Обработчик:
async def inline_query(update, context):
query = update.inline_query.query
results = [InlineQueryResultArticle(id='1', title='Ответ', input_message_content=InputTextMessageContent(f'Вы ввели: {query}'))]
await update.inline_query.answer(results)
Пользователь вводит @botname текст — бот предлагает варианты.
Вопрос 16: Как развернуть бота на Heroku? Создайте Procfile: worker: python bot.py. Добавьте requirements.txt. Укажите токен в Config Vars. Используйте webhook или polling.
Heroku бесплатно поддерживает до 550 часов в месяц. Для webhook настройте HTTPS через автоматический сертификат.
Вопрос 17: Как использовать базу данных с ботом? Подключите SQLite или PostgreSQL. Пример с SQLite:
import sqlite3
conn = sqlite3.connect('users.db')
# создание таблицы, вставка, выборка
Сохраняйте user_id, состояние диалога, настройки.
Для асинхронности используйте aiosqlite.
Вопрос 18: Как реализовать многошаговый диалог (conversation)? Используйте ConversationHandler:
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={NAME: [MessageHandler(filters.TEXT, name)], AGE: [MessageHandler(filters.TEXT, age)]},
fallbacks=[CommandHandler('cancel', cancel)]
)
Бот запрашивает имя, затем возраст, сохраняя состояние.
Вопрос 19: Как защитить токен бота? Храните в .env: TOKEN=123:abc. Используйте python-dotenv:
from dotenv import load_dotenv
load_dotenv()
token = os.getenv('TOKEN')
Не коммитьте .env в Git.
Вопрос 20: Как обновить бота до новой версии API? python-telegram-bot автоматически поддерживает новые методы при обновлении. Проверьте changelog. Иногда требуется миграция (например, с Updater на Application).