Содержание статьи:
Два фундаментальных подхода к динамическим письмам
При решении задачи по отправке динамических email-сообщений, таких как брошенная корзина или детали заказа, существует два фундаментальных подхода к распределению логики между вашим приложением и сервисом рассылок Notisend. Понимание этих подходов поможет вам выбрать наиболее эффективную стратегию для автоматизации.
Подход 1: Вся логика на стороне отправителя (вашего приложения, сайта)
В этом сценарии ваше приложение (сайт, CRM) берет на себя всю работу:
- Оно само формирует полный и готовый HTML-код письма.
- Само вставляет в этот HTML-код список товаров, форматирует его, добавляет стили.
- В Notisend передается уже полностью собранное письмо с простой командой: «Отправь вот этот готовый HTML вот этому получателю».
Плюс: Максимальный контроль у разработчиков.
Минус: Крайне низкая гибкость для маркетолога. Любое изменение в дизайне письма, тексте акции или логике отображения товаров требует правок в коде вашего приложения и привлечения разработчиков. Маркетолог не может самостоятельно запустить A/B тест или быстро поправить опечатку.
Подход 2: Разделение логики между отправителем и Notisend (Рекомендуемый)
Это более гибкий и современный подход, при котором зоны ответственности четко разделены:
- Ваше приложение (сторона отправителя) отвечает только за корректную передачу сырых данных: email получателя и список товаров в виде структурированной строки (JSON). Оно не заботится о том, как это будет выглядеть.
- Сервис Notisend отвечает за логику и представление: он берет полученные данные и «вносит» их в специальный шаблон.
Плюсы: абсолютная гибкость для маркетолога. Ваш специалист может самостоятельно, без привлечения разработчиков:
- Менять дизайн и верстку письма в визуальном Конструкторе Notisend.
- Редактировать тексты, заголовки и призывы к действию.
- Управлять логикой многошаговых цепочек прямо в редакторе триггеров. Например, добавить второе письмо со скидкой, если первое не сработало.
Эта инструкция посвящена именно второму, более гибкому и масштабируемому подходу. Мы покажем, как настроить систему, в которой разработчики один раз настраивают отправку данных, а маркетологи получают полный контроль над email-коммуникациями.
Инструкция охватывает два ключевых этапа этой модели:
- Настройка шаблона в Notisend: как научить шаблон принимать сырые данные и превращать их в красивый список товаров.
- Передача данных через API: как ваше приложение должно отправлять эти данные для разных маркетинговых сценариев.
Официальная документация API
Для всех технических деталей по API-запросам, форматам ответов и другим методам обращайтесь к официальной документации.
Часть 1: Подготовка данных (Общий принцип)
Независимо от способа создания шаблона, данные о списке товаров всегда передаются одинаково: в виде одного параметра, значение которого — JSON-строка.
Почему это важно? Принцип работы с динамическими данными
В рекомендованном нами Подходе 2 сервис Notisend выполняет роль «моста» между сырыми данными из вашего приложения и готовым письмом для клиента.
Чтобы использовать одни и те же данные в разных письмах (например, в многошаговой цепочке «Брошенная корзина»), они должны быть сохранены в сервисе рассылок. Эти данные хранятся как параметр в профиле конкретного получателя и отображаются в группе. В шаблон данные вставляются автоматически. Поскольку список товаров — это набор сложной информации (имя, цена, количество), мы передаем весь этот набор как единое значение одного параметра.
Таким образом, подготовка данных — это преобразование сложной информации о корзине в единый, структурированный, текстовый формат JSON, готовый к сохранению в базе получателей Notisend.
Пример значения для параметра products
- Название параметра:
products(или другое, ноproductsиспользуется в системных интеграциях, например, с Tilda, и является хорошей практикой). - Значение параметра: Это массив объектов, преобразованный в текстовую строку. Каждый объект — это один товар.
Пример значения для параметра products:
[{"name":"Кроссовки для бега","price":"4500","quantity":1,"amount":"4500"},{"name":"Футболка спортивная","price":"1200","quantity":2,"amount":"2400"}]
Критически важно: При передаче через API вся эта структура […] должна быть обернута в кавычки, чтобы представлять собой единую текстовую строку.
Часть 2: Создание шаблона (Два способа)
Вы можете создать шаблон как в конструкторе писем, так и с помощью прямого редактирования HTML-кода.
Способ 1: Использование Конструктора писем (Рекомендуемый и самый простой способ)
Этот метод не требует глубоких знаний кода и идеально подходит для быстрого создания шаблонов. Вы создаете «заготовку» для одного товара, а затем «активируете» для нее режим повторения (цикл).
Шаг 1: Создайте структуру для одного товара. Перетащите в макет письма элемент, который будет служить шаблоном для одного товара. Лучше всего подходят «Колонка» или строка в «Таблице».
Шаг 2: Активация режима цикла и настройка параметра (Ключевой шаг!) Этот шаг имеет важную особенность: поле «Параметр» становится видимым в настройках колонки только после того, как вы добавите в нее специальную переменную.
- Добавьте переменную товара. Внутрь созданной «Колонки» поместите текстовый блок и напишите в нем переменную для подстановки данных, используя единственное число: например,
{{ product.name }}. - Заполните появившееся поле «Параметр».
Важный момент: Как только вы выполнили предыдущее действие, поле «Параметр» появится в настройках.
Теперь выделите весь родительский блок-контейнер (ту самую «Колонку» из Шага 1). В панели настроек справа вы увидите новое поле «Параметр». Впишите в него название вашего параметра с массивом —products.
Что в итоге происходит: Как только вы вписываете {{ product.name }} в текстовый блок, а затем products в поле «Параметр» родительской колонки, вы даете системе команду: «Возьми эту колонку как шаблон. Повтори ее столько раз, сколько товаров в массиве products, и на каждом шаге подставь в {{ product.name }} и другие аналогичные переменные данные текущего товара».
Шаг 3: Дополните шаблон товара. Теперь, когда цикл настроен, вы можете добавлять в вашу колонку-шаблон другие переменные ({{ product.price }}, {{ product.quantity }}) и блоки (картинки, кнопки), и они все будут повторяться для каждого товара.
Способ 2: Использование HTML-редактора и кода Liquid (Продвинутый способ)
Этот метод дает больше гибкости, но требует работы с кодом. Он полезен для сложной верстки, которую нельзя собрать в конструкторе.
- Перетащите в макет блок «</> HTML».
- Вставьте в него следующий код на языке 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.
- Перейдите в раздел «Автоматизация» -> «Отправка по шаблону».
- Нажмите кнопку создания новой отправки.
- Выберите ваш ранее созданный визуальный/HTML-шаблон из списка.
- Сохраните.
После сохранения у этой новой сущности «Отправка по шаблону» появится свой уникальный 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 настроен триггер, который реагирует на это событие и запускает целую цепочку писем.
Пример сценария: Многошаговая «Брошенная корзина»
- Событие: Пользователь кладет товары в корзину и уходит с сайта. Ваша система немедленно отправляет API-запрос в Notisend, добавляя этого пользователя в группу «Брошенная корзина» и сохраняя в его профиле параметр
productsсо списком товаров. - Письмо 1 (через 1 час): Триггер Notisend срабатывает и отправляет первое письмо — простое напоминание. В нем, используя наш шаблон, отображается список забытых товаров. Данные берутся из параметра
productsэтого подписчика. - Пауза и проверка (1 день): Цепочка ждет 24 часа. С помощью условий можно проверить, совершил ли клиент покупку (например, был ли он перемещен в группу «Покупатели»).
- Письмо 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.
- Перейдите в раздел «Автоматизация» -> «Триггеры» и нажмите «+Создать новый триггер».
- Выберите сценарий, например, «Отправить серию писем новому подписчику».
- В качестве группы получателей укажите ту, в которую API добавляет пользователей (в нашем примере — «Брошенная корзина»). Это ключевой момент, который связывает API и автоматизацию.
- Вы попадете в блочный конструктор, где сможете собрать вашу цепочку:
— Добавьте блок «Отправить письмо» и выберите ваш шаблон со списком товаров.
— Добавьте блок «Пауза», чтобы установить задержку между письмами.
— Используйте блок «Условие» для проверки действий подписчика.
— Добавьте второй блок «Отправить письмо» для отправки письма со скидкой, используя тот же самый шаблон.
Система автоматически подхватит данные из параметра products для каждого подписчика, проходящего через эту цепочку.