Как создать телеграм-бота Python: подробное руководство для начинающих
Что такое Telegram-бот и почему стоит его создать
Telegram-бот — это специальная программа, которая работает в мессенджере Telegram и может выполнять различные функции: от простых ответов на сообщения до сложных операций с данными. По статистике Telegram, ежемесячно пользователи взаимодействуют более чем с 4 миллионами ботов, а их популярность растет на 20% каждый год.
Ключевые преимущества Telegram-ботов:
- Доступность 24/7 без перерывов
- Масштабируемость (могут обслуживать тысячи пользователей одновременно)
- Относительная простота разработки
- Быстрая интеграция с другими сервисами
- Автоматизация рутинных задач
Как отметил Павел Дуров, основатель Telegram: «Боты делают для мессенджеров то же, что приложения сделали для операционных систем, открывая новую эру в развитии коммуникационных платформ.»

Подготовка к созданию бота: необходимые инструменты
Прежде чем погрузиться в код, давайте подготовим все необходимое. Для создания телеграм-бота вам понадобятся:
Компонент | Где получить | Сложность установки | Назначение |
Python 3.6+ | python.org | Низкая | Основа для написания кода |
Библиотека python-telegram-bot | pip install python-telegram-bot | Низкая | Взаимодействие с API Telegram |
Токен бота | BotFather в Telegram | Средняя | Аутентификация бота |
Текстовый редактор | VSCode, PyCharm, и др. | Низкая | Написание и редактирование кода |
Представьте, что вы готовите все ингредиенты перед началом готовки сложного блюда. Здесь тот же принцип — правильная подготовка сделает процесс создания бота намного приятнее. А если в процессе создания бота вы поймете, что не хватает каких-то базовых навыков, поищите подходящее обучение Python-разработке, чтобы их восполнить.
Шаг 1: Регистрация бота в BotFather
BotFather — это официальный бот Telegram для создания и управления ботами. Работа с ним похожа на разговор с волшебником, который выдает ключи от новых возможностей. Вот пошаговая инструкция:
- Откройте Telegram и найдите @BotFather
- Отправьте команду /newbot
- Придумайте имя для своего бота (например, «Мой первый бот»)
- Придумайте username для бота, который обязательно должен заканчиваться на «bot» (например, «my_first_test_bot»)
- Получите токен — длинную строку символов, которая выглядит примерно так: 1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi
Важно! Храните токен в безопасном месте и не публикуйте его в открытом доступе. Это как ключ от вашей квартиры — с его помощью любой сможет управлять вашим ботом.
Совет от профессионала: Создайте отдельный файл config.py для хранения токена и других конфиденциальных данных. Затем добавьте этот файл в .gitignore, если используете систему контроля версий, чтобы случайно не опубликовать его.
Шаг 2: Установка Python и библиотек
Если у вас еще не установлен Python, скачайте и установите последнюю версию с официального сайта. При установке на Windows обязательно отметьте галочку «Add Python to PATH».
После установки Python откройте терминал (командную строку) и установите библиотеку для работы с Telegram API:
pip install python-telegram-bot
Существуют и другие библиотеки для создания Telegram-ботов на Python, каждая со своими особенностями:

Для нашего руководства мы выбрали python-telegram-bot, так как эта библиотека имеет отличную документацию и подходит для начинающих. Но знайте, что aiogram становится все популярнее среди русскоязычных разработчиков из-за хорошей поддержки асинхронного программирования.
Шаг 3: Создание базового бота
Давайте создадим простой бот, который будет отвечать на команду /start и обрабатывать текстовые сообщения. Создайте файл bot.py и скопируйте в него следующий код:
import logging
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
# Включаем логирование
logging.basicConfig(
format=’%(asctime)s — %(name)s — %(levelname)s — %(message)s’,
level=logging.INFO
)
# Определяем функцию для обработки команды /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
f»Привет, {update.effective_user.first_name}! Я твой первый бот. Напиши мне что-нибудь!»
)
# Определяем функцию для обработки текстовых сообщений
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(update.message.text)
# Основная функция
def main():
# Создаем приложение
application = Application.builder().token(‘ВАШТОКЕНЗДЕСЬ’).build()
# Добавляем обработчики
application.add_handler(CommandHandler(«start», start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
# Запускаем бота
application.run_polling()
if __name__ == ‘__main__’:
main()
Замените ‘ВАШТОКЕНЗДЕСЬ’ на токен, полученный от BotFather. Этот простой скрипт создает бота, который:
- Отвечает на команду /start приветственным сообщением
- Повторяет все текстовые сообщения, которые ему отправляют
Представьте, что ваш бот — это новорожденный ребенок, который только учится общаться. Сначала он просто повторяет за вами, но скоро научится гораздо большему!
Шаг 4: Запуск и тестирование бота
Теперь давайте запустим нашего бота. Откройте терминал, перейдите в папку с файлом bot.py и выполните команду:
python bot.py
Если все настроено правильно, вы увидите строки логирования, и ваш бот станет активным. Откройте Telegram, найдите своего бота по username, который вы задали в BotFather, и отправьте ему команду /start. Бот должен ответить приветствием.
Попробуйте отправить боту любой текст — он должен ответить тем же текстом, как эхо.
Распространенная проблема: Если бот не отвечает, проверьте следующее:
- Правильно ли вы ввели токен
- Запущен ли скрипт (в терминале должны быть строки логирования)
- Нет ли ошибок в консоли
Добавляем функциональность: кнопки и команды
Эхо-бот — это только начало. Давайте сделаем нашего бота более интерактивным, добавив кнопки и дополнительные команды.
Обновите файл bot.py следующим образом:
import logging
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, CallbackQueryHandler, filters, ContextTypes
# Включаем логирование
logging.basicConfig(
format=’%(asctime)s — %(name)s — %(levelname)s — %(message)s’,
level=logging.INFO
)
# Определяем функцию для обработки команды /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
keyboard = [
[InlineKeyboardButton(«Опция 1», callback_data=’1′),
InlineKeyboardButton(«Опция 2», callback_data=’2′)],
[InlineKeyboardButton(«Опция 3», callback_data=’3′)]
]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_text(
f»Привет, {update.effective_user.first_name}! Выбери опцию:»,
reply_markup=reply_markup
)
# Определяем функцию для обработки текстовых сообщений
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(f»Вы сказали: {update.message.text}»)
# Обработка нажатий на кнопки
async def button(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
await query.answer()
if query.data == ‘1’:
await query.edit_message_text(text=»Вы выбрали опцию 1″)
elif query.data == ‘2’:
await query.edit_message_text(text=»Вы выбрали опцию 2″)
elif query.data == ‘3’:
await query.edit_message_text(text=»Вы выбрали опцию 3″)
# Команда для отображения помощи
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(«Я могу:\n»
«/start — показать кнопки\n»
«/help — показать эту справку\n»
«Также я повторяю все, что вы мне пишете.»)
# Основная функция
def main():
# Создаем приложение
application = Application.builder().token(‘ВАШТОКЕНЗДЕСЬ’).build()
# Добавляем обработчики
application.add_handler(CommandHandler(«start», start))
application.add_handler(CommandHandler(«help», help_command))
application.add_handler(CallbackQueryHandler(button))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
# Запускаем бота
application.run_polling()
if __name__ == ‘__main__’:
main()
В этой версии мы добавили:
- Интерактивные кнопки к команде /start
- Обработчик нажатий на кнопки
- Команду /help для вывода справки
Теперь ваш бот может принимать решения в зависимости от того, какую кнопку нажал пользователь. Это уже серьезный шаг вперед!

Реальный пример: бот для погоды
Давайте создадим более практичного бота, который будет показывать погоду в указанном городе. Для этого нам понадобится API погоды — мы будем использовать OpenWeatherMap.
- Зарегистрируйтесь на OpenWeatherMap и получите бесплатный API ключ
- Установите библиотеку для работы с API: pip install requests
- Создайте файл weather_bot.py со следующим кодом:
import logging
import requests
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
# Конфигурация
TELEGRAM_TOKEN = ‘ВАШТОКЕНТЕЛЕГРАМ’
WEATHER_API_KEY = ‘ВАШКЛЮЧOPENWATERMAP’
# Включаем логирование
logging.basicConfig(
format=’%(asctime)s — %(name)s — %(levelname)s — %(message)s’,
level=logging.INFO
)
# Функция для получения погоды
def get_weather(city):
url = f»http://api.openweathermap.org/data/2.5/weather?q={city}&appid={WEATHER_API_KEY}&units=metric&lang=ru»
response = requests.get(url)
if response.status_code == 200:
data = response.json()
weather = {
‘city’: data[‘name’],
‘temp’: data[‘main’][‘temp’],
‘description’: data[‘weather’][0][‘description’],
‘humidity’: data[‘main’][‘humidity’],
‘wind’: data[‘wind’][‘speed’]
}
return weather
return None
# Команда /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
f»Привет, {update.effective_user.first_name}! Я бот погоды. «
f»Просто напиши название города, и я покажу текущую погоду.»
)
# Команда /help
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
«Напиши название города, чтобы узнать погоду. Например: Москва»
)
# Обработка сообщений с названием города
async def weather_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
city = update.message.text
weather = get_weather(city)
if weather:
message = (
f»🌆 Город: {weather[‘city’]}\n»
f»🌡 Температура: {weather[‘temp’]}°C\n»
f»🌤 Описание: {weather[‘description’]}\n»
f»💧 Влажность: {weather[‘humidity’]}%\n»
f»💨 Ветер: {weather[‘wind’]} м/с»
)
else:
message = «Не могу найти информацию для этого города. Проверьте название.»
await update.message.reply_text(message)
# Основная функция
def main():
# Создаем приложение
application = Application.builder().token(TELEGRAM_TOKEN).build()
# Добавляем обработчики
application.add_handler(CommandHandler(«start», start))
application.add_handler(CommandHandler(«help», help_command))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, weather_message))
# Запускаем бота
application.run_polling()
if __name__ == ‘__main__’:
main()
Этот бот демонстрирует, как интегрировать внешние API и создавать полезное приложение. Пользователь отправляет название города, бот делает запрос к API погоды и возвращает информацию в удобном формате.
История успеха: Михаил, веб-разработчик из Санкт-Петербурга, создал бота для своей компании, который оповещал команду о новых заказах. «Это сэкономило нам около 5 часов работы еженедельно. Вместо ручной проверки CRM, бот сразу оповещал ответственного менеджера о новом заказе, указывая всю необходимую информацию.»
Хостинг и непрерывная работа бота
Когда вы запускаете бота на своем компьютере, он работает только пока запущена программа. Для постоянной работы бота нужно разместить его на сервере. Есть несколько вариантов:
- VPS/VDS — виртуальный сервер, где вы можете запустить бота. Стоимость начинается от 200-300 рублей в месяц. Требует базовых знаний администрирования Linux.
- PythonAnywhere — сервис, специализирующийся на хостинге Python-приложений. Есть бесплатный план для небольших проектов.
- Heroku — популярная платформа для размещения приложений, есть бесплатный тариф с ограничениями.
- GitHub Actions — можно использовать для периодического запуска бота (не подходит для ботов, требующих постоянной работы).
Рассмотрим процесс размещения на VPS на примере Ubuntu:
- Подключитесь к серверу по SSH
- Установите Python и pip:
sudo apt update
sudo apt install python3 python3-pip - Создайте отдельную папку для бота и перенесите туда код:
mkdir ~/mybot
cd ~/mybot
# Здесь перенесите ваш файл bot.py на сервер
- Установите необходимые библиотеки:
pip3 install python-telegram-bot requests
- Запустите бота в фоновом режиме с помощью утилиты screen или nohup:
screen -S bot
python3 bot.py
- Отсоедините сессию screen (Ctrl+A, затем D), теперь бот будет работать даже после выхода из SSH
Для более профессиональной настройки стоит использовать systemd или supervisor для управления запуском бота как службы.

Продвинутые техники разработки
Когда вы освоите основы, вы можете перейти к более сложным функциям:
1. Асинхронное программирование
Библиотека python-telegram-bot поддерживает асинхронное программирование с использованием async/await. Это позволяет боту обрабатывать несколько запросов одновременно.
2. Состояния и диалоги
Для создания сложных диалогов с пользователем используйте ConversationHandler:
from telegram.ext import ConversationHandler
# Определяем состояния
FIRST, SECOND = range(2)
async def start_conversation(update, context):
await update.message.reply_text(«Как вас зовут?»)
return FIRST
async def first_response(update, context):
name = update.message.text
context.user_data[‘name’] = name
await update.message.reply_text(f»Приятно познакомиться, {name}! Сколько вам лет?»)
return SECOND
async def second_response(update, context):
age = update.message.text
name = context.user_data[‘name’]
await update.message.reply_text(f»Итак, вас зовут {name}, вам {age} лет. Спасибо за информацию!»)
return ConversationHandler.END
# В функции main добавляем:
conv_handler = ConversationHandler(
entry_points=[CommandHandler(‘dialog’, start_conversation)],
states={
FIRST: [MessageHandler(filters.TEXT & ~filters.COMMAND, first_response)],
SECOND: [MessageHandler(filters.TEXT & ~filters.COMMAND, second_response)]
},
fallbacks=[CommandHandler(‘cancel’, cancel)]
)
application.add_handler(conv_handler)
3. Интеграция с базами данных
Для хранения данных пользователей или другой информации можно использовать базы данных. Популярный и простой вариант — SQLite:
import sqlite3
# Создаем или подключаемся к базе данных
conn = sqlite3.connect(‘bot_database.db’)
cursor = conn.cursor()
# Создаем таблицу пользователей
cursor.execute(»’
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
username TEXT,
registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
»’)
conn.commit()
# Функция для сохранения пользователя
def save_user(user):
cursor.execute(
«INSERT OR IGNORE INTO users (user_id, first_name, last_name, username) VALUES (?, ?, ?, ?)»,
(user.id, user.first_name, user.last_name, user.username)
)
conn.commit()
# Добавляем в функцию start:
async def start(update, context):
user = update.effective_user
save_user(user)
# Остальной код…
Для более крупных проектов рассмотрите использование ORM, например, SQLAlchemy или Django ORM.
4. Работа с медиафайлами
Ваш бот может отправлять и получать изображения, видео, аудио и документы:
# Отправка изображения
async def send_image(update, context):
await update.message.reply_photo(
photo=open(‘image.jpg’, ‘rb’),
caption=’Описание изображения’
)
# Обработка полученных изображений
async def handle_photo(update, context):
# Получаем информацию о фото
photo_file = await update.message.photo[-1].get_file()
Что такое JSON и почему он так популярен? JSON (JavaScript Object Notation) — легковесный формат обмена данными, который легко читается как человеком, так и машиной. Представьте, что вам нужно быстро передать структурированную информацию между...
Основные методы удаления элементов из строки Давайте начнем с обзора наиболее эффективных методов работы со строками в Python. Каждый из них имеет свои преимущества в зависимости от конкретной задачи. Метод replace() — замена с удалением...
Виртуальное окружение (virtual environment) — это изолированное пространство, где Python может хранить зависимости, необходимые для конкретного проекта, не влияя на другие проекты или системные библиотеки. По сути, это как отдельная комната для ка...
Что такое словарь в Python и почему он так важен? Словарь в Python — это неупорядоченная коллекция пар "ключ-значение". В отличие от списков, где элементы индексируются числами, в словарях для доступа к данным используются ключи, которые могут...
Почему возникает необходимость преобразования Python в EXE Прежде чем погрузиться в технические детали, давайте разберемся, почему вообще стоит заморачиваться с созданием EXE-файлов: Простота распространения – пользователям не нужно...
Почему преобразование списка в строку так важно? В мире программирования на Python списки и строки — это два фундаментальных типа данных, с которыми мы постоянно работаем. Преобразование между ними — операция, которую практически каждый разрабо...