Исходный код вики Персонализация рассылок через шаблонизатор
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | (% class="lead" %) | ||
| 2 | Шаблонизатор позволяет кастомизировать текст сообщений (email, SMS, push) в [[массовых рассылках>>doc:Main.Using.Smart_Communications.Mass_mailings.WebHome]] и [[кампаниях>>doc:Main.Using.Smart_Communications.Campaign_list.WebHome]]. Каждый клиент увидит в сообщении информацию, которая относится именно к нему. | ||
| 3 | |||
| 4 | (% class="box successmessage" %) | ||
| 5 | ((( | ||
| 6 | Шаблонизатор построен на базе языка шаблонов Twig. В данной статье описаны наиболее часто используемые конструкции. Полную информацию о возможностях шаблонизатора см. на [[сайте проекта Twig>>https://twig.symfony.com/doc/3.x/]]. | ||
| 7 | ))) | ||
| 8 | |||
| 9 | **Содержание:** | ||
| 10 | |||
| 11 | {{toc depth="4" start="2"/}} | ||
| 12 | |||
| 13 | == Персонализация == | ||
| 14 | |||
| 15 | Персонализация позволяет адаптировать рассылки под каждого клиента. [[Loymax Smart Communications>>doc:Main.Using.Smart_Communications.WebHome]] адаптирует текст сообщения и строит актуальное для клиента предложение, при необходимости выбирая подходящий момент отправки сообщения. | ||
| 16 | **Пример:** | ||
| 17 | В рамках одной и той же рассылки по рекомендуемым товарам: | ||
| 18 | |||
| 19 | * Один клиент получит сообщение (на основе истории покупок) с предложением купить сменные лезвия для бритвы и с блоком о том, что в торговых точках его города действует акция "3 по цене 2". | ||
| 20 | * Другой клиент получит сообщение (на основе истории покупок) с предложением купить зарядное устройство и с промо-блоком о том, что в его городе открылся новый пункт выдачи заказов. | ||
| 21 | |||
| 22 | В Loymax Smart Communications есть инструменты для персонализации: | ||
| 23 | |||
| 24 | * Конструкции шаблонизатора; | ||
| 25 | * [[Товарные рекомендации>>doc:Main.Using.Smart_Communications.Recommendations.WebHome]]. | ||
| 26 | |||
| 27 | == Шаблонизатор == | ||
| 28 | |||
| 29 | Шаблонизатор включает в себя: | ||
| 30 | |||
| 31 | * [[Переменные>>doc:||anchor="H41F43544043543C43543D43D44B435432A0SmartCommunications"]] — данные о клиенте, его чеках и продуктах в чеке. Например, с помощью переменной можно вывести в текст сообщения имя клиента; | ||
| 32 | * [[Макросы>>doc:||anchor="H41C43043A44043E44144B"]] — функции, позволяющие вывести информацию о промокодах, опросах и т. д.; | ||
| 33 | * [[Управляющие конструкции>>doc:||anchor="H42343F44043043243B44F44E44943843543A43E43D44144244044343A446438438"]] — циклы, условия, фильтры. | ||
| 34 | |||
| 35 | Пример использования переменной в тексте сообщения: | ||
| 36 | |||
| 37 | (% class="box" %) | ||
| 38 | ((( | ||
| 39 | ##Добрый день, ~{~{client.properties.full_name}}.## | ||
| 40 | ))) | ||
| 41 | |||
| 42 | При отправке сообщения переменная будет заменена на значение, например: | ||
| 43 | |||
| 44 | (% class="box" %) | ||
| 45 | ((( | ||
| 46 | Добрый день, Иванов Иван Иванович. | ||
| 47 | ))) | ||
| 48 | |||
| 49 | == Переменные в Smart Communications == | ||
| 50 | |||
| 51 | Переменные позволяют подставлять в текст сообщения (а для писем — и в тему письма) данные: | ||
| 52 | |||
| 53 | * Из [[профиля клиента>>doc:Main.Using.Smart_Communications.Customers.All_clients.WebHome||anchor="Profile"]]: | ||
| 54 | ** Атрибуты и метрики клиента; | ||
| 55 | ** Ссылки для [[управления подпиской>>doc:Main.Using.Smart_Communications.Mass_mailings.Mailing_Loyalty_SC.WebHome]]; | ||
| 56 | ** Атрибуты и содержимое из последнего чека и/или заказа; | ||
| 57 | ** Даты; | ||
| 58 | ** И любые другие атрибуты; | ||
| 59 | * О чеках клиента; | ||
| 60 | * О продуктах в чеке; | ||
| 61 | * О категории продукта. | ||
| 62 | |||
| 63 | Переменные бывают: | ||
| 64 | |||
| 65 | * [[Системные>>doc:||anchor="H42143844144243543C43D44B43543F43544043543C43543D43D44B435"]] — служат для доступа к системным полям; | ||
| 66 | * [[Пользовательские>>doc:||anchor="H41F43E43B44C43743E43243044243543B44C44143A43843543F43544043543C43543D43D44B435"]] — для доступа к пользовательским полям. Подробнее о полях можно прочитать [[здесь>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome]]. | ||
| 67 | |||
| 68 | Формат записи переменной: | ||
| 69 | |||
| 70 | (% class="box" %) | ||
| 71 | ((( | ||
| 72 | ##~{~{наименование_переменной}}## | ||
| 73 | ))) | ||
| 74 | |||
| 75 | === Системные переменные === | ||
| 76 | |||
| 77 | В Smart Communications доступны следующие системные переменные: | ||
| 78 | |||
| 79 | (% class="table-bordered" %) | ||
| 80 | |=((( | ||
| 81 | Переменная | ||
| 82 | )))|=((( | ||
| 83 | Назначение | ||
| 84 | ))) | ||
| 85 | |((( | ||
| 86 | ##~{~{client.properties.full_name}}## | ||
| 87 | )))|((( | ||
| 88 | Полное имя клиента | ||
| 89 | ))) | ||
| 90 | |((( | ||
| 91 | ##~{~{client.properties.last_name}}## | ||
| 92 | )))|((( | ||
| 93 | Фамилия клиента | ||
| 94 | ))) | ||
| 95 | |((( | ||
| 96 | ##~{~{client.properties.first_name}}## | ||
| 97 | )))|((( | ||
| 98 | Имя клиента | ||
| 99 | ))) | ||
| 100 | |((( | ||
| 101 | ##~{~{client.properties.middle_name}}## | ||
| 102 | )))|((( | ||
| 103 | Отчество клиента | ||
| 104 | ))) | ||
| 105 | |((( | ||
| 106 | ##~{~{client.properties.register_date}}## | ||
| 107 | )))|((( | ||
| 108 | Дата регистрации клиента | ||
| 109 | ))) | ||
| 110 | |((( | ||
| 111 | ##~{~{client.properties.city}}## | ||
| 112 | )))|((( | ||
| 113 | Город клиента | ||
| 114 | ))) | ||
| 115 | |((( | ||
| 116 | ##~{~{client.properties.zip}}## | ||
| 117 | )))|((( | ||
| 118 | Индекс клиента | ||
| 119 | ))) | ||
| 120 | |((( | ||
| 121 | ##~{~{client.properties.email}}## | ||
| 122 | )))|((( | ||
| 123 | E-mail клиента | ||
| 124 | ))) | ||
| 125 | |((( | ||
| 126 | ##~{~{client.properties.password}}## | ||
| 127 | )))|((( | ||
| 128 | Пароль клиента | ||
| 129 | ))) | ||
| 130 | |((( | ||
| 131 | ##~{~{client.properties.phone}}## | ||
| 132 | )))|((( | ||
| 133 | Номер телефона клиента | ||
| 134 | ))) | ||
| 135 | |((( | ||
| 136 | ##~{~{client.properties.order_cnt}}## | ||
| 137 | )))|((( | ||
| 138 | Количество чеков клиента | ||
| 139 | ))) | ||
| 140 | |((( | ||
| 141 | ##~{~{client.properties.order_sum}}## | ||
| 142 | )))|((( | ||
| 143 | Общая сумма всех чеков клиента | ||
| 144 | ))) | ||
| 145 | |((( | ||
| 146 | ##~{~{client.orders.first.date}}## | ||
| 147 | )))|((( | ||
| 148 | Дата первого чека клиента | ||
| 149 | ))) | ||
| 150 | |((( | ||
| 151 | ##~{~{client.orders.last.date}}## | ||
| 152 | )))|((( | ||
| 153 | Дата последнего чека клиента | ||
| 154 | ))) | ||
| 155 | |((( | ||
| 156 | ##~{~{client.orders.last.number}}## | ||
| 157 | )))|((( | ||
| 158 | Номер последнего чека | ||
| 159 | ))) | ||
| 160 | |((( | ||
| 161 | ##~{~{client.properties.rating}}## | ||
| 162 | )))|((( | ||
| 163 | Скоринг клиента | ||
| 164 | ))) | ||
| 165 | |((( | ||
| 166 | ##~{~{client.links.profile}}## | ||
| 167 | )))|((( | ||
| 168 | Ссылка на профиль клиента на Платформе | ||
| 169 | ))) | ||
| 170 | |((( | ||
| 171 | ##~{~{client.links.unsubscribe}}## | ||
| 172 | )))|((( | ||
| 173 | Ссылка на [[управление подписками>>doc:Main.Using.Smart_Communications.Mass_mailings.Mailing_Loyalty_SC.WebHome]] | ||
| 174 | ))) | ||
| 175 | |((( | ||
| 176 | ##~{~{client.links.web_version}}## | ||
| 177 | )))|((( | ||
| 178 | Ссылка на веб-версию письма | ||
| 179 | ))) | ||
| 180 | |((( | ||
| 181 | ##~{~{client.properties.bonus_active}}## | ||
| 182 | )))|((( | ||
| 183 | Количество активных бонусов | ||
| 184 | ))) | ||
| 185 | |((( | ||
| 186 | ##~{~{client.properties.bonus_expect_activate}}## | ||
| 187 | )))|((( | ||
| 188 | Количество бонусов, которые ожидают активации | ||
| 189 | ))) | ||
| 190 | |((( | ||
| 191 | ##~{~{client.properties.bonus_expect_deactivate}}## | ||
| 192 | )))|((( | ||
| 193 | Количество бонусов, которые ожидают деактивации | ||
| 194 | ))) | ||
| 195 | |((( | ||
| 196 | ##~{~{client.properties.bonus_expect_deactivate_date}}## | ||
| 197 | )))|((( | ||
| 198 | Дата деактивации бонусов | ||
| 199 | ))) | ||
| 200 | |((( | ||
| 201 | ##~{~{client.properties.bonus_expect_deactivate_next}}## | ||
| 202 | )))|((( | ||
| 203 | Количество бонусов, которые будут деактивированы в ближайшее время | ||
| 204 | ))) | ||
| 205 | |((( | ||
| 206 | ##~{~{client.eventContext.<код_поля>}}## | ||
| 207 | )))|((( | ||
| 208 | Данные из [[контекста события>>doc:Main.Using.Smart_Communications.Events.WebHome||anchor="H41A43E43D44243543A44144244143E43144B442438439"]] | ||
| 209 | ))) | ||
| 210 | |((( | ||
| 211 | ##~{~{client.containers.webcart.items}}## | ||
| 212 | )))|((( | ||
| 213 | Содержимое корзины | ||
| 214 | ))) | ||
| 215 | |##~{~{client.properties.eorder_cnt}}##|Количество заказов клиента | ||
| 216 | |##~{~{client.properties.eorder_sum}}##|Общая сумма всех заказов клиента | ||
| 217 | |##~{~{client.eorders.first.date}}##|Дата первого заказа клиента | ||
| 218 | |##~{~{client.eorders.last.date}}##|Дата последнего заказа клиента | ||
| 219 | |##~{~{client.eorders.first.number}}##|Номер первого заказа клиента | ||
| 220 | |##~{~{client.eorders.last.number}}##|Номер последнего заказа клиента | ||
| 221 | |##~{~{client.eorders.first.<код поля>}}##|Значение атрибута в первом заказе клиента | ||
| 222 | |##~{~{client.eorders.last.<код поля>}}##|Значение атрибута в последнем заказе клиента | ||
| 223 | |##~{~{client.eorders.first.items}}##|Содержимое первого заказа | ||
| 224 | |##~{~{client.eorders.last.items}}##|Содержимое последнего заказа | ||
| 225 | |||
| 226 | === Пользовательские переменные === | ||
| 227 | |||
| 228 | Доступ к пользовательским полям **Клиент/Чек/Строка чека/Категория продукта** осуществляется по их коду с помощью конструкции вида ##~{~{client.properties.<код_поля>}}##. Например: | ||
| 229 | |||
| 230 | (% class="box" %) | ||
| 231 | ((( | ||
| 232 | ##~{~{client.properties.eye_color}}## | ||
| 233 | ))) | ||
| 234 | |||
| 235 | Узнать код поля можно в разделе **Настройки >** [[Поля>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome]] во вкладках **Клиенты/Транзакции/Строки транзакций/Категории**.** **Например, код атрибута чека "Статус оплаты" — "payment_status_name". | ||
| 236 | |||
| 237 | {{lightbox image="Code_example.png"/}} | ||
| 238 | |||
| 239 | Для формирования переменной необходимо использовать формат: | ||
| 240 | |||
| 241 | * ##~{~{client.properties.<код поля>}}## — значение атрибута в **профиле** клиента; | ||
| 242 | * ##~{~{client.orders.first.<код поля>}}## — значение атрибута в **первом чеке** клиента; | ||
| 243 | * ##~{~{client.orders.last.<код поля>}}## — значение атрибута в **последнем чеке** клиента. | ||
| 244 | |||
| 245 | Для вывода значений атрибутов продуктов в [[брошенной корзине>>doc:Main.Using.Smart_Communications.Campaign_list.Abandoned_cart.WebHome]], первом и последнем чеке, категории продукта необходимо использовать [[(% class="wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink wikiinternallink" %)циклы>>doc:||anchor="H42643843A43B44B"]](%%). | ||
| 246 | |||
| 247 | === Значение по умолчанию === | ||
| 248 | |||
| 249 | Для атрибутов с типом **строка** можно установить значение по умолчанию. Это значение будет выведено в тексте сообщения, если атрибут не заполнен. Например, в сообщении можно обратиться к клиенту по имени, а если имя неизвестно — использовать значение по умолчанию: | ||
| 250 | |||
| 251 | (% class="box" %) | ||
| 252 | ((( | ||
| 253 | ##~{~{client.properties.full_name|default ('Уважаемый клиент')}## | ||
| 254 | ))) | ||
| 255 | |||
| 256 | == Макросы == | ||
| 257 | |||
| 258 | Макросы — это небольшие команды, которые позволяют выполнять заскриптованные действия в Системе. Например, макрос ##~{~{client.promocode('группа промокода')}}## находит и возвращает промокод из группы. | ||
| 259 | |||
| 260 | === Системные макросы === | ||
| 261 | |||
| 262 | В Smart Communications доступны макросы: | ||
| 263 | |||
| 264 | (% class="table-bordered" %) | ||
| 265 | |=((( | ||
| 266 | Макрос | ||
| 267 | )))|=((( | ||
| 268 | Назначение | ||
| 269 | ))) | ||
| 270 | |((( | ||
| 271 | ##~{~{"now"|date('формат')}}## | ||
| 272 | )))|((( | ||
| 273 | Текущая дата | ||
| 274 | ))) | ||
| 275 | |((( | ||
| 276 | ##~{~{client.promocode('группа промокода')}}## | ||
| 277 | )))|((( | ||
| 278 | Выдать промокод клиенту из группы промокодов | ||
| 279 | ))) | ||
| 280 | |((( | ||
| 281 | ##~{~{client.last_promocode('группа промокода')}}## | ||
| 282 | )))|((( | ||
| 283 | Последний выданный клиенту промокод из группы | ||
| 284 | ))) | ||
| 285 | |((( | ||
| 286 | ##~{~{client.last_campaign_promocode('группа промокода')}}## | ||
| 287 | )))|((( | ||
| 288 | Последний промокод из группы, выданный клиенту в рамках этой кампании | ||
| 289 | ))) | ||
| 290 | |((( | ||
| 291 | ##~{~{client.template_constant('наименование')}}## | ||
| 292 | )))|((( | ||
| 293 | Константа региона | ||
| 294 | ))) | ||
| 295 | |((( | ||
| 296 | ##~{~{client.poll('POLL-идентификатор_опроса')}}## | ||
| 297 | )))|((( | ||
| 298 | Ссылка на опрос | ||
| 299 | ))) | ||
| 300 | |((( | ||
| 301 | ##~{~{client.loyaltyCard.lastActive.number}}## | ||
| 302 | )))|((( | ||
| 303 | Информация по активной карте лояльности клиента | ||
| 304 | ))) | ||
| 305 | |||
| 306 | === Формат дат === | ||
| 307 | |||
| 308 | Поля с типом **дата** можно выводить в разном формате. Для обозначения формата можно использовать любые комбинации следующих значений: | ||
| 309 | |||
| 310 | * Год: | ||
| 311 | ** y — 2 цифры (например, 97, 20); | ||
| 312 | ** Y — 4 цифры (например, 1997, 2020); | ||
| 313 | * m — месяц (в формате от 01 до 12); | ||
| 314 | * d — день (в формате от 01 до 31); | ||
| 315 | * h — час; | ||
| 316 | * i — минута; | ||
| 317 | * s — секунда. | ||
| 318 | |||
| 319 | **Пример 1. Вывод даты в сообщении** | ||
| 320 | |||
| 321 | При заданном формате 'Y-m-d' дата будет выведена в виде '2020-10-20'. При формате 'd.m.Y h:i' — в виде '20.10.2020 11:56'. | ||
| 322 | |||
| 323 | Пример использования макроса **Благодарность клиенту за последний заказ**: | ||
| 324 | |||
| 325 | (% class="box" %) | ||
| 326 | ((( | ||
| 327 | ##Спасибо за заказ от ~{~{client.orders.last.date|date('d.m.Y')}}!## | ||
| 328 | ))) | ||
| 329 | |||
| 330 | Клиент получит сообщение со строкой вида: | ||
| 331 | |||
| 332 | (% class="box" %) | ||
| 333 | ((( | ||
| 334 | Спасибо за заказ от 29.06.2020! | ||
| 335 | ))) | ||
| 336 | |||
| 337 | **Пример 2. Вывод даты на несколько дней позже текущей** | ||
| 338 | |||
| 339 | Чтобы вывести в сообщение дату, которая на несколько дней позже текущей, используйте такой макрос: | ||
| 340 | |||
| 341 | (% class="box" %) | ||
| 342 | ((( | ||
| 343 | ##~{~{"now"|date_modify('+1 day')|date('Y-m-d')}}## | ||
| 344 | ))) | ||
| 345 | |||
| 346 | В сообщении для клиента будет выведена завтрашняя дата. | ||
| 347 | |||
| 348 | **Пример 3. Вывод даты —** **через месяц после даты регистрации клиента** | ||
| 349 | |||
| 350 | Вывод даты +1 месяц от даты регистрации клиента. | ||
| 351 | |||
| 352 | (% class="box" %) | ||
| 353 | ((( | ||
| 354 | ##~{~{client.properties.register_date|date_modify('+1 month')|date('Y-m-d')}}## | ||
| 355 | ))) | ||
| 356 | |||
| 357 | === Склонение существительных === | ||
| 358 | |||
| 359 | Шаблонизатор сообщений позволяет автоматически образовывать множественное число русских существительных, ставить имена в указанную падежную форму и производить другие преобразования. В таблице ниже приведены выражения, которые можно для этого использовать. | ||
| 360 | |||
| 361 | В качестве подставляемых значений (аргументов выражений) можно использовать как конкретные числа/строки (при этом строки нужно обязательно заключать в кавычки), так и переменные или значения [[полей>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome]] объектов. | ||
| 362 | |||
| 363 | (% class="table-bordered" %) | ||
| 364 | |=(% style="text-align: center;" %)Выражение|=(% style="text-align: center;" %)Аргументы|=(% style="text-align: center;" %)Пример | ||
| 365 | |((( | ||
| 366 | ##~{~{ <текст>|plural(<число>) }}## | ||
| 367 | |||
| 368 | Преобразует **текст** в форму множественного числа, соответствующую указанному **числу.** | ||
| 369 | )))|((( | ||
| 370 | * **Текст** — строка, для которой нужно образовать множественное число. | ||
| 371 | Существительное или прилагательное + существительное. | ||
| 372 | * **Число** — число, для которого нужно образовать форму множественного числа. | ||
| 373 | )))|((( | ||
| 374 | Предположим, что персональные предложения клиентов записываются в мультивитрину с кодом ##offers##. В таком случае код ниже... | ||
| 375 | |||
| 376 | {{code language="twig"}} | ||
| 377 | {% set offers_count = client.multimarts.offers.items|length %} | ||
| 378 | Для вас {{ 'персональное предложение'|plural(offers_count) }}. | ||
| 379 | {{/code}} | ||
| 380 | |||
| 381 | ...даст такой результат в зависимости от числа записей в мультивитрине: | ||
| 382 | |||
| 383 | {{box}} | ||
| 384 | Для вас 8 персональных предложений. | ||
| 385 | Для вас 3 персональных предложения. | ||
| 386 | Для вас 1 персональное предложение. | ||
| 387 | {{/box}} | ||
| 388 | ))) | ||
| 389 | |((( | ||
| 390 | ##~{~{ <имя>|name(<пол>, <падеж>) }}## | ||
| 391 | |||
| 392 | Преобразует **имя** в форму указанного **падежа**. | ||
| 393 | )))|((( | ||
| 394 | * **Имя** — имя, которое требуется поставить в указанный падеж. Можно передавать как полное, так и неполное имя. Для наиболее надёжного результата рекомендуем порядок фамилия, имя, отчество. | ||
| 395 | * **Пол** — пол, в соответствии с которым требуется просклонять имя. Допустимые варианты: ##m##, ##f##, ##null##. | ||
| 396 | Необязательный аргумент. | ||
| 397 | Если аргумент пропущен или передано значение ##null##, шаблонизатор определит пол автоматически. | ||
| 398 | * **Падеж** — падеж, в который требуется поставить имя. | ||
| 399 | Допустимые варианты: ##именительный##, ##родительный##, ##дательный##, ##винительный##, ##творительный##, ##предложный##. | ||
| 400 | )))|((( | ||
| 401 | Для клиента с полным именем "Петрова Наталья" поздравление с достижением может выглядеть так: | ||
| 402 | |||
| 403 | {{code language="twig"}} | ||
| 404 | {% set gender = client.properties.sex %} | ||
| 405 | О {{ client.properties.full_name|name(gender, 'предложный') }} | ||
| 406 | будут слагать легенды! | ||
| 407 | {{/code}} | ||
| 408 | |||
| 409 | {{box}} | ||
| 410 | О Петровой Наталье будут слагать легенды! | ||
| 411 | {{/box}} | ||
| 412 | ))) | ||
| 413 | |((( | ||
| 414 | ##~{~{ <число>|ordinal(<пол>) }}## | ||
| 415 | |||
| 416 | Образует от **числа** порядковое числительное. | ||
| 417 | )))|((( | ||
| 418 | * **Число** — число, от которого требуется образовать порядковое числительное. | ||
| 419 | * **Пол** — пол, в который требуется поставить порядковое числительное. Допустимые варианты: ##m##, ##f##, ##n##. | ||
| 420 | )))|((( | ||
| 421 | Предположим, что в Компании действует программа лояльности, имеющая несколько уровней, и текущий уровень клиента записывается в пользовательское поле ##tier##. В таком случае поздравление с переходом на новый уровень может выглядеть так: | ||
| 422 | |||
| 423 | {{code language="twig"}} | ||
| 424 | {% set tier = client.properties.tier %} | ||
| 425 | Поздравляем! Вы вышли на {{ tier|ordinal('m') }} уровень. | ||
| 426 | {{/code}} | ||
| 427 | |||
| 428 | {{box}} | ||
| 429 | Поздравляем! Вы вышли на второй уровень. | ||
| 430 | {{/box}} | ||
| 431 | ))) | ||
| 432 | |((( | ||
| 433 | ##~{~{ <число>|money(<валюта>) }}## | ||
| 434 | |||
| 435 | Образует от **числа** сумму в указанной **валюте**. | ||
| 436 | )))|((( | ||
| 437 | * **Число** — число, которое требуется преобразовать в денежный формат. | ||
| 438 | * **Валюта** — требуемая валюта. Допустимые варианты: ##₽, $, €, £##. | ||
| 439 | )))|((( | ||
| 440 | Вывод в сообщение суммы скидки по последнему заказу клиента может выглядеть так: | ||
| 441 | |||
| 442 | {{code language="twig"}} | ||
| 443 | {% set discount = client.eorders.last.payment_discount %} | ||
| 444 | Сумма скидки по заказу составила {{ discount|money('₽') }}. | ||
| 445 | {{/code}} | ||
| 446 | |||
| 447 | {{box}} | ||
| 448 | Сумма скидки по заказу составила 932 рубля 50 копеек. | ||
| 449 | {{/box}} | ||
| 450 | |||
| 451 | В рамках кампании вы также можете обращаться к заказу, [[вызвавшему срабатывание>>||anchor="H41844143F43E43B44C43743E43243043D43843543443043D43D44B44543843743A43E43D44243543A441442430442440438433433435440430"]] триггера. | ||
| 452 | ))) | ||
| 453 | |||
| 454 | == Вставка переменной или макроса в сообщение == | ||
| 455 | |||
| 456 | В редакторах для всех видов сообщений есть кнопка с изображением флажка, при нажатии на которую раскрывается список доступных системных переменных и макросов: | ||
| 457 | |||
| 458 | |(% style="border-color:white; text-align:center" %){{lightbox image="Editor.png"/}} | ||
| 459 | |||
| 460 | Для вставки пользовательской переменной необходимо напечатать ее вручную. | ||
| 461 | |||
| 462 | == Предварительный просмотр == | ||
| 463 | |||
| 464 | |(% style="border-color:white; width:1115px" %)((( | ||
| 465 | Чтобы посмотреть, как будет выглядеть сообщение с переменными и макросами, замененными на их значение, используйте кнопку **Предпросмотр сообщения**. | ||
| 466 | )))|(% style="border-color:white; width:324px" %){{lightbox image="Preview.png"/}} | ||
| 467 | |(% style="border-color:white; width:1115px" %)((( | ||
| 468 | Можно увидеть предпросмотр письма для конкретного клиента. Для этого в поле **Клиент** необходимо ввести Фамилию/Имя/Номер телефона/email/идентификатор клиента (local_id). Чтобы результаты поиска были однозначны, рекомендуется искать по номеру телефона/email/локальному идентификатору клиента. | ||
| 469 | |||
| 470 | (% class="box infomessage" %) | ||
| 471 | ((( | ||
| 472 | Поиск в поле **Клиент **— регистрозависимый. Имя и фамилию клиента необходимо вводить с заглавной буквы. | ||
| 473 | ))) | ||
| 474 | )))|(% style="border-color:white; width:324px" %){{lightbox image="Client3.png"/}} | ||
| 475 | |||
| 476 | == Управляющие конструкции == | ||
| 477 | |||
| 478 | С помощью управляющих конструкций можно создавать более сложные шаблоны на основе переменных и макросов. Управляющие конструкции включают в себя for-циклы, условия (if/elseif/else) и фильтры. Управляющие конструкции выводятся внутри блоков {% ... %}. | ||
| 479 | |||
| 480 | === Переменные === | ||
| 481 | |||
| 482 | Чтобы несколько раз использовать в сообщении одно и то же выражение, можно ввести переменную. Например, введем переменную ##webcart## для массива элементов в корзине: | ||
| 483 | |||
| 484 | (% class="box" %) | ||
| 485 | ((( | ||
| 486 | ##{% set webcart = client.containers.webcart.items %}## | ||
| 487 | ))) | ||
| 488 | |||
| 489 | === Циклы === | ||
| 490 | |||
| 491 | В следующих случаях необходимо использовать циклы: | ||
| 492 | |||
| 493 | * Вывод атрибутов продуктов в первом/последнем чеке клиента; | ||
| 494 | * Вывод атрибутов продуктов в корзине; | ||
| 495 | * Вывод атрибутов категории продукта; | ||
| 496 | * Вывод информации по всем активным картам клиента, если их больше одной. | ||
| 497 | |||
| 498 | Например, можно вывести названия всех продуктов в последнем чеке клиента: | ||
| 499 | |||
| 500 | (% class="box" %) | ||
| 501 | ((( | ||
| 502 | ##{% for item in client.orders.last.items%} | ||
| 503 | ~{~{item.name}} | ||
| 504 | {% endfor %}## | ||
| 505 | ))) | ||
| 506 | |||
| 507 | Вывести название и цвет для всех продуктов из корзины: | ||
| 508 | |||
| 509 | (% class="box" %) | ||
| 510 | ##{% set webcart = client.containers.webcart.items %} | ||
| 511 | {% for item in webcart %} | ||
| 512 | ~{~{item.name}} | ||
| 513 | ~{~{item.color}} | ||
| 514 | {% endfor %}## | ||
| 515 | |||
| 516 | Вывести название категории для всех продуктов в последнем заказе: | ||
| 517 | |||
| 518 | (% class="box" %) | ||
| 519 | ((( | ||
| 520 | ##{% for item in client.orders.last.items%} | ||
| 521 | ~{~{item.category.name}} | ||
| 522 | {% endfor %}## | ||
| 523 | ))) | ||
| 524 | |||
| 525 | Вывести информацию по всем активным картам клиента: | ||
| 526 | |||
| 527 | (% class="box" %) | ||
| 528 | ((( | ||
| 529 | ##{% for card in client.loyaltyCard.items %} | ||
| 530 | ~{~{card.number}} | ||
| 531 | {% endfor %}## | ||
| 532 | ))) | ||
| 533 | |||
| 534 | === Условия === | ||
| 535 | |||
| 536 | Можно вывести в сообщении только те данные, для которых выполняется заданное условие. Например, можно выдать [[промокод>>doc:Main.Using.Smart_Communications.Promo_codes.WebHome]] только клиентам из Екатеринбурга: | ||
| 537 | |||
| 538 | (% class="box" %) | ||
| 539 | ((( | ||
| 540 | ##{% if client.properties.city == 'Екатеринбург' %} | ||
| 541 | ~{~{client.promocode('группа промокода')}} | ||
| 542 | {% endif %}## | ||
| 543 | ))) | ||
| 544 | |||
| 545 | Вот несколько вариантов условий: | ||
| 546 | |||
| 547 | * {% If client.properties.city == 'Екатеринбург' %} — если клиент из Екатеринбурга; | ||
| 548 | * {% If client.properties.city %} — если у клиента указан город; | ||
| 549 | * {% If not client.properties.city %} — если у клиента не указан город; | ||
| 550 | * {% If client.properties.city == 'Екатеринбург' OR client.properties.city == 'Пермь' %} — если клиент из Екатеринбурга или из Перми; | ||
| 551 | * {% If client.properties.city == 'Екатеринбург' AND client.properties.first_name == 'Мария' %} — если клиент из Екатеринбурга и его зовут Мария. | ||
| 552 | |||
| 553 | === Фильтры === | ||
| 554 | |||
| 555 | Для массивов доступны фильтры: | ||
| 556 | |||
| 557 | * sortArray — позволяет отсортировать массив данных по значению атрибутов: | ||
| 558 | ** sortArray('date', true) — сортировка по дате по убыванию; | ||
| 559 | ** sortArray('date', false) — сортировка по дате по возрастанию (сортировать элементы можно не только по дате, но и по другим атрибутам); | ||
| 560 | * get — выводит заданное количество элементов: | ||
| 561 | ** get(10) — вывести первые 10 элементов массива; | ||
| 562 | * date_diff('date') — выводит количество дней между двумя датами. Например, можно вывести, сколько дней прошло с **2020-11-11** до текущей даты: | ||
| 563 | |||
| 564 | (% class="box" %) | ||
| 565 | ((( | ||
| 566 | ##~{~{"now"|date('Y-m-d')|date_diff('2020-11-11')}}## | ||
| 567 | ))) | ||
| 568 | |||
| 569 | **Вывод информации из корзины** | ||
| 570 | |||
| 571 | Пример использования фильтров: вывести название, изображение и цену для 10 продуктов из корзины, которые были добавлены первыми. | ||
| 572 | |||
| 573 | (% class="box" %) | ||
| 574 | ((( | ||
| 575 | ##{% set webcart = client.containers.webcart.items|sortArray('date', false)|get(10) %} | ||
| 576 | {% for item in webcart %} | ||
| 577 | ~{~{item.name}} | ||
| 578 | ~{~{item.image_url}} | ||
| 579 | ~{~{item.price}} | ||
| 580 | {% endfor %}## | ||
| 581 | ))) | ||
| 582 | |||
| 583 | Чтобы название продукта было ссылкой, используйте тег <a> с атрибутом href: | ||
| 584 | |||
| 585 | (% class="box" %) | ||
| 586 | ((( | ||
| 587 | ##<a href ="~{~{item.product_url}}">~{~{item.name}}</a>## | ||
| 588 | ))) | ||
| 589 | |||
| 590 | == Подстановка данных из витрин == | ||
| 591 | |||
| 592 | Loymax Smart Communications позволяет подставлять в текст сообщения значения полей [[витрин>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome||anchor="H41243844244043843D44B"]]. Для подстановки данных из витрин, организованных по принципу "один к одному" используйте следующий синтаксис: | ||
| 593 | |||
| 594 | (% class="box" %) | ||
| 595 | ((( | ||
| 596 | ##~{~{client.marts.<код витрины>.<код поля>}}## | ||
| 597 | ))) | ||
| 598 | |||
| 599 | Для подстановки данных объектов, хранящихся в мультивитрине, используйте цикл: | ||
| 600 | |||
| 601 | (% class="box" %) | ||
| 602 | ((( | ||
| 603 | ##{% set items = client.multimarts.<код витрины>.items %} | ||
| 604 | {% for item in items %} | ||
| 605 | ~{~{item.<код поля 1>}} | ||
| 606 | ~{~{item.<код поля 2>}} | ||
| 607 | ~{~{item.<код поля 3>}} | ||
| 608 | {% endfor %}## | ||
| 609 | ))) | ||
| 610 | |||
| 611 | == Использование данных из контекста триггера == | ||
| 612 | |||
| 613 | Когда срабатывает [[триггер>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome]] кампании, в контекст триггера записывается информация об объекте или наборе (коллекции) объектов, вызвавших срабатывание. В зависимости от вида триггера это может быть товар, заказ, категория и т.п. Контекст всегда привязан к конкретному клиенту и может быть использован для персонализации коммуникации. | ||
| 614 | |||
| 615 | В рассылках, отправленных в рамках кампании, можно использовать значения [[полей>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome]] объекта из контекста триггера. Структура данных в контексте триггера соответствует модели данных соответствующего объекта, т.е. содержит все поля, настроенные для этого типа объекта. | ||
| 616 | |||
| 617 | Контекст любого триггера содержит объект ##client## (Клиент). Обращаясь к этому объекту, можно получить содержимое любого поля [[профиля клиента>>doc:Main.Using.Smart_Communications.Customers.All_clients.WebHome||anchor="H41F44043E44443843B44C43A43B43843543D442430"]] — как системного, так и пользовательского. Для обращения к полям профиля клиента используйте следующий синтаксис: ##~{~{trigger.client.properties.<код поля>}}## | ||
| 618 | |||
| 619 | В некоторых триггерах помимо объекта ##client## передаётся другой объект. Перечень таких триггеров см. в таблице ниже. | ||
| 620 | |||
| 621 | (% class="table-bordered" %) | ||
| 622 | |=Триггеры|=Объекты в контексте|=Комментарий | ||
| 623 | |((( | ||
| 624 | * [[Дней с чека>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41443D43543944144743543A430"]] | ||
| 625 | * [[Наступление даты для чека>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41D43044144244343F43B43543D43843543443044244B43443B44F44743543A430"]] | ||
| 626 | * [[Пробит чек>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41F44043E43143844244743543A"]] | ||
| 627 | )))|((( | ||
| 628 | * ##client ##(Клиент) | ||
| 629 | * ##order ##(Чек) | ||
| 630 | )))|((( | ||
| 631 | (% id="cke_bm_68121S" style="display:none" %) (%%)Для обращения к полям чека используйте следующий синтаксис: ##~{~{trigger.order.<код поля чека>}}## | ||
| 632 | |||
| 633 | Для обращения ко всем строкам чека используйте цикл: | ||
| 634 | |||
| 635 | {{code}} | ||
| 636 | {% for item in trigger.order.items %} | ||
| 637 | {{item.<код поля строки чека>}} | ||
| 638 | {% endfor %} | ||
| 639 | {{/code}} | ||
| 640 | |||
| 641 | Строки чека также содержат поле ##category##, заполненное полями категории, к которой относится соответствующий продукт. Вы можете обращаться к полям категории, используя следующий синтаксис: ##~{~{item.category.<код поля категории>}}## | ||
| 642 | |||
| 643 | ))) | ||
| 644 | |((( | ||
| 645 | * [[Дней с заказа>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41443D43543944143743043A430437430"]] | ||
| 646 | * [[Заказан продукт>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41743043A43043743043D43F44043E43444343A442"]] | ||
| 647 | * [[Заказан продукт из категории>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41743043A43043743043D43F44043E43444343A44243843743A43044243543343E440438438"]] | ||
| 648 | * [[Изменился статус заказа>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41843743C43543D43843B44144F44144243044244344143743043A430437430"]] | ||
| 649 | * [[Наступление даты для заказа>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41D43044144244343F43B43543D43843543443044244B43443B44F43743043A430437430"]] | ||
| 650 | * [[Сделан заказ>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H42143443543B43043D43743043A430437"]] | ||
| 651 | )))|((( | ||
| 652 | * ##client ##(Клиент) | ||
| 653 | * ##eorder## (Заказ) | ||
| 654 | )))|((( | ||
| 655 | (% id="cke_bm_74915S" style="display:none" %) (%%)Для обращения к полям заказа используйте следующий синтаксис ##~{~{trigger.eorder.<код поля заказа>}}## | ||
| 656 | |||
| 657 | Для обращения ко всем строкам заказа используйте цикл: | ||
| 658 | |||
| 659 | {{code}} | ||
| 660 | {% for item in trigger.eorder.items %} | ||
| 661 | {{item.<код поля строки заказа>}} | ||
| 662 | {% endfor %} | ||
| 663 | {{/code}} | ||
| 664 | |||
| 665 | Строки заказа также содержат поле ##category##, заполненное полями категории, к которой относится соответствующий продукт. Вы можете обращаться к полям категории, используя следующий синтаксис: ##~{~{item.category.<код поля категории>}}## | ||
| 666 | ))) | ||
| 667 | |[[Добавлен товар в контейнер>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41443E43143043243B43543D44243E43243044043243A43E43D44243543943D435440"]]|((( | ||
| 668 | * ##client ##(Клиент) | ||
| 669 | * ##product ##(Продукт) | ||
| 670 | )))|Для обращения к полям продукта используйте следующий синтаксис: ##~{~{trigger.product.<код поля продукта>}}## | ||
| 671 | |((( | ||
| 672 | * [[Изменилась цена на просмотренный товар>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41843743C43543D43843B43044144C44643543D43043D43043F44043E44143C43E44244043543D43D44B43944243E432430440"]] | ||
| 673 | * [[Изменилась цена продукта>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41843743C43543D43843B43044144C44643543D43043F44043E43444343A442430"]] | ||
| 674 | )))|((( | ||
| 675 | * ##client ##(Клиент) | ||
| 676 | * ##products ##(коллекция объектов Продукт) | ||
| 677 | )))|((( | ||
| 678 | Для обращения ко всем продуктам в коллекции используйте цикл: | ||
| 679 | |||
| 680 | {{code}} | ||
| 681 | {% for product in trigger.products %} | ||
| 682 | {{product.<код поля продукта>}} | ||
| 683 | {% endfor %} | ||
| 684 | {{/code}} | ||
| 685 | ))) | ||
| 686 | |[[Брошенный просмотр категории>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome||anchor="H41144043E44843543D43D44B43943F44043E44143C43E44244043A43044243543343E440438438"]]|((( | ||
| 687 | * ##client ##(Клиент) | ||
| 688 | * ##category ##(Категория продуктов) | ||
| 689 | )))|((( | ||
| 690 | Поскольку триггер обрабатывает события за последние двое суток, за этот период может быть зарегистрировано большое количество событий **Просмотр категории **(##view_category##). В контекст триггера записывается только две категории: последняя просмотренная и самая часто просматриваемая. | ||
| 691 | |||
| 692 | Для обращения к последней просмотренной категории используйте следующий синтаксис: ##~{~{trigger.last_category.<код поля категории>}}## | ||
| 693 | |||
| 694 | Для обращения к самой часто просматриваемой категории используйте следующий синтаксис: ##~{~{trigger.frequent_category.<код поля категории>}}## | ||
| 695 | ))) | ||
| 696 | |||
| 697 | {{showhide showmessage="Пример обращения к контексту триггера ~"Сделан заказ~"" hidemessage="Скрыть пример"}} | ||
| 698 | |(% style="width:50%" %)((( | ||
| 699 | **Код:** | ||
| 700 | |||
| 701 | (% class="box" %) | ||
| 702 | ((( | ||
| 703 | ##~{~{trigger.client.properties.full_name}}##, | ||
| 704 | ##~{~{trigger.eorder.date}}## вы оформили заказ ##~{~{trigger.eorder.number}}## на сумму ##~{~{trigger.eorder.items_sum}}## с доставкой в г. ##~{~{trigger.eorder.delivery_city}}.## | ||
| 705 | |||
| 706 | Состав заказа: | ||
| 707 | |||
| 708 | ##{% for item in trigger.eorder.items %}## | ||
| 709 | Название товара: ##~{~{item.name}}## | ||
| 710 | Количество товара: ##~{~{item.cnt}}## | ||
| 711 | Цена товара: ##~{~{item.price}}## | ||
| 712 | Скидка: ##~{~{item.discount}}## | ||
| 713 | Стоимость товара: ##~{~{item.cnt}} x (~{~{item.price}} - ~{~{item.discount}})= ~{~{item.sum}}## | ||
| 714 | {% endfor %} | ||
| 715 | ))) | ||
| 716 | |||
| 717 | |||
| 718 | )))|(% style="width:50%" %)((( | ||
| 719 | **Результат обработки:** | ||
| 720 | |||
| 721 | Константин Константиновский, | ||
| 722 | 01.01.2025 вы оформили заказ EO-12345 на сумму 5100 с доставкой в г. Санкт-Петербург. | ||
| 723 | |||
| 724 | Состав заказа: | ||
| 725 | |||
| 726 | Название товара: Лейка садовая | ||
| 727 | Количество товара: 2 | ||
| 728 | Цена товара: 1500 | ||
| 729 | Скидка: 100 | ||
| 730 | Стоимость товара: 2 x (1500 - 100)= 2800 | ||
| 731 | |||
| 732 | Название товара: Лопата штыковая | ||
| 733 | Количество товара: 1 | ||
| 734 | Цена товара: 2500 | ||
| 735 | Скидка: 200 | ||
| 736 | Стоимость товара: 1 x (2500 - 200)= 2300 | ||
| 737 | ))) | ||
| 738 | {{/showhide}} | ||
| 739 | |||
| 740 | (% class="box" %) | ||
| 741 | ((( | ||
| 742 | **Читайте также:** | ||
| 743 | |||
| 744 | * [[Кампании>>doc:Main.Using.Smart_Communications.Campaign_list.WebHome]] | ||
| 745 | * [[Триггеры>>doc:Main.Using.Smart_Communications.Campaign_list.Triggers.WebHome]] | ||
| 746 | * [[Поля>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome]] | ||
| 747 | ))) |