Боты и автоматизация2026-07-287 минРедакция Submarine School

Как создать команду боту в Telegram в 2026: меню и обработчик

Как создать команду боту в Telegram в 2026: меню и обработчик

Команда бота это строка, которая начинается со слэша: /start, /help, /cancel. Чтобы она появилась в подсказках Telegram, список команд регистрируют у BotFather или методом setMyCommands. Чтобы она что-то делала, внутри бота пишут обработчик. Это две разные операции, и путаница между ними даёт самую частую жалобу: команда в меню есть, а нажатие ничего не меняет. Ниже обе стороны, наборы команд для пользователя и для админа и причины пустого меню.

Из чего состоит команда

У команды две части: сама команда и описание, которое человек видит в подсказке. Правила Telegram простые: до 32 символов, только строчные латинские буквы, цифры и подчёркивания, заглавные буквы Telegram не принимает (рекомендации документации для авторов ботов). Описание ограничено 256 символами, в один список помещается до 100 команд (справочник по setMyCommands).

Ключевое различие, которое стоит запомнить сразу: список команд это только подсказка в интерфейсе. Добавите /report в список без обработчика, пользователь нажмёт и получит тишину. Обратное тоже верно: обработчик работает и без записи в списке, просто про такую команду никто не узнает.

Как добавить список команд через BotFather

  1. Откройте @BotFather и отправьте /mybots.
  2. Выберите бота, нажмите Edit Bot, затем Edit Commands. Короткий путь: отправить /setcommands и выбрать бота из списка.
  3. Отправьте весь набор одним сообщением: по одной команде на строку, в формате «команда пробел дефис пробел описание». Слэш в начале не пишется, дефис обязателен.
  4. Проверьте в чате с ботом: наберите / и посмотрите подсказку.

Сообщение для BotFather выглядит так:

start - Запустить бота и получить приветствие
help - Что умеет бот и список команд
menu - Открыть главное меню
cancel - Отменить текущее действие
settings - Настроить уведомления

Список отправляется целиком и заменяет предыдущий: чтобы убрать одну команду, пришлите заново все остальные без неё. BotFather в ответ пишет, что команды обновлены, и если сообщения об успехе нет, формат нарушен и старый список остался на месте.

То же самое делается из кода или из терминала методом setMyCommands. Это удобно, когда бот развивается и ходить в BotFather руками надоело:

curl -X POST "https://api.telegram.org/bot<ТОКЕН>/setMyCommands" \
  -H "Content-Type: application/json" \
  -d '{"commands":[
        {"command":"start","description":"Запустить бота"},
        {"command":"help","description":"Что умеет бот"}
      ],"scope":{"type":"all_private_chats"}}'

Команды это интерфейс бота, а ценность в том, что за ними стоит. На бесплатном вебинаре показываем, как собрать бота с реальной задачей внутри.

Занять место

Чем меню команд отличается от кнопок

В боте живут несколько элементов управления, и их легко перепутать.

  • Список команд: то, что выпадает, когда человек набирает / в поле ввода. Его вы и задаёте в BotFather или через setMyCommands.
  • Кнопка слева от поля ввода: по умолчанию открывает тот же список команд, но методом setChatMenuButton переключается на мини-приложение (описание метода).
  • Кнопки в переписке: reply-клавиатура под полем ввода и inline-кнопки под сообщением. Это отдельный механизм, показывали его в разборе кнопок для бота.
  • Кнопка Start в чате при первом открытии и пункты Help и Settings в меню на странице бота: появляются сами, если эти команды есть в списке.

Вывод простой: команды удобны для действий, которые человек вызывает сам и по памяти (отмена, помощь, настройки), а кнопки лучше работают для выбора из вариантов, предложенных прямо сейчас.

По теме: Как сделать бота приватным в Telegram: доступ только своим 2026

Как сделать, чтобы команда что-то делала

Обработчик это логика, которая срабатывает на конкретную команду. В коде на Python с библиотекой aiogram минимальный вариант помещается в десяток строк:

import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command

bot = Bot("ВАШ_ТОКЕН")
dp = Dispatcher()

@dp.message(Command("help"))
async def help_handler(message: types.Message):
    await message.answer("Я присылаю расписание. Команды: /start, /help, /cancel")

asyncio.run(dp.start_polling(bot))

Читается буквально: «на сообщение с командой help ответить таким текстом». Остальные команды добавляются по тому же принципу, а внутри обработчика может быть что угодно: запись в таблицу, запрос к нейросети, отправка файла. Писать это руками не обязательно, задачу можно поставить ИИ-помощнику словами: «добавь в бота команду /cancel, которая сбрасывает текущий диалог и пишет об этом пользователю». Такой способ работы мы показывали в статье про то, как вообще заставить бота отвечать.

Команда может приходить с параметром: на /report 7 бот получит строку целиком и аргумент вы отделяете в обработчике. У /start параметр приходит из ссылки вида t.me/имя_бота?start=promo, по нему видно, откуда пришёл человек.

Заводите команду в списке только после того, как она реально работает. Пустая строка в меню раздражает сильнее её отсутствия: человек уже нажал и ждёт ответа.

Дальше обычно возникает вопрос не про синтаксис, а про то, какого бота вообще имеет смысл собирать и как довести его до рабочего состояния. Разбираем это на бесплатном вебинаре по вайбкодингу, участникам достаётся гайд в подарок.

Записаться на вебинар

Как задать команды в конструкторе без кода

В конструкторах команда это триггер сценария: вы создаёте блок с сообщением или цепочкой действий и указываете, что запускать его должна команда /menu. Всё, что человек увидит после нажатия, собирается мышкой. Логика та же, что в коде, просто вместо функции блок на схеме. Как выбрать платформу под задачу, мы разбирали в материале про то, как создать бота в Telegram без программирования.

Деталь, о которой забывают: часть конструкторов регистрирует список команд в Telegram сама, часть только обрабатывает их у себя. Если поля с описаниями команд в интерфейсе нет, подсказку придётся один раз завести руками в BotFather, иначе сценарий работает, а команду в меню никто не видит.

По теме: Как сделать рассылку в боте Telegram в 2026: база, лимиты, код

Какие команды стоит завести почти любому боту

Telegram просит поддерживать три команды: /start для начала общения, /help со справкой и /settings для настроек, если они у бота есть (раздел про возможности ботов). К ним добавляют пару служебных.

  • /start: приветствие и одна фраза о том, что бот умеет. Сюда же приходят параметры из ссылок-приглашений.
  • /help: список команд человеческим языком плюс контакт живого человека.
  • /menu: возврат в главное меню из любого места, спасает заблудившихся в сценарии.
  • /cancel: выход из текущего шага. Обязателен, если бот задаёт вопросы и ждёт ответов.
  • /settings: уведомления, город, язык и прочее, что человек может захотеть поменять.

Описания пишите глаголом и от лица пользователя: не «функционал отмены», а «отменить текущее действие». Формально в описание влезает до 256 символов, но в интерфейсе видно примерно строку, так что держитесь трёх-шести слов. И не выкладывайте в меню всё подряд: 5-8 команд человек прочитает, три десятка пролистает мимо.

Разные команды для админа и для обычного пользователя

Один и тот же бот может показывать разные списки разным людям. За это отвечают области видимости: их семь, от «всем по умолчанию» до конкретного участника конкретного чата, и Telegram выбирает самую узкую подходящую (перечень областей в Bot API). Приоритет по убыванию: участник чата, администраторы чата, конкретный чат, все администраторы групп, все группы, все личные чаты, значение по умолчанию.

Чтобы админские команды видели только вы, отправьте отдельный список в область своего чата с числовым идентификатором:

curl -X POST "https://api.telegram.org/bot<ТОКЕН>/setMyCommands" \
  -H "Content-Type: application/json" \
  -d '{"commands":[
        {"command":"stats","description":"Статистика за день"},
        {"command":"broadcast","description":"Отправить рассылку"}
      ],"scope":{"type":"chat","chat_id":123456789}}'

Одна оговорка, без которой это опасно: область видимости прячет подсказку, но не запрещает саму команду. Любой может набрать /broadcast руками, поэтому права проверяйте внутри обработчика, сверяя идентификатор отправителя со списком администраторов. В группах у бота ещё и свой набор прав, это мы разбирали в статье про бота для группы.

По теме: Как сделать бот-приложение в Telegram: мини-приложение с ИИ 2026

Почему команда не появляется в меню

Если меню пустое или в нём старые команды, пройдитесь по причинам сверху вниз.

  1. Список не сохранился: BotFather отвечает сообщением об успехе, и если его не было, формат сломан (пропущен дефис, лишние пустые строки, слэш в начале строки).
  2. В самой команде недопустимые символы: кириллица, пробелы, дефисы и заглавные буквы внутри команды не принимаются, а описание на русском писать можно.
  3. Команда ушла не в ту область видимости: поставили для личных чатов, а проверяете в группе, или наоборот.
  4. Клиент показывает старые данные: закройте и откройте чат, а если не помогло, перезапустите приложение.
  5. Выбран не тот бот, частая история при похожих именах. Или бота просто нет в группе, где вы ждёте подсказку.

Быстрая проверка: спросите у Telegram, что он про вашего бота знает. Метод getMyCommands вернёт актуальный список, и станет ясно, проблема в сохранении или в отображении. Область видимости укажите ту же, в которую сохраняли команды: без параметра scope Telegram отдаёт список по умолчанию, и он вполне может оказаться пустым.

curl "https://api.telegram.org/bot<ТОКЕН>/getMyCommands"

Частые вопросы

Можно ли сделать команду на русском языке?

Саму команду нет: разрешены только латинские буквы, цифры и подчёркивания. Описание рядом с ней пишется на любом языке, именно его человек и читает. Нужны русские слова в интерфейсе, ставьте кнопки.

Сколько команд можно добавить?

До 100 в одном списке, но это потолок, а не ориентир: в меню держите 5-8 команд, остальное прячьте в кнопки и разделы.

Нужно ли перезапускать бота после изменения списка?

Нет, список хранится на стороне Telegram и обновляется сразу. Перезапуск нужен, только если вы поменяли код обработчиков.

Как убрать команды из меню совсем?

Метод deleteMyCommands очищает список для выбранной области видимости. Через BotFather тот же результат даёт повторный /setcommands с новым набором.

Команда есть в меню, но бот молчит. Что не так?

Почти всегда нет обработчика: список команд и логика бота живут отдельно. Проверьте, что в коде или в сценарии есть блок именно на эту команду и что бот запущен.

Команды это только оболочка, ценность бота в том, что происходит после нажатия. На бесплатном вебинаре по вайбкодингу показываем, как собрать бота с рабочей начинкой и довести его до запуска.

Записаться на вебинар
Разборы, кейсы и фишки вайбкодинга каждую неделю в телеграм-канале «Яков вайбкодит».
Первый проект с ИИ: живой разбор, бесплатно Занять место