Динамические кнопки
Динамические кнопки позволяют формировать клавиатуру не вручную в конструкторе, а из значения переменной. Это удобно, когда список кнопок заранее неизвестен и зависит от данных подписчика, интеграции, вебхука или внешнего сервиса.
С помощью динамических кнопок можно:
- показать персональные варианты ответа;
- вывести доступные даты или время записи;
- сформировать список товаров, услуг или тарифов;
- показать кнопки, полученные из внешней системы;
- сохранить выбранный подписчиком вариант и использовать его дальше в боте.
Доступность функции
Динамические кнопки доступны только на платных тарифах.
На бесплатном тарифе функция недоступна для настройки:
- нельзя создавать новые динамические кнопки;
- нельзя редактировать уже созданные динамические кнопки;
- ранее настроенные сценарии с динамическими кнопками продолжают работать без изменений.
Если проект находится на бесплатном тарифе, при попытке добавить или изменить динамический блок кнопок Senler покажет, что функция недоступна. Чтобы создавать и редактировать динамические кнопки, перейдите на платный тариф.
Как добавить динамические кнопки
-
Добавьте пользовательскую переменную или глобальную переменную в формате JSON.
-
Откройте нужный шаг "Сообщение" в чат-боте МАКС.
-
Добавьте кнопку.
-
Выберите тип кнопки "Динамический блок кнопок".
.png)
-
Выберите переменную, из которой нужно взять список кнопок:
- переменную подписчика;
- глобальную переменную.
-
Нажмите кнопку "Добавить".
-
Сохраните шаг.
При отправке сообщения Senler прочитает значение выбранной переменной и сформирует клавиатуру для МАКС.
Динамический блок кнопок должен находиться в строке отдельно. Его нельзя размещать в одной строке с другими кнопками, потому что при отправке он разворачивается в один или несколько рядов кнопок.
Формат значения переменной
В переменной должен быть сохранён валидный JSON-массив.
Внешний массив описывает всю клавиатуру. Каждый вложенный массив - отдельную строку кнопок. Каждый объект внутри строки - одну кнопку.
Пример значения переменной:
[[{"text":"Кнопка 1"},{"text":"Кнопка 2"}],[{"text":"Сайт","type":"open_link","url":"https://example.com"}]]
.png)
JSON можно вставить в поле значения переменной одной строкой или передать как строку через API.
Поля кнопки
| Поле | Описание |
|---|---|
text | Текст кнопки. Обязательное поле. Если значение пустое, кнопка не отображается. |
type | Тип кнопки. Если тип не указан, используется text. |
url | Ссылка для кнопки с типом open_link. Для этого типа поле обязательно. |
Типы кнопок
В МАКС в динамических кнопках поддерживаются следующие типы:
| Тип | Описание |
|---|---|
text | Обычная текстовая кнопка. При нажатии бот перейдет к соответствующему шагу сценария. |
open_link | Кнопка со ссылкой. При нажатии открывается ссылка из поля url. |
contact | Кнопка для отправки контакта. При нажатии МАКС запрашивает у подписчика подтверждение отправки номера телефона. |
Если указан неизвестный type, кнопка обрабатывается как обычная текстовая кнопка.
Примеры JSON
Текстовые кнопки
[[{"text":"Да"},{"text":"Нет"}]]
Кнопка со ссылкой
[[{"text":"Открыть сайт","type":"open_link","url":"https://example.com"}]]
Кнопка для отправки контакта
[[{"text":"Отправить номер","type":"contact"}]]
Несколько рядов кнопок
[[{"text":"Кнопка 1"},{"text":"Кнопка 2"}],[{"text":"Сайт","type":"open_link","url":"https://example.com"}]]
Ограничения
- Создание и редактирование динамических кнопок доступно только на платных тарифах.
- Значение переменной должно быть валидным JSON-массивом массивов кнопок.
- Внутри строк должны быть только объекты кнопок.
- У каждой кнопки должен быть непустой параметр
text. - Для кнопки
open_linkобязательно полеurlс корректной ссылкой. - Ссылка в поле
urlдолжна быть указана полностью, напримерhttps://example.com. - Динамический блок кнопок нельзя размещать в одной строке с другими кнопками.
- Обычные кнопки в других строках этого же сообщения работают как раньше.
Сохранение результата нажатия в переменную
Если нужно использовать выбранный подписчиком вариант в следующих шагах бота, добавьте после сообщения действие «Сохранить ответ» и выберите переменную, куда нужно записать результат.
Это удобно, когда бот должен:
- запомнить выбранную дату или время;
- сохранить выбранный вариант ответа;
- использовать ответ в условии;
- подставить ответ в следующее сообщение;
- передать выбранное значение во внешний сервис.
Пример сценария:
- В переменную сохранён список доступных вариантов:
[[{"text":"Да"},{"text":"Нет"}]]
- В шаге бота добавлен динамический блок кнопок, который берёт кнопки из этой переменной.
- Подписчик нажимает кнопку "Да".
- Ответ подписчика сохраняется в выбранную переменную, например
selected_answer. - В следующих шагах эту переменную можно использовать в сообщении, условии или интеграции.
Например:
Вы выбрали: {%selected_answer%}
Почему динамические кнопки могут не работать
Динамические кнопки могут не появиться, отобразиться частично или не отправиться подписчику, если значение переменной заполнено некорректно.
Проверьте, что:
- проект находится на платном тарифе, если вы создаёте или редактируете динамические кнопки;
- в переменной указан JSON, а не обычный текст;
- переменная не пустая;
- JSON записан без ошибок в скобках, кавычках и запятых;
- значение является массивом массивов кнопок;
- внутри строк находятся только объекты кнопок;
- у каждой кнопки заполнено поле
text; - для кнопки
open_linkуказано полеurl; - ссылка в поле
urlуказана полностью, напримерhttps://example.com.
Если переменная пустая, содержит обычный текст или битый JSON, сообщение отправится без кнопок из динамического блока. Если в JSON есть некорректные кнопки, они не отображаются, а валидные кнопки продолжают работать.