Что такое Выражения?
Выражение выглядит как строка определённого синтаксиса. Она будет "выполнена" на сервере в конкретном контексте и результатом выполнения будет одно из двух булевых значений: истина или ложь (true / false). У вас есть вопрос: отправлять ли сейчас это конкретное письмо этому конкретному подписчику? Для триггерных писем такие вопросы, как правило, отсутствуют: всегда отправлять. А для маркетинговых писем всё сложнее. Необходимость отправки зависит от того, какие именно у подписчика данные (письмо с идеями что подарить на 8 марта логичнее отправлять мужской аудитории, а не женской), какие письма он получал ранее и как с ними взаимодействовал. Все эти сложные правила (бизнес логику) можно выразить в виде последовательности проверок и сравнений, выполнение которых и приведёт нас к ответу Да либо Нет — уже упомянутому булевому значению true / false. В нашей системе такие Выражения доступны в нескольких местах, и могут иметь различный набор переменных, к которым можно обращаться внутри выражения.
Базовый синтаксис
Внутри выражения можно использовать различные типы данных.
10— целое число3.14— дробное числоtrue— булевое значение truefalse— булевое значение falsenull— специальное значение null"Hello"— строкаsubscriber.id— доступ к свойству объекта"World"— ещё один вид записи строки["new", "paid", "shipped"]— массив строк
Операторы сравнения
==равно!=не равно<меньше<=меньше или равно>больше>=больше или равно
Математические операторы
+сложение-вычитание*умножение/деление
Логические операторы
andлогическое Иorлогическое ИЛИnotлогическое отрицание
Функции
rand(from, to)— принимает два числовых аргумента: from и to. Возвращает целое случайное число из диапазона от первого аргумента до второго. Можно использовать для срабатывания выражения только для некоторого процента случаев
Также можно использовать круглые скобки для изменения приоритета выполнения, как это обычно происходит в математических формулах: что в скобке, то выполняется раньше.
Несколько примеров
subscriber.address_country in ["UA", "PL", "NL"] - Получим true только если страна подписчика одна из трёх указанных
(subscriber.birthday_month == now.format("M")) and (now.format("Y") - subscriber.birthday_year == 18) - У подписчика день рождения в этом месяце, и ему исполняется 18.
rand(1, 100) > 25 — вернёт true в 75% случаев
Доступные переменные
Какие именно переменные будут доступны, зависит от места, где применяется Выражение.
Переменные для условия входа в кампанию рассылки подписчиков из базы подписчиков: base, time, subscriber, tags, now
Переменные для проверки выполнения События в кампании рассылки: base, time, subscriber, tags, now, url (только для события перехода по ссылке), url_md5 (только для события перехода по ссылке)
Переменные для проверки выполнения События в Базах подписчиков: base, time, subscriber, tags, now
Описание переменных
- base — объект с данными о базе подписчика, подробное описание полей приведено на этой странице
- time это целое число, текущее время в формате unix timestamp
- subscriber это объект с данными о подписчике, подробное описание полей на этой странице
- tags это массив строк, содержащий теги подписчика. Например ["tag1", "tag2", "tag3"]
- now это особый объект текущего времени, имеющий метод format. Например,
now.format("Y")вернёт текущий год как строку (4 символа) - url содержит http ссылку, по которой был переход
- url_md5 содержит md5 строку - значение md5 от той ссылки, по которой был переход