Перейти к основному контенту
GPTBot

Как создать Telegram-бота на Python с нуля

Автор: Опубликовано Обновлено
Telegram-бот на Python: BotFather, обработчики, база данных и сервер
Минимальная цепочка: Telegram передаёт обновление Python-приложению, обработчик выполняет сценарий, при необходимости обращается к базе или API и отправляет ответ.

Telegram-бот на Python: короткий план запуска

  • Опишите одно целевое действие: ответ, заявка, запись, заказ или уведомление.
  • Создайте бота через официальный @BotFather и сохраните токен вне исходного кода.
  • Установите актуальную поддерживаемую версию Python и создайте отдельное виртуальное окружение.
  • Выберите один фреймворк: aiogram или python-telegram-bot.
  • Добавьте /start, один основной обработчик, понятную ошибку и передачу оператору.
  • Запустите polling для локальной разработки, а перед production выберите polling или webhook осознанно.
  • Добавьте хранение состояния, логи, мониторинг, резервное копирование и только затем ведите трафик.

Если аккаунт ещё не зарегистрирован, начните с общей инструкции по созданию Telegram-бота: там разобраны BotFather, username, команды и выбор способа разработки.

Что нужно установить до начала разработки

Подготовьте Python, редактор кода, Git и виртуальное окружение. Изоляция зависимостей важна даже для маленького проекта: она фиксирует совместимые версии библиотек и уменьшает риск, что обновление другого приложения сломает бота. Секреты храните в переменных окружения или менеджере секретов, а файл с локальными значениями исключите из репозитория.

КомпонентДля прототипаДля production
PythonПоддерживаемая версия и venvЗафиксированная версия среды и зависимостей
Telegram-фреймворкaiogram или python-telegram-botОдин выбранный стек, тесты обновлений
ДанныеПамять процесса или файл для экспериментаНадёжная база данных и резервные копии
ЗапускPolling на компьютереСерверный процесс или HTTPS webhook
НаблюдаемостьВывод ошибок в консольСтруктурные логи, метрики и уведомления

Aiogram или python-telegram-bot: что выбрать

Обе библиотеки закрывают типовые задачи Telegram Bot API. Aiogram строится вокруг асинхронного Python, роутеров, фильтров, middleware и конечных автоматов состояний. Python-telegram-bot предлагает объект Application, обработчики и готовые способы запуска через polling или webhook. Выбор влияет меньше, чем качество структуры проекта: не смешивайте бизнес-логику, запросы к базе и Telegram-обработчики в одной функции.

Не копируйте пример для старой major-версии библиотеки. Синтаксис и жизненный цикл фреймворков меняются; сверяйте шаблон с документацией установленной версии.

Правильная структура проекта Telegram-бота

Для учебного echo-бота достаточно одного файла, но бизнес-сценарий быстро разрастается. Разделите конфигурацию, обработчики, сервисы, доступ к данным и тесты. Тогда Telegram остаётся одним из каналов, а правила заявки, расчёта или заказа можно проверять независимо.

  • config — чтение переменных окружения и проверка обязательных настроек;
  • handlers — команды, сообщения, callback-кнопки и маршрутизация;
  • services — заявки, каталог, расчёты, CRM и внешние API;
  • repositories — запросы к базе данных без Telegram-специфики;
  • middlewares — авторизация, язык, лимиты и единый контекст;
  • tests — сценарии, ошибки интеграций и повторная доставка событий;
  • main — сборка приложения и корректный запуск или остановка.

Как собрать первый рабочий сценарий

Начните с /start и одного результата. Например, бот показывает три услуги, задаёт два уточняющих вопроса, просит контакт, повторяет введённые данные и только после подтверждения создаёт заявку. Для каждого шага определите допустимый ввод, кнопку назад, отмену, тайм-аут и сообщение при технической ошибке.

Если цель — лидогенерация, используйте отдельную схему Telegram-бота для заявок: она связывает источник рекламы, квалификацию, CRM, ответственного и статус продажи.

Состояния, база данных и повторные события

Состояние диалога нельзя надёжно держать только в памяти процесса: после перезапуска оно исчезнет. Сохраняйте минимально необходимый контекст — идентификатор пользователя, текущий шаг, выбранные значения, время изменения и технический статус. Не собирайте данные «на будущее». Для телефона, адреса и других персональных сведений определите основание обработки, срок хранения и доступ команды.

Обработчики должны выдерживать повтор. Пользователь может нажать кнопку дважды, а внешняя система — повторно доставить событие. Создание заявки, заказа или оплаты делайте идемпотентным: сохраняйте уникальный ключ операции и возвращайте уже известный результат вместо дубля.

Polling или webhook для Python-бота

КритерийLong pollingWebhook
Получение обновленийПриложение запрашивает TelegramTelegram отправляет HTTPS POST
Локальная разработкаПроще начатьНужен публичный HTTPS endpoint или туннель
РазмещениеНужен постоянно работающий процессНужен доступный HTTPS-маршрут
БезопасностьЗащита токена и сервераДополнительно проверка secret_token
ОграничениеНе работает при установленном webhookНе совмещается с getUpdates

Telegram документирует getUpdates и webhook как взаимоисключающие способы. Для webhook задайте секретный токен и проверяйте заголовок X-Telegram-Bot-Api-Secret-Token. Возвращайте успешный ответ быстро, а тяжёлую обработку переносите в очередь, иначе Telegram может повторить доставку.

Выбор VPS, облачной платформы или serverless зависит от режима обновлений и данных. Практические критерии собраны в руководстве по хостингу Telegram-бота.

Как подключать CRM, оплату и внешние API

Внешний сервис вызывайте через отдельный клиент с тайм-аутом, ограниченным числом повторов и понятным исключением. Не сообщайте пользователю «успех», пока критичная операция не подтверждена системой-источником. Для CRM сохраняйте внешний ID и статус синхронизации. Для оплаты проверяйте результат на backend, а не по сообщению клиента.

Для генеративных ответов добавляется ещё один backend-вызов. Полная схема, защита ключей и контроль фактов разобраны в статье как подключить ChatGPT к Telegram-боту.

Безопасность токена и пользовательских данных

  • Не храните токен BotFather и ключи API в коде, скриншотах и публичном Git-репозитории.
  • Ограничьте доступ к production-секретам и ведите журнал их замены.
  • При утечке сразу перевыпустите токен через BotFather и обновите среду.
  • Проверяйте тип, длину и допустимые значения каждого пользовательского поля.
  • Не записывайте в логи полные телефоны, документы, платёжные данные и тексты приватных диалогов.
  • Разделите права администратора, оператора и технической поддержки.
  • Ограничьте частоту запросов и обработайте массовые повторные нажатия.

Что проверить перед запуском

Пройдите сценарий с нового аккаунта и с уже заполненным профилем. Проверьте неверный текст вместо кнопки, пустое значение, длинное сообщение, повторный callback, отключение базы, тайм-аут CRM, перезапуск процесса и возврат после паузы. Отдельно проверьте русский, узбекский и смешанный ввод, если бот заявлен как двуязычный.

Готовность определяется не тем, что /start отвечает, а тем, что целевое действие завершается без дублей, данные доходят ответственному, а сбой заметен команде.

Логи, мониторинг и поддержка Python-бота

Лог должен помогать восстановить цепочку события без чтения личной переписки. Записывайте технический request ID, update_id, тип обработчика, длительность, код результата внешнего сервиса и категорию ошибки. Телефон, текст сообщения, токены и платёжные реквизиты маскируйте или не сохраняйте. Для production разделяйте информационные события и ошибки, задавайте срок хранения и ограничивайте доступ.

Мониторинг должен замечать не только падение процесса. Отслеживайте рост необработанных событий, время ответа, ошибки Telegram Bot API, базы и CRM, а также падение числа завершённых заявок. Для критичного сценария настройте уведомление ответственному и короткую инструкцию: как проверить healthcheck, логи, webhook, подключение к базе и последнюю версию.

  • Добавьте correlation ID и передавайте его между обработчиком, сервисом и CRM.
  • Создайте безопасную команду или endpoint для проверки состояния зависимостей.
  • Проверяйте автоматический перезапуск и корректное завершение процесса.
  • Храните номер версии в логах, чтобы быстро связать ошибку с deployment.
  • Раз в месяц просматривайте реальные отказы и превращайте их в автоматические тесты.

Когда писать самому, а когда заказывать разработку

Самостоятельная разработка оправдана для обучения, внутреннего прототипа и простого сценария без критичных интеграций. Если бот принимает лиды из рекламы, создаёт заказы, меняет статусы в CRM, использует оплату или AI, стоимость ошибки становится выше стоимости интерфейса. Нужны аналитика требований, тестовый контур, ответственность за deployment и поддержка после запуска.

Можно передать команде готовый сценарий и получить оценку разработки Telegram-бота в Ташкенте. В ТЗ укажите роли, ветки диалога, интеграции, языки, ожидаемую нагрузку и критерии приёмки.

Итог: минимальная надёжная версия

Создайте бота через BotFather, изолируйте Python-проект, выберите актуальный фреймворк и реализуйте один измеримый сценарий. Локально используйте polling, а production-режим выбирайте с учётом инфраструктуры. Вынесите секреты, данные и интеграции в отдельные слои, предусмотрите повтор событий, наблюдаемость и передачу человеку. До рекламы проведите тест с новой учётной записью, зафиксируйте критерий успешной заявки и назначьте ответственного за технические уведомления. Такая база позволяет добавлять CRM, оплату и AI без полной переписки проекта.

Обсудить Telegram-бота на Python

Частые вопросы

Можно ли бесплатно создать Telegram-бота на Python?

+

Регистрация через BotFather, Python и open-source библиотеки доступны бесплатно. Для постоянной работы могут понадобиться платный сервер, база данных, домен, внешние API и поддержка. Поэтому бесплатным может быть прототип, но production-проект имеет инфраструктурные расходы.

Какую библиотеку выбрать: aiogram или python-telegram-bot?

+

Обе подходят для современных ботов. Aiogram удобен командам, работающим с asyncio, роутерами и FSM. Python-telegram-bot предоставляет Application, обработчики и готовые методы polling/webhook. Выбирайте по актуальности версии, опыту команды и плану поддержки.

Почему бот работает на компьютере, но выключается после закрытия терминала?

+

Программа живёт только пока запущен Python-процесс. Для работы 24/7 разместите её на сервере или облачной платформе, настройте автоматический перезапуск, секреты, логи и мониторинг.

Нужна ли база данных Telegram-боту?

+

Для простого ответа на /start не обязательно. База нужна, если сохраняются состояния диалога, заявки, заказы, права, настройки, история статусов или связи с внешними системами.

Что лучше для разработки: polling или webhook?

+

Polling обычно проще локально. Webhook удобен в production-среде с публичным HTTPS endpoint. Telegram не позволяет одновременно получать обновления через активный webhook и getUpdates.

Можно ли вставить токен BotFather прямо в Python-файл?

+

Технически можно, но так делать нельзя для реального проекта. Храните токен в переменной окружения или менеджере секретов. При утечке немедленно перевыпустите его через BotFather.

Как не создавать дубли заявок?

+

Назначайте операции уникальный ключ, сохраняйте результат и при повторном событии возвращайте существующую запись. Блокировка одной кнопки на клиенте недостаточна: защита должна работать на backend.

Можно ли подключить ChatGPT к Python-боту?

+

Да. Python-backend принимает сообщение Telegram, проверяет его, вызывает OpenAI API и отправляет результат пользователю. Ключ API хранится на сервере; дополнительно нужны лимиты, база знаний, контроль фактов и передача оператору.

Сколько времени занимает Python-бот?

+

Учебный обработчик собирается быстро. Срок бизнес-бота зависит от веток, CRM, оплаты, ролей, языков, AI, аналитики и требований к отказоустойчивости. Оценивать нужно по сценарию и критериям приёмки.

Первичные источники

Документы, по которым проверены технические и продуктовые утверждения статьи.

Смотрите также