Войти в Senler

Динамические кнопки

Динамические кнопки позволяют формировать клавиатуру не вручную в конструкторе, а из значения переменной. Это удобно, когда список кнопок заранее неизвестен и зависит от данных подписчика, интеграции, вебхука или внешнего сервиса.

С помощью динамических кнопок можно:

  • показать персональные варианты ответа;
  • вывести доступные даты или время записи;
  • сформировать список товаров, услуг или тарифов;
  • показать кнопки, полученные из внешней системы;
  • сохранить выбранный подписчиком вариант и использовать его дальше в боте.

Доступность функции

Динамические кнопки доступны только на платных тарифах.

На бесплатном тарифе функция недоступна для настройки:

  • нельзя создавать новые динамические кнопки;
  • нельзя редактировать уже созданные динамические кнопки;
  • ранее настроенные сценарии с динамическими кнопками продолжают работать без изменений.

Если проект находится на бесплатном тарифе, при попытке добавить или изменить динамический блок кнопок Senler покажет, что функция недоступна. Чтобы создавать и редактировать динамические кнопки, перейдите на платный тариф.

Как добавить динамические кнопки

  1. Добавьте пользовательскую переменную или глобальную переменную в формате JSON.

  2. Откройте нужный шаг "Сообщение" в чат-боте МАКС.

  3. Добавьте кнопку.

  4. Выберите тип кнопки "Динамический блок кнопок".

  5. Выберите переменную, из которой нужно взять список кнопок:

    • переменную подписчика;
    • глобальную переменную.
  6. Нажмите кнопку "Добавить".

  7. Сохраните шаг.

При отправке сообщения Senler прочитает значение выбранной переменной и сформирует клавиатуру для МАКС.

Динамический блок кнопок должен находиться в строке отдельно. Его нельзя размещать в одной строке с другими кнопками, потому что при отправке он разворачивается в один или несколько рядов кнопок.

Формат значения переменной

В переменной должен быть сохранён валидный JSON-массив.

Внешний массив описывает всю клавиатуру. Каждый вложенный массив - отдельную строку кнопок. Каждый объект внутри строки - одну кнопку.

Пример значения переменной:

[[{"text":"Кнопка 1"},{"text":"Кнопка 2"}],[{"text":"Сайт","type":"open_link","url":"https://example.com"}]]

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.
  • Динамический блок кнопок нельзя размещать в одной строке с другими кнопками.
  • Обычные кнопки в других строках этого же сообщения работают как раньше.

Сохранение результата нажатия в переменную

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

Это удобно, когда бот должен:

  • запомнить выбранную дату или время;
  • сохранить выбранный вариант ответа;
  • использовать ответ в условии;
  • подставить ответ в следующее сообщение;
  • передать выбранное значение во внешний сервис.

Пример сценария:

  1. В переменную сохранён список доступных вариантов:
[[{"text":"Да"},{"text":"Нет"}]]
  1. В шаге бота добавлен динамический блок кнопок, который берёт кнопки из этой переменной.
  2. Подписчик нажимает кнопку "Да".
  3. Ответ подписчика сохраняется в выбранную переменную, например selected_answer.
  4. В следующих шагах эту переменную можно использовать в сообщении, условии или интеграции.

Например:

Вы выбрали: {%selected_answer%}

Почему динамические кнопки могут не работать

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

Проверьте, что:

  • проект находится на платном тарифе, если вы создаёте или редактируете динамические кнопки;
  • в переменной указан JSON, а не обычный текст;
  • переменная не пустая;
  • JSON записан без ошибок в скобках, кавычках и запятых;
  • значение является массивом массивов кнопок;
  • внутри строк находятся только объекты кнопок;
  • у каждой кнопки заполнено поле text;
  • для кнопки open_link указано поле url;
  • ссылка в поле url указана полностью, например https://example.com.

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