Как создать Telegram бота на Python: полный пример с кодом
Введение: зачем нужны Telegram боты
Telegram боты стали неотъемлемой частью современного бизнеса. Они автоматизируют поддержку клиентов, отправляют уведомления, управляют заказами и выполняют сотни других задач. По статистике Telegram, ежедневно через ботов проходит более 10 миллиардов сообщений.
Но прежде чем настроить любого бота — будь то оповещения о заказах или мониторинг сервера — вам нужно знать Chat ID группы или канала. Именно этот идентификатор указывается в конфигурации.
В этом руководстве мы создадим практически полезного бота: добавляете его в групповой чат, и он отправляет вам Chat ID в личные сообщения. Простой, но незаменимый инструмент для любого разработчика Telegram ботов.
Что вы узнаете:
- Как получить Telegram Bot Token через BotFather
- Основы работы с Telegram Bot API
- Полный рабочий код на Python с библиотекой python-telegram-bot
- Как развернуть бота на сервере
Время на создание: 20 минут
Что понадобится
Перед началом убедитесь, что у вас есть:
- Python 3.10+ — современная версия Python
- pip — менеджер пакетов Python
- Telegram аккаунт — для создания бота
- Текстовый редактор — VS Code, PyCharm или любой другой
Мы будем использовать библиотеку python-telegram-bot — самую популярную и хорошо документированную библиотеку для работы с Telegram Bot API на Python.
Шаг 1: Получение Telegram Bot Token
Telegram Bot Token — это уникальный ключ, который идентифицирует вашего бота. Без токена бот не сможет взаимодействовать с Telegram API.
Создание бота через BotFather
-
Откройте Telegram и найдите @BotFather — это официальный бот Telegram для создания других ботов
-
Отправьте команду /newbot
-
Введите имя бота — это отображаемое имя, например "Chat ID Helper"
-
Введите username бота — должен заканчиваться на bot, например chatid_helper_bot
-
BotFather отправит вам токен вида:
1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
Безопасное хранение токена
Никогда не храните токен в коде! Используйте переменные окружения:
export BOT_TOKEN="ваш_токен_здесь"
$env:BOT_TOKEN="ваш_токен_здесь"
Или создайте файл .env:
BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
И добавьте .env в .gitignore, чтобы токен не попал в репозиторий.
Шаг 2: Основы Telegram Bot API
Как работает Telegram Bot API
Telegram Bot API — это HTTP-интерфейс для взаимодействия ботов с серверами Telegram. Каждый бот отправляет запросы к API и получает ответы.
Основные концепции:
- Update — входящее событие (новое сообщение, нажатие кнопки, добавление в группу)
- Chat — диалог (личный чат, группа, супергруппа, канал)
- Message — сообщение с текстом, медиа или служебной информацией
Long Polling vs Webhooks
Существует два способа получать обновления:
Long Polling — бот периодически спрашивает у Telegram "есть что новое?":
- Проще в настройке
- Работает за NAT и firewall
- Подходит для разработки и небольших ботов
Webhooks — Telegram сам отправляет обновления на ваш сервер:
- Требует HTTPS и белый IP
- Эффективнее для высоконагруженных ботов
- Используется в продакшене
В этом руководстве мы используем Long Polling — он проще для старта.
Почему python-telegram-bot
Библиотека python-telegram-bot (известная также как py telegram bot api) — лучший выбор для Python-разработчиков:
- Полное покрытие Telegram Bot API
- Асинхронная архитектура (asyncio)
- Отличная документация
- Активное сообщество
- Поддержка Python 3.8+
Установка:
pip install python-telegram-bot
Шаг 3: Пишем Chat ID бота — полный пример
Теперь создадим бота, который:
- При команде
/start в личке — объясняет как пользоваться
- При добавлении в группу — отправляет Chat ID в личные сообщения
- При команде
/chatid — показывает ID текущего чата
Это классический telegram bot example, который демонстрирует основные паттерны разработки.
Полный код бота
Создайте файл chatid_bot.py:
"""
Chat ID Bot — Telegram бот для получения ID чатов
Добавьте бота в группу, и он отправит вам Chat ID в личные сообщения.
Использование:
1. Напишите /start боту в личных сообщениях
2. Добавьте бота в нужную группу
3. Получите Chat ID в личных сообщениях
"""
import os
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
)
logger = logging.getLogger(__name__)
TOKEN = os.getenv("BOT_TOKEN")
if not TOKEN:
raise ValueError(
"Токен бота не найден! "
"Установите переменную окружения BOT_TOKEN"
)
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
"""
Обработчик команды /start
Отправляет приветственное сообщение с инструкцией
"""
user = update.effective_user
welcome_text = (
f"Привет, {user.first_name}!\n\n"
"Я помогу узнать Chat ID любой группы или канала.\n\n"
"**Как использовать:**\n"
"1. Добавь меня в нужную группу\n"
"2. Я отправлю тебе Chat ID в личные сообщения\n\n"
"**Команды:**\n"
"/chatid — узнать ID текущего чата\n"
"/help — показать эту справку"
)
await update.message.reply_text(welcome_text, parse_mode="Markdown")
logger.info(f"Пользователь {user.id} ({user.username}) запустил бота")
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
"""
Обработчик команды /help
"""
await start_command(update, context)
async def chatid_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
"""
Обработчик команды /chatid
Показывает ID текущего чата
"""
chat = update.effective_chat
user = update.effective_user
chat_types = {
"private": "Личный чат",
"group": "Группа",
"supergroup": "Супергруппа",
"channel": "Канал"
}
chat_type = chat_types.get(chat.type, "Неизвестный тип")
if chat.type == "private":
response = (
f"**{chat_type}**\n\n"
f"Ваш User ID: `{user.id}`"
)
else:
response = (
f"**{chat_type}:** {chat.title}\n\n"
f"Chat ID: `{chat.id}`\n\n"
"_Скопируйте ID и используйте для настройки ботов_"
)
await update.message.reply_text(response, parse_mode="Markdown")
logger.info(f"Chat ID запрошен: {chat.id} ({chat.type})")
async def handle_new_chat_members(
update: Update,
context: ContextTypes.DEFAULT_TYPE
) -> None:
"""
Обработчик добавления новых участников в чат
Если добавили нашего бота — отправляем Chat ID в ЛС
"""
chat = update.effective_chat
user = update.effective_user
new_members = update.message.new_chat_members
bot_was_added = any(
member.id == context.bot.id
for member in new_members
)
if not bot_was_added:
return
logger.info(
f"Бот добавлен в чат '{chat.title}' (ID: {chat.id}) "
f"пользователем {user.id}"
)
try:
private_message = (
f"Вы добавили меня в чат!\n\n"
f"**Название:** {chat.title}\n"
f"**Chat ID:** `{chat.id}`\n\n"
"_Скопируйте этот ID для настройки ботов_"
)
await context.bot.send_message(
chat_id=user.id,
text=private_message,
parse_mode="Markdown"
)
await update.message.reply_text(
f"{user.first_name}, Chat ID отправлен в личные сообщения!"
)
except Exception as e:
logger.warning(f"Не удалось отправить ЛС пользователю {user.id}: {e}")
await update.message.reply_text(
f"{user.first_name}, я не могу отправить вам сообщение.\n\n"
f"Сначала напишите мне /start в личных сообщениях, "
f"а затем добавьте меня в группу снова.\n\n"
f"Или используйте команду /chatid прямо здесь."
)
async def handle_my_chat_member(
update: Update,
context: ContextTypes.DEFAULT_TYPE
) -> None:
"""
Обработчик изменения статуса бота в чате
Срабатывает когда бота добавляют/удаляют/повышают/понижают
"""
my_chat_member = update.my_chat_member
chat = my_chat_member.chat
user = my_chat_member.from_user
old_status = my_chat_member.old_chat_member.status
new_status = my_chat_member.new_chat_member.status
logger.info(
f"Статус бота изменён в '{chat.title}' ({chat.id}): "
f"{old_status} -> {new_status}"
)
def main() -> None:
"""
Точка входа — запуск бота
"""
application = Application.builder().token(TOKEN).build()
application.add_handler(CommandHandler("start", start_command))
application.add_handler(CommandHandler("help", help_command))
application.add_handler(CommandHandler("chatid", chatid_command))
application.add_handler(
MessageHandler(
filters.StatusUpdate.NEW_CHAT_MEMBERS,
handle_new_chat_members
)
)
logger.info("Бот запущен. Нажмите Ctrl+C для остановки.")
application.run_polling(allowed_updates=Update.ALL_TYPES)
if __name__ == "__main__":
main()
Разбор кода
Рассмотрим ключевые части:
Импорты и настройка:
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
Библиотека python-telegram-bot использует асинхронный подход. Application — это основной класс для управления ботом.
Обработчик /start:
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
user = update.effective_user
await update.message.reply_text(f"Привет, {user.first_name}!")
Все обработчики — асинхронные функции. update содержит входящее событие, context — дополнительные данные и методы.
Отслеживание добавления в группу:
application.add_handler(
MessageHandler(
filters.StatusUpdate.NEW_CHAT_MEMBERS,
handle_new_chat_members
)
)
Фильтр NEW_CHAT_MEMBERS срабатывает когда кто-то добавлен в чат, включая бота.
Отправка сообщения в ЛС:
await context.bot.send_message(
chat_id=user.id,
text="Сообщение",
parse_mode="Markdown"
)
Бот может отправить сообщение пользователю только если тот ранее начал диалог через /start.
Шаг 4: Запуск и тестирование
Установка зависимостей
Создайте файл requirements.txt:
python-telegram-bot>=20.0
python-dotenv>=1.0.0
Установите:
pip install -r requirements.txt
Запуск бота
export BOT_TOKEN="ваш_токен"
python chatid_bot.py
Тестирование
- Найдите бота в Telegram по username
- Отправьте
/start
- Добавьте бота в тестовую группу
- Проверьте, что Chat ID пришёл в личные сообщения
- В группе введите
/chatid — должен показать ID
Шаг 5: Деплой бота на сервер
Для постоянной работы бота нужен сервер. Рассмотрим простой вариант с systemd на Linux.
Подготовка сервера
mkdir -p /opt/chatid-bot
cd /opt/chatid-bot
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Systemd сервис
Создайте файл /etc/systemd/system/chatid-bot.service:
[Unit]
Description=Chat ID Telegram Bot
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/chatid-bot
Environment=BOT_TOKEN=ваш_токен_здесь
ExecStart=/opt/chatid-bot/venv/bin/python chatid_bot.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Запуск:
sudo systemctl daemon-reload
sudo systemctl enable chatid-bot
sudo systemctl start chatid-bot
sudo systemctl status chatid-bot
sudo journalctl -u chatid-bot -f
Docker (опционально)
Создайте Dockerfile:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY chatid_bot.py .
CMD ["python", "chatid_bot.py"]
Запуск:
docker build -t chatid-bot .
docker run -d \
--name chatid-bot \
-e BOT_TOKEN=ваш_токен \
--restart unless-stopped \
chatid-bot
Troubleshooting: частые проблемы
Бот не отправляет сообщения в ЛС
Проблема: При добавлении в группу бот не может отправить Chat ID в личные сообщения.
Причина: Telegram не позволяет ботам инициировать диалог. Пользователь должен сначала написать боту.
Решение: Инструктируйте пользователей сначала запустить бота через /start, а потом добавлять в группы.
Ошибка "Unauthorized"
Проблема: Бот не запускается с ошибкой 401 Unauthorized.
Причина: Неверный или отозванный токен.
Решение:
- Проверьте правильность токена
- Получите новый токен через @BotFather командой
/token
- Убедитесь что токен не содержит лишних пробелов
Бот не реагирует на команды в группе
Проблема: В группе бот игнорирует команды.
Причина: По умолчанию боты не получают сообщения в группах.
Решение: Отключите Privacy Mode через @BotFather:
/mybots
- Выберите бота
- Bot Settings → Group Privacy → Turn off
Rate limiting
Проблема: Бот перестаёт отвечать на некоторое время.
Причина: Telegram ограничивает количество запросов — 30 сообщений в секунду в один чат.
Решение: Добавьте задержки между отправками или используйте очереди сообщений.
FAQ
Как получить Telegram Bot Token?
Откройте @BotFather в Telegram, отправьте команду /newbot, следуйте инструкциям. BotFather выдаст токен формата 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz.
Какую Python библиотеку использовать для Telegram бота?
Рекомендуем python-telegram-bot (py telegram bot api) — она имеет полное покрытие Telegram Bot API, хорошую документацию и активное сообщество. Альтернатива — aiogram для тех, кто предпочитает более низкоуровневый контроль.
Как узнать Chat ID группы Telegram?
Используйте нашего бота: добавьте его в группу, и он отправит Chat ID в личные сообщения. Или используйте команду /chatid прямо в группе.
Telegram бот бесплатный?
Да, Telegram Bot API полностью бесплатен. Вы платите только за хостинг бота (сервер). Можно использовать бесплатные tier облачных провайдеров.
Как сделать бота админом группы?
В настройках группы → Администраторы → Добавить администратора → Выберите бота. Это нужно только если боту требуются дополнительные права (удалять сообщения, банить пользователей).
Можно ли создать бота для скачивания музыки?
Технически да — Telegram Bot API поддерживает отправку аудио файлов. Но учитывайте авторские права. Telegram bot for music должен использовать легальный контент.
Чем отличается группа от супергруппы?
Супергруппа — это расширенная версия группы с поддержкой до 200,000 участников, закреплённых сообщений, прав администраторов. При превышении 200 участников группа автоматически становится супергруппой. Chat ID при этом меняется!
Заключение
Мы создали полноценного Telegram бота на Python, который решает практическую задачу — получение Chat ID групп. Этот telegram bot example демонстрирует основные паттерны разработки:
- Работа с Telegram Bot API
- Обработка команд и событий
- Отправка сообщений в личные чаты
- Логирование и обработка ошибок
Код бота доступен для использования и модификации. Используйте его как основу для своих проектов.
Следующие шаги:
- Добавьте inline-кнопки для удобства
- Реализуйте сохранение истории в базу данных
- Настройте мониторинг работоспособности
Нужен профессиональный Telegram-бот?
Создать простого бота как в этом туториале — несколько часов работы. Но production-ready бот для бизнеса — с оплатой, интеграцией CRM, аналитикой и 99.5% uptime — требует серьёзной экспертизы.
Что мы разрабатываем:
- Боты для заказов и бронирований: рестораны, салоны, клиники
- E-commerce боты с каталогом, корзиной и Telegram Payments
- Автоматизация поддержки клиентов с AI
- Telegram Mini Apps — полноценные веб-приложения внутри Telegram
Разработка Telegram-ботов →
Разработка ботов от $60. Срок 2-4 недели. 6 месяцев поддержки включено.
Связанные услуги: