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.
Бот работает локально, но не работает после деплоя — почему?
Три типичные причины: не проброшены переменные окружения, не установлены зависимости, или бот использует локальные пути и файлы, которых нет на сервере. Проверьте логи запуска — ошибка почти всегда написана прямым текстом.