Development

Telegram бот на Python: как получить Chat ID — туториал 2025

Пошаговое руководство по созданию Telegram бота на Python. Получаем Bot Token, работаем с Telegram Bot API и пишем полезного бота для получения Chat ID групп. Полный рабочий код с python-telegram-bot.

Александр Майорский

30 ноя 2025
12 мин чтения
pythontelegrambotapitutorialtelegram bot apipython-telegram-bot
Telegram бот на Python: как получить Chat ID — туториал 2025

Как создать 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

  1. Откройте Telegram и найдите @BotFather — это официальный бот Telegram для создания других ботов

  2. Отправьте команду /newbot

  3. Введите имя бота — это отображаемое имя, например "Chat ID Helper"

  4. Введите username бота — должен заканчиваться на bot, например chatid_helper_bot

  5. BotFather отправит вам токен вида:

    1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
    

Безопасное хранение токена

Никогда не храните токен в коде! Используйте переменные окружения:

# Linux/macOS
export BOT_TOKEN="ваш_токен_здесь"

# Windows (PowerShell)
$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 бота — полный пример

Теперь создадим бота, который:

  1. При команде /start в личке — объясняет как пользоваться
  2. При добавлении в группу — отправляет Chat ID в личные сообщения
  3. При команде /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}"
    )

    # Пытаемся отправить Chat 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

Тестирование

  1. Найдите бота в Telegram по username
  2. Отправьте /start
  3. Добавьте бота в тестовую группу
  4. Проверьте, что Chat ID пришёл в личные сообщения
  5. В группе введите /chatid — должен показать ID

Шаг 5: Деплой бота на сервер

Для постоянной работы бота нужен сервер. Рассмотрим простой вариант с systemd на Linux.

Подготовка сервера

# Создайте директорию для бота
mkdir -p /opt/chatid-bot
cd /opt/chatid-bot

# Скопируйте файлы
# chatid_bot.py
# requirements.txt

# Создайте виртуальное окружение
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.

Причина: Неверный или отозванный токен.

Решение:

  1. Проверьте правильность токена
  2. Получите новый токен через @BotFather командой /token
  3. Убедитесь что токен не содержит лишних пробелов

Бот не реагирует на команды в группе

Проблема: В группе бот игнорирует команды.

Причина: По умолчанию боты не получают сообщения в группах.

Решение: Отключите Privacy Mode через @BotFather:

  1. /mybots
  2. Выберите бота
  3. 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 месяцев поддержки включено.

Связанные услуги:

Понравилась статья?

Поделитесь с коллегами и друзьями

Нужна консультация по проекту?

Обсудим вашу задачу и предложим оптимальное решение

Наши работы