Кастомная форма ввода в PuzzleBot с условным выбором варианта.

В этой инструкции мы создадим кастомную форму ввода с условным выбором вариантов ответа для телеграм бота.

Задача:
• Выбор нескольких вариантов ответа.
• Последний вариант ответа должен исключать возможность выбора других ответов.
• И наоборот, любой из трех первых выборов должен исключать последний.
• Если не выбран ни один из вариантов, то скрыть кнопку отправки ответов.
• Формировать общий итоговый ответ в одну переменную.

Реализация

1. Сначала нам нужно создать переменные для каждой кнопки с форматом “Число”

  • В сервисе PuzzleBot переходим в раздел "Переменные" - "Добавить переменную"
  • Даем понятное для вас название переменной, формат значения - “Число”, значение по умолчанию “0
Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • Так создаем для всех кнопок, в моем случае 4 кнопки = 4 переменных.

    В эти переменные будет фиксироваться наличие выбора.
    0 - значит выбора нет (по умолчанию)
    1 - значит выбор есть (будем в дальнейшем изменять при выборе)
Список новых переменных будет отображаться внизу раздела Переменные. 
Список новых переменных будет отображаться внизу раздела Переменные. 

2. В конструкторе создаем инлайн команду, в которой создаем текстовый блок с вопросом и сохраняем. Пока без кнопок.

Кастомная форма ввода в PuzzleBot с условным выбором варианта.

3. Создаем кнопку-условие для первого варианта ответа, и даем название для кнопки.

В название можно вписать текст варианта ответа
В название можно вписать текст варианта ответа

Описание логики для дальнейшей настройки кнопки:

{{button_1}} - название переменной 1-й кнопки в моем примере.
{{button_4}} - название переменной 4-й кнопки в моем примере.

Если:
- Значение переменной {{button_1}} = 0,
То:
- Название кнопки должно иметь ”❌”
- Нажатие кнопки должно изменять значение {{button_1}} на "1",
- Нажатие кнопки должно изменять значение {{button_4}} на "0"
- Возвращать обратно на вопрос

А если:
- Значение переменной {{button_1}} = 1,
То:
- Название кнопки должно иметь ”✅”
- Нажатие кнопки должно изменять значение {{button_1}} на "0",
- Возвращать обратно на вопрос

Реализация настроек кнопки-условия:

  • Ниже в настройках кнопки-условия нажимаем “Добавить проверку” - выбираем “Значение переменной”
Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • Вводим название переменной для первой кнопки, ставим выражение = 0.
В моем примере это переменная {{button_1}} для первой кнопки, которую мы создавали в 1 пункте.
В моем примере это переменная {{button_1}} для первой кнопки, которую мы создавали в 1 пункте.
  • Ниже в поле "Название кнопки:" прописываем название кнопки, и ставим рядом эмодзи, которое будет отражать, что вариант не выбран. В моем случае это ”❌”
  • Ниже нажимаем “Добавить действие” - “Изменить переменную” , выбираем переменную для первой кнопки (которую мы создали ранее), и прописываем выражение “1” , которое будет означать что этот вариант выбран.
Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • Добавляем ниже еще такое же действие “Изменить переменную”, или дублируем предыдущее. В нем указываем переменную четвертой кнопки (в моем примере это {{button_4}}), и ставим выражение “0”.
  • Ниже создаем еще действие - “Добавить действие” - “Отправить команду или условие” , и указываем инлайн команду, в которой прописан вопрос (то есть изначальную команду с вопросом, чтобы команда с кнопками обновилась после выбора)
Так как по задаче эти ответ 1 и 4 взаимоисключающие, то выбор первого варианта исключает четвертый(если до этого он был выбран). 
Так как по задаче эти ответ 1 и 4 взаимоисключающие, то выбор первого варианта исключает четвертый(если до этого он был выбран). 
  • Ниже добавляем новое правило, кнопка “Добавить правило” - “Значение переменной”.

    Вводим название переменной для первой кнопки, ставим выражение = 1.

    Ниже даем название кнопки, и добавляем эмодзи, которое будет отражать, что вариант выбран. В моем случае это ” ✅ ”

По умолчанию стоит проверка “Без проверки” и действие “Без действия” , их можно удалить, нажав три точки справа от каждого действия.
По умолчанию стоит проверка “Без проверки” и действие “Без действия” , их можно удалить, нажав три точки справа от каждого действия.
  • Далее добавляем действие - “Добавить действие” - “Изменить переменную” и указываем переменную первой кнопки, указываем выражение = “0” . В этом случае мы отменяем выбор варианта меняя переменную на значение “0”.

  • Ниже создаем еще действие - “Добавить действие” - “Отправить команду или условие” , и указываем инлайн команду, в которой прописан вопрос (изначальную команду с вопросом, чтобы команда с кнопками обновилась после выбора)

Кастомная форма ввода в PuzzleBot с условным выбором варианта.

Выходим и сохраняем кнопку-условие, настройка этой кнопки завершена. В ней мы создали проверку переменной для первой кнопки(варианта ответа), и в зависимости от проверки настроили отображение этой кнопки и действие после нажатия.

4. Открываем инлайн команду с вашим вопросом и добавляем к текстовому блоку инлайн кнопку.

Кастомная форма ввода в PuzzleBot с условным выбором варианта.

В действии кнопки выбираем “Кнопка-условие”

Кастомная форма ввода в PuzzleBot с условным выбором варианта.

Вводим название кнопки-условия, которую создали до этого. Сохраняем.

Кастомная форма ввода в PuzzleBot с условным выбором варианта.

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

Дублируем кнопку-условие --&gt; Меняем названия кнопок и название условия --&gt; Меняем везде переменную (не только как на скриншоте, но и ниже везде где она была указана, в моем примере переменную <b>button_1</b> меняю на <b>button_2</b> для второй кнопки и тд.)
Дублируем кнопку-условие --> Меняем названия кнопок и название условия --> Меняем везде переменную (не только как на скриншоте, но и ниже везде где она была указана, в моем примере переменную button_1 меняю на button_2 для второй кнопки и тд.)

Новые созданные кнопки-условия так же указываем в команде с вопросом. Повторяем пункт 4 этой инструкции.

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

Описание логики для дальнейшей настройки кнопки:

{{button_1}} - название переменной 1-й кнопки в моем примере.
{{button_2}} - название переменной 2-й кнопки в моем примере.
{{button_3}} - название переменной 3-й кнопки в моем примере.
{{button_4}} - название переменной 4-й кнопки в моем примере.

Если (выбран хотя бы 1 и первых трех вариантов):

- Значение переменной {{button_1}} = 1
или
- Значение переменной {{button_2}} = 1
или
- Значение переменной {{button_3}} = 1

То:

- Название 4-й кнопки должно иметь ”❌”
- Нажатие кнопки должно изменять значение переменных {{button_1}}, {{button_2}}, {{button_3}} на "0",
- Нажатие кнопки должно изменять значение {{button_4}} на "1"
- Возвращать обратно на вопрос

А если:
- Значение переменной {{button_4}} = "1",
То:
- Название кнопки должно иметь ”✅”
- Нажатие кнопки должно изменять значение {{button_4}} на "0",
- Возвращать обратно на вопрос

В противном случае (исключающее правило, если не выбран еще ни один из вариантов):
То:
-
Название 4-й кнопки должно иметь ”❌”
- Нажатие кнопки должно изменять значение переменной {{button_4}} на "1",
- Возвращать обратно на вопрос

Реализация настроек кнопки-условия:

  • Даем название для кнопки условия

  • Добавляем проверку - “Добавить проверку” - “Значение переменной”, вводим название переменной для первой кнопки, ставим выражение = 1, далее дублируем эту проверку, нажав три точки и создаем проверки для остальных переменных кнопок с таким же выражением.

  • Вверху меняем “Тип проверки” на “Любая проверка

Здесь мы проверяем значения переменных первых трех кнопок на наличие выбора хотя бы в одной из кнопок, чтобы убрать выбор четвертой кнопки.
Здесь мы проверяем значения переменных первых трех кнопок на наличие выбора хотя бы в одной из кнопок, чтобы убрать выбор четвертой кнопки.
  • Ниже вводим название четвертой кнопки, и рядом ставим эмодзи ”❌ ”

  • Создаем действие - “Изменить переменную” и указываем переменную первой кнопки {{button_1}} и ставим выражение = 0, ниже аналогично создаем такие же действия для второй и третьей кнопок выбора, ставим выражение так же = 0.

Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • Создаем еще действие - "Изменить переменную" - указываем переменную четвертой кнопки и ставим выражение = 1.

  • Ниже создаем еще действие - “Отправить команду или условие” и указываем инлайн команду, в которой прописан вопрос.

Здесь мы сделали проверку, что если есть хотя бы один выбор в одной из первых кнопок, то четвертая кнопка должна отменить выбор, если он был сделан до этого. 
Здесь мы сделали проверку, что если есть хотя бы один выбор в одной из первых кнопок, то четвертая кнопка должна отменить выбор, если он был сделан до этого. 
  • Ниже добавляем новое правило - “Добавить правило

  • Удаляем проверку по умолчанию нажав три точки.

  • Добавляем новую проверку - “Добавить проверку” - “Значение переменной”, указываем название переменной четвертой кнопки, ставим выражение = "1"

  • Ниже даем название кнопки с эмодзи “✅”

Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • Ниже удаляем действие по умолчанию, нажав на три точки.
  • Создаем действие - "Изменить переменную", указываем переменную четвертой кнопки {{button_4}}, ставим выражение = 0

  • Ниже добавляем еще действие - “Отправить команду или условие” и указываем инлайн команду, в которой прописан вопрос.

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

  • В исключающем правиле удаляем действие по умолчанию

  • Даем название кнопки с эмодзи ”❌ ”

  • Создаем действие - “Изменить переменную” - указываем переменную четвертой кнопки {{button_4}} и ставим значение = “1

  • Добавляем еще действие - “Отправить команду или условие” и указываем инлайн команду, в которой прописан вопрос.

Настройка этой кнопки завершена. В ней мы создали значение выбора четвертой кнопки по умолчанию, и сделали отмену выбора первых трех кнопок при нажатии четвертой. Сохраняем кнопку-условие.
Настройка этой кнопки завершена. В ней мы создали значение выбора четвертой кнопки по умолчанию, и сделали отмену выбора первых трех кнопок при нажатии четвертой. Сохраняем кнопку-условие.

7. В команде с вопросом так же создаем новую инлайн кнопку с действием “Кнопка-условие” и укажем название четвертой кнопки-условия. Сохраняем изменения.

Кастомная форма ввода в PuzzleBot с условным выбором варианта.

8. Создаем новую кнопку-условие для подтверждения и отправки ответа.

  • Даем название кнопки, допустим “Подтвердить и отправить”
  • Создаем проверку “Добавить проверку” - “Значение переменной” и указываем переменную первой кнопки, выражение = “1

  • Дублируем или создаем аналогично эту проверку для каждой переменной с выражением = “1”. Если всего 4 кнопки с выбором, значит делаем 4 проверки для каждой переменной.

Кастомная форма ввода в PuzzleBot с условным выбором варианта.
Ниже прописываем название для кнопки, в моем случае это “Подтвердить и отправить”
Ниже прописываем название для кнопки, в моем случае это “Подтвердить и отправить”
  • Далее ниже добавляем действие “Отправить команду или условие” и указываем любую существующую команду (это пока что, так как конструктор не даст сохранить если не укажем), далее мы сюда вернемся и заменим ее на условие, которое мы создадим далее.

  • В самом низу настраиваем “Исключающее правило”, нажимаем “Добавить действие” и выборе действий выбираем “Скрыть кнопку

Готово, сохраняем.
В этой кнопке-условии мы создали проверку, что если есть выбор хотя бы одного варианта ответа, то отобразить кнопку “Подтвердить и отправить”, в противном случае скрыть кнопку, чтобы не дать пользователю отправить пустой ответ. 
Готово, сохраняем. В этой кнопке-условии мы создали проверку, что если есть выбор хотя бы одного варианта ответа, то отобразить кнопку “Подтвердить и отправить”, в противном случае скрыть кнопку, чтобы не дать пользователю отправить пустой ответ. 

9. Далее нам нужно сформировать общий ответ и записать его в одну переменную.

  • В разделе “Переменные” создаем новую переменную - “Добавить переменную
  • Прописываем название переменной, например “answer”
  • Указываем формат значения “Текст”, значение по умолчанию оставляем пустым и сохраняем.
    В эту переменную будем сохранять общий ответ.
Кастомная форма ввода в PuzzleBot с условным выбором варианта.

10. В конструкторе создаем новую команду-условие, в которой мы будем проверять наличие ответов и формировать общий ответ.

Сначала я объясню логику, чтобы дальнейшая инструкция была более понятная.
В начале мы создали переменные ({{button_1}} {{button_2}} и тд) для каждого ответа, и каждая переменная будет иметь значение “1” - если вариант выбран, и “0” - если вариант не выбран.
И здесь нам нужно для себя расписать все комбинации выбора, в моем случае есть 4 варианта ответа, где 3 из них могут быть выбраны одновременно или по отдельности, и 1 должен исключать остальные.

Следовательно у меня есть 8 комбинаций ответов:

Кастомная форма ввода в PuzzleBot с условным выбором варианта.

Каждый выбор, это переменная, именно эти переменные мы и будем проверять в условии, чтобы формировать общий ответ.

  • Итак, в созданном условии добавляем проверку для первой комбинации ответов, - “Добавить проверку” - “Значение переменной” , прописываем переменную первой кнопки и ставим выражение = “1”
  • Дублируем эту проверку и создаем еще две проверки для второй и третьей кнопки, но уже ставим выражение = “0”
Это мы сделали проверку для первой комбинации. 
Это мы сделали проверку для первой комбинации. 

Я не сделал проверку для четвертого варианта ответа, так как мы знаем, что если в первых трех вариантах есть хотя бы один ответ, то четвертый вариант будет пуст, поэтому делать эту проверку не имеет смысла. Но если такую проверку добавить, с выражением = 0, то суть работы не изменится.

  • Переходим ниже к действиям, и добавляем действие - “Изменить переменную
  • Указываем переменную {{answer}}, в которую будем записывать общий ответ. (Мы ее создали в пункте 9)
  • Прописываем выражение ответа в кавычках. Текст выражения это название кнопки первого варианта ответа. То есть мы записываем сам итоговый ответ для этой комбинации.

  • Ниже создаем еще действие - “Отправить команду или условие” - указываем команду для дальнейших действий или отправки ответа в таблицу. В моем случае переводит на команду для демонстрации сформированного ответа.

Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • Теперь дублируем все правило для проверки второй из восьми комбинации ответов.
Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • Ниже появится копия правила, в ней в проверках переменных меняем только значения в поле “Выражение”. Вводим значения второй комбинации ответов.
Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • В этой комбинации одновременно выбраны два первых варианта ответа, поэтому ниже в действии “Изменить переменную” меняем выражение, где запишем в "Выражение:" текст двух первых вариантов ответа через запятую.
Кастомная форма ввода в PuzzleBot с условным выбором варианта.
  • Далее по аналогии дублируем правило снова и создаем остальные проверки для других комбинаций ответов.
Всего должно получиться 8 правил, так как в моем примере 8 комбинаций ответов.
Всего должно получиться 8 правил, так как в моем примере 8 комбинаций ответов.
  • После создания всех проверок, сохраняем условие и возвращаемся к кнопке-условию "Подтвердить и отправить" которую мы создали в 8 пункте.
  • В ней мы заменяем команду в действии - "Отправить команду или условие". Указываем название команды-условия, в которой происходит запись общего ответа.
Ранее тут вы указывали случайную команду, чтобы сохранить кнопку-условие.
Ранее тут вы указывали случайную команду, чтобы сохранить кнопку-условие.
  • На этом создание функционала завершено.
    Сохраняем изменения и тестируем!

Функционал реализован в конструкторе чат-ботов PuzzleBot

Мой Telegram канал
t.me/Puzzle_XMod

4
4 комментария

Очень подробно 🔥

1

Мне кажется слишком) очень много сил ушло, хотя казалось функция вроде не сложная. При этом еще многие аналогичные действия вынесены со словами "И тд"

Спасибо за подробную инструкцию 👍

1

Спасибо за отзыв)