Как работать с Выражениями (Expression)

Что такое Выражения?

Выражение выглядит как строка определённого синтаксиса. Она будет "выполнена" на сервере в конкретном контексте и результатом выполнения будет одно из двух булевых значений: истина или ложь (true / false). У вас есть вопрос: отправлять ли сейчас это конкретное письмо этому конкретному подписчику? Для триггерных писем такие вопросы, как правило, отсутствуют: всегда отправлять. А для маркетинговых писем всё сложнее. Необходимость отправки зависит от того, какие именно у подписчика данные (письмо с идеями что подарить на 8 марта логичнее отправлять мужской аудитории, а не женской), какие письма он получал ранее и как с ними взаимодействовал. Все эти сложные правила (бизнес логику) можно выразить в виде последовательности проверок и сравнений, выполнение которых и приведёт нас к ответу Да либо Нет — уже упомянутому булевому значению true / false. В нашей системе такие Выражения доступны в нескольких местах, и могут иметь различный набор переменных, к которым можно обращаться внутри выражения.

Базовый синтаксис

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

  • 10 — целое число
  • 3.14 — дробное число
  • true — булевое значение true
  • false — булевое значение false
  • null — специальное значение null
  • "Hello" — строка
  • subscriber.id — доступ к свойству объекта
  • "World" — ещё один вид записи строки
  • ["new", "paid", "shipped"] — массив строк

Операторы сравнения

  • ==   равно
  • !=   не равно
  • <    меньше
  • <=   меньше или равно
  • >    больше
  • >=   больше или равно

Математические операторы

  • + сложение
  • - вычитание
  • * умножение
  • / деление

Логические операторы

  • AND логическое И
  • OR логическое ИЛИ
  • NOT логическое отрицание

Также можно использовать круглые скобки для изменения приоритета выполнения, как это обычно происходит в математических формулах: что в скобке, то выполняется раньше.

Несколько примеров

subscriber.address_country in ["UA", "PL", "NL"] - Получим true только если страна подписчика одна из трёх указанных

(subscriber.birthday_month == now.format("M")) AND (now.format("Y") - subscriber.birthday_year == 18) - У подписчика день рождения в этом месяце, и ему исполняется 18.

Доступные переменные

Какие именно переменные будут доступны, зависит от места, где применяется Выражение.

Переменные для условия входа в кампанию рассылки подписчиков из базы подписчиков: time, subscriber, tags, now

Переменные для проверки выполнения События в кампании рассылки: time, subscriber, tags, now, url (только для события перехода по ссылке), url_md5 (только для события перехода по ссылке)

Описание переменных

  • time это целое число, текущее время в формате unix timestamp
  • subscriber это объект с данными о подписчике, подробное описание полей на этой странице
  • tags это массив строк, содержащий теги подписчика. Например ["tag1", "tag2", "tag3"]
  • now это особый объект текущего времени, имеющий метод format. Например, now.format("Y") вернёт текущий год как строку (4 символа)
  • url содержит http ссылку, по которой был переход
  • url_md5 содержит md5 строку - значение md5 от той ссылки, по которой был переход