Кастомная форма ввода в PuzzleBot с условным выбором варианта.
В этой инструкции мы создадим кастомную форму ввода с условным выбором вариантов ответа для телеграм бота.
Задача:
• Выбор нескольких вариантов ответа.
• Последний вариант ответа должен исключать возможность выбора других ответов.
• И наоборот, любой из трех первых выборов должен исключать последний.
• Если не выбран ни один из вариантов, то скрыть кнопку отправки ответов.
• Формировать общий итоговый ответ в одну переменную.
Реализация
1. Сначала нам нужно создать переменные для каждой кнопки с форматом “Число”
- В сервисе PuzzleBot переходим в раздел "Переменные" - "Добавить переменную"
- Даем понятное для вас название переменной, формат значения - “Число”, значение по умолчанию “0”
- Так создаем для всех кнопок, в моем случае 4 кнопки = 4 переменных.
В эти переменные будет фиксироваться наличие выбора.
0 - значит выбора нет (по умолчанию)
1 - значит выбор есть (будем в дальнейшем изменять при выборе)
2. В конструкторе создаем инлайн команду, в которой создаем текстовый блок с вопросом и сохраняем. Пока без кнопок.
3. Создаем кнопку-условие для первого варианта ответа, и даем название для кнопки.
Описание логики для дальнейшей настройки кнопки:
{{button_1}} - название переменной 1-й кнопки в моем примере.
{{button_4}} - название переменной 4-й кнопки в моем примере.
Если:
- Значение переменной {{button_1}} = 0,
То:
- Название кнопки должно иметь ”❌”
- Нажатие кнопки должно изменять значение {{button_1}} на "1",
- Нажатие кнопки должно изменять значение {{button_4}} на "0"
- Возвращать обратно на вопрос
А если:
- Значение переменной {{button_1}} = 1,
То:
- Название кнопки должно иметь ”✅”
- Нажатие кнопки должно изменять значение {{button_1}} на "0",
- Возвращать обратно на вопрос
Реализация настроек кнопки-условия:
- Ниже в настройках кнопки-условия нажимаем “Добавить проверку” - выбираем “Значение переменной”
- Вводим название переменной для первой кнопки, ставим выражение = 0.
- Ниже в поле "Название кнопки:" прописываем название кнопки, и ставим рядом эмодзи, которое будет отражать, что вариант не выбран. В моем случае это ”❌”
- Ниже нажимаем “Добавить действие” - “Изменить переменную” , выбираем переменную для первой кнопки (которую мы создали ранее), и прописываем выражение “1” , которое будет означать что этот вариант выбран.
- Добавляем ниже еще такое же действие “Изменить переменную”, или дублируем предыдущее. В нем указываем переменную четвертой кнопки (в моем примере это {{button_4}}), и ставим выражение “0”.
- Ниже создаем еще действие - “Добавить действие” - “Отправить команду или условие” , и указываем инлайн команду, в которой прописан вопрос (то есть изначальную команду с вопросом, чтобы команда с кнопками обновилась после выбора)
Ниже добавляем новое правило, кнопка “Добавить правило” - “Значение переменной”.
Вводим название переменной для первой кнопки, ставим выражение = 1.
Ниже даем название кнопки, и добавляем эмодзи, которое будет отражать, что вариант выбран. В моем случае это ” ✅ ”
Далее добавляем действие - “Добавить действие” - “Изменить переменную” и указываем переменную первой кнопки, указываем выражение = “0” . В этом случае мы отменяем выбор варианта меняя переменную на значение “0”.
Ниже создаем еще действие - “Добавить действие” - “Отправить команду или условие” , и указываем инлайн команду, в которой прописан вопрос (изначальную команду с вопросом, чтобы команда с кнопками обновилась после выбора)
Выходим и сохраняем кнопку-условие, настройка этой кнопки завершена. В ней мы создали проверку переменной для первой кнопки(варианта ответа), и в зависимости от проверки настроили отображение этой кнопки и действие после нажатия.
4. Открываем инлайн команду с вашим вопросом и добавляем к текстовому блоку инлайн кнопку.
В действии кнопки выбираем “Кнопка-условие”
Вводим название кнопки-условия, которую создали до этого. Сохраняем.
5. По такой же аналогии создаем остальные кнопки-условия, которые будут отвечают за выбор варианта. В моем случае можно выбрать до 3-х вариантов одновременно, значит нужно создать еще 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.
Создаем еще действие - "Изменить переменную" - указываем переменную четвертой кнопки и ставим выражение = 1.
Ниже создаем еще действие - “Отправить команду или условие” и указываем инлайн команду, в которой прописан вопрос.
Ниже добавляем новое правило - “Добавить правило”
Удаляем проверку по умолчанию нажав три точки.
Добавляем новую проверку - “Добавить проверку” - “Значение переменной”, указываем название переменной четвертой кнопки, ставим выражение = "1"
Ниже даем название кнопки с эмодзи “✅”
- Ниже удаляем действие по умолчанию, нажав на три точки.
Создаем действие - "Изменить переменную", указываем переменную четвертой кнопки {{button_4}}, ставим выражение = 0
Ниже добавляем еще действие - “Отправить команду или условие” и указываем инлайн команду, в которой прописан вопрос.
Далее ниже нам нужно создать исключающее правило для случая по умолчанию, когда вопрос только открыт и не сделан еще ни один выбор.
В исключающем правиле удаляем действие по умолчанию
Даем название кнопки с эмодзи ”❌ ”
Создаем действие - “Изменить переменную” - указываем переменную четвертой кнопки {{button_4}} и ставим значение = “1”
Добавляем еще действие - “Отправить команду или условие” и указываем инлайн команду, в которой прописан вопрос.
7. В команде с вопросом так же создаем новую инлайн кнопку с действием “Кнопка-условие” и укажем название четвертой кнопки-условия. Сохраняем изменения.
8. Создаем новую кнопку-условие для подтверждения и отправки ответа.
- Даем название кнопки, допустим “Подтвердить и отправить”
Создаем проверку “Добавить проверку” - “Значение переменной” и указываем переменную первой кнопки, выражение = “1”
Дублируем или создаем аналогично эту проверку для каждой переменной с выражением = “1”. Если всего 4 кнопки с выбором, значит делаем 4 проверки для каждой переменной.
Далее ниже добавляем действие “Отправить команду или условие” и указываем любую существующую команду (это пока что, так как конструктор не даст сохранить если не укажем), далее мы сюда вернемся и заменим ее на условие, которое мы создадим далее.
В самом низу настраиваем “Исключающее правило”, нажимаем “Добавить действие” и выборе действий выбираем “Скрыть кнопку”
9. Далее нам нужно сформировать общий ответ и записать его в одну переменную.
- В разделе “Переменные” создаем новую переменную - “Добавить переменную”
- Прописываем название переменной, например “answer”
- Указываем формат значения “Текст”, значение по умолчанию оставляем пустым и сохраняем.
В эту переменную будем сохранять общий ответ.
10. В конструкторе создаем новую команду-условие, в которой мы будем проверять наличие ответов и формировать общий ответ.
Сначала я объясню логику, чтобы дальнейшая инструкция была более понятная.
В начале мы создали переменные ({{button_1}} {{button_2}} и тд) для каждого ответа, и каждая переменная будет иметь значение “1” - если вариант выбран, и “0” - если вариант не выбран.
И здесь нам нужно для себя расписать все комбинации выбора, в моем случае есть 4 варианта ответа, где 3 из них могут быть выбраны одновременно или по отдельности, и 1 должен исключать остальные.
Следовательно у меня есть 8 комбинаций ответов:
Каждый выбор, это переменная, именно эти переменные мы и будем проверять в условии, чтобы формировать общий ответ.
- Итак, в созданном условии добавляем проверку для первой комбинации ответов, - “Добавить проверку” - “Значение переменной” , прописываем переменную первой кнопки и ставим выражение = “1”
- Дублируем эту проверку и создаем еще две проверки для второй и третьей кнопки, но уже ставим выражение = “0”
Я не сделал проверку для четвертого варианта ответа, так как мы знаем, что если в первых трех вариантах есть хотя бы один ответ, то четвертый вариант будет пуст, поэтому делать эту проверку не имеет смысла. Но если такую проверку добавить, с выражением = 0, то суть работы не изменится.
- Переходим ниже к действиям, и добавляем действие - “Изменить переменную”
- Указываем переменную {{answer}}, в которую будем записывать общий ответ. (Мы ее создали в пункте 9)
Прописываем выражение ответа в кавычках. Текст выражения это название кнопки первого варианта ответа. То есть мы записываем сам итоговый ответ для этой комбинации.
Ниже создаем еще действие - “Отправить команду или условие” - указываем команду для дальнейших действий или отправки ответа в таблицу. В моем случае переводит на команду для демонстрации сформированного ответа.
- Теперь дублируем все правило для проверки второй из восьми комбинации ответов.
- Ниже появится копия правила, в ней в проверках переменных меняем только значения в поле “Выражение”. Вводим значения второй комбинации ответов.
- В этой комбинации одновременно выбраны два первых варианта ответа, поэтому ниже в действии “Изменить переменную” меняем выражение, где запишем в "Выражение:" текст двух первых вариантов ответа через запятую.
- Далее по аналогии дублируем правило снова и создаем остальные проверки для других комбинаций ответов.
- После создания всех проверок, сохраняем условие и возвращаемся к кнопке-условию "Подтвердить и отправить" которую мы создали в 8 пункте.
- В ней мы заменяем команду в действии - "Отправить команду или условие". Указываем название команды-условия, в которой происходит запись общего ответа.
- На этом создание функционала завершено.
Сохраняем изменения и тестируем!
Функционал реализован в конструкторе чат-ботов PuzzleBot
Мой Telegram канал
t.me/Puzzle_XMod
Очень подробно 🔥
Мне кажется слишком) очень много сил ушло, хотя казалось функция вроде не сложная. При этом еще многие аналогичные действия вынесены со словами "И тд"
Спасибо за подробную инструкцию 👍
Спасибо за отзыв)