# Команды бота Telegram: меню, setMyCommands и BotFather

Формат команды, список в меню через BotFather и setMyCommands, области, языки и параметр start.

https://shiba-bank.com/ru/guides/bot-commands

Обновлено 02.10.2026 · 5 мин чтения

Команда бота — это слово с косой чертой в начале, например `/start`: бот получает его как обычное сообщение и решает, что делать. Чтобы команды появились в подсказке и в меню рядом с полем ввода, их список нужно задать самому. Есть два способа: командой `/setcommands` в [@BotFather](https://t.me/botfather) или методом Bot API `setMyCommands`. Список лишь подсказывает людям, что можно ввести: обрабатывает команды программа бота.

## Какой бывает команда

По документации Telegram, команда всегда начинается с `/` и содержит до 32 символов: латинские буквы, цифры и подчёркивания. Рекомендуются простые слова в нижнем регистре, например `/next` или `/cancel`. Лучше конкретные названия: `/newrule` понятнее, чем `/new` с вопросом «что именно?».

Приложения Telegram делают с командами три вещи:

- подсвечивают команду в сообщениях: нажатие на неё отправляет команду снова;
- показывают список подсказок с описаниями, когда человек вводит `/`;
- показывают кнопку меню рядом с полем ввода, в которой собраны все команды бота или часть из них.

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

## Как задать список команд в BotFather

1. Откройте чат с [@BotFather](https://t.me/botfather) и отправьте `/setcommands`.
2. Выберите бота.
3. Пришлите список: по одной команде в строке в виде `команда - описание`.

Пример списка из трёх строк: `start - Начать`, `help - Справка`, `settings - Настройки`.

Все команды BotFather и интерактивное меню настроек `/mybots` описаны в статье [как создать бота в ТГ](https://shiba-bank.com/ru/guides/create-telegram-bot).

## setMyCommands: список команд из кода

Метод `setMyCommands` меняет список команд бота. Параметры:

- `commands` — обязательный. Список объектов `BotCommand`, не больше 100 штук. У каждого есть `command` (от 1 до 32 символов: строчные латинские буквы, цифры и подчёркивания, без косой черты) и `description` (от 1 до 256 символов).
- `scope` — для кого действует список. По умолчанию это `BotCommandScopeDefault`, то есть для всех.
- `language_code` — двухбуквенный код языка по ISO 639-1. Если он пуст, список применяется ко всем пользователям из этой области, для языка которых нет отдельного списка.

Пример запроса:

`curl "https://api.telegram.org/bot<ТОКЕН>/setMyCommands" -H "Content-Type: application/json" -d '{"commands":[{"command":"start","description":"Начать"},{"command":"help","description":"Справка"}]}'`

При успехе в ответе `"result": true`. Метод задаёт список целиком, поэтому передавайте все команды сразу. Прочитать текущий список можно методом `getMyCommands`, удалить — `deleteMyCommands`: после удаления людям снова покажут команды более широкой области.

## Области и языки: разные команды разным людям

Команды можно показывать по-разному. Поддерживаются семь областей:

| Область | Для кого |
| --- | --- |
| `default` | все, если для них нет более узкого списка |
| `all_private_chats` | все личные чаты с ботом |
| `all_group_chats` | все группы и супергруппы |
| `all_chat_administrators` | администраторы всех групп |
| `chat` | один конкретный чат (нужен `chat_id`) |
| `chat_administrators` | администраторы одной группы (нужен `chat_id`) |
| `chat_member` | один участник группы (нужны `chat_id` и `user_id`) |

Какой список увидит человек, Telegram определяет по порядку, и берётся первый заданный. В личном чате с ботом проверяются `chat`, затем `all_private_chats`, затем `default`. В группах — `chat_member`, `chat_administrators` (только для администраторов), `chat`, `all_chat_administrators` (только для администраторов), `all_group_chats` и `default`. На каждом шаге сначала ищется список с языком пользователя (`language_code`), потом без языка.

Отсюда практический вывод: список для `all_private_chats` перекроет `default` в личных чатах. А если вы задали список для одного языка, людям с этим языком покажут именно его, а не общий.

## Как бот получает команду

Команда приходит в обычном обновлении `message`: в `text` лежит `/start`, а в `entities` есть сущность типа `bot_command`. В группах команду адресуют конкретному боту через `@`: `/command@имя_бота`. Если у бота включён режим приватности, в группе он увидит только команды, адресованные ему, и общие команды вроде `/start`, когда он последним писал в эту группу.

> **Важно:** Список команд, заданный боту, ничего не проверяет. В обновлении нет информации об области команды, и прийти может даже команда, которой у бота нет. Telegram советует всегда проверять на своей стороне, что команда существует и что человеку её можно использовать.

## Команда /start с параметром

Ссылка на бота открывает чат с ним: `https://t.me/<имя_бота>`. К ней можно добавить параметр `start`, и бот получит его вместе с командой:

- ссылка `https://t.me/your_bot?start=airplane` пришлёт боту `/start airplane`;
- допустимы символы `A-Z`, `a-z`, `0-9`, `_` и `-`, длина — до 64 символов; для двоичных и других данных Telegram советует кодировать их в base64url;
- ссылка с параметром `startgroup` предлагает выбрать группу, куда добавить бота, и бот получает `/start@your_bot spaceship`.

На параметре `start` держатся и реферальные ссылки ботов: об этом [в статье про реферальные ссылки](https://shiba-bank.com/ru/guides/referral-links).

## Почему команды не видны в меню

- **Список не задан.** Пока вы не вызвали `setMyCommands` или `/setcommands`, подсказки нет.
- **Перекрыт более узкой областью.** Список `all_private_chats` или список для языка пользователя важнее общего. Вызовите `getMyCommands` с нужными `scope` и `language_code` и посмотрите, что задано.
- **Команда не соответствует формату.** Только строчные латинские буквы, цифры и подчёркивания, до 32 символов.

Если команда видна, но бот молчит, дело в коде: список команд лишь подсказка, а обработчик пишется отдельно. Как получать события, [рассказано в статье про getUpdates и webhook](https://shiba-bank.com/ru/guides/bot-api-updates), а ответ отправляется методом [sendMessage](https://shiba-bank.com/ru/guides/bot-api-curl).

## Что дальше

Команды удобны, когда у бота есть чем заняться: например, принимать оплату. Как подключить платежи звёздами, читайте в статье [оплата звёздами в боте](https://shiba-bank.com/ru/guides/stars-payments-in-bot). Описание API бота Shiba Bank — в [документации API](https://shiba-bank.com/api/docs).

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

### Как задать команды боту Telegram?
Отправьте [@BotFather](https://t.me/botfather) команду `/setcommands`, выберите бота и пришлите список строк `команда - описание`. Из кода то же делает метод `setMyCommands`.

### Как добавить команды в меню бота через BotFather?
Команда `/setcommands`, затем выбор бота и список. Люди увидят команды как подсказки, когда введут `/`, и в кнопке меню рядом с полем ввода.

### Сколько команд можно задать боту?
Метод `setMyCommands` принимает не больше 100 команд на одну область. Имя команды — от 1 до 32 символов, описание — от 1 до 256.

### Можно ли показать разные команды разным людям?
Да. Для этого у `setMyCommands` есть параметры `scope` (область: все личные чаты, группы, администраторы, один чат или один участник) и `language_code` (язык).

### Что такое telegram api commands?
Это методы Bot API для работы со списком команд: `setMyCommands`, `getMyCommands` и `deleteMyCommands`. Они описаны в [документации Bot API](https://core.telegram.org/bots/api).

### Нужно ли обрабатывать команду, если она есть в списке?
Да. Список только подсказывает людям, что ввести. Бот получает команду как обычное сообщение, и отвечать на неё должна ваша программа.
