Статья была полезной?
Выражения — это универсальные формулы, которые открывают широкие возможности для сохранения и вычисления почти любой информации, которую вы хотели бы использовать в вашей воронке.
Выражения составляются на языке JavaScript. Это позволяет написать решение практически любой вашей задачи, а также брать уже готовые решения из открытых источников, без привязки к какой-то определенной платформе. В этой статье мы рассмотрим основы работы с выражениями, которых будет достаточно для решения большинства задач.

Для чего можно использовать выражения
С помощью выражений вы можете:
- Сохранять любые свойства объектов в переменные — например, собирать дополнительную информацию о пользователе, сессии и т. д.
- Использовать сохраненную информацию в любой части воронки:
- проверять нужное свойство на переходах (стрелках) для запуска какого-либо действия (добавить в группу, создать заказ и т. д.);
- использовать в фильтрах запуска нод-событий и т. д.
- Сохранять информацию в глобальные переменные, чтобы использовать ее в разных воронках (даже в нескольких одновременно).
- Отправлять информацию во внешние системы.


Какие объекты используются в выражениях и как присвоить им значения
Основной принцип работы выражений в большинстве случаев можно описать так:
→ вам нужна какая-то информация на определенном этапе воронки
→ вы используете подходящее выражение
→ выражение обращается к какому-либо свойству объекта
→ производит над ним вычисление
→ формирует (возвращает) результат
→ вы работаете далее с полученной информацией: в любом месте текущей воронки, в других воронках в случае с глобальными переменными или в других сервисах в случае передачи данных вовне.
Простой пример
Школа готовит интерактив с различными акциями на День российского студенчества или Татьянин день. Для Татьян предусмотрены особые условия. Главное свойство, по которому нужно в данном случае различать пользователей в воронке, — это имя.
Чтобы получить свойство объекта, необходимо написать название объекта, затем поставить точку и указать название свойства: объект.свойство. В нашем примере имя будет свойством объекта «Пользователь» (в воронке это агент user). Поэтому нужно использовать выражение user.firstName.
Можно попросить пользователей ввести свое имя в переписке с чат-ботом и далее запускать нужную ветку воронки, только если введено имя Татьяна (Таня). Имя при этом можно сохранить в переменную user.firstName и в дальнейшем в любом месте воронки запускать особые действия, только если переменная соответствует нужному имени: user.firstName == "Татьяна" || "Таня".
Выражение можно прописать не только для пользователя. На данный момент доступны следующие объекты, которые можно использовать в выражениях:
- событие (event),
- авторизованный пользователь (user),
- заказ (deal),
- сессия (session),
- чат (chat).
Обратите внимание
Доступный для использования набор объектов зависит от того, в каком месте воронки вы добавляете выражение. Это значит, что выражение должно иметь возможность обратиться к выбранному объекту. Например, нельзя использовать chat, если пользователь еще не запускал чат-бот, или deal, если заказ еще не был создан.
Объект event (событие) доступен в любом месте воронки. Это обусловлено тем, что сама воронка строится на событиях, которые становятся причиной запуска действий. Вы можете обратиться к свойствам события через event, например, получить дату события: event.date.
Подробности объекта event можно просмотреть, включив логирование данных события. Для этого:
- Перейдите в настройки реактивности ноды.
- Отметьте галочку «Логировать данные события».

Помимо объекта event в большинстве случаев в выражении есть объекты агентов: user, deal, session, chat. Исключение — входящий фильтр ноды-события, т. е. опция «Запускать, только если». В данном выражении есть только объект event, так как остальные объекты на текущем этапе еще не успели сформироваться.

В агентах user, deal, session и chat содержатся ранее присвоенные переменные и автоматически добавленные значения. Если вы хотите добавить агенту новое свойство, нужно написать выражение в таком формате: агент.свойство = "значение".
После этого:
- если такого свойства ранее не было, то оно будет добавлено;
- если свойство уже было добавлено ранее, то оно будет перезаписано.
Пример
- user.name = "Alisa"
- chat.email = "my@mail.com"
- session.visitedOfferPage = true
- user.startedMarafon = 1
В качестве значения можно указать примитив JavaScript, например:
- число — можно использовать как целые числа, так и числа с плавающей запятой: 25, 19.99;
- строку — для записи текста: "Текстовое значение";
- булевое значение — может принимать одно из двух значений: true (истина) или false (ложь).
С остальными типами примитивов вы можете ознакомиться в открытых справочниках по JavaScript.
Работа со значениями
Числовые значения
Если в переменных вашей воронки есть числовые значения, то вы можете совершать над ними математические вычисления, например, складывать, вычитать и т. д.
Пример
В процессе прохождения воронки у пользователя появились переменные points и penaltyPoints с числовыми значениями — количество очков и количество штрафных очков соответственно.
Пользователь дошел до события, в котором ему были начислены дополнительные очки в переменную params.addPoints. Чтобы вычислить окончательное количество очков, можно использовать такое выражение и записать его результат в поле пользователя:
user.points - user.penaltyPoints + event.params.addPoints


Следующие статьи из открытых источников будут полезны для более глубокого изучения темы:
Строчные значения
В выражениях вы можете производить операции не только с числами, но и с текстовыми значениями, например, обрезать, соединять, разделять и т. д.
Важно
Если вы хотите использовать в выражении фиксированный текст, его обязательно нужно брать в кавычки. Без кавычек он будет восприниматься системой как переменная.
Например, есть два выражения:
- user.name = "Alisa" — объекту будет присвоено значение имени Alisa;
- user.name = Alisa — система попытается найти переменную со значением Alisa, а так как такой переменной нет, то возникнет ошибка.
Несколько строк можно объединить в одну — это наиболее часто встречающийся кейс при работе со строками. Например, у вас есть переменные event.chat.firstName (имя) и event.chat.lastName (фамилия). Вам нужно их объединить и записать в дополнительное поле пользователя.
Для объединения можно использовать следующую схему: переменная1 + знак пробела в скобках " " + переменная2.
event.chat.firstName + " " + event.chat.lastName

Помимо объединения вы можете также заменить часть строки. Для этого используйте выражение вида myValue.replace("старый текст","новый текст«), где myValue — исходная строка (ваше значение переменной), «старый текст» — то, что будет заменено, «новый текст» — новое значение.
Например, в результате выражения "строка с ненужным текстом".replace("ненужным ", "") получится значение "строка с текстом", так как подстрока «ненужным» была заменена пустой строкой.
Для более глубокого изучения возможностей работы со строками вы также можете изучить открытые источники, например, здесь и здесь.
Использование условий И, ИЛИ, НЕ
При обработке значения вы можете использовать логические операторы, например:
- && — И,
- || — ИЛИ,
- ! — НЕ,
- : — условный оператор.
Пример выражения с оператором && (И)
user.points && user.points > 10 && user.penaltyPoints < 10
Как прочитать:
- user.points — проверяет, существует ли свойство points у объекта user и не является ли оно «ложным» (т. е. не null, undefined, 0, false, пустая строка и т. д.);
- user.points > 10 — проверяет, что значение points больше 10;
- user.penaltyPoints < 10 — проверяет, что значение penaltyPoints меньше 10.
То есть у пользователя есть баллы, их количество больше 10 и штрафных баллов меньше 10. Все условия должны быть соблюдены одновременно, иначе выражение вернет ответ false.
Пример выражения с оператором : (условный)
user.points > 20 ? "vip" : "standart"
Этот оператор позволяет возвращать разные значения в зависимости от условия:
- если user.points больше 20, то выражение возвращает строку «vip»;
- если user.points меньше или равно 20, выражение возвращает строку «standart».
Подробнее о логических операторах вы можете прочитать в открытых источниках по JavaScript, например, здесь.
Продвинутый уровень
Так как выражения пишутся на JavaScript, можно описывать более сложную логику кодом. Например:
const myVar1 = user.points
const myVar2 = 1
const result = myVar1 + myVar2
return result
В конце выражения в данном случае необходимо написать return и далее значение, которое необходимо обработать.
Вы можете использовать все возможности JavaScript:
- объявлять переменные,
- запускать циклы,
- работать с датами,
- использовать встроенные методы примитивов и так далее.
Информацию можно найти в открытых источниках и справочниках по JavaScript.
Также вам могут быть полезны статьи:
авторизуйтесь