Velocity у сценаріях

У сценаріях Velocity виходить за межі персоналізації повідомлень — за його допомогою можна трансформувати дані, записувати значення в поля контакту та направляти контакти різними шляхами залежно від значень полів, параметрів подій або зовнішніх даних.

Ця стаття охоплює практичні сценарії використання. Залежно від задачі, вирази, наведені тут, використовуються в налаштуваннях блоків Оновити поля контакту, Розгалуження або Вебхук.

Кейс 1: Глобальна контрольна група за останньою цифрою Contact ID

  • Мета: розділити контакти на стабільні тестову та контрольну групи для всіх кампаній.
  • Запуск: сценарій за подією або регулярний на групу
  • Де: Сценарій → блок Оновити поля контакту
  • Зберегти: останню цифру contactId у додаткове поле controlDigit
  • Вираз:
$contactId.toString().substring($mathTool.sub($contactId.toString().length(),1))

Як використовувати далі:

  • Контрольна група 10% — помістіть у контрольну групу лише контакти, у яких controlDigit дорівнює 0. З усіх можливих цифр (0–9) ви берете одну → приблизно 10% аудиторії.
  • Тестова група 90% — надсилайте кампанії всім, крім контрольної групи. Тобто контакти з controlDigit від 1 до 9приблизно 90% аудиторії.
  • Контрольна група 20% — помістіть у контрольну групу контакти з controlDigit рівним 0 або 1. Дві цифри з десяти → приблизно 20% аудиторії.

Як це виглядає на практиці:

У блоці Розгалуження або в умові сегмента перевіряйте збережене поле controlDigit і направляйте контакти на гілки Контрольна та Тестова залежно від останньої цифри.

Кейс 2: Збереження значення з події AddFavoritesItem у поле контакту

  • Мета: зберегти ID останнього доданого в обране товару з події в поле контакту (наприклад, lastWishlistItemId) для повторного використання.
  • Запуск: за подією (AddFavoritesItem)
  • Де: Сценарій → блок Оновити поля контакту
  • Зберегти: ID товару у додаткове поле lastWishlistItemId

Якщо значення береться з об'єкта в параметрі lastProductAdded:

$lastProductAdded.externalItemId

Фрагмент події:

"lastProductAdded": {
  "externalItemId": 87420539,
  "name": "Awesome item",
  "cost": "1000"
}

Якщо значення береться з масиву в параметрі productsFullData:

$productsFullData[0].externalItemId

Фрагмент події:

"productsFullData": [
  {
    "externalItemId": 2697928574,
    "name": "Awesome item",
    "cost": "1000"
  }
]

Як використовувати далі:

  • Персоналізація повідомлень — підставляйте збережений ID у рекомендаційні email або push (наприклад, нагадування про товар в обраному).
  • Сегментація — будуйте сегменти на основі останнього доданого товару чи категорії.
  • Розгалуження в сценаріях — направляйте контакти різними шляхами залежно від того, який товар було додано в обране.

Як це виглядає на практиці:

  1. Контакт додає товар в обране → eSputnik отримує подію AddFavoritesItem.
  2. Сценарій запускається і переходить до блоку Оновити поля контакту.
  3. eSputnik записує значення події в поле lastWishlistItemId (використовуючи $lastProductAdded.externalItemId або $productsFullData[0].externalItemId).
  4. Будь-який майбутній сценарій, сегмент або повідомлення може зчитати lastWishlistItemId з профілю контакту і використати для розгалуження або персоналізації.

Кейс 3: Вебхук для збагачення або передачі даних

  • Мета:
    • GET: запитати дані із зовнішньої системи (наприклад: доступність товару, персональна знижка, рекомендований товар) і за потреби зберегти отримані значення в eSputnik.
    • POST: передати вибрані дані події або контакту в зовнішню систему (для логування, оновлення CRM, аналітичних пайплайнів, запуску зовнішніх процесів).
  • Запуск: сценарій за подією (AddFavoritesItem) або регулярний на групу
  • Де: Сценарій → блок Вебхук (+ блок Оновити поля контакту, якщо потрібно зберегти результат GET)
  • Зберегти:
    • GET: необов'язково — зберегти значення, повернуті ендпоінтом, у додаткові поля (наприклад, couponCode, stockStatus, recommendedItemId).
    • POST: залежить від сценарію.

GET — передати дані в URL, отримати відповідь:

https://api.example.com/favorites?contactId=$contactId&itemId=$lastProductAdded.externalItemId

Або якщо значення береться з масиву:

https://api.example.com/favorites?contactId=$contactId&itemId=$productsFullData[0].externalItemId

POST — передати дані в тілі запиту:

{
  "externalCustomerId": "$externalCustomerId",
  "externalItemId": "$lastProductAdded.externalItemId"
}

Або якщо значення береться з масиву:

{
  "contactId": "$contactId",
  "externalCustomerId": "$externalCustomerId",
  "event": "AddFavoritesItem",
  "externalItemId": "$productsFullData[0].externalItemId"
}

Як використовувати далі:

  • Після GET: персоналізуйте повідомлення збереженими значеннями, розгалужуйте сценарії за поверненими атрибутами, сегментуйте аудиторію за збагаченими полями.
  • Після POST: ведіть зовнішню звітність і атрибуцію, синхронізуйте дані з CRM, запускайте зовнішні дії (генерація купона, перевірка наявності товару тощо).

Як це виглядає на практиці:

  1. AddFavoritesItem запускає сценарій.
  2. Сценарій досягає блоку Вебхук.
  3. Відбувається один із двох патернів:
    • GET: eSputnik викликає URL → зовнішня система повертає дані (наприклад, { "couponCode": "WISH10", "stockStatus": "available" }).
    • POST: eSputnik надсилає JSON з параметрами події → зовнішня система зберігає або обробляє дані.
  4. Якщо це GET — сценарій може перейти до блоку Оновити поля контакту і зберегти значення відповіді в профіль.
  5. Майбутні сценарії та повідомлення використовують збережені поля (GET) або покладаються на зовнішню обробку (POST).

Кейс 4: Розгалуження за періодом підписки

  • Мета: перевірити період підписки в події оплати та надіслати відповідний лист.
  • Запуск: сценарій за подією (InvoiceCommon)
  • Де: Сценарій → блок Розгалуження → блок Email
  • Зберегти: за потреби можна зберегти період підписки в поле контакту, щоб використовувати його пізніше в сегментах, сценаріях або повідомленнях.

У цьому прикладі дані про підписку передаються в параметрі items, де товари зберігаються всередині items.array. Щоб отримати період підписки для першого елемента, використовуйте:

$items.array[0].subscriptionPeriod

Фрагмент події:

{
  "eventTypeKey": "InvoiceCommon",
  "params": {
    "items": {
      "array": [
        {
          "subscriptionPeriod": "90"
        }
      ]
    }
  }
}

Як використовувати в блоці Розгалуження

Залежно від значення $items.array[0].subscriptionPeriod направте контакти відповідною гілкою:

  • 30 → надіслати лист для підписки на 30 днів
  • 90 → надіслати лист для підписки на 90 днів
  • інше або порожнє значення → використати резервну гілку

Як використовувати далі

  • Надсилати різні листи з підтвердженням оплати або онбордингом залежно від придбаного терміну підписки.
  • Узгоджувати подальшу комунікацію з фактичним періодом підписки з події оплати.
  • За потреби зберегти це значення в поле контакту, щоб повторно використовувати його поза межами цього подієвого сценарію.

Як це виглядає на практиці

  1. Після оплати система отримує подію InvoiceCommon.
  2. Сценарій запускається.
  3. Блок Розгалуження перевіряє значення $items.array[0].subscriptionPeriod.
  4. Контакт переходить у відповідну email-гілку залежно від значення.
  5. У кожній гілці надсилається лист для відповідного терміну підписки.

Наступні кроки