Переменные в профиле контакта и возможности Velocity
Самый простой и широко используемый пример персонализации – во время отправки автоматически производится замена переменной %FIRSTNAME% на имя клиента. Имя подставляется только в том случае, если соответствующее поле заполнено в карточке контакта.
По такому же принципу при помощи переменных можно автоматически подставлять следующие значения:
- фамилия получателя;
- город или страна;
- обращение к получателю, например, “уважаемая” или ”уважаемый” и комбинировать его с именем клиента;
- промокод или ссылку на qr код;
- имя закрепленного менеджера, адрес, емейл и контактный телефон магазина или заведения;
- кол-во активных бонусов на карте клиента.
Сообщения, содержащие переменные персонализации, используются как для автоматических, так и для массовых ручных рассылок.
Больше вариантов персонализации для использования в письмах можно найти в Личном кабинете → Настройки → Дополнительные поля. В дополнительных полях может содержаться абсолютно любая информация о клиенте, которую вы передаете в eSputnik по API.
Все указанные в допполях переменные можно использовать во всех доступных каналах (email, SMS и т.д.).
Данные из любого поля контакта могут быть добавлены в тело сообщения при помощи специального меню в редакторе eSputnik.
Подробнее об использовании переменных профиля >
Оптимизация использования переменных с функциями Velocity
Использование переменных из профиля контакта может быть сопряжено с некоторыми трудностями. Например, вам может понадобиться отображать разные блоки сообщений в зависимости от контактных данных. Или скрыть определенные блоки, если данные отсутствуют. Решить эту задачу помогут возможности velocity.
Пример использования
Персонализация сообщения в зависимости от данных о местоположении
Задача
В профиле контакта имеется дополнительное поле PERSONAL.LOCATION. В зависимости от данных в этом поле в письме нужно выводить разные блоки:
- Если PERSONAL.LOCATION = Мальдивы — показывать блок с описанием этой локации и не показывать блок с описанием Тосканы.
- Если PERSONAL.LOCATION = Тоскана — показывать блок с описанием этой локации и не показывать блок с описанием Мальдив.
- Если PERSONAL.LOCATION ≠ Мальдивы или Тоскана — не показывать ни один из этих блоков.
Решение
1. Нажмите на первую структуру в письме, в которой вы хотите отобразить динамический контент (Тоскана), и откройте редактор кода.
2. Найдите первый тег tr в коде структуры.
3. Над тегом tr объявите переменные, которые будут использоваться в письме. В нашем случае это
<!--%PERSONAL.LOCATION%-->
JSON
4. Добавьте в код структуры условный оператор, отвечающий за отображение этой структуры. Используйте следующий формат:
<!--#if($data.get('parameter name')=='value1')-->
JSON
В нашем случае оператор будет таким:
<!--#if($data.get('PERSONAL.LOCATION')=='Tuscany')-->
JSON
5. Кликните на вторую структуру в шаблоне, в которой нужно отобразить динамический контент (Мальдивы). Код этой структуры будет показан в редакторе кода.
6. Найдите первый тег tr в коде структуры.
7. Добавьте условный оператор, отвечающий за отображение этой структуры, в код структуры над тегом tr. Используйте следующий формат:
<!--##elseif($data.get('parameter name')=='value2')-->
JSON
В нашем случае оператор будет таким:
<!--#elseif($data.get('PERSONAL.LOCATION')=='Maldives')-->
JSON
8. Добавьте <!--#end--> оператор после закрывающего структурутега /tr.
Результат
Контакты с разными параметрами PERSONAL.LOCATION увидят такие варианты сообщения:
1) Пользователь с параметром Тоскана:
2) Пользователь с параметром Мальдивы:
3) Пользователь с пустым параметром PERSONAL.LOCATION:
Персонализация с Velocity-кодом
Использование переменных в теле сообщения позволит во многом унифицировать, если не все письмо, то его отдельные блоки.
Но у такого способа есть и недостатки. Он лишен вариативности: подстановка либо происходит, либо нет, без каких-то дополнительных возможностей управлять контентом.
Иногда из-за отсутствия нескольких параметров в письме теряется ценность целого блока. Если сведений о контакте не хватает, то подстановка данных не произойдет. Например, в блоке, где должен быть выведен промокод и QR-код, могут быть пропуски:
Выходом будет скрыть целый блок сообщения и выводить его лишь в том случае, когда доступны все необходимые компоненты.
Для этого вам необходимо использовать Velocity. Это язык, с помощью которого можно подставлять данные в письмо, если они не хранятся в карточке клиента, а передаются в событии.
В рамках нашего примера потребуется разобраться в применении оператора выбора if else и операторов сравнения.
Нужно объявить использование дополнительных полей внутри тега комментария либо в начале письма, либо непосредственно в блоке, где вы будете задавать условия.
В нашем случае блок будет выводится, только если в полях контакта есть и QR-код, и персональный промокод. Если нет хотя бы одного из двух составляющих, то этот блок вообще не выведется в письме. Для этого необходимо обратиться к дополнительным полям и проверить их значения. Выделите нужную структуру и перейдите в режим редактирования кода письма:
В примере нужно проверить дополнительные поля PERSONAL.PROMOCODE и PERSONAL.QRCODE. Их и необходимо вывести в письмо в закомментированном виде, таким образом проверяя, что в карточке контакта эти поля заполнены.
<!--//Объявление использования дополнительных полей PERSONAL.PROMOCODE и PERSONAL.QRCODE--> <!--%PERSONAL.PROMOCODE%--> <!--%PERSONAL.QRCODE%--> <!--//Проверяем, что значения проверяемых полей не равняются пустой строке--> <!--#if($!data.get('PERSONAL.PROMOCODE')!='' and $!data.get('PERSONAL.QRCODE')!='')--> … html код структуры <!--#end-->
Apache
Затем добавляем наше условие, чтобы получилось так, как показано на скриншоте:
#end ставится для того, чтобы указать, где заканчивается проверка условия.
Скрывать блоки в случае отсутствия данных – не единственное применение оператора if else.
Рассмотрим несколько примеров взаимодействия переменных персонализации и Velocity:
Чтобы проверить, заполнено ли поле контакта с именем.
<!-- для вывода имени при помощи персонализации --> <!--%FIRSTNAME%--> <!--//Проверяем, что значения поле FIRSTNAME не равняются пустой строке--> #if($data.get('FIRSTNAME') and $data.get('FIRSTNAME')!='') <!--//Если поле не пустое, выводим: Здравствуйте, Имя--> Здравствуйте, $!data.get('FIRSTNAME'). #else <!--//Если поле не содержит данных, выводим только: Здравствуйте. --> Здравствуйте. #end
Apache
Осуществляем проверку принадлежности email адреса к домену @gmail.com и отображает соответствующий контент в письме.
<!--%EMAIL%--> <!--#if($!data.get('EMAIL').contains('@gmail.com'))--> <!--//html код для получателей, у кого почта в доменной зоне gmail.com--> <!--#else--> <!-//html код для остальных получателей--> <!--#end-->
Apache
- Проверить пол контакта и сформировать корректное обращение к получателю.
<!-- //Объявляем использование поля, где указан пол контакта --> <!-- %PERSONAL.GENDER% --> <!-- //Проверяем, не пустое ли поле --> <!--#if($data.get('PERSONAL.GENDER').equals(''))--> <!--//Если пол не указан, не используем обращение--> <!--#set($refBy='. ')--> <!--//Проверяем, если получатель мужчина--> <!--#elseif($data.get('PERSONAL.GENDER').equalsIgnoreCase('м'))--> <!--//Подставляем: уважаемый--> <!--#set($refBy=', уважаемый')--> <!-- //Проверяем, если получатель женщина--> <!--#elseif($data.get('PERSONAL.GENDER').equalsIgnoreCase('ж'))--> <!--//Подставляем: уважаемая--> <!--#set($refBy=', уважаемая')--> <!--#end-->
Apache
В письме будет так:
Персонализация: | Здравствуйте$!refBy %FIRSTNAME% |
Результаты подстановки в письме: | |
для мужчины: | Здравствуйте, уважаемый Алексей |
для женщины: | Здравствуйте, уважаемая Виктория |
пол не указан: | Здравствуйте. |
Таким образом, комбинируя данные пользователя из карточки контакта и применяя оператор выбора if else, можно гибко управлять содержимым отправляемого сообщения.
Более высокого уровня персонализации писем можно добиться, используя товарные рекомендации. Что это и как их настроить, читайте здесь.