Як працювати з Висловлюваннями (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") поверне поточний рік у вигляді рядка з чотирьох символів
  • url — HTTP-посилання, за яким було здійснено перехід
  • url_md5 — MD5-рядок, тобто значення MD5 для посилання, за яким було здійснено перехід