Web & API

Telegram-боты

Программы, которые общаются с пользователями внутри Telegram через Bot API: принимают сообщения и команды и отвечают на них.

Что такое Telegram-боты

Telegram-бот — обычная программа на вашем сервере, которая общается с пользователями внутри мессенджера. Для пользователя это собеседник в списке чатов; технически это код, который получает сообщения от Telegram и отвечает через Bot API — набор HTTP-методов на api.telegram.org.

Слово «бот» шире мессенджеров: так называют любую программу, которая автоматически выполняет действия вместо человека — поисковые роботы, торговые боты, чат-боты на сайте. В разговоре «бот» чаще всего означает именно чат-бота, а в рунете — бота в Telegram.

Что бот может делать

  • Отвечать на команды (/start, /status) и произвольный текст
  • Присылать уведомления: алерты мониторинга, новые заявки, статусы задач
  • Принимать и отдавать файлы, фото, документы, голосовые
  • Показывать кнопки — inline-клавиатуры и меню вместо ввода текста
  • Принимать оплату, работать в группах и каналах, запускать mini apps
  • Быть интерфейсом к LLM или внутренним системам компании

Главное ограничение: бот не пишет пользователю первым. Диалог начинает человек — командой /start или добавлением бота в группу.

Как создать бота

Регистрация идёт через служебного бота @BotFather: команда /newbot, имя, username, в ответ приходит токен вида 123456789:AAH.... Токен — пароль от бота, его держат в переменных окружения, а не в коде.

# Проверить токен
curl "https://api.telegram.org/bot$TOKEN/getMe"

# Отправить сообщение
curl "https://api.telegram.org/bot$TOKEN/sendMessage" \
  -d chat_id=123456789 \
  -d parse_mode=HTML \
  -d text="<b>Деплой прошёл</b>"

Bot API — это обычный REST-подобный API поверх HTTP, поэтому бота можно написать хоть на голом curl. На практике берут библиотеку: aiogram или python-telegram-bot для Python, telegraf для Node.js.

Long polling или webhook

Есть два способа получать сообщения. Polling подходит и для небольшого production-бота с одним получателем. Сравнение требований и конфликтов: polling или webhook.

Long polling (getUpdates) Webhook (setWebhook)
Кто инициирует бот сам опрашивает Telegram Telegram шлёт запрос вам
Нужен белый IP и HTTPS нет да
Задержка небольшая, но опрос идёт постоянно минимальная
Где удобно небольшой постоянно работающий бот, разработка, NAT публичный backend или очередь обработчиков
# Переключить бота на webhook
curl "https://api.telegram.org/bot$TOKEN/setWebhook" \
  -d url="https://bot.example.com/tg/$SECRET_PATH" \
  -d secret_token="$HEADER_SECRET"

# Вернуться к polling
curl "https://api.telegram.org/bot$TOKEN/deleteWebhook"

Для webhook нужен публичный адрес с валидным SSL-сертификатом — обычно Nginx терминирует TLS и проксирует на приложение. Настройте secret_token и проверяйте заголовок X-Telegram-Bot-Api-Secret-Token на сервере. Секретный путь не заменяет проверку: URL может попасть в логи. Отдельно проверяйте права пользователя и дубликаты обновлений.

Где хостить бота

Боту почти не нужны ресурсы: уведомлялка живёт на самом дешёвом VPS рядом с сервисом, который она мониторит — см. также VPS для Telegram-бота. Запускают чаще всего юнитом systemd или в Docker — чтобы процесс переживал перезагрузку.

Ресурсы нужны, только если бот — витрина для тяжёлой задачи: генерация картинок или ответы LLM. Тогда сам бот остаётся лёгким, а вычисления уходят на GPU-инстанс, и бот ходит к нему по API. Долгую работу выносят в очередь через брокер сообщений: Telegram ждёт ответа на webhook недолго, и держать его тяжёлым запросом нельзя.

У Bot API есть лимиты на частоту сообщений и размер файлов — при массовых рассылках отправку ставят в очередь и обрабатывают ответ 429 с паузой.

Связанные термины

  • API — общий принцип, на котором построен Bot API
  • Webhook — доставка обновлений на публичный HTTPS endpoint
  • VPS — типичное место, где живёт бот
  • LLM — частая начинка бота-ассистента
  • HTTP — протокол вызовов Bot API

Готовые исходники и инструкции: Telegram-бот на VPS и Mini App с проверкой initData.

Готовы запустить GPU-задачу?

Запустить GPU-сервер