Telegram-бот — это программа, которая общается с людьми внутри Telegram от имени специального бот-аккаунта: принимает сообщения, команды и нажатия кнопок и отвечает по заложенной логике. Нужен он, чтобы автоматизировать повторяющиеся действия: отвечать на типовые вопросы, принимать заявки и оплату, присылать уведомления, модерировать чат или давать быстрый доступ к сервису без отдельного приложения.
Содержание
- Для чего нужен бот: сценарии для бизнеса и пользователя
- Как устроен бот: путь одного сообщения
- Минимальная логика бота: пример на Python
- Как завести бота через BotFather
- Код или конструктор: что выбрать
- Ограничения ботов, о которых стоит знать заранее
- Если бот не отвечает: диагностика по симптому
- Выводы
- Где применяется / связь с практикой
- FAQ
Важно развести три понятия. Бот-аккаунт — то, что видит пользователь в списке чатов (имя, аватар, кнопка «Запустить»). Bot API — HTTP-интерфейс Telegram, через который программа получает сообщения и отправляет ответы. Программа бота — ваш код или конструктор, который работает на своем сервере и решает, что ответить. Telegram только доставляет сообщения, «думает» всегда программа.
Ниже — какие задачи бот реально решает, как он устроен, как его завести через BotFather и где у ботов границы.
Для чего нужен бот: сценарии для бизнеса и пользователя
Бот оправдан там, где действие повторяется много раз и его можно описать правилами или сценарием. Если каждый запрос уникален, бот станет лишь «прихожей», которая передает диалог сотруднику.
| Задача | Что делает бот | Кому полезно |
|---|---|---|
| Ответы на частые вопросы | Отвечает на команды и кнопки меню круглосуточно | Магазин, школа, сервисный центр |
| Прием заявок и запись | Собирает имя, телефон, время, передает в CRM или таблицу | Салон, клиника, услуги |
| Продажи | Показывает каталог, принимает оплату, присылает статус заказа | Интернет-магазин, инфопродукты |
| Уведомления | Присылает сообщения о событиях: заказ собран, упал сервер, пришел платеж | Бизнес и разработчики |
| Модерация групп | Приветствует новичков, удаляет спам, выдает предупреждения | Админы сообществ |
| Личные инструменты | Напоминания, трекер привычек, конвертер, заметки | Обычный пользователь |
| Мини-приложение | Открывает полноценный веб-интерфейс прямо в Telegram | Сервисы, игры, магазины |
Пользователю не нужно ставить отдельное приложение и регистрироваться, бизнес получает автоматизацию в канале, где клиент уже находится.
Как выбрать сценарий для своего бота — три вопроса:
- Какое действие повторяется чаще всего и отнимает время людей?
- Можно ли описать его шагами: вопрос -> ответ, выбор -> результат?
- Что должно происходить, если бот не справился: передача оператору, ссылка на сайт, заявка на звонок?
Если на второй вопрос ответ «нет», автоматизируйте узкую часть (например, только сбор заявки).
Как устроен бот: путь одного сообщения
Упрощенная схема, достаточная для понимания большинства ботов:
- Пользователь пишет боту
/price. - Серверы Telegram сохраняют это как обновление (Update) — JSON-объект с текстом, id чата, временем и другими полями.
- Программа бота забирает обновление одним из двух способов (о них ниже).
- Программа решает, что ответить, и вызывает метод Bot API
sendMessageс id чата и текстом. - Telegram доставляет ответ пользователю.
Способа получить обновления два, и одновременно работает только один из них:
| Способ | Как работает | Когда удобен |
|---|---|---|
Long polling (getUpdates) |
Программа сама регулярно спрашивает Telegram «есть новое?» и ждет ответа | Разработка, учебные боты, запуск на ноутбуке без публичного адреса |
Webhook (setWebhook) |
Telegram сам отправляет каждое обновление POST-запросом на ваш HTTPS-адрес | Рабочий бот на сервере, много пользователей |
Из этой схемы следует практичный вывод: бот работает только пока запущена его программа. Выключили ноутбук — бот перестал отвечать, хотя в Telegram он по-прежнему «есть». Поэтому рабочих ботов размещают на сервере или в облаке.
Минимальная логика бота: пример на Python
Чтобы увидеть, что именно делает программа бота, достаточно одной функции: на вход — обновление от Telegram, на выход — параметры ответа для sendMessage. Пример ниже не обращается к сети и не требует токена, поэтому запускается как есть. Проверено на Python 3.14.7 (и на 3.9), только стандартная библиотека.
import json
BOT_USERNAME = "demo_shop_bot" # username вашего бота без @
FAQ = {
"/start": "Привет! Я бот-помощник. Команды: /hours, /price",
"/hours": "Работаем с 10:00 до 19:00 по Москве",
"/price": "Прайс: консультация 1500 руб., диагностика 3000 руб.",
}
def handle_update(update):
"""Принимает Update от Telegram, возвращает параметры для sendMessage или None."""
message = update.get("message")
if not isinstance(message, dict):
return None # это не новое сообщение (например, нажатие кнопки)
text = message.get("text")
if not isinstance(text, str):
return None # стикер, фото, голосовое - текста нет
chat_id = message["chat"]["id"]
words = text.split()
if not words:
return None # пустая строка или одни пробелы
command, _, target = words[0].lower().partition("@")
if target and target != BOT_USERNAME.lower():
return None # команда адресована другому боту в группе
reply = FAQ.get(command, "Не знаю такой команды. Напишите /start")
return {"chat_id": chat_id, "text": reply}
updates = [
{"update_id": 1, "message": {"message_id": 10, "chat": {"id": 555, "type": "private"},
"date": 1790000000, "text": "/start"}},
{"update_id": 2, "message": {"message_id": 11, "chat": {"id": 555, "type": "private"},
"date": 1790000060, "text": "/price@demo_shop_bot"}},
{"update_id": 3, "message": {"message_id": 12, "chat": {"id": 555, "type": "private"},
"date": 1790000120, "sticker": {"file_id": "abc"}}},
{"update_id": 4, "message": {"message_id": 13, "chat": {"id": 555, "type": "private"},
"date": 1790000180, "text": " "}},
{"update_id": 5, "callback_query": {"id": "77", "data": "buy"}},
{"update_id": 6, "message": {"message_id": 14, "chat": {"id": -100, "type": "group"},
"date": 1790000240, "text": "/price@other_bot"}},
]
for upd in updates:
print(upd["update_id"], json.dumps(handle_update(upd), ensure_ascii=False))
Результат запуска python3 bot_logic.py:
1 {"chat_id": 555, "text": "Привет! Я бот-помощник. Команды: /hours, /price"}
2 {"chat_id": 555, "text": "Прайс: консультация 1500 руб., диагностика 3000 руб."}
3 null
4 null
5 null
6 null
Что здесь важно:
- Обновление 2 — команда в форме
/price@demo_shop_bot: так команды выглядят в группах, где ботов несколько (клиент Telegram подставляет имя бота при выборе команды из меню). Поэтому часть после@отделяется и сверяется с username бота:/price@other_botиз обновления 6 адресована другому боту, и наш ее пропускает. Без этой проверки бот с отключенным режимом приватности отвечал бы в группе на чужие команды. - Обновление 3 — стикер: поля
textнет, и бот молча его пропускает. Без проверкиisinstance(text, str)обработчик упал бы на.strip()сAttributeError: 'NoneType' object has no attribute 'strip'. - Обновление 4 — строка из пробелов: без проверки
if not wordsвыражениеtext.split()[0]дало быIndexError: list index out of range. - Обновление 5 — нажатие инлайн-кнопки приходит не как
message, а какcallback_query, и его обрабатывают отдельной веткой.
В настоящем боте результат handle_update отправляется POST-запросом на метод sendMessage по адресу вида https://api.telegram.org/bot<TOKEN>/sendMessage, а обновления приходят из getUpdates или вебхука. Эту часть обычно берут на себя библиотеки: в Python это aiogram 3.x и python-telegram-bot (с версии 20 асинхронная). Полный рабочий бот с токеном, командами и кнопками разобран в статье как сделать телеграм-бота на Python.
Как завести бота через BotFather
Свой бот создается через официальный служебный бот @BotFather. Исключение с Bot API 9.6 (апрель 2026) — управляемые боты (managed bots): сервис-конструктор может создать бота для пользователя через специальную кнопку, но и там пользователь подтверждает создание сам.
- Найдите в Telegram @BotFather (у официального аккаунта есть галочка верификации) и нажмите «Запустить».
- Отправьте команду
/newbot. - Введите отображаемое имя, например «Otus Demo». Его можно поменять позже.
- Введите username: латиница, цифры и подчеркивание, окончание обязательно
bot(например,otus_demo_bot). Если имя занято, BotFather попросит другое. - В ответ придет токен вида
123456789:AA.... Это ключ, по которому программа управляет ботом.
Дальше в том же BotFather настраивают описание (/setdescription), список команд в меню (/setcommands), аватар (/setuserpic) и поведение в группах (/setprivacy).
Токен — это секрет. Кто знает токен, тот полностью управляет ботом: читает входящие сообщения и пишет от его имени. Не публикуйте токен в коде на GitHub и в скриншотах, храните его в переменной окружения или менеджере секретов. Если токен утек — выпустите новый командой /revoke в BotFather, старый перестанет работать. Для вебхука дополнительно задайте параметр secret_token в setWebhook и проверяйте заголовок X-Telegram-Bot-Api-Secret-Token во входящих запросах, чтобы отсекать поддельные обновления.
Код или конструктор: что выбрать
| Критерий | Конструктор (no-code) | Собственный код |
|---|---|---|
| Порог входа | Не нужно программировать | Нужны язык и базовые знания HTTP |
| Скорость запуска | Часы | От одного дня до недель |
| Гибкость | В пределах возможностей платформы | Любая логика и интеграции |
| Данные | Хранятся у платформы | Под вашим контролем |
| Стоимость | Обычно подписка | Сервер плюс время разработчика |
Практичное правило: меню, FAQ и сбор заявок удобно собрать в конструкторе и проверить, нужен ли бот клиентам. Если нужна интеграция с вашей CRM, складом, нестандартная оплата или сложные сценарии — переходите на код.
Ограничения ботов, о которых стоит знать заранее
- Бот не пишет первым. В личные сообщения он может написать только тому, кто сам начал с ним диалог (нажал «Запустить»). Купить базу номеров и разослать рекламу через бота нельзя.
- Режим приватности в группах. По умолчанию бот в группе видит не все сообщения, а в основном команды и ответы на свои сообщения. Чтобы видеть все, режим приватности отключают в BotFather (после этого бота нужно удалить из группы и добавить заново) или делают бота администратором.
- Лимиты на рассылку. У Telegram есть ограничения частоты отправки: слишком частые сообщения получат ошибку 429 и паузу. Массовые рассылки делают с очередью и задержками.
- Оплата цифровых товаров. Внутри Telegram цифровые товары и услуги продаются за Telegram Stars, физические товары — через подключенных платежных провайдеров.
Если бот не отвечает: диагностика по симптому
| Симптом | Частая причина | Что сделать |
|---|---|---|
| Ошибка 401 Unauthorized | Неверный или отозванный токен | Взять актуальный токен в BotFather |
| Ошибка 409 Conflict | Одновременно запущены две копии бота или включен вебхук при getUpdates |
Оставить одну копию, при переходе на polling удалить вебхук (deleteWebhook) |
| В группе реагирует только на команды | Включен режим приватности | /setprivacy в BotFather и повторное добавление в группу или права администратора |
| Падает на стикерах и фото | Код ожидает поле text у каждого сообщения |
Проверять наличие и тип поля, как в примере выше |
Выводы
- Telegram-бот нужен для повторяющихся действий: ответы на частые вопросы, заявки, продажи, уведомления, модерация, личные инструменты.
- Бот состоит из бот-аккаунта, Bot API и вашей программы; Telegram только доставляет сообщения, логику задает программа, и работает бот, пока она запущена.
- Обновления программа получает через long polling или webhook, отвечает методом
sendMessage. - Бот создается через @BotFather за несколько минут; токен — секрет, при утечке его отзывают командой
/revoke. - Главные границы: бот не пишет первым, в группах по умолчанию видит не все, рассылки ограничены по частоте.
Где применяется / связь с практикой
Освойте тему на практике
Бот в Telegram часто становится первым «диалоговым» проектом: сначала меню и команды, потом сценарии с состояниями, интеграции с CRM и платежами, а дальше — понимание свободного текста и голосовых сообщений. Если хочется перейти от ботов на командах к полноценным диалоговым системам с обработкой естественного языка, посмотрите программу курса «Диалоговые боты и голосовые помощники». Разобраться в отдельных темах бесплатно можно на открытых уроках Otus.
FAQ
Бесплатно ли создать бота в Telegram?
Создание бота через BotFather и использование Bot API бесплатны. Платить придется за сервер, на котором работает программа, или за подписку конструктора.
Может ли бот узнать номер телефона пользователя?
Только если пользователь сам поделится контактом, например нажав специальную кнопку запроса контакта. Без согласия бот видит лишь id, имя и username, если он задан.
Можно ли переименовать бота или сменить username?
Отображаемое имя меняется в BotFather в любой момент. Username после создания обычно не меняют: проще создать нового бота с нужным адресом.



