Skip to content
Innovialabs

How to Set Up Bot Commands, Menu Button and Description in Telegram

Practice4 min

In short

Commands are set with setMyCommands per scope and language, the menu button with setChatMenuButton, and the description, short description and profile photo define what users see before pressing Start.

The short answer: what you configure and where

A bot has several "storefront" elements, and each can be set in BotFather or through the Bot API:

WhatWhere the user sees itBotFatherBot API
CommandsCommand menu and hints when typing "/"/setcommandssetMyCommands
Menu buttonLeft of the input field/mybots → Bot Settings → Menu ButtonsetChatMenuButton
DescriptionEmpty chat before pressing Start/setdescriptionsetMyDescription
Short descriptionBot profile and link previews/setabouttextsetMyShortDescription
Profile photoChat list and profile/setuserpic—

BotFather is convenient for one-off setup. The API is needed when commands differ by language, role or chat, and when settings should live in code alongside the bot.

Commands: setMyCommands

A command uses lowercase Latin letters, digits and underscores, up to 32 characters; its description can be up to 256 characters. Keep the list short: 3–7 commands people actually need.

curl -X POST "https://api.telegram.org/bot<TOKEN>/setMyCommands" \
  -H "Content-Type: application/json" \
  -d '{
    "commands": [
      {"command": "start", "description": "Start"},
      {"command": "orders", "description": "My orders"},
      {"command": "help", "description": "Help"}
    ],
    "scope": {"type": "all_private_chats"},
    "language_code": "en"
  }'

Scopes

The scope parameter lets you show different commands in different places:

  • default — everywhere by default;
  • all_private_chats — in all private chats;
  • all_group_chats — in all groups;
  • all_chat_administrators — to administrators of all groups;
  • chat, chat_administrators, chat_member — a specific chat, its administrators, or a specific member.

Telegram picks the most specific matching scope. In a group, for example, an administrator sees commands from chat_administrators if they are set, while a regular member sees all_group_chats or default. This is a handy way to hide service commands like /stats from regular users.

Languages

The language_code parameter sets the list for users with that Telegram interface language. First set a list without language_code as the fallback, then add translations for ru, en, uz and any other languages you need. Note that the language comes from the app settings, not from a choice made inside your bot.

The button to the left of the input field comes in three types:

  • commands — opens the command list;
  • web_app — launches a Mini App;
  • default — default behavior.
{
  "menu_button": {
    "type": "web_app",
    "text": "Catalog",
    "web_app": {"url": "https://example.com/app"}
  }
}

Without chat_id, setChatMenuButton changes the default button for all private chats; with chat_id, only for that user. You can use this to show the Mini App only after registration. Keep the button text short and specific: "Catalog", "Book now" rather than "Open".

Description and short description

The description (up to 512 characters) appears in an empty chat with the bot, above the Start button. It is the main text that convinces people to tap. Answer three questions: what the bot does, why it is useful, and what happens after Start. In BotFather you can add an image or a short animation to the description.

The short description (up to 120 characters) appears on the bot's profile page and in the preview when a link to the bot is shared. One sentence about the benefit.

Both texts can be localized with language_code, just like commands. The bot's name can be localized too, with setMyName.

Profile photo and first impression

Before pressing Start, a user sees the name, profile photo, short description in the profile, the description with its image in the chat, and the menu button. Checklist:

  • the photo reads well in a small circle: a logo or mark without small text;
  • the name says what the bot is, not just the brand name;
  • the description explains the benefit instead of just greeting;
  • all texts are translated into your audience's languages;
  • commands and the menu button match what the bot can actually do.

FAQ

The Telegram client caches the command list. Closing and reopening the chat or restarting the app usually helps. Also check whether a more specific scope or language is overriding your list.

We can help with this

If you'd rather get the result than figure it all out yourself — this is what we do every day.

Discuss a project

Read next

Have an idea or a task? Tell us about it

We'll reply within one business day and propose a solution. The consultation is free.