Использование Liquid-шаблонов
Liquid-шаблоны значительно расширяют возможности персонализации в Pushwoosh, позволяя реализовывать сложную логику в дополнение к обычному использованию динамического контента.
Персонализация сообщений в Pushwoosh основана на тегах (данных пользователя). Pushwoosh предлагает множество тегов по умолчанию и пользовательских тегов. С их помощью вы можете указать имя пользователя, город, историю покупок и т. д., чтобы отправить более персонализированное сообщение, например: Привет, {First_name}, спасибо за заказ {item}.
Liquid-шаблоны добавляют больше логики в динамический контент. Например, если тег подписки пользователя содержит значение «free», вы можете отправить ему сообщение: «Получите скидку 10%».
Изменение содержания сообщения в соответствии с ID, поведением и предпочтениями пользователей — это самый эффективный способ повысить релевантность и добиться более впечатляющих результатов от ваших маркетинговых кампаний.
Синтаксис
Anchor link toШаблоны контента, основанные на Liquid от Shopify, используют комбинацию тегов, объектов и фильтров для загрузки динамического контента. Шаблоны контента позволяют получать доступ к определенным переменным из шаблона и выводить их данные, не зная ничего о самих данных.
Объекты
Anchor link toobjects
(объекты) определяют контент, который будет показан пользователю. objects
должны быть заключены в двойные фигурные скобки: {{ }}
Например, при персонализации сообщения отправьте {{Name}}
в его теле, чтобы добавить имена пользователей в контент. Имя пользователя (значение тега Name) заменит объект Liquid в сообщении, которое увидит пользователь.
Входные данные | Результат |
---|---|
Привет, {{Name}}! Мы рады, что вы вернулись! | Привет, Анна! Мы рады, что вы вернулись! |
Теги
Anchor link totags
(теги) создают логику и управляют потоком выполнения для шаблонов. Разделители из фигурных скобок и знаков процента {%
и %}
и текст, который они окружают, не создают видимого вывода при рендеринге шаблона. Это позволяет присваивать переменные и создавать условия или циклы, не показывая пользователю никакой логики Liquid.
Например, с помощью тега if
можно изменять язык сообщения в зависимости от того, какой язык установлен на устройстве пользователя:
Входные данные
{% if Language == 'fr' %}Salut!{% else %}Hello!{% endif %}
Результат (fr): Salut!
Результат (es): Hello!
Операторы тегов
Anchor link toОператор | Описание |
---|---|
== | равно |
!= | не равно |
> | больше чем |
< | меньше чем |
>= | больше или равно |
<= | меньше или равно |
or | логическое или |
and | логическое и |
contains | проверяет наличие подстроки в строке или массиве строк |
Фильтры
Anchor link tofilters
(фильтры) изменяют вывод объекта или переменной Liquid. Они используются внутри двойных фигурных скобок {{ }}
и при присваивании переменных и разделяются символом вертикальной черты |
. К одному выводу можно применить несколько фильтров; они применяются слева направо.
Входные данные | Результат |
---|---|
{{ Name | capitalize | prepend:"Здравствуйте, " }} | Здравствуйте, Анна |
Связанный контент
Anchor link toСвязанный контент (Connected Content) — это функция в Liquid-шаблонах, которая позволяет динамически извлекать и использовать данные из внешнего источника, например веб-сервиса, непосредственно в ваших шаблонах email-сообщений или push-уведомлений. Эта функция обеспечивает персонализацию в реальном времени, извлекая JSON-данные по указанному URL и сохраняя их в переменную, которую можно использовать в вашем контенте.
Синтаксис
Anchor link to{% connected_content url :save result %}
- url: URL-адрес, с которого нужно получить данные.
- :save: Директива, указывающая, куда следует сохранить полученные JSON-данные.
- result: Имя переменной для хранения полученных JSON-данных.
После того как данные получены и сохранены в указанной переменной, вы можете использовать эту переменную в контенте вашего шаблона.
Пример использования
Anchor link toРассмотрим сценарий, в котором у вас есть сервис купонов, возвращающий JSON-ответ с кодом купона. Сервис возвращает следующий JSON:
{ "code": "coupon code"}
Вы можете получить код купона и использовать его в своем шаблоне следующим образом:
{% connected_content https://example.com/couponwebservice.json :save result %}
Ваш промокод: {% result.code %}
Использование Liquid-шаблонов в сообщениях, отправляемых через API
Anchor link toИспользуйте синтаксис Liquid в ваших запросах createMessage
для реализации Liquid-шаблонов. Шаблоны доступны для параметра «content» запроса createMessage
, а также для любых других параметров, поддерживающих динамический контент, в частности, для специфичных для платформы параметров «title», «subtitle» и «image».
Используя шаблоны контента, вы можете либо указать данные в своих API-запросах (передавая параметр «template_bindings»), либо получить данные из значений тегов, хранящихся на устройствах пользователей (не используя параметр «template_bindings»). Таким образом, вы можете создавать push-кампании на основе данных о пользователях, содержащие чрезвычайно релевантный контент.
Чтобы определить логику шаблона с использованием тегов, имена которых содержат пробелы, используйте следующий прием:
Пример
Anchor link to{% capture my_tag %}{{My Tag}}{% endcapture %}{% if my_tag == 'value' %}Контент для отправки в этом случае{% else %}Контент для отправки в противном случае{% endif %}
Примеры использования Liquid-шаблонов
Anchor link toЗдесь вы найдете несколько примеров использования Liquid-шаблонов.
Мультиязычные push-уведомления
Anchor link toLiquid-шаблоны позволяют точно указать, на каком языке пользователи должны получать ваши push-уведомления. Посмотрите на простой пример API-запроса и сообщения, которое будет получено в зависимости от привязок шаблона (template bindings), использованных в запросе.
Входные данные Liquid
{% if Language == 'es' %}¡Hola!{% else %}Hello!{% endif %}
API-запрос
{ "request": { "application": "XXXXX-XXXXX", // Код приложения Pushwoosh "auth": "yxoPUlw.....IyEX4H", // API-ключ доступа из Панели управления Pushwoosh "notifications" : [ // параметры push-уведомления { "content": "{% raw %}{% if language == 'es' %}¡Hola!{% else %}hello!{% endif %}{% endraw %}", "template_bindings": { // опционально. Если template_bindings не передаются в запросе, используются значения тегов с устройства. "language" : "es" } } ] }}
Язык ‘es’: ¡Hola!
Язык ‘en’: Hello!
Предложение обновить подписку
Anchor link toПредложите вашим клиентам обновить подписку в зависимости от их текущего тарифного плана.
Входные данные Liquid
{% if Subscription == 'Basic' %} Перейдите на Silver, чтобы получить больше функций и круглосуточную поддержку.{% elsif Subscription == 'Silver' %} Перейдите на Gold, чтобы получить приоритетную поддержку и расширенные функции.{% else %} Пожалуйста, свяжитесь с вашим менеджером, чтобы продлить подписку.{% endif %}
API-запрос
{ "request": { "application": "XXXXX-XXXXX", // Код приложения Pushwoosh "auth": "yxoPUlw.....IyEX4H", // API-ключ доступа из Панели управления Pushwoosh "notifications" : [ // параметры push-уведомления { "content": "{% raw %}{% if Subscription == 'Basic' %}Перейдите на Silver, чтобы получить больше функций и круглосуточную поддержку.{% elsif Subscription == 'Silver' %}Перейдите на Gold, чтобы получить приоритетную поддержку и расширенные функции.{% else %}Пожалуйста, свяжитесь с вашим менеджером, чтобы продлить подписку. {% endif %}{% endraw %}", "template_bindings": { // опционально. Если template_bindings не передаются в запросе, используются значения тегов с устройства. "language" : "es" } } ] }}
Результат |
---|
Для пользователей с тарифным планом Basic: Перейдите на Silver, чтобы получить больше функций и круглосуточную поддержку. |
Для пользователей с тарифным планом Silver: Перейдите на Gold, чтобы получить приоритетную поддержку и расширенные функции. |
Для пользователей с другими тарифными планами (не Basic или Silver): Пожалуйста, свяжитесь с вашим менеджером, чтобы продлить подписку. |
Теги типа “Список”
Anchor link toШаблоны контента очень полезны для обработки тегов типа «Список» (List).
Размер переменной
Anchor link toОдин из возможных сценариев — доставка разного контента в зависимости от количества значений, содержащихся в теге. Например, вы можете предоставлять разные скидки клиентам с разным поведением. Допустим, у клиента есть товары в списке желаний (WishList) — поощряйте его к покупке с помощью наиболее подходящей скидки в зависимости от того, сколько товаров он собирается купить!
Входные данные Liquid
{% if WishList.size >= 3 %} Получите скидку 20% на следующую покупку!{% elsif WishList.size == 2 %} Получите скидку 10% на следующую покупку!{% else %} Эй, взгляните на новую верхнюю одежду!{% endif %}
API-запрос
{ "request": { "application": "XXXXX-XXXXX", // Код приложения Pushwoosh "auth": "yxoPUlw.....IyEX4H", // API-ключ доступа из Панели управления Pushwoosh "notifications" : [ // параметры push-уведомления { "content": "{% raw %}{% if WishList.size >= 3 %}Получите скидку 20% на следующую покупку!{% elsif WishList.size == 2 %}Получите скидку 10% на следующую покупку!{% else %}Эй, взгляните на новую верхнюю одежду!{% endif %}{% endraw %}", "template_bindings": { // опционально. Если template_bindings не передаются в запросе, используются значения тегов с устройства. "WishList" : ["Skinny Low Ankle Jeans", "Linen Trenchcoat", "High Waisted Denim Skirt", "Strappy Tiered Maxi Dress"] } } ] }}
Размер WishList >= 3 | ![]() |
Размер WishList = 2 | ![]() |
Переменная содержит
Anchor link toЕще один случай, который вам может понадобиться, — это работа со значениями тегов типа «Список» и доставка наиболее релевантного контента в зависимости от того, какие значения содержит тег.
Входные данные Liquid
{% if WishList contains 'Skinny Low Ankle Jeans' %} Получите скидку 20% на товары в вашем списке желаний!{% else %} Эй, взгляните на совершенно новые Skinny Low Ankle Jeans!{% endif %}
API-запрос
{ "request": { "application": "C90C0-0E786", "auth": "yxoPUlw.....IyEX4H", // API-ключ доступа из Панели управления Pushwoosh "notifications" : [ // параметры push-уведомления { "content": "{% raw %}{% if WishList contains 'Skinny Low Ankle Jeans' %}Получите скидку 20% на товары в вашем списке желаний!{% else %}Эй, взгляните на совершенно новые Skinny Low Ankle Jeans!{% endif %}{% endraw %}", "template_bindings": { // опционально. Если template_bindings не передаются в запросе, используются значения тегов с устройства. "WishList" : ["Skinny Low Ankle Jeans", "Linen Trenchcoat", "High Waisted Denim Skirt", "Strappy Tiered Maxi Dress"] } } ] }}
Переменная содержит данные | ![]() |
Переменная не содержит данные | ![]() |
Множественное число
Anchor link toИспользуя шаблоны контента, вы можете настраивать содержание сообщений в соответствии с поведением пользователей. Например, вы можете изменять текст сообщения, чтобы использовать слова во множественном числе, если тег типа «Список» содержит более одного значения.
Входные данные Liquid
Получите скидку 20% на товар{% if WishList.size > 1 %} ы в вашем списке желаний!{% else %} в вашем списке желаний!{% endif %}
API-запрос
{ "request": { "application": "C90C0-0E786", "auth": "yxoPUlw.....IyEX4H", // API-ключ доступа из Панели управления Pushwoosh "notifications" : [ // параметры push-уведомления { "content": "Получите скидку 20% на товар{% raw %}{% if WishList.size > 1 %}ы в вашем списке желаний!{% else %} в вашем списке желаний!{% endif %}{% endraw %}", "template_bindings": { // опционально. Если template_bindings не передаются в запросе, используются значения тегов с устройства. "WishList" : ["Skinny Low Ankle Jeans", "Linen Trenchcoat", "High Waisted Denim Skirt", "Strappy Tiered Maxi Dress"] } } ] }}
Множественное число | ![]() |
Единственное число | ![]() |
Часовой пояс
Anchor link toШаблон для часовых поясов преобразует дату и время в соответствии с указанным часовым поясом.
{{ MyDate | timezone: MyTimezone | date: \"%Y-%m-%d %H:%M\" }}
{ "request" : { "auth" : "3H9bk8w3.....Acge2RbupTB", // API-ключ доступа из Панели управления Pushwoosh "application" : "XXXXX-XXXXX", // Код приложения Pushwoosh "notifications" : [ // параметры push-уведомления { "content": "Текущая дата: {{ MyDate | timezone: MyTimezone | date: \"%Y-%m-%d %H:%M\" }}", "template_bindings": { // опционально. Если template_bindings не передаются в запросе, используются значения тегов с устройства. "MyDate" : "2019-07-23 15:00", "MyTimezone" : "Asia/Dubai" } } ] }}
Результат
