Как задеплоить Telegram-бота, написанного в ChatGPT

ChatGPT уверенно пишет код Telegram-бота: присылает файл на 200 строк, добавляет обработчики команд, даже клавиатуру рисует. Проблема начинается на следующем шаге — как превратить этот код в бота, который работает круглосуточно, а не только пока открыт ваш ноутбук. Рассказываем по шагам, что делать с кодом из ChatGPT, и где он живёт после деплоя.

Что именно отдаёт ChatGPT и чего в этом коде нет

Когда вы просите «напиши Telegram-бота на Python», модель выдаёт рабочий, но неполный проект. В нём есть логика, но обычно отсутствует:

  • Файл зависимостей (requirements.txt) — без него сервер не знает, какие библиотеки ставить;
  • Токен в переменных окружения — модель часто вставляет его прямо в код (bot = Bot("123456:ABC")), а так делать нельзя;
  • Точка входа для запуска как сервиса — код рассчитан на запуск вручную из терминала;
  • Хранение данных — если бот что-то запоминает, надо решить, куда это писать.

Это нормально: ChatGPT решает задачу «написать логику», а не «развернуть production». Дальше — ваша часть, и она занимает куда меньше времени, чем кажется.

Шаг 1. Получите токен у BotFather

Даже если в коде уже стоит какой-то токен — он ненастоящий. Откройте @BotFather в Telegram, отправьте /newbot, придумайте имя и username (должен заканчиваться на bot). В ответ придёт строка вида:

7123456789:AAHfQxLmNpQrStUvWxYz-0123456789_ab

Это и есть токен. Сохраните его отдельно — в код мы его вставлять не будем.

Шаг 2. Вынесите токен из кода

Плохой вариант (так делает ChatGPT по умолчанию):

TOKEN = "7123456789:AAHfQxLmNpQrStUvWxYz-0123456789_ab"
bot = Bot(token=TOKEN)

Хороший вариант — токен берётся из переменной окружения:

import os
TOKEN = os.environ["BOT_TOKEN"]
bot = Bot(token=TOKEN)

Почему это важно: код вы почти наверняка будете показывать, кому-то отдавать или заливать в Git. Токен в коде = токен утёк. Если он утечёт, чужой человек сможет управлять вашим ботом и читать переписку.

Шаг 3. Добавьте requirements.txt

Соберите зависимости, которые бот реально импортирует. Для типичного бота на aiogram:

aiogram==3.15.0
python-dotenv==1.0.1

Если бот работает с базой или картинками, добавьте sqlalchemy, Pillow, httpx — по факту импортов. ChatGPT хорош в том, чтобы перечислить их: попросите «собери requirements.txt для этого кода» и проверьте, что все импорты покрыты.

Шаг 4. Выберите, где бот будет жить

Тут три варианта, и они принципиально разные.

Свой VPS. Вы арендуете виртуальный сервер (от 200–400 ₽/мес), ставите Python, systemd, следите за обновлениями и перезапусками. Полный контроль, но и вся ответственность на вас: упал — поднимаете сами.

Локальный компьютер. Подходит только для отладки: бот работает, пока ПК включён. Для круглосуточной работы не годится.

Платформа для деплоя. Вы загружаете код, платформа сама собирает окружение и держит процесс запущенным. Не нужно администрировать сервер — это вариант, который имеет смысл, если бот нужен вам как инструмент, а не как повод освоить Linux.

Шаг 5. Загрузите код и настройте переменные

На платформе деплоя порядок обычно такой:

  • загрузить проект (через подключение Git-репозитория или архивом);
  • указать команду запуска — для бота это python main.py (или как называется ваш файл);
  • добавить переменные окружения: BOT_TOKEN с тем самым токеном от BotFather, плюс всё, что бот читает через os.environ.

Именно на этом шаге ошибаются чаще всего: код загружен, а переменные забыли — и бот падает при старте с сообщением о том, что токен не найден.

Шаг 6. Проверьте, что бот живой

После запуска:

  • откройте бота в Telegram и отправьте /start — он должен ответить;
  • посмотрите логи: там должно быть что-то вроде Start polling без ошибок;
  • если бот использует базу, отправьте пару сообщений и перезапустите бота — данные должны сохраниться.

Если ответа нет — почти всегда три причины: неверный токен, бот упал при старте из-за отсутствующих зависимостей или переменных, либо запущен второй экземпляр с тем же токеном (тогда Telegram отдаёт 409 Conflict).

Что дальше

Когда бот отвечает, стоит подумать о двух вещах: данные (если бот сохраняет пользователей, заказы или настройки — убедитесь, что они лежат в постоянном хранилище, а не во временной папке) и резервные копии. Код из ChatGPT этого не предусматривает, а без хранилища вы рискуете потерять всё при первом же обновлении.

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

Можно ли запустить бота прямо из ChatGPT?

Нет, ChatGPT не выполняет код постоянно — он закрывается вместе с диалогом. Можно попросить модель написать код, но запускать его нужно на сервере или платформе деплоя.

Что делать, если ChatGPT не выдал requirements.txt?

Попросите отдельно: «собери requirements.txt по импортам в этом коде». Проверьте, что каждый import из файла попал в список, и укажите версии.

Какой код запуска указывать для бота?

Обычно python main.py, где main.py — файл, в котором создаётся объект бота и вызывается запуск (executor.start_polling в aiogram или bot.polling() в pyTelegramBotAPI). Уточните название своего файла.

Где хранить токен, если не в коде?

В переменных окружения. На платформе деплоя это отдельный раздел в панели: ключ BOT_TOKEN, значение — токен от BotFather. В коде — только чтение через os.environ.

Бот работает локально, но не работает после деплоя — почему?

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