Чтобы создать Telegram-бота на Python, подготовьте отдельного бота, окружение и файл программы с обработчиками. Ниже полный код: на /start приходит подсказка, обычный текст возвращается отправителю, а результат проверяется в личном чате.
У бота уже есть имя в Telegram, в терминале открыт пустой проект. Чтобы связать их, напишем программу на Python: на /start она пришлёт подсказку, а обычное текстовое сообщение вернёт отправителю. Так получится проверить весь путь от сообщения до ответа на собственном коде.
Для работы нужны компьютер с Python, текстовый редактор, доступ к Telegram и отдельный собственный бот. Программа будет отвечать, пока запущена на компьютере. Установка на сервер относится к следующей задаче, здесь доведём до результата локальный запуск.
Как создать Telegram-бота на Python с помощью ИИ
Пустой проект для начала необязателен. Откройте бесплатный чат DeepSeek, вставьте запрос и следующим сообщением отправьте эту инструкцию с кодом. В ChatGPT или Claude можно вести такой же разговор, если уже ими пользуетесь.
Помоги запустить первый Telegram-бот на Python по инструкции, которую
пришлю следом. Хочу получить ответ на /start и повтор обычной фразы.
Сначала узнай мою систему и помоги проверить, установлен ли Python.
Потом давай по одному действию: какую программу открыть, куда
вставить строку, что должно появиться и как понять, что шаг выполнен.
Жди моего ответа. Объясни отдельно, что идёт в терминал, что в bot.py,
а что в чат Telegram. Сохрани версию библиотеки из инструкции.
Токен и пароли не проси: введу их локально, как указано в статье.
Если будет ошибка, попроси обезличенный текст, найди причину
и дай одну проверку. Спорные команды сверяй с официальной
документацией Python и python-telegram-bot для моей системы.
Если не уверен, скажи; без поиска попроси нужный фрагмент справки.
Сначала достаточно увидеть версию Python: уже понятно, с чем работать дальше. Если команда не найдена, скопируйте в разговор её имя и текст ошибки без секретов. Помощник сможет разобрать именно этот ответ; содержимое вашего экрана ему нужно описать словами. До исправления следующую команду выполнять незачем.
Подготовьте токен отдельного бота
Для упражнения зарегистрируйте нового бота у BotFather командой /newbot. Он попросит название и свободное имя пользователя, затем выдаст токен. Подробный порядок есть в инструкции по регистрации бота и официальной справке Telegram.
Отдельный бот нужен, чтобы учебная программа оставалась единственным получателем его сообщений. Если взять токен бота, уже работающего через конструктор или другую программу, способы получения сообщений могут помешать друг другу.
Токен вводим при запуске, в файл с кодом его вставлять не потребуется. Храните его как пароль, например в менеджере паролей. В приведённом ниже файле для скрытого ввода используется стандартная функция Python getpass.
Создайте папку и окружение Python
В этой инструкции закреплена библиотека python-telegram-bot 22.8. По её официальной документации нужен Python версии 3.10 или новее. Библиотека получает сообщения Telegram и передаёт их нужной функции; собственный HTTP-цикл писать здесь не придётся.
Если Python ещё отсутствует, установите его с официального сайта и откройте новое окно терминала. Дальше выберите команды для своей системы. Строки выполняйте по очереди; после ошибки остановитесь и исправьте её перед следующей командой.
Mac или Linux
python3 --version
mkdir telegram-echo
cd telegram-echo
python3 -m venv .venv
.venv/bin/python -m pip install "python-telegram-bot==22.8"
Первая команда должна показать подходящую версию Python. Если папка telegram-echo уже занята, выберите новое имя и используйте его в обеих командах с папкой.
Windows, PowerShell
py --version
mkdir telegram-echo
cd telegram-echo
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install "python-telegram-bot==22.8"
После первой команды также проверьте версию. Если команда py отсутствует, попробуйте python --version. Когда python запускает установленную подходящую версию, замените py на python и в команде создания окружения.
В папке появится .venv, отдельное окружение для зависимостей этого проекта. Дальше вызываем его интерпретатор по полному пути. По документации Python активировать окружение для этого необязательно. На Windows такой способ позволяет запустить пример без правки политики выполнения скриптов.
Сохраните полный код в bot.py
Внутри telegram-echo создайте обычный текстовый файл bot.py и сохраните его в UTF-8. На Windows проверьте расширение, файл должен называться bot.py, без добавленного .txt.
Основа программы, официальный пример echobot.py. Здесь к нему добавлены скрытый ввод токена, ограничение личными чатами и краткие сообщения об ошибках. Тексты ответов заданы в коде, ИИ-модель к этому боту пока не подключается.
import logging
import warnings
from getpass import GetPassWarning, getpass
from telegram import Update
from telegram.error import TelegramError
from telegram.ext import (
Application, CommandHandler, ContextTypes, MessageHandler, filters,
)
logging.basicConfig(level=logging.WARNING)
logging.getLogger("httpx").setLevel(logging.WARNING)
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text(
"Бот запущен. Пришлите обычный текст, и я верну его."
)
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text(update.message.text)
async def on_error(update: object, context: ContextTypes.DEFAULT_TYPE) -> None:
print(f"Ошибка Telegram: {type(context.error).__name__}", flush=True)
def main() -> None:
warnings.simplefilter("error", GetPassWarning)
try:
token = getpass("Токен бота, ввод скрыт: ").strip()
except GetPassWarning:
raise SystemExit("Для скрытого ввода запустите файл в терминале.") from None
if not token:
raise SystemExit("Токен пуст. Запустите файл ещё раз.")
application = Application.builder().token(token).build()
application.add_handler(
CommandHandler("start", start, filters=filters.ChatType.PRIVATE)
)
application.add_handler(
MessageHandler(
filters.ChatType.PRIVATE & filters.TEXT & ~filters.COMMAND,
echo,
)
)
application.add_error_handler(on_error)
print("Запускаю бота. Остановка: Ctrl+C.", flush=True)
application.run_polling(allowed_updates=["message"])
if __name__ == "__main__":
try:
main()
except TelegramError as error:
raise SystemExit(f"Запуск прерван: {type(error).__name__}") from None
В start записан ответ на команду. В echo отправляется текст пришедшего сообщения. Перед функциями стоит async, а отправка ответа выполняется через await, так устроены обработчики этой версии библиотеки. Сохраняйте отступы при копировании, по ним Python определяет, какие строки входят в функцию.
Строка filters.TEXT & ~filters.COMMAND пропускает обычный текст и исключает команды. Поэтому /start получает собственную подсказку, а неизвестная команда /test в этом примере останется без ответа. Для неё пока отсутствует обработчик. Фильтр ChatType.PRIVATE оставляет обе ветви только для личного диалога.
Запустите программу и проверьте ответы
В том же терминале, из папки telegram-echo, выполните одну команду.
Mac или Linux
.venv/bin/python bot.py
Windows, PowerShell
.\.venv\Scripts\python.exe bot.py
Появится приглашение ввести токен. Вставьте его и нажмите Enter. Символы во время ввода скрыты, это ожидаемое поведение функции getpass. Если среда лишена скрытого ввода, программа завершится с просьбой запустить файл в терминале.
После сообщения «Запускаю бота» перейдите в Telegram, откройте личный диалог именно с этим ботом и нажмите «Запустить» или отправьте /start. Строка в терминале означает начало запуска; получение ответа в чате проверяется отдельно.
Ниже учебные входы и ожидаемые ответы по коду. Выполните их в собственном диалоге и сравните фактический результат.
| Что отправить или сделать | Какой результат ожидаем | Какую часть проверяем |
|---|---|---|
Отправить /start |
«Бот запущен. Пришлите обычный текст, и я верну его.» | Команда попала в функцию start |
Отправить Встреча в пятницу |
Тот же текст Встреча в пятницу |
Обычный текст прошёл в echo |
Отправить одним сообщением две строки, Принести блокнот и Взять зарядку |
Одно ответное сообщение с теми же двумя строками | Сохранились текст и перенос строки |
| Снова отправить ту же обычную фразу | Ещё один ответ с этой фразой | Новое сообщение обрабатывается заново |
Отправить /test или фотографию без подписи |
Ответа нет | Эти входы остаются за пределами двух обработчиков |
Если /start работает, а текст молчит, уже известно, куда смотреть: проверьте регистрацию MessageHandler и саму функцию echo. Если молчат обе ветви, сначала проверьте процесс в терминале, токен и выбранный диалог. Так диагностика начинается с различия между двумя результатами.
Для остановки вернитесь в терминал и нажмите Ctrl+C. Дождитесь, пока снова появится приглашение командной строки. После этого запустите bot.py той же командой, заново введите токен и отправьте свежую фразу. Возвращённый текст подтвердит работу после перезапуска. Переустанавливать библиотеку при каждом запуске не требуется.
Если бот молчит или запуск прерван
Текст ошибки в этом примере выводится по имени класса, без содержимого сообщения и токена. По нему можно выбрать следующий шаг.
ModuleNotFoundErrorс упоминаниемtelegram. Выполните команду установки через интерпретатор.venvиз инструкции и запускайте файл им же. Системный Python может использовать другое окружение.InvalidToken. Сверьте токен с выданным BotFather, затем повторите запуск. Если токен оказался в чужих руках, выпустите новый через BotFather; копирование прежнего токена проблему доступа не решит.Conflict. Проверьте, осталась ли другая программа, получающая сообщения этого бота. Остановите собственный второй запуск или вернитесь к отдельному новому боту. Рабочее подключение существующего проекта ради упражнения сохраняйте.NetworkErrorилиTimedOut. Проверьте доступ к Telegram Bot API из этой сети. Приложение Telegram и Python-программа могут пользоваться разными сетевыми настройками. Сначала восстановите соединение с API, затем повторите запуск.
При проверке ошибок сохраняйте название класса и действие, после которого он появился. Токен и личные сообщения для такой записи не нужны.
Вопросы и ответы
Почему бот зарегистрирован, но отвечает только при открытом терминале?
Через BotFather создаётся учётная запись бота. Ответы формирует запущенный bot.py, а run_polling получает для него новые сообщения. При завершении процесса код перестаёт работать. Для постоянного запуска понадобится отдельное решение с хостингом и автозапуском; текущий результат, работающий локальный бот.
Нужно ли открывать порт или настраивать webhook?
Для этого примера используется polling, программа сама обращается к Telegram за сообщениями. Входящий публичный адрес для неё создавать не требуется. Этот способ запуска и остановка через Ctrl+C описаны в справке Application.run_polling.
Где заменить ответ на /start?
Измените строку внутри reply_text в функции start, сохраните файл, остановите программу и запустите её снова. Затем отправьте /start и сверьте ответ с новой строкой. Остальные обработчики ради такой правки менять незачем.
Почему фотография остаётся без ответа?
В коде зарегистрированы команда /start и обычный текст. Для фотографии без подписи подходящего обработчика нет. Если следующим действием станет работа с фотографиями, сначала определите, что бот должен вернуть на изображение, и добавьте отдельный сценарий проверки.
Когда обе ветви отвечают по таблице и повторный запуск возвращает программу в работу, сохраните папку с bot.py и заметку о проверенных входах. Теперь в коде понятно место для следующего действия: отдельная команда получает отдельную функцию и свой ожидаемый ответ.
Для такого продолжения сохраните текущий bot.py как исходную версию и откройте карту сценария собственного бота. В поле «Одно действие бота» запишите «Добавить команду /help со справкой», в поле «Что запускает сценарий» укажите /help в личном чате. В результате задайте точный текст справки, в проверках сохраните работоспособность /start и обычного текста. Карта поможет оформить следующую правку к этому же боту. В «Первопроходцах» собственные боты относятся к более позднему этапу программы; по проектной работе можно задать вопрос, Никита Малов проверяет такие работы лично и даёт правки.
Документация и совместимость версии сверены 17 октября 2026 года по официальным источникам. Обложка создана с помощью ImageGen.