Условия

Хелперы условий нужны, чтобы показать переменную или текст в зависимости от определенных условий.

Сравнение переменной со значением или другой переменной

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

И теперь хотим в зависимости от пола отправить клиентам разный текст.

Мы можем использовать блочный хелпер сравнения переменных eq:

Привет!
{{#eq gender "женщина"}}
Хорошо, что ты написала!
{{/eq}}
{{#eq gender "мужчина"}}
Хорошо, что ты написал!
{{/eq}}

Что тут происходит?

Мы открыли блочный хелпер #eq и использовали с ним переменную gender и строку женщина.

В примере видно, что вместо переменных мы можем сразу использовать так называемые литералы. Т. е. мы можем сравнивать не только переменные, но и сразу строки и числа.

Строки нужно записывать в двойных программных кавычках ".

И после тела блока мы закрыли его /eq. Блочные хелперы всегда нужно закрывать, иначе в шаблоне случится ошибка, и бот ничего не пришлет.

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

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

Мы можем не делать для каждого из вариантов свой блок, а использовать специальный разделитель {{else}}:

Привет!
{{#eq gender "женщина"}}
Хорошо, что ты написала!
{{else}}
Хорошо, что ты написал!
{{/eq}}

Т. е. если в переменной gender записана строка женщина, то бот напишет: Привет! Хорошо, что ты написала!, а во всех остальных случаях: Привет! Хорошо, что ты написал!

Сравнение «меньше» или «больше»

Чтобы сравнить два числа на меньше или больше есть два блочных хелпера #lt и #gt соответственно.

lt — less than — меньше чем

gt — greater than — больше чем

Представьте, что в боте мы спросили клиента, сколько ему лет, и добавили еще одну переменную, в которую записали возраст — age.

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

{{#lt age 16}}
К сожалению, ботом нельзя пользоваться до 16 лет
{{/lt}}

Аналогично можно сделать и с хелпером #gt и разделителем {{else}}:

{{#gt age 15}}
{{else}}
К сожалению, ботом нельзя пользоваться до 16 лет
{{/gt}}

Вышло немного нелогично. Потому что нам нужны те, кому 16 лет и старше, а получились те, кому строго больше 15.

Чтобы в подобных случаях сравнивать включительно числу, есть дополнительные хелперы #lte (меньше или равно) и #gte (больше или равно).

Перепишем последний пример на #gte и добавим приветствие для подходящих клиентов:

{{#gte age 16}}
Ого! Добро пожаловать, вам так много лет!
{{else}}
К сожалению, вам еще нет 16 лет
{{/gte}}

Кстати, блочные хелперы можно друг в друга вкладывать. Давайте объединим два примера:

{{#gte age 16}}
Ого! Добро пожаловать!
{{#eq gender "женщина"}}
Вы такая взрослая!
{{else}}
Вы такой взрослый!
{{/eq}}
{{else}}
К сожалению, вам еще нет 16 лет
{{/gte}}
Хелперы сравнения для числовых значений работают только с числами, а в переменные в компонентах бота записываются строки. Поэтому нужно внутри этих хелперов использовать хелпер toInt для перевода значений переменных из строки в число. Например вот так: {{#gte (toInt var1)(toInt var2)}}1{{else}}0{{/gte}}

Проверим этим способом возраст пользователя, как в прошлом примере — ботом можно пользоваться начиная с 16 лет.

1. Спросим и запишем возраст пользователя в переменную var1 с помощью Ввода от пользователя.

2. Добавим Запись переменной. Переменную назовем var2, в Значение добавим 16 — возраст, моложе которого в бот попасть будет нельзя.

3. Ниже добавим еще одну переменную, назовем её age, далее мы будем проверять её в Развилке.

Переведем значения переменных записанных выше, из строки в число используя хелпер toInt:

{{#gte (toInt var1)(toInt var2)}}1{{else}}0{{/gte}}

В нашем случае мы сравниваем var1 и var2, если ваши переменные названы по-другому, то в Значении поменяйте названия переменных на ваши.

Добавим Развилку, в Имени переменной, откуда Развилка возьмет значение, проверим age.

5. В Настройках Развилки добавим Цель 1, в Значении которой будет 1 и переход на экран для тех, у кого возраст больше 16 и Цель 2, в Значении которой будет 0 и переход на экран для тех, у кого возраст меньше 16.

6. Добавим экраны для перехода - отдельно для пользователей моложе 16 лет, и отдельно для тех кто старше.

Все хелперы сравнения

#eq — равны ли переменные?

{{#eq переменная1 переменная2}}
Если переменные равны
{{else}}
Необязательный текст, если переменные не равны
{{/eq}}

#lt — первая переменная меньше второй?

{{#lt переменная1 переменная2}}
Если первая переменная меньше
{{else}}
Необязательный текст, если вторая переменная меньше
{{/lt}}

#gt — первая переменная больше второй?

{{#gt переменная1 переменная2}}
Если первая переменная больше
{{else}}
Необязательный текст, если вторая переменная больше
{{/gt}}

#if — переменная существует и в ней «правдивое значение»?

{{#if переменная}}
Если переменная существует и в ней НЕ пустая строка "", ноль 0, логическая ложь false, ссылка на «ничего» null
{{else}}
Необязательные текст, для обратного условия
{{/if}}

#lte — первая переменная меньше или равна второй?

{{#lte age 16}}
К сожалению, ботом нельзя пользоваться до 16 лет
{{/lte}}

#gte — первая переменная больше или равна второй?

{{#gte age 16}}
Ого! Добро пожаловать, вам так много лет!
{{/gte}}

Ботмама поддерживает и другие хелперы сравнения (comparison), но не гарантирует их работу в будущих обновлениях.

В начало ↑