Тестування та відлагодження Velocity

Попередній перегляд динамічного контенту

Перед відправленням перегляньте, як Velocity-змінні підставляються з реальними даними безпосередньо в редакторі повідомлень.

Перейдіть до Повідомлення → Повідомлення, відкрийте потрібне повідомлення і натисніть Додаткові параметри → Налаштування динамічного контенту.

Введіть значення параметрів у форматі JSON і натисніть Перегляд повідомлення.

Якщо у Velocity-коді є помилки, замість повідомлення буде показано їх опис.

Тестування з реальними даними замовлення

Якщо повідомлення тригерне, можна скопіювати реальні параметри події безпосередньо з інтерфейсу.

Перейдіть до Тригери → Історія подій, клікніть на подію і скопіюйте її параметри.

Вставте скопійовані параметри в поле Налаштування динамічного контенту і натисніть Перегляд повідомлення.

Це найпростіший спосіб перевірити назви полів, шляхи в масивах і умови перед відправленням.

Перевірка доступного контексту змінних

Перш ніж відлагоджувати вираз, перевірте, яке джерело даних реально доступне в поточному контексті.

ДжерелоДе доступнеТиповий патерн доступу
Поля контактуПовідомлення, сценарії, сегменти${firstName}, ${email}
Параметри подіїЛише всередині сценарію, запущеного цією подією$deliveryMethod, $items[0].name
Дані зовнішнього джерелаПовідомлення або сценарії, де це джерело підключеноЗалежить від джерела
Дані відповіді вебхукаПісля виклику блоку Вебхук у сценаріїЗалежить від структури відповіді

Якщо значення не підставляється — перевірте, чи доступне очікуване джерело в поточному контексті.

Правила чутливості до регістру

Тип данихЧутливість до регістру
Назви полів контактуНечутливі: ${firstName} = ${FIRSTNAME}
Назви параметрів подіїЧутливі: $deliveryMethod$DeliveryMethod
Назви полів зовнішніх джерелЧутливі: мають точно відповідати заголовкам колонок або ключам JSON

Змінна не підставляється

Симптом: у повідомленні замість значення виводиться буквальний текст $firstName або $deliveryMethod.

Причини та виправлення:

ПричинаВиправлення
Назва змінної не збігається з назвою поля або параметраПеревірте написання і регістр за списком полів контакту або параметрами події
Значення відсутнє, використовується синтаксис $varВикористовуйте $!{var} або ${var|'запасне значення'}
Параметр події недоступний у цьому контекстіПеревірте, що повідомлення надсилається через правильний сценарій
Зовнішнє джерело даних не підключено до повідомленняПідключіть джерело даних у налаштуваннях повідомлення

Проблеми з відображенням директив у email

Симптом: вміст #foreach або #if відображається як сирий текст, або верстка листа ламається.

Причина: директиви в HTML-коді email мають бути загорнуті в коментарі. Без обгортки email-клієнт сприймає їх як некоректну розмітку.

Виправлення: загорніть усі директиви в HTML-коментарі:

<!--#foreach($item in $items)-->
  <tr>
    <td>$!item.name</td>
    <td>$!item.cost грн</td>
  </tr>
<!--#end-->

<!--#if($deliveryMethod == 'express')-->
  <p>Експрес-доставка: 1–2 дні.</p>
<!--#end-->

Це правило стосується лише email. У SMS, Mobile Push, Viber, Telegram і App Inbox директиви використовуються без коментарів.

Типові помилки з масивами та вкладеними об'єктами

Вихід за межі масиву

$items[3].name    ← помилка, якщо в масиві менше 4 елементів

Використовуйте #foreach, якщо розмір масиву заздалегідь невідомий, або перевірте розмір перед зверненням:

#if($items.size() > 3)
  $items[3].name
#end

Відсутній #end

Кожен #if і #foreach має закриватися директивою #end. Відсутній #end ламає рендеринг усього, що стоїть після нього в шаблоні.

<!--#if($deliveryMethod == 'express')-->
  <p>Експрес-доставка.</p>
<!--#end-->    ← обов'язково

Невірний шлях до вкладеного значення

$lastProductAdded.externalItemId    ← працює, якщо lastProductAdded — об'єкт
$lastProductAdded[0].externalItemId ← використовуйте, якщо lastProductAdded — масив

Якщо вкладене значення не підставляється — перевірте, чи є батьківський елемент об'єктом або масивом у тілі події.

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