Кнопки в 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. Минута, и готово.
Но повторю мысль: сами по себе кнопки не продают. Продают сообщения, которые стоят за ними. Если вам нужна система, которая приведёт клиента к оплате без вашего участия, выбирайте «Отклик». Лучший способ, который я видел за последние годы. Честно.
Попробуйте прямо сейчас, это бесплатно и без технического ада.