Команды помогают пользователю понять, что умеет Telegram-бот, и быстро запустить нужное действие: начать работу через /start, открыть справку через /help, посмотреть настройки или выполнить собственную команду проекта.
Но здесь легко перепутать две разные вещи. Список команд в интерфейсе Telegram и обработка этих команд самим ботом — не одно и то же. Можно добавить /catalog через BotFather и увидеть её в меню, но бот не начнёт выполнять эту команду, пока соответствующая логика не появится в коде.
Что такое команда Telegram-бота
Обычно команда начинается с /:
/start
/help
/catalog
/settings Когда пользователь выбирает команду из меню или вводит её вручную, Telegram передаёт боту соответствующее сообщение. Дальше уже код бота должен определить команду и выполнить нужное действие.
Поэтому у команды фактически есть две части:
- описание команды в Telegram — название и короткая подсказка, которые видит пользователь;
- обработчик в коде — логика, которая реально выполняется после получения команды.
Например:
start - Начать работу
catalog - Открыть каталог
orders - Мои заказы
help - Помощь Но сами ответы, открытие каталога и получение заказов должны быть реализованы отдельно.
↑ К оглавлениюКакие команды стоит добавить
Не нужно превращать меню в список из десятков технических действий.
Базовый вариант:
/start
/help
/settings /settings имеет смысл добавлять, если у бота действительно есть пользовательские настройки.
У конкретного проекта могут быть свои команды:
/catalog
/order
/profile
/support Название должно объяснять действие без дополнительной инструкции.
Если бот сложный, часть навигации удобнее сделать кнопками и меню внутри сообщений, а список команд оставить коротким.
↑ К оглавлениюКак добавить команды через BotFather
Для обычного бота самый простой способ — настроить список через @BotFather.
Путь:
/mybots
→ нужный бот
→ Edit Bot
→ Edit Commands После этого отправляется список:
start - Начать работу
help - Помощь
catalog - Открыть каталог
orders - Мои заказы После сохранения Telegram сможет показывать эти команды пользователю.
В BotFather название обычно указывается без /, а в интерфейсе Telegram оно отображается как /start, /help и т. д.
Ограничения имени команды
Имя Bot API-команды:
- от 1 до 32 символов;
- строчные английские буквы;
- цифры;
_.
Корректные примеры:
start
my_orders
catalog2 Некорректные:
МоиЗаказы
my-orders Описание команды лучше оставлять коротким и понятным.
↑ К оглавлениюКак изменить существующие команды
Открыть тот же раздел BotFather:
/mybots
→ нужный бот
→ Edit Bot
→ Edit Commands и отправить актуальный полный список.
Например, было:
start - Начать
catalog - Каталог
help - Помощь стало:
start - Начать работу
products - Каталог товаров
orders - Мои заказы
help - Помощь Важно проверить и код бота.
Если /catalog переименовали в /products, а обработчик остался только для /catalog, пользователь увидит новую команду, но бот её не выполнит.
Почему команда появилась в меню, но бот на неё не отвечает
Добавление команды через BotFather не создаёт программную логику.
Например:
balance - Проверить баланс Telegram покажет /balance. Но дальше приложение должно обработать полученный Update:
/balance
↓
получение Update
↓
распознавание команды
↓
запрос баланса
↓
ответ пользователю Если обработчика /balance нет, команда сама по себе ничего полезного не выполнит.
Нужно разделять:
Команда отображается? Это конфигурация списка команд.
Бот выполняет команду? Это код, обработка Updates и backend.
Если бот вообще перестал отвечать на команды и сообщения, смотрите диагностику не отвечающего Telegram-бота.
↑ К оглавлениюЧто проверить в обработчике команды
Общий принцип:
/start → startHandler
/help → helpHandler
/catalog → catalogHandler Если команда видна, но не работает, проверить:
- получает ли приложение Update;
- распознаётся ли сообщение как команда;
- совпадает ли имя с зарегистрированным обработчиком;
- не возникает ли исключение внутри обработчика;
- отправляется ли ответ;
- не менялась ли маршрутизация после обновления кода.
Полезно смотреть логи приложения именно во время отправки команды.
↑ К оглавлениюОсобенность /start
/start может приходить не только как:
/start но и с параметром deep link:
/start promo Такой сценарий используют для:
- реферальных ссылок;
- определения источника;
- привязки пользователя;
- запуска определённого сценария;
- передачи небольшого параметра.
Например, https://t.me/example_bot?start=promo может привести к /start promo. Поэтому обработчик не должен без необходимости рассчитывать только на полное совпадение всей строки с /start.
Команды в группах
В группе команда может выглядеть:
/help@example_bot Это позволяет Telegram различать команды нескольких ботов.
Если бот работает и в личных сообщениях, и в группах, это нужно учитывать при разборе команды.
↑ К оглавлениюКак настроить команды через Telegram Bot API
Для программного управления списком используется:
setMyCommands Пример:
{
"commands": [
{ "command": "start", "description": "Начать работу" },
{ "command": "catalog", "description": "Открыть каталог" },
{ "command": "help", "description": "Помощь" }
]
} Запрос:
POST https://api.telegram.org/bot<TOKEN>/setMyCommands Токен бота должен храниться только в защищённой конфигурации приложения.
Не публиковать его:
- в frontend;
- исходниках;
- документации;
- скриншотах.
Через setMyCommands можно задать до 100 команд. Но для обычного пользовательского бота обычно лучше оставить только действительно нужные команды.
Как посмотреть текущий список через API
Используется:
getMyCommands Это полезно, когда:
- BotFather показывает одно;
- пользователь видит другое;
- команды задавались программно;
- используются разные scopes или языки.
Лучше проверить фактическую конфигурацию, чем ориентироваться только на интерфейс.
↑ К оглавлениюКак удалить список команд
Используется:
deleteMyCommands Удаление может относиться к определённому scope и языку, а не обязательно ко всей конфигурации бота.
↑ К оглавлениюРазные команды для личных чатов, групп и администраторов
Bot API поддерживает scopes.
Наборы команд можно различать, например:
- для всех пользователей;
- личных чатов;
- групп;
- администраторов;
- конкретного чата;
- конкретного пользователя в конкретном чате.
Например, обычный пользователь видит:
/help
/profile а администратор:
/report
/moderate
/settings Если у двух пользователей показываются разные команды, причина может быть именно в разных scopes.
↑ К оглавлениюКоманды для разных языков
setMyCommands поддерживает language_code.
Например, русский список может быть таким:
catalog - Каталог
help - Помощь А английский:
catalog - Catalog
help - Help При диагностике старых или разных списков нужно учитывать язык интерфейса пользователя.
↑ К оглавлениюBotFather или setMyCommands: что выбрать
Для небольшого бота проще BotFather.
Подходит, если:
- команд мало;
- список меняется редко;
- всем нужен один набор;
- нет сложной локализации.
setMyCommands удобнее, если:
- несколько языков;
- разные команды для групп/личных чатов;
- отдельный набор администраторов;
- конфигурация должна разворачиваться автоматически.
Важно понимать, где находится источник актуальной конфигурации. Если команды меняются вручную через BotFather, а приложение при запуске снова вызывает setMyCommands, результат может отличаться от ожидаемого.
Почему отображается старый список команд
Проверить:
- что возвращает
getMyCommands; - какой scope используется;
- задан ли
language_code; - не вызывает ли приложение
setMyCommandsпри запуске; - нет ли более специфичного набора для конкретного чата или пользователя;
- действительно ли изменена та конфигурация, которую получает пользователь.
Не нужно сразу переписывать обработчики. Сначала определить источник отображаемого списка.
↑ К оглавлениюМеню команд и кнопка Menu — не всегда одно и то же
Рядом с полем ввода Telegram может показывать кнопку Menu. Она может открывать команды, но может быть настроена и на запуск Web App.
Если у проекта есть Telegram Mini App, это особенно важно.
Нужно отдельно различать:
- список команд;
- menu button;
- логику самого бота;
- Mini App.
Как проверить команды после изменения
1. Открыть меню команд
Проверить правильные названия и описания.
2. Выполнить каждую команду
Проверять реальную реакцию бота.
3. Проверить /start
Включая deep link, если он используется.
4. Проверить нужные типы чатов
Если бот работает в группах.
5. Проверить разные языки
Если есть локализованные команды.
6. Посмотреть логи
Должно быть видно получение команды и выполнение обработчика.
↑ К оглавлениюЕсли команда не работает после обновления бота
Если проблема появилась после изменения кода или зависимостей, список Telegram может быть ни при чём.
Проверить:
- запускается ли обработчик;
- не изменилась ли маршрутизация;
- приходит ли Update;
- нет ли ошибки до отправки ответа;
- middleware/filters;
- webhook или polling;
- работу обычных сообщений.
Если одна команда не работает, а остальные отвечают — вероятнее локальная проблема обработчика.
Если не отвечают вообще все команды и сообщения — диагностировать работу бота целиком.
↑ К оглавлениюКороткая последовательность диагностики
- проверить команду в меню Telegram;
- получить текущий список через
getMyCommands; - проверить scope и язык;
- отправить команду вручную;
- убедиться, что Update дошёл до приложения;
- проверить распознавание команды;
- проверить запуск обработчика;
- посмотреть ошибку в логах;
- проверить отправку ответа;
- повторить тест после исправления.
Частые вопросы
Как добавить команды Telegram-боту?
Самый простой способ — открыть @BotFather, выбрать нужного бота, перейти в Edit Bot → Edit Commands и отправить список команд с короткими описаниями. Программно список можно задать через метод setMyCommands Bot API.
Почему команда есть в меню, но бот её не выполняет?
Список в меню и обработчик в коде — разные вещи. BotFather только сообщает Telegram, какую команду показывать. Чтобы бот ответил, приложение должно получить Update, распознать команду и выполнить соответствующий обработчик.
Как изменить команды Telegram-бота?
В @BotFather нужно открыть тот же раздел Edit Commands и отправить актуальный полный список. Если список меняется через API, проверьте вызовы setMyCommands и фактическую конфигурацию через getMyCommands.
Как удалить команды?
Для удаления используется метод deleteMyCommands. Удаление может относиться к определённому scope и языку, поэтому при необходимости нужно проверить, какая именно конфигурация удаляется.
Почему у разных пользователей отображаются разные команды?
Причиной могут быть разные scopes: личный чат, группа, администратор, конкретный чат или пользователь. Также на отображение влияет language_code и локализация списка команд.
Почему /start иногда приходит с дополнительным текстом?
Команда /start может содержать параметр deep link, например /start promo. Такой параметр используют для реферальных ссылок, определения источника и запуска отдельного сценария, поэтому обработчик не должен без необходимости ожидать только точное совпадение всей строки.
Сколько команд можно установить через Bot API?
Через setMyCommands можно задать до 100 команд. Для обычного пользовательского бота обычно лучше оставить только действительно нужные команды.
Что делать, если перестали работать сразу все команды?
Нужно диагностировать работу бота целиком: проверить получение Update, webhook или polling, маршрутизацию, middleware и логи, а также работу обычных сообщений. Если не отвечают все команды и сообщения, проблема, вероятно, шире одного обработчика.
Если нужно разобраться с существующим ботом
Если список команд настроен неправильно, команды отображаются, но не выполняются, или после изменений часть сценариев перестала работать, сначала имеет смысл определить, где именно находится сбой: в конфигурации Telegram, получении Updates или обработчиках приложения.
Часто существующего бота можно исправить точечно — без переписывания всего проекта.