⟵ Все статьи
Читать на:

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

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

Telegram-бот — это программа, которая просто отвечает на сообщения. Написать первую версию можно за вечер, даже если вы никогда не программировали: сам код умещается в двадцать строк, а всё остальное — установка пары пакетов по инструкции.

Главная развилка возникает сразу после первого запуска: на своём компьютере бот работает, только пока открыт терминал и не спит ноутбук. Чтобы он отвечал круглосуточно, его переносят на сервер. Ниже — весь путь целиком: от регистрации бота до его самостоятельной жизни на VPS.

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

Все боты регистрируются через официального бота Telegram — BotFather. Найдите его в поиске (у него синяя галочка), нажмите «Запустить» и отправьте команду:

/newbot

BotFather спросит имя бота (видно пользователям) и 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 месяцев.

Посмотреть тарифы

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