3SELLER Journal 3SELLER →

Как сделать кнопки в боте: 3 проверенных способа для Telegram

06.10.2026

Кнопки в Telegram-боте это первое, что видит пользователь. Они направляют, подсказывают, помогают не потеряться. Но вопрос "как сделать кнопки в боте" в интернете ведёт в такие дебри, что хочется закрыть вкладку. Я сам через это прошёл. Собрал три способа, которыми пользуюсь регулярно.

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

Первый способ. Python и aiogram: полная свобода

Первый вариант я использую, когда нужно сделать нестандартный бот с уникальной логикой. Библиотека aiogram одна из самых популярных для Telegram на Python. Установка простая:

pip install aiogram

Дальше создаём клавиатуру. В aiogram для этого нужны типы ReplyKeyboardMarkup и KeyboardButton. Когда я впервые писал бота, меня запутал вложенный список. Оказалось, что каждый вложенный список это ряд кнопок. Выглядит так:

from aiogram import types

kb = [
    [types.KeyboardButton(text='Каталог')],
    [types.KeyboardButton(text='Доставка'), types.KeyboardButton(text='Контакты')]
]
keyboard = types.ReplyKeyboardMarkup(keyboard=kb)

В параметре text передаётся то, что будет написано на кнопке. Затем эту клавиатуру нужно показать пользователю. В обработчике команды /start добавляем reply_markup=keyboard:

async def start(msg: types.Message):
    await msg.answer('Привет! Выбери, что тебя интересует:', reply_markup=keyboard)

После запуска бота в чате появляются кнопки. Всё работает. Можно добавить параметр resize_keyboard=True, чтобы клавиатура сжималась до размеров кнопок. А one_time_keyboard=True скроет её после первого нажатия. Такая штука полезна, если хотите, чтобы человек не застрял в меню.

Теперь про инлайн-кнопки, то есть кнопки со ссылками. В aiogram для них есть InlineKeyboardButton. Разница в том, что вместо text передаётся url. И клавиатура создаётся через InlineKeyboardMarkup. Пример из моей практики:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

urlkb = InlineKeyboardMarkup(row_width=1)
urlkb.add(InlineKeyboardButton(text='Перейти на сайт', url='https://example.com'))

Инлайн-кнопки часто используют для перехода на лендинг или оплату. Они могут быть подписаны на callback-обработчики, но это уже более сложный уровень. Если вас пугает код, не читайте дальше этот раздел, просто знайте, что такой способ существует.

Какие грабли ждут новичка: забыть про reply_markup, перепутать KeyboardButton и InlineKeyboardButton, не указать row_width. Но даже с этим код на aiogram остаётся самым надёжным решением.

Второй способ. BotHelp: без кода, но с умными фишками

Когда клиент говорит: «мне нужно просто сделать меню, я не программист», я веду его в BotHelp. Это конструктор, где можно собрать бота визуально. Кнопки там добавляются элементарно.

Варианты размещения: после текстового сообщения или после картинки. Если нужна картинка без текста, тоже можно. Кнопки перетягиваются, ряды и столбцы добавляются через кнопку «Добавить кнопку» и плюсик. Никаких цифр в коде.

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

Есть и одноразовые кнопки. Подходят для многошаговых ботов в блоках «текст» и «картинка». Настраиваются галочкой «Реагировать на клик только один раз». Её я включаю практически всегда в воронках с прогревами. Причина простая: в многошаговом сценарии пользователь может случайно отправиться назад или перезайти. Тогда логика ломается.

Чтобы избежать путаницы, присваивайте метки шагам. Я настраиваю метку после каждого шага и перед следующим проверяю её наличие. Если метка есть, значит, подписчик уже прошёл этот шаг, и мы возвращаем его на нужный этап. Если нет, продолжаем по сценарию.

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

Третий способ. BotFather: постоянная кнопка меню

Помимо кнопок в чате, есть кнопка меню рядом с полем ввода. Она работает всегда, не привязана к сообщениям. Для её настройки не нужен код и конструкторы, достаточно BotFather.

Пошагово:

1. Откройте @BotFather и отправьте /mybots.

2. Выберите нужного бота из списка.

3. Нажмите Bot Settings.

4. Выберите Menu Button.

5. Нажмите Configure menu button.

6. В ответ на запрос отправьте ссылку, по которой будет вести кнопка.

7. Затем введите текст, который отобразится на кнопке вместо стандартного «Меню».

Готово. Теперь при нажатии на кнопку меню сайт откроется в отдельном окне. Такой вариант удобен для ссылок на лендинги, каналы или соцсети.

Если нужно изменить ссылку или название, делаете те же шаги. Отключить кнопку тоже просто. Только учтите: это одиночная кнопка, она не заменит полноценное меню с товарами или услугой.

Такой способ часто хватает для личного блога или небольшого бизнеса.

Почему кнопки не работают: как я чиню ботов

Первое, что я проверяю, когда клиент жалуется на кнопки, это присутствует ли reply_markup в каждом шаге. Часто начинающие разработчики отправляют сообщение с клавиатурой один раз, а потом забывают. Telegram автоматически скрывает кнопки после одного-двух сообщений, если не передавать клавиатуру заново.

Вторая проблема: рассинхрон кода. Если бот написан на Python aiogram, вы добавили InlineKeyboardButton, но забыли callback_handler, кнопка будет выглядеть активной. При нажатии ничего не произойдёт. Точнее, произойдёт, но ничего не изменится.

Третья причина: ограничения Telegram. Длина текста кнопки не должна быть запредельной. Кнопки сохраняются в пределах одного сообщения. Если сообщение слишком длинное, кнопки обрезаются.

Последнее: если используете конструктор вроде BotHelp, проверьте, что кнопка не перекрывается другими элементами. Бывает, вы добавляете кнопку на уровень выше, и подписчик её не видит из-за кнопки ниже.

Главная ошибка: кнопки есть, а продаж нет

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

Кнопки, по сути, просто интерфейс. Пользователь делает клик, а дальше вступает в игру сообщение. Например, человек жмёт «Купить», а в ответ получает сухое «Ваш заказ принят». Ни прогрева, ни снятия страхов, ни допродажи. И если сообщение не цепляет, не говорит с человеком на его языке, пропадает всё.

Именно поэтому в последний год все мои клиенты уходят от чисто технических ботов к автоворонкам. Это цепочка сообщений, которая сама прогревает, снимает страхи и доводит до оплаты. Но раньше считалось, что собрать такую цепочку без программиста невозможно. До тех пор, пока не появился «Отклик».

«Отклик»: это первый ИИ для создания автоворонок в Telegram за 3 минуты, который понимает человеческий язык. Без блок-схем, без программистов и без технического ада.

Работает он как ChatGPT, только для автоворонок. Вы просто говорите или пишете: «Привет! Я коуч по отношениям. Хочу воронку, которая сначала дарит медитацию на уверенность, а на третий день продаёт мою консультацию за 7 000 ₽. Сделай тексты мягкими и заботливыми». Через три минуты воронка готова. Она сама общается с людьми, прогревает их и продаёт.

В каждую воронку встроен умный ИИ-продавец. Он не задаёт дурацкие автовопросы вроде «Ну что, берёте?». Он ведёт диалог как живой человек: бережно отвечает на вопросы, закрывает страхи, отрабатывает возражение «дорого» и за руку ведёт к оплате. Конверсия вырастает до 37% на полном автомате. И никаких дополнительных вложений в рекламу.

Посмотрите на «Отклик» в деле:

Ссылка для тех, кто хочет попробовать: Отклик AI, создать автоворонку за 3 минуты.

Тонкости, которые я вынес из практики

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

Во-первых, кнопки должны отражать реальные ожидания. Если на кнопке написано «Получить бонус», человек ждёт бонус в следующем сообщении. Если вместо этого вы отправляете рекламу, доверие падает, и следующий клик по кнопке уже не будет.

Во-вторых, количество кнопок имеет значение. Практикующие маркетологи на Reddit в своих обсуждениях приходят к выводу, что 3-5 кнопок работают лучше, чем 10. Пользователь устаёт выбирать. Это правило работает и для клавиатур в чатах, и для меню в BotHelp.

В-третьих, не бойтесь экспериментировать. Я постоянно ставлю разные кнопки в одни и те же сценарии и смотрю на клики. Иногда простая замена текста «Следующий шаг» на «Хочу узнать больше» увеличивает конверсию в два раза.

И ещё один момент: кнопки должны вести туда, куда обещают. Не надо «Вывод средств» вести на страницу с оплатой. Это база, но нарушают её постоянно.

Три варианта под разные задачи

Теперь у вас есть три способа, и каждый закрывает свою задачу.

Для разработчика или сложного проекта подойдёт aiogram. Это код, но это максимальная гибкость. Кнопки можно встраивать в любые логики, менять через middleware, обрабатывать колбэки.

Для маркетолога или эксперта, у которого продукт уже есть и нужно быстро продавать через бота, подойдёт BotHelp. Там же удобно делать меню и воронки без знания языков. Прямо видите, как пользователь движется по сценарию.

Для быстрой настройки одной кнопки возьмите BotFather. Минута, и готово.

Но повторю мысль: сами по себе кнопки не продают. Продают сообщения, которые стоят за ними. Если вам нужна система, которая приведёт клиента к оплате без вашего участия, выбирайте «Отклик». Лучший способ, который я видел за последние годы. Честно.

Попробуйте прямо сейчас, это бесплатно и без технического ада.

← Вернуться к блогу