Содержание статьи:

Два фундаментальных подхода к динамическим письмам

При решении задачи по отправке динамических email-сообщений, таких как брошенная корзина или детали заказа, существует два фундаментальных подхода к распределению логики между вашим приложением и сервисом рассылок Notisend. Понимание этих подходов поможет вам выбрать наиболее эффективную стратегию для автоматизации.

Подход 1: Вся логика на стороне отправителя (вашего приложения, сайта)

В этом сценарии ваше приложение (сайт, CRM) берет на себя всю работу:

  • Оно само формирует полный и готовый HTML-код письма.
  • Само вставляет в этот HTML-код список товаров, форматирует его, добавляет стили.
  • В Notisend передается уже полностью собранное письмо с простой командой: «Отправь вот этот готовый HTML вот этому получателю».

Плюс: Максимальный контроль у разработчиков. 

Минус: Крайне низкая гибкость для маркетолога. Любое изменение в дизайне письма, тексте акции или логике отображения товаров требует правок в коде вашего приложения и привлечения разработчиков. Маркетолог не может самостоятельно запустить A/B тест или быстро поправить опечатку.

Подход 2: Разделение логики между отправителем и Notisend (Рекомендуемый)

Это более гибкий и современный подход, при котором зоны ответственности четко разделены:

  • Ваше приложение (сторона отправителя) отвечает только за корректную передачу сырых данных: email получателя и список товаров в виде структурированной строки (JSON). Оно не заботится о том, как это будет выглядеть.
  • Сервис Notisend отвечает за логику и представление: он берет полученные данные и «вносит» их в специальный шаблон.

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

  • Менять дизайн и верстку письма в визуальном Конструкторе Notisend.
  • Редактировать тексты, заголовки и призывы к действию.
  • Управлять логикой многошаговых цепочек прямо в редакторе триггеров. Например, добавить второе письмо со скидкой, если первое не сработало.

Эта инструкция посвящена именно второму, более гибкому и масштабируемому подходу. Мы покажем, как настроить систему, в которой разработчики один раз настраивают отправку данных, а маркетологи получают полный контроль над email-коммуникациями.

Инструкция охватывает два ключевых этапа этой модели:

  1. Настройка шаблона в Notisend: как научить шаблон принимать сырые данные и превращать их в красивый список товаров.
  2. Передача данных через API: как ваше приложение должно отправлять эти данные для разных маркетинговых сценариев.

Официальная документация API

Для всех технических деталей по API-запросам, форматам ответов и другим методам обращайтесь к официальной документации.

Часть 1: Подготовка данных (Общий принцип)

Независимо от способа создания шаблона, данные о списке товаров всегда передаются одинаково: в виде одного параметра, значение которого — JSON-строка.

Почему это важно? Принцип работы с динамическими данными

В рекомендованном нами Подходе 2 сервис Notisend выполняет роль «моста» между сырыми данными из вашего приложения и готовым письмом для клиента.

Чтобы использовать одни и те же данные в разных письмах (например, в многошаговой цепочке «Брошенная корзина»), они должны быть сохранены в сервисе рассылок. Эти данные хранятся как параметр в профиле конкретного получателя и отображаются в группе. В шаблон данные вставляются автоматически. Поскольку список товаров — это набор сложной информации (имя, цена, количество), мы передаем весь этот набор как единое значение одного параметра.

Таким образом, подготовка данных — это преобразование сложной информации о корзине в единый, структурированный, текстовый формат JSON, готовый к сохранению в базе получателей Notisend.

Пример значения для параметра products

  1. Название параметра: products (или другое, но products используется в системных интеграциях, например, с Tilda, и является хорошей практикой).
  2. Значение параметра: Это массив объектов, преобразованный в текстовую строку. Каждый объект — это один товар.

Пример значения для параметра products:

[{"name":"Кроссовки для бега","price":"4500","quantity":1,"amount":"4500"},{"name":"Футболка спортивная","price":"1200","quantity":2,"amount":"2400"}]

Критически важно: При передаче через API вся эта структура [] должна быть обернута в кавычки, чтобы представлять собой единую текстовую строку.

Часть 2: Создание шаблона (Два способа)

Вы можете создать шаблон как в конструкторе писем, так и с помощью прямого редактирования HTML-кода.

Способ 1: Использование Конструктора писем (Рекомендуемый и самый простой способ)

Этот метод не требует глубоких знаний кода и идеально подходит для быстрого создания шаблонов. Вы создаете «заготовку» для одного товара, а затем «активируете» для нее режим повторения (цикл).

Шаг 1: Создайте структуру для одного товара. Перетащите в макет письма элемент, который будет служить шаблоном для одного товара. Лучше всего подходят «Колонка» или строка в «Таблице».

Шаг 2: Активация режима цикла и настройка параметра (Ключевой шаг!) Этот шаг имеет важную особенность: поле «Параметр» становится видимым в настройках колонки только после того, как вы добавите в нее специальную переменную.

  1. Добавьте переменную товара. Внутрь созданной «Колонки» поместите текстовый блок и напишите в нем переменную для подстановки данных, используя единственное число: например, {{ product.name }}.
  2. Заполните появившееся поле «Параметр».
    Важный момент: Как только вы выполнили предыдущее действие, поле «Параметр» появится в настройках.
    Теперь выделите весь родительский блок-контейнер (ту самую «Колонку» из Шага 1). В панели настроек справа вы увидите новое поле «Параметр». Впишите в него название вашего параметра с массивом — products.

Что в итоге происходит: Как только вы вписываете {{ product.name }} в текстовый блок, а затем products в поле «Параметр» родительской колонки, вы даете системе команду: «Возьми эту колонку как шаблон. Повтори ее столько раз, сколько товаров в массиве products, и на каждом шаге подставь в {{ product.name }} и другие аналогичные переменные данные текущего товара».

Шаг 3: Дополните шаблон товара. Теперь, когда цикл настроен, вы можете добавлять в вашу колонку-шаблон другие переменные ({{ product.price }}{{ product.quantity }}) и блоки (картинки, кнопки), и они все будут повторяться для каждого товара.

Способ 2: Использование HTML-редактора и кода Liquid (Продвинутый способ)

Этот метод дает больше гибкости, но требует работы с кодом. Он полезен для сложной верстки, которую нельзя собрать в конструкторе.

  1. Перетащите в макет блок «</> HTML».
  2. Вставьте в него следующий код на языке Liquid:
{% raw %}
{# 1. Получаем параметр products и преобразуем его из JSON-строки в массив #}
{% assign collection = products | parse_json %}

{# 2. Проверяем, есть ли товары в массиве #}
{% if collection.size > 0 %}
  
  <p><b>Детали вашего заказа:</b></p>
  
  <table width="100%" border="0" cellspacing="0" cellpadding="10" style="border-collapse: collapse;">
    {# 3. Запускаем цикл по каждому товару в массиве #}
    {% for product in collection %}
      <tr style="border-bottom: 1px solid #eeeeee;">
        <td>
          {# 4. Выводим данные, обращаясь к свойствам товара #}
          <strong>{{ product.name }}</strong><br>
          <small>Цена: {{ product.price | plus: 0 }} руб. x {{ product.quantity }} шт.</small>
        </td>
        <td align="right">
          <strong>{{ product.amount | plus: 0 }} руб.</strong>
        </td>
      </tr>
    {% endfor %}
  </table>

{% endif %}
{% endraw %}

Здесь логика задается явно через код: {% assign ... %} парсит данные, а {% for ... %} создает цикл.

Часть 3: Передача данных через API

После того как вы создали визуальный или HTML-шаблон, его нельзя сразу использовать в API-запросах. Сначала необходимо создать специальную сущность — «Отправка по шаблону», которая свяжет ваш дизайн с API-интерфейсом.

Шаг 1: Создание «Отправки по шаблону» в интерфейсе Notisend

Этот обязательный шаг выполняется один раз для каждого шаблона, который вы планируете использовать через API.

  1. Перейдите в раздел «Автоматизация» -> «Отправка по шаблону».
  2. Нажмите кнопку создания новой отправки.
  3. Выберите ваш ранее созданный визуальный/HTML-шаблон из списка.
  4. Сохраните.

После сохранения у этой новой сущности «Отправка по шаблону» появится свой уникальный ID.

Критически важно: В API-запросах вы будете использовать именно ID этой «Отправки по шаблону», а не ID самого визуального шаблона из редактора.

Теперь, когда у вас есть правильный ID, вы можете отправлять письма с динамическими данными.

Вариант А: Отправка одиночного транзакционного письма (для «Брошенной корзины»)

Этот метод идеален для мгновенных уведомлений. Ваша система отправляет API-запрос, в котором указывает email получателя, ID «Отправки по шаблону» и данные о товарах.

Endpoint API: POST /email/templates/:template_id/messages

Пример запроса curl (для «Отправки по шаблону» с ID 123):

curl -X POST https://api.notisend.ru/v1/email/templates/123/messages \
     -H 'Content-Type: application/json' \
     -H 'Authorization: Bearer $API_TOKEN' \
     -d '{
       "to": "customer@example.com",
       "params": {
         "products": "[{\"name\":\"Кроссовки для бега\",\"price\":\"4500\",\"quantity\":1},{\"name\":\"Футболка\",\"price\":\"1200\",\"quantity\":2}]"
       }
     }'

В поле params мы передаем наш параметр products как JSON-строку.

Вариант Б: Добавление данных к получателю для триггерных цепочек (для автоматических серий писем)

Этот подход является более мощным и стратегическим. Вместо отправки одного мгновенного письма, вы сохраняете данные о товарах непосредственно в профиле получателя. Это позволяет использовать их в многошаговых автоматических сценариях, чтобы мотивировать клиента к завершению покупки и вернуть его на сайт.

Основная идея: Ваша система (сайт, CRM) передает в Notisend не просто команду «отправить письмо», а «добавить/обновить этого подписчика и прикрепить к нему вот эти данные о товарах». А уже внутри Notisend настроен триггер, который реагирует на это событие и запускает целую цепочку писем.

Пример сценария: Многошаговая «Брошенная корзина»
  1. Событие: Пользователь кладет товары в корзину и уходит с сайта. Ваша система немедленно отправляет API-запрос в Notisend, добавляя этого пользователя в группу «Брошенная корзина» и сохраняя в его профиле параметр products со списком товаров.
  2. Письмо 1 (через 1 час): Триггер Notisend срабатывает и отправляет первое письмо — простое напоминание. В нем, используя наш шаблон, отображается список забытых товаров. Данные берутся из параметра products этого подписчика.
  3. Пауза и проверка (1 день): Цепочка ждет 24 часа. С помощью условий можно проверить, совершил ли клиент покупку (например, был ли он перемещен в группу «Покупатели»).
  4. Письмо 2 (через 1 день): Если покупка не совершена, триггер отправляет второе письмо. В нем используются те же самые данные из параметра products, но уже с дополнительным стимулом: «Все еще думаете? Вот вам скидка 5% на эти товары, которая сгорит через 24 часа!».

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

Техническая реализация

Шаг 1: Подготовка и передача данных через API (задача для разработчика)

Сначала нужно настроить группу и параметр в Notisend, а затем отправлять туда данные.

А. Подготовка (выполняется один раз): Убедитесь, что в Notisend есть группа для таких подписчиков (например, «Брошенная корзина») и в ней создан параметр с названием products и типом string. Если их нет, создайте через API:

  • Создание группы: POST /email/lists
  • Создание параметра в группе: POST /email/lists/:id/parameters

Б. Добавление/Обновление получателя (выполняется при каждом событии): Когда пользователь бросает корзину, отправьте API-запрос на добавление его в группу с данными о товарах.

  • Endpoint API: POST /email/lists/:id/recipients (для нового) или PATCH /email/lists/:list_id/recipients/:id (для существующего).

Пример запроса curl (добавление нового получателя в группу 45 с ID параметра 67):

curl -X POST https://api.notisend.ru/v1/email/lists/45/recipients \
     -H 'Content-Type: application/json' \
     -H 'Authorization: Bearer $API_TOKEN' \
     -d '{
       "email": "customer@example.com",
       "values": [
         {
           "parameter_id": "67",
           "value": "[{\"name\":\"Кроссовки для бега\",\"price\":\"4500\",\"quantity\":1}]"
         }
       ]
     }'

Шаг 2: Создание триггерной цепочки в Notisend (задача для маркетолога)

После того как разработчик настроил передачу данных, вы можете построить саму логику автоматизации в интерфейсе Notisend.

  1. Перейдите в раздел «Автоматизация» -> «Триггеры» и нажмите «+Создать новый триггер».
  2. Выберите сценарий, например, «Отправить серию писем новому подписчику».
  3. В качестве группы получателей укажите ту, в которую API добавляет пользователей (в нашем примере — «Брошенная корзина»). Это ключевой момент, который связывает API и автоматизацию.
  4. Вы попадете в блочный конструктор, где сможете собрать вашу цепочку:
    Добавьте блок «Отправить письмо» и выберите ваш шаблон со списком товаров.
    Добавьте блок «Пауза», чтобы установить задержку между письмами.
    Используйте блок «Условие» для проверки действий подписчика.
    — Добавьте второй блок «Отправить письмо» для отправки письма со скидкой, используя тот же самый шаблон.

Система автоматически подхватит данные из параметра products для каждого подписчика, проходящего через эту цепочку.

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