Вышло обновление 74: Настройки SMTP из личного кабинета. (Подробнее.)

Liquid шаблонизатор электронной почты

Шаблонизатор Liquid, разработанный Shopify, используется для обработки объектов и массивов подстановок с помощью циклов, условий и фильтров. Это позволяет создавать универсальные шаблоны писем, которые автоматически наполняются динамическими данными, передаваемыми в теле запроса методов email/send и template/set. Использование сложных подстановок также снижает объем шаблонов, ускоряет обработку запросов и помогает создавать более гибкие email-кампании с минимальными усилиями.

Подстановки можно использовать в следующих параметрах методов email/send и template/set:

  • body.html
  • body.plaintext
  • body.amp
  • subject
  • headers
  • from_name
  • options.unsubscribe_url

Сценарии использования Liquid

1. Обращение к вложенным объектам

Позволяет обращаться к переменным, находящимся внутри объекта подстановок. Это удобно для структурированных данных: пользователь, заказ, адрес и т. д.

Пример подстановки в запросе (параметр global_substitutions — email/send, template/set; substitutions — email/send):

{

  "substitutions": {

    "person": {

      "name": "John",

      "secondName": "Doe",

      "age": "26"

    }

  }

}

Пример использования в письме (параметры body.html, body.plaintext, body.amp, subject, headers, options.unsubscribe_url, from_name — email/send, template/set):

"html":"<p>Здравствуйте, {{ person.name }} {{ person.secondName }}!</p></h1>"

 

2. Циклы: вывод массива

Позволяют динамически вывести список элементов — например, товары в заказе, рекомендации, участников мероприятия, ответы в опросе и пр.

Запрос:

"substitutions": {

  "products": [

    {

      "title": "Samsung Galaxy A53",

      "price": "320$"

    },

    {

      "title": "Xiaomi Redmi Note 12",

      "price": "270$"

    },

    {

      "title": "Motorola G82",

      "price": "250$"

    }

  ]

}

Шаблон:

<ul>

  {% for product in products %}

    <li>

      {{ forloop.index }}. {{ product.title }} — {{ product.price }}

    </li>

  {% endfor %}

</ul>

 

3. Генерация ссылок

Используется для создания динамических ссылок на основе данных — например, имени пользователя, идентификатора, названия товара. Полезно для генерации кнопок, каталогов и списков.

Запрос:

"substitutions": {

  "products": [

    {

      "title": "Samsung Galaxy A53",

      "url": "https://shop.example.com/samsung-galaxy-a53"

    },

    {

      "title": "Xiaomi Redmi Note 12",

      "url": "https://shop.example.com/redmi-note-12"

    },

    {

      "title": "Motorola G82",

      "url": "https://shop.example.com/motorola-g82"

    }

  ]

}

Шаблон:

<ul>

  {% for product in products %}

    <li>

      <a href="{{ product.url }}">

        {{ product.title }}

      </a>

    </li>

  {% endfor %}

</ul>

 

4. Условные конструкции

Позволяют отображать разные блоки контента в зависимости от значений переменных — например, показывать уникальное приветствие новым пользователям или скидку постоянным.

Запрос:

{

  "substitutions": {

    "user": {

      "is_new": true

    }

  }

}

Шаблон:

{% if user.is_new %}

  Добро пожаловать!

{% else %}

  Рады снова видеть!

{% endif %}

 

5. Фильтры

Применяются для форматирования данных прямо в шаблоне: изменение регистра текста, добавление префиксов, замена строк, работа с числами и датами.

 

Фильтр

Пример JSON-запроса

Шаблон в HTML-письме

Что увидит получатель

capitalize — делает первую букву строки заглавной

{ "name": "анна" }

Привет, {{ Trigger.name | capitalize }}!

Привет, Анна!

upcase — переводит строку в верхний регистр

{ "promo": "лето2025" }

Ваш промокод: {{ Trigger.promo | upcase }}

Ваш промокод: ЛЕТО2025

downcase — переводит строку в нижний регистр

{ "promo": "ЛЕТО2025" }

Ваш промокод:{{ Trigger.promo | downcase }}

Ваш промокод: лето2025

replace — заменяет часть переменной на другую

{ "phone": "+7 (999) 123-45-67" }

Телефон: {{ Trigger.phone | replace: "+7", "8" }}

Телефон: 8 (999) 123-45-67

default — подставляет значение по умолчанию, если переменная пустая

{ "name": "" }

Привет, {{ Trigger.name | default: "клиент" }}!

Привет, клиент!

date — форматирует дату

{ "delivery_date": "2025-05-01" }

Дата доставки: {{ Trigger.delivery_date | date: "%d.%m.%Y" }}

Дата доставки: 01.05.2025

 

Пример готового запроса email/send с шаблоном на Liquid

Ниже представлен полный рабочий пример запроса:

{

  "api_key": "KEY",

  "message": {

    "template_engine": "liquid",

    "body": {

      "html": "<h1>Hello, {{ user.name }}!</h1><p>Your selected {{ lookingfor.deviceType }}: {{ lookingfor.screenResolution }}, {{ lookingfor.ram }} RAM.</p>{% for product in products %}<div><a href='{{ product.url }}'>{{ product.title }}</a> — {{ product.price }}</div>{% endfor %}"

    },

    "subject": "Your Recommendations",

    "from_email": "sender@mail.com",

    "from_name": "SENDER",

    "recipients": [

      {

        "email": "recipient@mail.com",

        "substitutions": {

          "user": { "name": "John" },

          "lookingfor": {

            "deviceType": "tablet",

            "screenResolution": "1920x1080",

            "ram": "4GB"

          },

          "products": [

            {

              "title": "Amazon Tablet",

              "price": "$50",

              "url": "https://..."

            }

          ]

        }

      }

    ]

  }

}

 

Подробнее про шаблонизатор Liquid можно прочитать в документации Shopify