Создаем Telegram-бота на Python: Подробное руководство для начинающих
Узнайте, как бесплатно создать мощного Telegram-бота на Python. Это пошаговое руководство охватывает все: от настройки API до развертывания вашего собственного Telegram-бота.
Создание собственного Telegram-бота на Python открывает огромные возможности и гибкость. Независимо от того, хотите ли вы автоматизировать задачи, создавать интерактивные сервисы или просто экспериментировать с мощным API Telegram, Python — отличный выбор благодаря своей простоте и обширным библиотекам. В этом подробном руководстве мы проведем вас через весь процесс создания вашего первого проекта Telegram-бота на Python, от настройки среды разработки до написания функционального кода и развертывания вашего бота.
Читабельность Python и активное сообщество, поддерживающее библиотеку python-telegram-bot, делают его отличной отправной точкой как для новичков, так и для опытных разработчиков. К концу этого руководства у вас будет полностью рабочий Telegram-бот, готовый взаимодействовать с пользователями.
Ключевые моменты
- Вы узнаете, как зарегистрировать своего бота в BotFather и получить токен API.
- Мы рассмотрим настройку вашей среды разработки Python и установку необходимых библиотек.
- Вы напишете код для обработки базовых команд и сообщений.
- Мы изучим, как добавить более сложные функции в вашего бота.
- Вы поймете основы развертывания вашего приложения Telegram-бота на Python.
1. Настройка Telegram-бота и среды разработки
Прежде чем погрузиться в код, вам необходимо настроить своего бота в Telegram и подготовить среду Python.
1.1 Создание бота с помощью BotFather
Первый шаг для любого Telegram-бота — это регистрация его в BotFather, официальном боте Telegram для управления другими ботами.
- Откройте Telegram и найдите @BotFather: В вашем приложении Telegram найдите “@BotFather” и начните чат. Убедитесь, что это официальный бот с синей галочкой верификации.
- Начните процесс создания бота: Введите
/newbotи отправьте сообщение. - Выберите имя: BotFather попросит вас ввести имя для вашего бота. Это удобочитаемое название, которое будут видеть пользователи (например, “Мой крутой бот”).
- Выберите имя пользователя: Затем выберите уникальное имя пользователя для вашего бота. Оно должно заканчиваться на “bot” (например,
my_awesome_bot). Если имя пользователя занято, BotFather попросит вас попробовать другое. - Получите токен API: После успешного создания BotFather предоставит вам токен HTTP API. Этот токен крайне важен, так как он действует как пароль для вашего бота. Храните его в безопасности и никогда не делитесь им публично. Он будет выглядеть примерно так:
123456:ABC-DEF1234ghIkl-zyx57W23L1qR_456.
1.2 Установка Python и pip
Если у вас еще не установлен Python, загрузите последнюю стабильную версию с официального сайта Python (https://www.python.org/downloads/). Во время установки убедитесь, что вы установили флажок “Add Python to PATH” для более удобного доступа из командной строки.
pip — это установщик пакетов Python, и обычно он поставляется предустановленным с Python. Вы можете проверить установку Python и pip, открыв терминал или командную строку и введя:
python --version
pip --version
1.3 Установка библиотеки python-telegram-bot
Библиотека python-telegram-bot — это популярная и надежная обертка для Telegram Bot API. Она упрощает взаимодействие с API, значительно облегчая разработку вашего бота.
Установите ее с помощью pip:
pip install python-telegram-bot
Теперь вы успешно настроили своего бота и среду разработки. Перейдем к написанию кода!
2. Ваш первый код Telegram-бота на Python: Эхо-бот
Мы начнем с классики: эхо-бота. Этот бот будет просто повторять любое полученное сообщение. Этот простой пример научит вас основным концепциям обработки сообщений.
2.1 Импорт необходимых модулей
Создайте новый файл Python (например, my_telegram_bot.py) и начните с импорта необходимых компонентов из библиотеки telegram.
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import logging
import os
Update: Представляет входящее обновление от Telegram (например, новое сообщение, команда).Application: Основной класс, управляющий жизненным циклом вашего бота.CommandHandler: Используется для регистрации обработчиков для конкретных команд (например,/start,/help).MessageHandler: Используется для регистрации обработчиков для различных типов сообщений (текст, фотографии и т.д.).filters: Предоставляет удобные фильтры для указания того, на какие сообщения должен отвечатьMessageHandler.logging: Хорошая практика для отладки и понимания поведения вашего бота.os: Для безопасной загрузки вашего токена API из переменных окружения.
2.2 Настройка логирования
Логирование необходимо для устранения неполадок. Добавьте следующие строки в ваш скрипт:
# Включаем логирование
logging.basicConfig(
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
)
logger = logging.getLogger(__name__)
2.3 Определение наших обработчиков
Обработчики — это функции, которые обрабатывают входящие обновления.
Обработчик команды start:
Эта функция будет вызываться, когда пользователь отправит команду /start.
async def start(update: Update, context):
"""Отправляет приветственное сообщение при получении команды /start."""
user = update.effective_user
await update.message.reply_html(
f"Привет, {user.mention_html()}! Я эхо-бот. Отправь мне что-нибудь!",
# reply_markup=ForceReply(selective=True), # Опционально: принудительный ответ на это сообщение
)
Обработчик сообщений echo:
Эта функция будет повторять любое полученное текстовое сообщение.
async def echo(update: Update, context):
"""Повторяет сообщение пользователя."""
await update.message.reply_text(update.message.text)
Обработчик команды help_command:
Простая команда помощи.
async def help_command(update: Update, context):
"""Отправляет сообщение с помощью."""
await update.message.reply_text("Отправь мне любое сообщение, и я повторю его!")
2.4 Функция main: Собираем все вместе
Функция main — это место, где мы инициализируем нашего бота, регистрируем обработчики и начинаем опрос на наличие обновлений.
def main() -> None:
"""Запускает бота."""
# Получаем токен API из переменных окружения (ЛУЧШАЯ ПРАКТИКА!)
# Альтернативно, вы можете жестко закодировать его здесь для быстрого тестирования: TOKEN = "ВАШ_ТОКЕН_ТЕЛЕГРАМ_БОТА"
TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN")
if not TOKEN:
raise ValueError("Переменная окружения TELEGRAM_BOT_TOKEN не установлена.")
# Создаем Application и передаем ему токен вашего бота.
application = Application.builder().token(TOKEN).build()
# Регистрируем обработчики
application.add_handler(CommandHandler("start", start))
application.add_handler(CommandHandler("help", help_command))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
# Запускаем бота до тех пор, пока пользователь не нажмет Ctrl-C
application.run_polling(allowed_updates=Update.ALL_TYPES)
if __name__ == "__main__":
main()
2.5 Запуск бота локально
-
Установите ваш токен API как переменную окружения:
- Linux/macOS:
export TELEGRAM_BOT_TOKEN="ВАШ_API_ТОКЕН_ЗДЕСЬ" - Windows (Командная строка):
set TELEGRAM_BOT_TOKEN="ВАШ_API_ТОКЕН_ЗДЕСЬ" - Windows (PowerShell):
$env:TELEGRAM_BOT_TOKEN="ВАШ_API_ТОКЕН_ЗДЕСЬ"В качестве альтернативы, для быстрого локального тестирования, вы можете заменитьos.environ.get("TELEGRAM_BOT_TOKEN")на вашу фактическую строку токена непосредственно в коде (например,TOKEN = "123456:ABCDEF..."), но это не рекомендуется для продакшена.
- Linux/macOS:
-
Запустите ваш Python-скрипт: Перейдите в каталог, где вы сохранили
my_telegram_bot.py, в вашем терминале и запустите:python my_telegram_bot.py -
Взаимодействуйте с вашим ботом: Откройте Telegram, найдите имя пользователя вашего бота (например,
@my_awesome_bot) и начните чат. Попробуйте отправить/start,/helpили любое текстовое сообщение. Ваш бот должен ответить!
Поздравляем! Вы только что создали и запустили свое первое приложение Telegram-бота на Python.

3. Добавление более продвинутых функций
Эхо-бот — это круто, но давайте сделаем его более полезным. Вот идеи для расширения вашего Telegram-бота.
3.1 Обработка различных типов сообщений
Помимо обычного текста, Telegram поддерживает фотографии, видео, документы и многое другое. Вы можете использовать filters для специальной обработки этих типов.
Пример: Ответ на фотографии
async def handle_photo(update: Update, context):
"""Отвечает на фотографию сообщением-подтверждением."""
# Вы можете получить доступ к деталям фотографии через update.message.photo
# Список содержит разные размеры одной и той же фотографии; последний обычно самый большой.
photo_file_id = update.message.photo[-1].file_id
await update.message.reply_text("Отличное фото! Я его получил.")
# Добавьте этот обработчик в вашу основную функцию
# application.add_handler(MessageHandler(filters.PHOTO, handle_photo))
3.2 Использование инлайн-клавиатур и клавиатур для ответа
Клавиатуры предоставляют структурированные варианты взаимодействия для пользователей.
- Клавиатуры для ответа (Reply Keyboards): Появляются над полем ввода сообщения, фактически заменяя стандартную клавиатуру. Отлично подходят для предопределенных вариантов выбора.
- Инлайн-клавиатуры (Inline Keyboards): Прикрепляются непосредственно к сообщению, с кнопками, которые могут вызывать колбэки или открывать URL-адреса. Идеально подходят для интерактивных меню.
Пример: Инлайн-клавиатура
Давайте изменим нашу команду /start, чтобы предложить кнопки.
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, CallbackQueryHandler, filters
# ... (другие импорты и логирование) ...
async def start(update: Update, context):
"""Отправляет приветственное сообщение с инлайн-клавиатурой."""
user = update.effective_user
keyboard = [
[InlineKeyboardButton("Посетить TeleClaw", url="https://teleclaw.bot")],
[InlineKeyboardButton("О боте", callback_data="about")],
]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_html(
f"Привет, {user.mention_html()}! Добро пожаловать в моего бота. Что бы вы хотели сделать?",
reply_markup=reply_markup,
)
async def button_callback(update: Update, context):
"""Обрабатывает запросы обратного вызова от кнопок инлайн-клавиатуры."""
query = update.callback_query
await query.answer() # Всегда отвечайте на запросы обратного вызова
if query.data == "about":
await query.edit_message_text(text="Это простой демонстрационный бот, созданный с помощью Python и библиотеки `python-telegram-bot`.")
# Добавьте больше условий для других значений callback_data
Вам нужно будет обновить вашу функцию main, чтобы включить CallbackQueryHandler:
# ... внутри main() ...
application.add_handler(CommandHandler("start", start))
application.add_handler(CallbackQueryHandler(button_callback)) # Добавьте эту строку
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
# ...
Это демонстрирует связывание с внешним сайтом, таким как TeleClaw, и выполнение действия внутри бота. Вы можете узнать больше о различных вариантах клавиатуры в документации python-telegram-bot (https://docs.python-telegram-bot.org/en/stable/telegram.keyboardbutton.html).
3.3 Интеграция с внешними API
Истинная мощь разработки Telegram-бота на Python заключается в его способности интегрироваться со сторонними сервисами. Вы можете получать данные о погоде, текущие новости, переводить текст или даже интегрироваться с моделями ИИ.
Пример: Простой вызов API (с использованием библиотеки requests)
Сначала установите requests: pip install requests.
import requests
async def get_fact(update: Update, context):
"""Получает случайный факт из внешнего API."""
try:
response = requests.get("https://uselessfacts.jsph.pl/api/v2/facts/random")
response.raise_for_status() # Вызывает HTTPError для плохих ответов (4xx или 5xx)
fact_data = response.json()
await update.message.reply_text(f"Знаете ли вы? {fact_data['text']}")
except requests.exceptions.RequestException as e:
logger.error(f"Ошибка при получении факта: {e}")
await update.message.reply_text("Извините, я не смог получить факт прямо сейчас. Пожалуйста, попробуйте позже.")
# Добавьте этот обработчик команд:
# application.add_handler(CommandHandler("fact", get_fact))
Это демонстрирует, как бот может взаимодействовать с внешними источниками данных, точно так же, как @claw интегрируется с различными сервисами для предоставления сложных функций. Для более продвинутых взаимодействий с ИИ рассмотрите использование платформ, таких как TeleClaw, которые абстрагируют сложности интеграции с моделями, такими как GPT-4 или Gemini. Вы можете прочитать больше об интеграции инструментов ИИ в нашей статье о том, как создать Telegram-чат-бота.

4. Постоянное хранение данных и управление состоянием
Для более сложных ботов вам понадобится способ хранения данных между взаимодействиями. Например, если вашему боту нужно запоминать предпочтения пользователя или текущие разговоры.
4.1 Использование context.user_data и context.chat_data
Библиотека python-telegram-bot предоставляет словари context.user_data и context.chat_data (доступные в ваших функциях-обработчиках), которые могут хранить временные данные, связанные с пользователем или чатом. Эти данные сохраняются на протяжении всего времени работы бота.
async def set_favorite_color(update: Update, context):
"""Позволяет пользователям установить свой любимый цвет."""
if context.args:
color = " ".join(context.args).strip()
context.user_data["favorite_color"] = color
await update.message.reply_text(f"Хорошо, я записал ваш любимый цвет как {color}.")
else:
await update.message.reply_text("Пожалуйста, назовите мне свой любимый цвет, например, /setcolor синий")
async def get_favorite_color(update: Update, context):
"""Сообщает пользователю его любимый цвет."""
color = context.user_data.get("favorite_color")
if color:
await update.message.reply_text(f"Ваш любимый цвет: {color}.")
else:
await update.message.reply_text("Я еще не знаю ваш любимый цвет. Используйте /setcolor.")
# Добавьте эти обработчики:
# application.add_handler(CommandHandler("setcolor", set_favorite_color))
# application.add_handler(CommandHandler("getcolor", get_favorite_color))
4.2 Сохранение данных при перезапусках
Чтобы данные сохранялись даже при перезапуске вашего скрипта бота, вам потребуется более надежное решение, такое как:
- Файлы (CSV, JSON): Просто для небольших объемов данных.
- Базы данных (SQLite, PostgreSQL, MongoDB): Рекомендуется для более крупного и сложного хранения данных.
SQLite— хороший выбор для локальной разработки, так как она основана на файлах и не требует отдельного сервера. - Сторонние решения для хранения: Облачные базы данных, такие как Firestore или DynamoDB.
Библиотека python-telegram-bot также предлагает классы BasePersistence, которые можно использовать с PicklePersistence или DictPersistence для сохранения user_data, chat_data и bot_data в файл. Обратитесь к официальным примерам python-telegram-bot для получения информации о том, как использовать постоянное хранение (https://docs.python-telegram-bot.org/en/stable/telegram.ext.basepersistence.html).
5. Вопросы развертывания
Запуск бота на вашей локальной машине подходит для разработки, но для того, чтобы он был доступен 24/7, вам нужно развернуть его на сервере.
5.1 Опрос (Polling) против вебхуков (Webhooks)
Существует два основных способа получения обновлений Telegram-ботом:
- Длительный опрос (Long Polling): Ваш бот постоянно запрашивает у серверов Telegram новые обновления. Это то, что мы использовали с
application.run_polling(). Просто в настройке, но может быть ресурсоемким для очень активных ботов. - Вебхуки (Webhooks): Вы сообщаете Telegram URL вашего сервера. Когда происходит обновление, Telegram отправляет HTTP POST-запрос на этот URL. Более эффективно для продакшена, но требует общедоступного сервера и обработки HTTPS.
Для простых ботов и начальной разработки длительного опроса достаточно. Для продакшена вебхуки обычно предпочтительнее. Библиотека python-telegram-bot поддерживает оба варианта.
5.2 Платформы для развертывания
Несколько платформ подходят для развертывания Python-ботов:
- Heroku: Отлично подходит для малых и средних проектов, с бесплатным тарифом. Легко развертывается с помощью
git. - Render: Похож на Heroku, но часто предлагает более щедрые бесплатные тарифы и современные функции.
- AWS (EC2, Lambda), Google Cloud (Compute Engine, Cloud Functions), Azure (App Service, Functions): Предлагают мощные, масштабируемые решения, но имеют более крутую кривую обучения.
- Виртуальные частные серверы (VPS): Сервисы, такие как DigitalOcean, Linode, Vultr, дают вам больше контроля, но вы несете ответственность за управление сервером.
При развертывании помните:
- Держите ваш токен API в безопасности: Используйте переменные окружения.
- Установите зависимости: Создайте файл
requirements.txt(pip freeze > requirements.txt) и убедитесь, что ваш хост их устанавливает. - Настройте менеджеры процессов: Инструменты, такие как
systemdилиpm2, могут поддерживать работу вашего бота, даже если он аварийно завершится.
Для коммерческих приложений или высокомасштабируемых ботов на базе ИИ платформы, такие как TeleClaw, предоставляют надежную, управляемую среду. Они берут на себя инфраструктуру, безопасность и масштабирование, позволяя вам сосредоточиться на логике вашего бота и пользовательском опыте. Ознакомьтесь с нашим подробным руководством по Telegram-боту для бизнеса, чтобы узнать, что предлагает TeleClaw.
Заключение
Теперь вы изучили основные принципы создания приложения Telegram-бота на Python. От первоначальной настройки с BotFather и конфигурации среды до написания обработчиков для команд и сообщений, обработки различных типов данных и рассмотрения стратегий развертывания — у вас есть прочная основа. Библиотека python-telegram-bot делает взаимодействие с Telegram API удивительно простым, открывая мир возможностей для автоматизации и взаимодействия.
По мере того, как вы будете чувствовать себя более уверенно, вы сможете изучить более продвинутые темы, такие как:
- Обработка разговоров с помощью
ConversationHandler. - Обработка ошибок и надежное логирование.
- Интеграция с базами данных для сложного хранения данных.
- Использование более продвинутых
filters. - Реализация инлайн-режима для глобальных возможностей поиска.
Помните, что красота открытости Telegram и универсальности Python заключается в том, что вы можете создать практически все, что угодно. Если вы хотите улучшить своего бота с помощью передового ИИ, понимания естественного языка или бесшовной интеграции без тяжелого бремени кодирования, платформы, такие как TeleClaw, созданы для того, чтобы расширить ваши возможности.
Готовы создавать, улучшать или управлять своими Telegram-ботами с помощью интеллектуальной автоматизации?
Изучите TeleClaw сегодня и прокачайте своего Telegram-бота! или попробуйте нашего бота напрямую в Telegram: @claw
FAQ
Часто задаваемые вопросы
Каковы основные шаги для создания Telegram-бота на Python?
Нужен ли мне опыт программирования, чтобы следовать этому руководству по созданию Telegram-бота на Python?
Как TeleClaw может помочь в моем проекте Telegram-бота на Python?
Продолжить чтение
Лучшие ИИ-агенты для бизнеса в 2026 году: подробный гид по категориям
Самый понятный способ сравнить ИИ-агентов для бизнеса в 2026 году: шесть реальных категорий, честные рекомендации и место Telegram-ориентированного агента, такого как TeleClaw.
Облачные агенты TeleClaw: запускайте кодирующего агента прямо из Telegram
TeleClaw включен в категорию облачных агентов OpenRouter. Узнайте, что такое облачный агент, как 2026 год изменил эту сферу и как запустить такого агента из Telegram.