Шаблонизатор Liquid в Октопус CDP
Liquid — язык шаблонов, созданный Shopify и ставший стандартом для писем и страниц, содержимое которых собирается «на лету». Вы пишете обычный HTML и добавляете в него команды в фигурных скобках: они подставляют данные и управляют тем, какие блоки показать конкретному получателю.
В Октопус CDP Liquid — это связующее звено между данными о клиенте и товарах и контентом коммуникации. Платформа знает о клиенте всё: профиль, события, сегменты, просмотренные и брошенные товары. Liquid позволяет вывести эти данные в письме или всплывающем окне — без разработки и без отдельного шаблона под каждый сегмент.
Как это работает
Логика одинаковая для всех каналов:
- Сценарий собирает данные. Нода «Товары» подбирает подборку по стратегии (брошенная корзина, последние просмотренные, товары из сегмента), профиль клиента подставляется автоматически.
- Данные передаются в шаблон. Октопус отдаёт в шаблон массив товаров и поля клиента.
- Liquid подставляет значения. На этапе отправки шаблон «раскрывается»: команды заменяются реальными данными конкретного получателя.
- Клиент получает персональное сообщение — со своим именем, своей подборкой и своими условиями показа блоков.
Один шаблон — сколько угодно вариантов итогового письма. Отдельная вёрстка под каждый сегмент не нужна.
Где применяется
| Инструмент | Что даёт Liquid |
|---|---|
| Рассылки | Персональные письма с индивидуальной товарной подборкой, обращением по имени, блоками под условие |
| Всплывающие окна | Персональное содержимое попапа: индивидуальный промокод, конкретное предложение, товарная подборка |
| Сценарии автоматизации | Контент шага коммуникации, зависящий от данных клиента и результата предыдущих нод |
Liquid работает и на уровне внешних сервисов рассылок (например, UniSender): Октопус передаёт массив товаров, а шаблон отображает его в теле письма.
Из чего состоит шаблон
Три базовые конструкции покрывают почти все задачи:
Вывод значения — двойные фигурные скобки:
Здравствуйте, {{ client.name }}!
Условие — показать блок только тем, кому он нужен:
{% if product.available %}
В наличии
{% else %}
Нет в наличии
{% endif %}
Цикл — перебрать товары подборки:
{% for product in products %}
{{ product.name }} — {{ product.price }} руб.
{% endfor %}
Дополнительно значения можно оформлять фильтрами через | — обрезать длинное название, дописать «руб.», пересчитать цену:
{{ product.name | truncate: 40 }}
{{ product.price | append: " руб." }}
Какие данные доступны
- Поля клиента — имя, email, телефон и другие атрибуты профиля, включая пользовательские поля проекта.
- Массив товаров — результат работы ноды «Товары»: название, цена и старая цена, скидка, наличие, остаток, ссылки на страницу и изображения.
- Данные сценария — значения, полученные на предыдущих шагах, например выданный промокод.
Набор доступных полей зависит от того, какие данные передаются в шаблон: профиль клиента подставляется всегда, товары — если в сценарии отработала нода «Товары».
Готовый пример
Небольшой блок письма: обращение по имени и подборка товаров с ценой, старой ценой и меткой наличия.
<p>Здравствуйте, {{ client.name }}! Мы подобрали для вас товары:</p>
<table width="100%" cellpadding="0" cellspacing="0" style="border-collapse: collapse;">
{% for product in products %}
<tr style="border-bottom: 1px solid #f0f0f0;">
<td style="padding: 12px; font-size: 14px;">
<a href="{{ product.detail_page_url }}" style="color: #333333; text-decoration: none;">
{{ product.name | truncate: 40 }}
</a>
</td>
<td style="padding: 12px; font-size: 14px; text-align: right; white-space: nowrap;">
{% if product.old_price %}<s style="color: #999999;">{{ product.old_price }} руб.</s>{% endif %}
{{ product.price | append: " руб." }}
</td>
<td style="padding: 12px; text-align: center;">
{% if product.available %}
<span style="color: #2d7a3a; font-size: 12px;">В наличии</span>
{% else %}
<span style="color: #c0392b; font-size: 12px;">Нет в наличии</span>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
Что важно помнить
- У каждой открывающей команды есть закрывающая:
{% for %}→{% endfor %},{% if %}→{% endif %}. - Названия полей пишутся строчными буквами:
product.old_price, а неproduct.OLD_PRICE. - Если данных нет — цикл ничего не выведет, а условие просто скроет блок. Письмо не сломается, поэтому блоки, зависящие от необязательных данных (например, старая цена), стоит оборачивать в
{% if %}. - Перед запуском массовой рассылки отправьте тестовое письмо: так видно, как шаблон раскрывается на реальных данных.
Остались вопросы?
Если вы не нашли нужную статью, напишите нам - мы обновим документацию или поможем в Telegram.