Шаблонизатор PROScript
Данные о товарах выводятся с письмах с помощью шаблонизатора PROScript. Здесь вы найдёте готовые конструкции для вывода товаров в письмах сценариев.
Брошенная корзина
Для отображения содержимого корзины в рассылках сценария Брошенная корзина используются данные события BASKET_ADD
Обновление корзины. Данные о товарах можно получить следующей функцией:
[% basket_list = ssecquery('basket') %]
Данные о корзине придут в шаблонизатор в объекте:
{
"transaction_id" => "x1",
"transaction_dt" => "2022-07-25 23:25:13",
"items" => [
{ запись ssec },
{ запись ssec },
{ запись ssec }
]
}
Если вы передаёте метаданные о товаре (название, ссылку, картинку и т.д.) в событии, в письмо можно подставлять данные товара из самого события.
Чтобы вывести информацию обо всех товарах в корзине, используйте код:
[% basket_list = ssecquery('basket') %]
[% FOREACH item in basket_list[0].items %]
<a href="[% item.product.url %]"><img src="[% item.product.picture[0] %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
Количество: [% item.product.qnt %] шт<br>
Стоимость: [% item.product.price*item.product.qnt %] руб.<br>
<a href="[% item.product.url %]">Купить</a><br>
[% END %]
Чтобы вывести какой-либо параметр из YML-файла (например, картинку), укажите ссылку на файл в начале блока с товарами и добавьте вывод нужного параметра в код товара:
[% basket_list = ssecquery('basket') %]
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% FOREACH item in basket_list[0].items %]
<a href="[% item.product.url %]"><img src="[% IF yml.$id.picture[0] %][% yml.$id.picture[0] %][% ELSE %][% yml.$id.picture %][% END %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
Количество: [% item.product.qnt %] шт<br>
Стоимость: [% item.product.price*item.product.qnt %] руб.<br>
<a href="[% item.product.url %]">Купить</a><br>
[% END %]
Брошенный просмотр
Для вывода товаров в рассылках сценария Брошенный просмотр, используются данные события VIEW_PRODUCT
Просмотр карточки товара:
[% product_view_list = ssecquery('product_view') %]
Данные о каждом товаре поступят в виде объекта, содержащего все поля. В результате работы функции вы получите 100 последних событий. Вы можете задать временные рамки запрашиваемых событий, — например за последние 24 часа:
[% ssecquery('product_view','dt','>','current - 24 hours') %]
Также вы можете ограничить число отображаемых товаров напрямую в шаблоне:
[% product_view_list = ssecquery('product_view','dt','>','current - 24 hours') %]
[% used_ids = []; showed_ids = 0 %]
[% FOREACH t in product_view_list %]
[% NEXT IF exists_val(used_ids,t.product.id) %]
[% used_ids.push(t.product.id) %]
<a href="[% t.product.url %]"><img src="[% t.product.picture[0] %]"></a><br>
<a href="[% t.product.url %]">[% t.product.name %]</a><br>
[% t.product.price %] руб.<br>
<a href="[% t.product.url %]">Купить</a><br>
[% showed_ids = showed_ids+1; LAST IF showed_ids >= 6 %]
[% END %]
Пример вывода 6 последних просмотренных товаров за 24 часа, исключая повторные просмотры.
Если вы передаёте метаданные о товаре (название, ссылку и т.д.) в событии, их можно подставлять из данных событий. Необязательно использовать данные о товарах из YML-файла.
Брошенная категория
Для вывода содержимого в рассылках сценария Брошенная категория используются данные события VIEW_CATEGORY
Просмотр категории товара:
[% category_view_list = ssecquery('category_view') %]
Данные о каждой категории поступят в виде объекта, содержащего все поля, которые вы передавали в событии. В результате работы функции вы получите 100 последних событий. Вы можете задать временные рамки запрашиваемых событий:
[% ssecquery('category_view','dt','>','current - 1 day') %]
Для вывода товаров из категории нужно использовать данные о товарах из вашего YML-файла. Если товаров для этой категории не будет, выполнится команда [% Cancel_Letter() %]
— письмо не отправится и завершится ошибкой.
[% category_view_list = ssecquery('category_view','dt','>','current - 1 day') %]
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% category_view_items = [] %]
[% FOREACH item IN yml.values() %][% IF item.categoryId == category_view_list[0].product.category_id AND item.available == 'true' %][% category_view_items.push(item) %][% END %][% LAST IF category_view_items.size() == 6 %][% END %]
[% IF category_view_items.size() < 1 %][% Cancel_Letter() %][% END %]
[% IF category_view_items.size() > 0 %]
[% FOREACH item IN category_view_items %]
<a href="[% item.url %]"><img src="[% IF item.picture[0] %][% item.picture[0] %][% ELSE %][% item.picture %][% END %]"></a><br>
<a href="[% item.url %]">[% item.name %]</a><br>
[% item.price %] руб.<br>
<a href="[% item.url %]">Купить</a><br>
[% LAST IF loop.count() == 6 %]
[% END %]
[% END %]
Пример вывода товаров последней просмотренной категории.
Товары в избранном
Для вывода всех товаров, добавленных клиентом в избранное, используются данные события FAVORITE
Добавление в избранное:
[% favorite_list = ssecquery('product_favorite') %]
Если вы передаёте метаданные о товаре (название, ссылку и т.д.) в событии, их можно подставлять из данных событий. Необязательно использовать данные о товарах из YML-файла.
[% favorite_list = ssecquery('product_favorite') %]
[% FOREACH item in favorite_list %]
<a href="[% item.product.url %]"><img src="[% item.product.picture[0] %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
<a href="[% item.product.url %]">Купить</a><br>
[% END %]
Если нужно вывести только последний добавленный в избранное товар, используйте код:
[% item = ssecquery('product_favorite')[0] %]
<a href="[% item.product.url %]"><img src="[% item.product.picture[0] %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
<a href="[% item.product.url %]">Купить</a>
Товар появился в наличии
Для вывода содержимого в рассылках сценария Товар появился в наличии используются данные события PRODUCT_ISA
Товар появился.
Данные о товаре, для которого запускается триггер, передаются в специальный параметр сценария sequence_data.event.ecom_product_isa
. Если вы передаёте метаданные о товаре (название, ссылку и т.д.) в событии, их можно подставлять из данных событий. Необязательно использовать данные о товарах из YML-файла.
Чтобы вывести товар в письмах сценария используйте код:
[% item = ssecquery('product_isa', 'product.id', sequence_data.event.ecom_product_isa.product_id)[0] %]
<a href="[% item.product.url %]"><img src="[% item.product.picture[0] %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
<a href="[% item.product.url %]">Купить</a><br>
Чтобы вывести данные товара из YML-файла, используйте следующий код:
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% id = sequence_data.event.ecom_product_isa.product_id %]
[% IF !yml.$id %][% Cancel_Letter() %][% END %]
<a href="[% yml.$id.url %]"><img src="[% IF yml.$id.picture[0] %][% yml.$id.picture[0] %][% ELSE %][% yml.$id.picture %][% END %]"></a><br>
<a href="[% yml.$id.url %]">[% yml.$id.name %]</a><br>
[% yml.$id.price %] руб.<br>
<a href="[% yml.$id.url %]">Купить</a><br>
Если нужного id товара в файле не будет, выполнится команда [% Cancel_Letter() %]
, письмо не отправится и завершится ошибкой.
Протестировать отображение данных в письме можно только через запуск триггера. , — и мы включим режим тестирования для ваших адресов.
Заказ оформлен
Для вывода данных о заказе в рассылках сценария Заказ оформлен используются данные события ORDER
Заказ.
Данные о последнем оформленном заказе передаются в специальный параметр сценария sequence_data.event.ecom_order_placed
.
Чтобы вывести заказ в сценарии Заказ оформлен, используйте код:
[% order_list = ssecquery('order_item', 'transaction.id', sequence_data.event.ecom_order_placed.transaction_id) %]
Заказ № [% sequence_data.event.ecom_order_placed.transaction_id %] от [% date.format(order_list[0].transaction.dt,"%d.%m.%Y %T") %]<br>
[% FOREACH item in order_list %]
<a href="[% item.product.url %]"><img src="[% item.product.picture[0] %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
Количество: [% item.product.qnt %] шт<br>
Стоимость: [% item.product.price*item.product.qnt %] руб.<br>
[% END %]
Протестировать отображение данных в письме можно только через запуск триггера. , — и мы включим режим тестирования для ваших адресов.
Заказ изменен
Для вывода данных о заказе в рассылках сценария Заказ изменен используются данные события ORDER
Заказ с параметром обновления "update": 1
. Обновление заказа передаётся через Sendsay API.
Данные о последнем изменённом зак азе передаются в специальный параметр сценария sequence_data.event.ecom_order_changed
.
Чтобы вывести заказ в сценарии Заказ изменен, используйте код:
[% statuses = ['Неизвестно','Оформлен','Оплачен','Принят в работу','Доставка','Присвоен трек-номер','Передан в доставку','Отправлен покупателю','Поступил в пункт-выдачи / передан курьеру','Получен','Отмена заказа','Возврат заказа','Обновление заказа'] %]
[% order_list = ssecquery('order_item', 'transaction.id', sequence_data.event.ecom_order_changed.transaction_id) %]
Заказ № [% sequence_data.event.ecom_order_changed.transaction_id %]<br>
Статус: [% statuses[$sequence_data.event.ecom_order_changed.transaction_status] %] <br>
Дата заказа [% order_list[0].transaction.dt %]<br>
Стоимость: [% order_list[0].transaction.sum %] руб.<br>
Стоимость доставки: [% order_list[0].order.delivery_price %] руб.<br>
Дата доставки: [% order_list[0].order.delivery_dt %] <br>
[% FOREACH item in order_list %]
<a href="[% item.product.url %]"><img src="[% item.product.picture[0] %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
Количество: [% item.product.qnt %] шт<br>
Стоимость: [% item.product.price*item.product.qnt %] руб.<br>
[% END %]
Протестировать отображение данных в письме можно только через запуск триггера. , — и мы включим режим тестирования для ваших адресов.
Снизилась цена на товар в корзине
Для вывода содержимого в рассылках сценария используются данные PRODUCT_PRICE_CHANGED
события Стоимость товара изменилась.
Если значение параметра price
в событии меньше значения old_price
, система сгенерирует триггерное событие о снижении цены на товар, который сохранён в корзине у пользователя.
Данные о товаре, для которого запускается сценарий, передаются в специальный параметр sequence_data.event.ecom_basket_down
. Если вы передаёте метаданные о товаре (название, ссылку и т. д.) в событии, их можно подставлять из данных событий.
Не рекомендуем использовать данные о товарах из YML-файла. Вероятно, файл может не успеть обновиться к тому моменту, как будет передано событие Стоимость товара изменилась.
Чтобы вывести товар в письмах сценария используйте код:
[% item = ssecquery('product_price_down', 'product.id', sequence_data.event.ecom_basket_down.product_id)[0] %]
<a href="[% item.product.url %]"><img src="[% item.product.picture[0] %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
<a href="[% item.product.url %]">Купить</a><br>
Протестировать отображение данных в письме можно только через запуск сценария. , — и мы включим режим тестирования для ваших адресов.
Снизилась цена на товар в избранном
Для вывода содержимого в рассылках сценария используются данные PRODUCT_PRICE_CHANGED
события Стоимость товара изменилась.
Если значение параметра price
в событии меньше значения old_price
, система сгенерирует триггерное событие о снижении цены на товар, который сохранён в избранном у пользователя.
Данные о товаре, для которого запускается сценарий, передаются в специальный параметр sequence_data.event.ecom_favorite_down
. Если вы передаёте в событии метаданные о товаре (название, ссылку и т. д.), их можно подставить из данных событий.
Не рекомендуем использовать данные о товарах из YML-файла. Вероятно, файл может не успеть обновиться к тому моменту, как будет передано событие Стоимость товара изменилась.
Чтобы вывести товар в письмах сценария, используйте код:
[% item = ssecquery('product_price_down', 'product.id', sequence_data.event.ecom_favorite_down.product_id)[0] %]
<a href="[% item.product.url %]"><img src="[% item.product.picture[0] %]"></a><br>
<a href="[% item.product.url %]">[% item.product.name %]</a><br>
Цена: [% item.product.price %] руб.<br>
<a href="[% item.product.url %]">Купить</a><br>
Протестировать отображение данных в письме можно только через запуск сценария. , — и мы включим режим тестирования для ваших адресов.
Товарные блоки
Идентификаторы товаров, полученные в результате работы нижеследующих функций, определяются автоматически на основе накопленных событий и продаж по всем пользователям. Данные о товаре (название, ссылка, стоимость и т.д.) для вывода в содержимом письма будут получены из вашего YML-файла, поэтому id товаров, передаваемых в событиях, должны совпадать с id товаров в YML-файле.
Самые продаваемые товары (по количеству)
[% bestseller_count = ssecquery('bestseller_count') %]
Ответ приходит в виде массива объектов. Разбираем с помощью FOREACH:
[% bestseller_count_list = ssecquery('bestseller_count') %]
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% bestseller_count_items = [] %]
[% FOREACH item IN bestseller_count_list %][% IF yml.${item[0]} %][% bestseller_count_items.push(yml.${item[0]}) %][% END %][% END %]
[% IF bestseller_count_items.size() > 0 %]
[% FOREACH item IN bestseller_count_items %]
<a href="[% item.url %]"><img src="[% IF item.picture[0] %][% item.picture[0] %][% ELSE %][% item.picture %][% END %]"></a><br>
<a href="[% item.url %]">[% item.name %]</a><br>
[% item.price %] руб.<br>
<a href="[% item.url %]">Купить</a><br>
[% LAST IF loop.count() == 6 %]
[% END %]
[% END %]
Функция поддерживает фильтры по любым доступным полям в данных о товаре. С фильтром по периоду расчета:
[% bestseller_count = ssecquery('bestseller_count','dt','>','current - 180 days') %]
Самые продаваемые товары в категории (по количеству)
С фильтром по категории:
[% bestseller_count = ssecquery('bestseller_count',,'category','in',['photo','video']) %]
С выбором последней категории, которую просматривал подписчик:
[% product_category_view_list = ssecquery('category_view') %]
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% bestseller_count_product_category_list = ssecquery('bestseller_count','product.category_id',product_category_view_list[0].product.category_id) %]
[% bestseller_count_product_category_item = [] %]
[% FOREACH item IN bestseller_count_product_category_list %][% IF yml.${item[0]} %][% bestseller_count_product_category_item.push(yml.${item[0]}) %][% END %][% END %]
[% IF bestseller_count_product_category_item.size() > 0 %]
[% FOREACH item IN bestseller_count_product_category_item %]
<a href="[% item.url %]"><img src="[% IF item.picture[0] %][% item.picture[0] %][% ELSE %][% item.picture %][% END %]"></a><br>
<a href="[% item.url %]">[% item.name %]</a><br>
[% item.price %] руб.<br>
<a href="[% item.url %]">Купить</a><br>
[% LAST IF loop.count() == 6 %]
[% END %]
[% END %]
Самые продаваемые товары (по выручке)
[% bestseller_money = ssecquery('bestseller_money') %]
Функция поддерживает фильтры по любым доступным полям в данных о товаре.
[% bestseller_money_list = ssecquery('bestseller_money') %]
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% bestseller_money_items = [] %]
[% FOREACH item IN bestseller_money_list %][% IF yml.${item[0]} %][% bestseller_money_items.push(yml.${item[0]}) %][% END %][% END %]
[% IF bestseller_money_items.size() > 0 %]
[% FOREACH item IN bestseller_money_items %]
<a href="[% item.url %]"><img src="[% IF item.picture[0] %][% item.picture[0] %][% ELSE %][% item.picture %][% END %]"></a><br>
<a href="[% item.url %]">[% item.name %]</a><br>
[% item.price %] руб.<br>
<a href="[% item.url %]">Купить</a><br>
[% LAST IF loop.count() == 6 %]
[% END %]
[% END %]
Самые продаваемые товары в категории (по выручке)
С выбором последней категории, которую просматривал подписчик:
[% product_category_view_list = ssecquery('category_view') %]
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% bestseller_money_product_category_list = ssecquery('bestseller_money','product.category_id',product_category_view_list[0].product.category_id) %]
[% bestseller_money_product_category_item = [] %]
[% FOREACH item IN bestseller_money_product_category_list %][% IF yml.${item[0]} %][% bestseller_money_product_category_item.push(yml.${item[0]}) %][% END %][% END %]
[% IF bestseller_money_product_category_item.size() > 0 %]
[% FOREACH item IN bestseller_money_product_category_item %]
<a href="[% item.url %]"><img src="[% IF item.picture[0] %][% item.picture[0] %][% ELSE %][% item.picture %][% END %]"></a><br>
<a href="[% item.url %]">[% item.name %]</a><br>
[% item.price %] руб.<br>
<a href="[% item.url %]">Купить</a><br>
[% LAST IF loop.count() == 6 %]
[% END %]
[% END %]
Самые просматриваемые товары
[% eyecatcher = ssecquery('eyecatcher') %]
Функция поддерживает фильтры по любым доступным полям в данных о товаре.
[% eyecatcher_list = ssecquery('eyecatcher') %]
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% eyecatcher_items = [] %]
[% FOREACH item IN eyecatcher_list %][% IF yml.${item[0]} %][% eyecatcher_items.push(yml.${item[0]}) %][% END %][% END %]
[% IF eyecatcher_items.size() > 0 %]
[% FOREACH item IN eyecatcher_items %]
<a href="[% item.url %]"><img src="[% IF item.picture[0] %][% item.picture[0] %][% ELSE %][% item.picture %][% END %]"></a><br>
<a href="[% item.url %]">[% item.name %]</a><br>
[% item.price %] руб.<br>
<a href="[% item.url %]">Купить</a><br>
[% LAST IF loop.count() == 6 %]
[% END %]
[% END %]
Самые просматриваемые товары в категории
С выбором последней категории, которую просматривал подписчик:
[% product_category_view_list = ssecquery('category_view') %]
[% external_extra("ССЫЛКА_НА_ВАШ_YML","method","get","ignore_error","1","format","yml") %]
[% eyecatcher_category_view_list = ssecquery('eyecatcher','product.category_id',product_category_view_list[0].product.category_id) %]
[% eyecatcher_category_view_item = [] %]
[% FOREACH item IN eyecatcher_category_view_list %][% IF yml.${item[0]} %][% eyecatcher_category_view_item.push(yml.${item[0]}) %][% END %][% END %]
[% IF eyecatcher_category_view_item.size() > 0 %]
[% FOREACH item IN eyecatcher_category_view_item %]
<a href="[% item.url %]"><img src="[% IF item.picture[0] %][% item.picture[0] %][% ELSE %][% item.picture %][% END %]"></a><br>
<a href="[% item.url %]">[% item.name %]</a><br>
[% item.price %] руб.<br>
<a href="[% item.url %]">Купить</a><br>
[% LAST IF loop.count() == 6 %]
[% END %]
[% END %]
Персонализация шаблона выпуска на основе данных из сегмента
Вы можете обратиться в шаблоне письма к данным событий, вызвавших попадание пользователя в сегмент, по которому будет отправляться рассылка.
Для этого в условии сегмента необходимо задать ключ и выбрать параметры события, данные которых будут сохранены — например, id заказа (transaction.id
) или id товара (product.id
).
Переменные сохраняются с ключом ssec_*
для каждой области события. По умолчанию сохраняются следующие параметры:
Событие | Параметр |
---|---|
Просмотр товара | ssec_product_view.product.id |
Сделал заказ | ssec_order_item.transaction.id, ssec_order_item.product.id |
Просматривал категорию | ssec_category_view.product.category_id |
Обновлял корзину | ssec_basket.product.id |
Искал товар | ssec_product_search.product.description |
Подписался на изменение цены | ssec_product_price.product.id |
Подписался на появление товара | ssec_product_isa.product.id |
Добавил товар в избранное | ssec_product_favorite.product.id |
Сделал предзаказ | ssec_product_preorder.product.id |
Для вызова данных в шаблоне письма используйте ключ вида anketa.member.FILTER.ключ
и сохранённые параметры. Данные придут в массиве.
Пример для вывода товаров по событию Сделал заказ:
В сегменте сохранён ключ one
, а также параметры ssec_order_item.transaction.id
и ssec_order_item.product.id
. Код вывода товаров:
[% orderid = "ssec_order_item.transaction.id" %]
[% productid = "ssec_order_item.product.id" %]
[% FOREACH t IN anketa.member.FILTER.one %]
[% oi = t.${orderid} %][% pi = t.${productid} %]
[% order_item_list = ssecquery('order_item', 'transaction.id', t.${orderid},'product.id', t.${productid}) %]
ВЫВОД ДАННЫХ
[% END %]
Пример для вывода данных по событию Просмотр товаров:
В сегменте сохранён ключ two
и параметр ssec_product_view.product.id
. Код вывода товаров:
[% productviewid = "ssec_product_view.product.id" %]
[% FOREACH t IN anketa.member.FILTER.two %]
[% oi = t.${productviewid} %]
[% product_list = ssecquery('product_view', 'product.id', oi) %]
ВЫВОД ДАННЫХ
[% END %]
Пример для вывода данных по событию Просмотр категории:
В сегменте сохранён ключ three
и параметр ssec_category_view.product.category_id
. Код вывода товаров:
[% categoryview_id = "ssec_category_view.product.category_id" %]
[% FOREACH t IN anketa.member.FILTER.three %]
[% oi = t.${categoryview_id} %]
[% categoryview_list = ssecquery('category_view', 'product.category_id', oi) %]
ВЫВОД ДАННЫХ
[% END %]
Тестирование
Протестировать отображение данных в шаблоне вы можете в режиме предпросмотра. Для этого:
- Создайте выпуск из шаблона, нажав «Создать выпуск».
- На шаге Аудитория укажите сегмент, для которого был сохранён ключ
save
. - В режиме редактирования письма перейдите в Предпросмотр и укажите адрес подписчика, подпадающего под условия сегмента.
Если хотите п роверить, как будет выглядеть письмо с данными при отправке рассылки, . В обращении укажите, что вам необходима помощь с тестированием шаблона в e-commerce сценариях.