Вчера вечером мне написал знакомый эксперт: «Сделай мне кнопку в боте, чтобы люди нажимали и попадали в канал». Я отвечаю: «Тебе нужна инлайн-кнопка». Он: «А это сложно?».
Вовсе нет. Но есть нюансы, которые превращают безобидную кнопку в настоящий инструмент продаж. Разберём спокойно, как сделать инлайн-кнопку в Telegram, и заодно посмотрим, как обычные кнопки превращаются в автоворонку.
Зачем нужны инлайн-кнопки и чем они отличаются от обычных
В Telegram существует два вида кнопок: reply-кнопки (клавиатура внизу экрана) и инлайн-кнопки (прикреплены к сообщению). Инлайн-кнопки видны всегда, пока видно само сообщение. Они не перекрывают поле ввода, их удобно нажимать на любом устройстве. Поэтому инлайн-кнопки стали стандартом для меню, опросов, каталогов и сценариев продаж.
Главное отличие в механике клика. Reply-кнопка просто подставляет текст в поле ввода, а пользователь должен ещё и отправить его. Инлайн-кнопка отправляет боту callback-запрос мгновенно, одним касанием. Это критично для воронок: чем меньше действий делает человек, тем выше конверсия.
Многие думают, что сделать инлайн-кнопку сложно. На практике есть два пути: использовать визуальный конструктор без кода или написать код самому. Разберу оба, а потом покажу, как встроить кнопки в полноценную автоматическую воронку.
Как сделать инлайн кнопку без кода: кнопка-ссылка в конструкторе
Самый простой вариант для маркетолога превратить обычные кнопки в инлайн-кнопки в визуальном конструкторе. Например, в Aimylogic или Salebot. Достаточно добавить на экран хотя бы одну кнопку со ссылкой. После этого все остальные кнопки на экране автоматически станут инлайн.
Покажу на примере Aimylogic. Там это делается буквально за минуту.
- Нажмите «+ Кнопка».
- Введите название кнопки, например «Наш сайт», и нажмите Enter.
- Нажмите на значок ссылки (обычно это иконка звена цепи).
- Вставьте URL нужного ресурса.
- Нажмите «Сохранить».
- Добавьте ещё одну кнопку, но в качестве текста введите пробел. Просто нажмите пробел и Enter.
- Снова нажмите на значок ссылки, вставьте любую ссылку и сохраните.
Такая кнопка с пробелом нужна визуально. Конструктор считает, что на экране есть кнопка-ссылка, но пользователь её не видит, потому что текст состоит из одного пробела. Так все остальные кнопки превращаются в инлайн.
Осталось опубликовать бота и пройти сценарий заново. Например, отправить команду /start. Вы увидите, что обычные кнопки стали инлайн-кнопками, а кнопка с пробелом не отображается. Работает, проверено.
Этот трюк хорош для быстрых задач: сделать меню, добавить переходы на сайт или канал. Но если нужно, чтобы кнопка не просто открывала ссылку, а передавала какой-то выбор боту, пригодятся callback-кнопки.
Callback-кнопки: когда одна кнопка должна передать выбор
Кнопка-ссылка ведёт на внешний ресурс. Когда нужно, чтобы пользователь выбрал вариант ответа и этот выбор остался внутри бота, на сцену выходят callback-кнопки.
Callback-кнопка при нажатии отправляет боту строку, которую вы задаёте. Эту строку можно использовать для логики: переключить сценарий, записать ответ в переменную, запустить другую ветку. По сути это способ получить от пользователя команду без ввода текста.
В конструкторе, например в Salebot, такая кнопка создаётся очень просто. В настройках блока перейдите на вкладку «Кнопки», нажмите «Добавить кнопку». В открывшейся форме введите текст (то, что увидит пользователь), укажите тип «Callback-кнопка (Telegram)» и впишите текст Callback, который должен вернуться при клике. После нажатия эта строка окажется в карточке клиента, и бот сможет её обработать.
В Aimylogic есть похожий механизм. Текст выбранной инлайн-кнопки попадает в переменную $queryText. Чтобы запомнить выбор, после блока с кнопками добавляем блок «Условия» и сохраняем значение в новую переменную. Выражение будет таким: $choice = String($queryText).split(';'). Теперь переменная $choice хранит то, что нажал пользователь, и мы можем строить дальнейшие сценарии.
Например, вы задаёте вопрос: «Какой у вас бюджет?» и даёте кнопки «до 10 000 ₽», «10 000-30 000 ₽», «более 30 000 ₽». По ответу бот подбирает соответствующий оффер или передаёт лида менеджеру с нужной пометкой.
Лимиты и нюансы Telegram, о которых часто забывают
Инлайн-кнопки имеют ограничения. Если их не учитывать, кнопки будут выглядеть криво, а пользователи не смогут их нормально нажать.
- В одной строке до 8 инлайн-кнопок. На практике лучше ставить не больше 3-4, чтобы не создавать «частокол».
- Текст кнопки максимум 32 символа. Более длинный текст Telegram не отобразит корректно.
- Цвет кнопок задать нельзя. Он определяется темой клиента Telegram.
- Учтите: в Telegram не поддерживаются callback-клавиатурные кнопки. Только инлайн-формат.
- Reply-кнопки могут быть в количестве до 12 штук в строке, но это отдельный тип.
Если вам нужно одновременно показать обычные reply-кнопки (клавиатура внизу) и инлайн-кнопки, придётся постараться. Создайте блок с reply-кнопкой, а затем следующий блок с таймером 0 секунд, где будут инлайн-кнопки. Так пользователь увидит и клавиатуру внизу, и кнопки под сообщением.
Совет: инлайн-кнопки желательно дублировать текстом. Человек может не заметить их, если сообщение длинное. В обсуждениях на Reddit маркетологи предупреждают об этом же. Поэтому всегда пишите в тексте что-то вроде «Выберите вариант ниже».
Пишем инлайн-кнопки на Kotlin: разбор кода для Telegram-бота
Маркетолог может не читать этот раздел, но если вы разработчик или хотите глубже понять механику, оставайтесь. Создание инлайн-кнопок в коде не сложнее, чем в конструкторе.
В Telegram для этой цели используется объект InlineKeyboardMarkup. Он содержит массив рядов, каждый ряд состоит из кнопок InlineKeyboardButton. У каждой кнопки есть два основных поля: text (надпись) и callbackData (строка, которая вернётся боту). Для кнопок со ссылкой вместо callbackData используется url.
На Kotlin удобно сделать два вспомогательных метода. Первый создаёт сообщение с инлайн-кнопками, второй собирает сам InlineKeyboardMarkup.
fun createMessageWithInlineButtons(chatId: String, text: String, inlineButtons: List<List<Pair<String, String>>>) =
createMessage(chatId, text)
.apply {
replyMarkup = getInlineKeyboard(inlineButtons)
}
fun getInlineKeyboard(allButtons: List<List<Pair<String, String>>>): InlineKeyboardMarkup =
InlineKeyboardMarkup().apply {
keyboard = allButtons.map { rowButtons ->
rowButtons.map { (data, buttonText) ->
InlineKeyboardButton().apply {
callbackData = data
text = buttonText
}
}
}
}Разберу, что здесь происходит. Функция принимает список списков пар. Внешний список это ряды кнопок, внутренний список это кнопки в конкретном ряду. Пара означает соответствие callbackData (то, что получит бот) и текста кнопки (то, что видит пользователь).
Например, для опроса с тремя вариантами ответа вызов выглядит так:
createMessageWithInlineButtons(
chatId,
"Выберите оператора",
listOf(
listOf("operator|A" to "МТС", "operator|B" to "Билайн"),
listOf("operator|C" to "Мегафон")
)
)Здесь callbackData формируется как имя обработчика «operator» и вариант ответа, разделённые вертикальной чертой. Так удобно парсить на серверной стороне.
После того как пользователь нажал на кнопку, часто нужно убрать эти кнопки, чтобы нельзя было выбрать повторно. Сделать это можно через EditMessageReplyMarkup. Просто передайте в getInlineKeyboard() пустой список.
absSender.execute(EditMessageReplyMarkup().apply {
chatId = chatId
messageId = messageId
replyMarkup = getInlineKeyboard(emptyList())
})Так вы зафиксируете ответ и не дадите пользователю «накликать» лишнего. Этот приём активно используется в викторинах, опросах и квизах.
Ошибки новичков при создании инлайн-кнопок
За годы практики я насмотрелся на типичные промахи. Первая ошибка: стараются сделать слишком много кнопок в один ряд. Получается каша, пользователь не понимает, куда смотреть. Решение: максимум 2-3 кнопки в ряду, если они больше трёх слов. В обсуждениях на Reddit практикующие маркетологи приходят к тому же выводу.
Следующий промах - невнятное название кнопки. «Узнать подробнее», «Получить консультацию», «Перейти в каталог» работают лучше, чем «Кнопка 1» или «Дальше». Название должно отвечать на вопрос «что произойдёт, если я нажму?».
Отдельная сложность - состояние после клика. Пользователь нажал «Да», а кнопка осталась. Он жмёт ещё раз, бот отвечает то же самое. Это раздражает. Научитесь убирать кнопки после выбора, как я показал выше, или заменять их новыми.
Про маленькие экраны часто забывают. Семь кнопок по 20 символов в один ряд не поместятся. Лучше сделать два ряда по три и одну отдельную кнопку-ссылку.
Как инлайн-кнопки превращаются в работающую воронку продаж
Отдельные кнопки это лишь витрина. Настоящая ценность появляется, когда они связаны в цепочку: подписка на канал, опрос потребностей, прогрев, предложение, оплата. Именно так строятся автоворонки в Telegram.
Раньше мне приходилось вручную собирать такие воронки из десятков блоков и веток. Настройка занимала дни, и любая мелочь вроде смены текста кнопки требовала пересборки. Сейчас ситуация изменилась. Появились ИИ-сервисы, которые понимают человеческий язык. Один из таких сервисов я использую в своей работе и советую многим.
Сервис называется «Отклик» и доступен по ссылке 3seller.com/funnels. Это как ChatGPT, только для автоворонок. Вы описываете словами задачу, и он собирает воронку вместе с инлайн-кнопками, текстами, логикой прогрева и триггерами. Без блок-схем, без программистов и без технического ада.
Вот живой пример. Представьте, что коуч по отношениям хочет сначала подарить медитацию на уверенность, а на третий день продать консультацию за 7 000 рублей. В Отклике достаточно написать простой запрос:
«Привет. Я коуч по отношениям. Хочу воронку, которая сначала дарит медитацию на уверенность, а на третий день продает мою консультацию за 7 000 ₽. Сделай тексты мягкими и заботливыми».
Через три минуты вы получаете готовую автоворонку, полностью настроенную. Она сама общается с людьми, прогревает их, отвечает на возражения и доводит до оплаты. Именно так выглядит современный подход к маркетингу в Telegram.
За этими словами стоят цифры. В каждую воронку встроен эмпатичный ИИ-продавец. Он не шлёт тупые напоминалки «Ну что, покупаешь?». Он общается в чате как живой человек: бережно отвечает на вопросы, закрывает страхи, мягко отрабатывает возражение «дорого» и за руку приводит к оплате. По данным сервиса, конверсия достигает 37% на полном автомате, без увеличения бюджета.
Посмотрите, как это работает, в коротком видео:
Мне часто пишут: «А можно ли сделать такое без ИИ?» Можно, но придётся потратить неделю на ручную настройку. С тех пор как я перевёл клиентов на «Отклик», сэкономил десятки часов. Ссылка та же: создать автоворонку в Telegram.
Как выбрать между конструктором, кодом и ИИ
Если вы новичок и нужна одна кнопка для ссылки, берите визуальный конструктор. Хватит описанного трюка с кнопкой-пробелом. Если вам нужны опросы и сбор данных, осваивайте callback-кнопки в любом конструкторе. Это займёт не больше часа.
Если вы разработчик и пишете бота на Kotlin, используйте код из этой статьи. Он покрывает 90% задач: создание кнопок, обработка выбора, удаление клавиатуры. Дальше уже можно углубляться в документацию Telegram Bot API.
Если же ваша цель построить полноценную воронку продаж с прогревом, дожимом и автоматической передачей лида в нужный канал, тратить время на ручную сборку не стоит. Используйте Отклик. Он сам сгенерирует и тексты, и кнопки, и логику. Вы просто формулируете задачу на человеческом языке.
Что запомнить
Инлайн-кнопки это не магия, а инструмент. Освойте сначала простую кнопку-ссылку. Потом добавьте callback-кнопки с ветвлением. Затем подумайте о полной автоматизации воронки.
Самый важный совет от меня: всегда продумывайте, что увидит пользователь после нажатия. Если кнопка не даёт ожидаемого результата, вы потеряете клиента. Тестируйте каждый сценарий, смотрите аналитику, улучшайте тексты.
А когда придёт время масштабироваться, не бойтесь делегировать техническую часть нейросетям. «Отклик» справится не хуже опытного маркетолога, а в некоторых случаях даже лучше. Вы просто получаете готовую воронку с инлайн-кнопками за три минуты.
Попробуйте прямо сегодня. Откройте 3seller.com/funnels, напишите свою задачу и посмотрите, как из одного сообщения рождается система продаж. Уверен, вы удивитесь, насколько это просто.