Как создать Telegram-бота: пошаговое руководство для начинающих

Telegram-бот — это программа, которая просто отвечает на сообщения. Написать первую версию можно за вечер, даже если вы никогда не программировали: сам код умещается в двадцать строк, а всё остальное — установка пары пакетов по инструкции.
Главная развилка возникает сразу после первого запуска: на своём компьютере бот работает, только пока открыт терминал и не спит ноутбук. Чтобы он отвечал круглосуточно, его переносят на сервер. Ниже — весь путь целиком: от регистрации бота до его самостоятельной жизни на VPS.
Шаг 1. Получить токен у BotFather
Все боты регистрируются через официального бота Telegram — BotFather. Найдите его в поиске (у него синяя галочка), нажмите «Запустить» и отправьте команду:
/newbotBotFather спросит имя бота (видно пользователям) и username — он обязан заканчиваться на bot, например my_first_service_bot. В ответ придёт строка вида 8123456789:AAH... — это токен, ключ от вашего бота.
Токен — это пароль: кто им владеет, тот управляет ботом. Не публикуйте его в чатах и не заливайте в открытые репозитории. Если случайно засветили, отправьте BotFather команду /revoke и получите новый.
Шаг 2. Где бот будет жить
Бот должен быть постоянно на связи, поэтому ему нужен компьютер, который никогда не выключается — то есть VPS. Ресурсов надо немного: обычный бот с сотнями пользователей спокойно живёт на 1 vCPU и 2 ГБ памяти.
В панели NodexGo порядок такой: кнопка «Создать сервер», затем выбор локации — рядом с каждой показан ваш реальный пинг до неё; тариф и образ системы (берите Ubuntu 24.04, все команды ниже под неё); имя сервера; период оплаты 1, 3, 6 или 12 месяцев. Примерно через минуту сервер готов, IP-адрес и пароль root придут в панель и на почту.
1 vCPU и 2 ГБ — этого хватает боту с головой. Сервер готов через минуту.
Создать серверШаг 3. Подключиться и подготовить систему
Подключаемся по SSH, подставив выданный IP-адрес, и вводим пароль root из панели:
ssh root@IP-адрес-сервераОбновляем систему и ставим Python с инструментом виртуальных окружений:
apt update && apt upgrade -y
apt install -y python3 python3-venv python3-pipРаботать под root постоянно не нужно — заведём отдельного пользователя, от имени которого будет запускаться бот:
adduser bot
usermod -aG sudo bot
su - botШаг 4. Установить библиотеку
Библиотека берёт на себя общение с серверами Telegram: вы пишете только логику ответов. Самая популярная для Python — aiogram. Ставим её в отдельное виртуальное окружение, чтобы не засорять систему:
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv
source venv/bin/activate
pip install aiogramПосле активации окружения в начале строки появится подпись (venv) — значит, всё делается внутри него.
Шаг 5. Написать первого бота
Создаём файл с кодом:
nano bot.pyВот минимальный работающий бот: он отвечает на команду /start и повторяет любое присланное сообщение. Токен берётся из переменной окружения, а не пишется прямо в коде — так его сложнее случайно опубликовать.
import asyncio
import os
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
bot = Bot(os.environ["BOT_TOKEN"])
dp = Dispatcher()
@dp.message(CommandStart())
async def start(message: Message):
await message.answer("Привет! Я работаю на своём сервере круглосуточно.")
@dp.message()
async def echo(message: Message):
await message.answer(f"Вы написали: {message.text}")
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())Сохраняем: Ctrl+O, Enter, Ctrl+X. Кладём токен в отдельный файл .env и закрываем его от посторонних:
echo 'BOT_TOKEN=ваш-токен-от-BotFather' > ~/mybot/.env
chmod 600 ~/mybot/.envШаг 6. Первый запуск
Пробуем запустить бота вручную, чтобы убедиться, что всё работает:
cd ~/mybot
source venv/bin/activate
export $(cat .env | xargs)
python bot.pyТеперь напишите своему боту в Telegram — он должен ответить. Если отвечает, останавливаем его сочетанием Ctrl+C: дальше он будет запускаться сам.
Шаг 7. Сделать так, чтобы бот работал всегда
Пока бот запущен вручную, он умрёт вместе с закрытием SSH-сессии. Правильное решение — systemd: он запустит бота при старте сервера и поднимет его обратно, если тот упадёт. Выходим в root и создаём файл службы:
exit
nano /etc/systemd/system/mybot.service[Unit]
Description=Telegram bot
After=network.target
[Service]
User=bot
WorkingDirectory=/home/bot/mybot
EnvironmentFile=/home/bot/mybot/.env
ExecStart=/home/bot/mybot/venv/bin/python /home/bot/mybot/bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetВключаем автозапуск и стартуем службу:
systemctl daemon-reload
systemctl enable --now mybot
systemctl status mybotСтрока active (running) означает, что бот живёт самостоятельно. Можно закрывать терминал — он продолжит отвечать.
Шаг 8. Смотреть логи и обновлять код
Всё, что бот пишет в консоль, попадает в системный журнал. Смотреть его в реальном времени:
journalctl -u mybot -fПосле правки bot.py достаточно перезапустить службу — пересобирать ничего не нужно:
systemctl restart mybotЧто добавить дальше
Кнопки под сообщением делаются через клавиатуры aiogram — это самый быстрый способ сделать бота удобным. Данные пользователей на старте удобно хранить в SQLite (файл рядом с ботом), а при росте нагрузки перейти на PostgreSQL.
Если бот начнёт рассылать сообщения или обрабатывать платежи, обязательно добавьте резервное копирование базы и следите за памятью. Когда ресурсов перестанет хватать, в карточке сервера в панели есть кнопка «Увеличить мощности»: тариф меняется на старший, диск и IP-адрес сохраняются, переносить бота никуда не нужно.
Если что-то пошло не так
Бот не отвечает — проверьте статус службы командой systemctl status mybot и загляните в журнал: чаще всего там опечатка в токене или в пути до файла.
Ошибка «Unauthorized» означает неверный токен, «Conflict» — что тот же токен уже используется другой запущенной копией бота (например, оставшейся на вашем компьютере). Остановите лишнюю.
Потеряли доступ к серверу по SSH — откройте web-консоль VNC в карточке сервера в панели: она работает в обход сети и всегда пускает внутрь. Там же есть кнопки «Сменить пароль root» и «Переустановить ОС».
Тарифы от 1 vCPU и 2 ГБ, локации в Европе, оплата за 1, 3, 6 или 12 месяцев.
Посмотреть тарифы