Исходный код вики Персонализация рассылок через шаблонизатор
Последние авторы
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 | **Содержание:** | ||
5 | |||
6 | {{toc depth="4" start="2"/}} | ||
7 | |||
8 | == Персонализация == | ||
9 | |||
10 | Технология персонализации позволяет адаптировать рассылки под каждого клиента. [[Loymax Smart Communications>>doc:Main.Using.Smart_Communications.WebHome]] адаптирует текст сообщения и строит актуальное для клиента предложение, при необходимости выбирая подходящий момент отправки сообщения. | ||
11 | **Пример:** | ||
12 | В рамках одной и той же рассылки по рекомендуемым товарам: | ||
13 | |||
14 | * Один клиент получит сообщение (на основе истории покупок) с предложением купить сменные лезвия для бритвы и с блоком о том, что в торговых точках его города действует акция "3 по цене 2". | ||
15 | * Другой клиент получит сообщение (на основе истории покупок) с предложением купить зарядное устройство и с промо-блоком о том, что в его городе открылся новый пункт выдачи заказов. | ||
16 | |||
17 | В Loymax Smart Communications есть инструменты для персонализации: | ||
18 | |||
19 | * Конструкции шаблонизатора; | ||
20 | * Товарные рекомендации. | ||
21 | |||
22 | == Шаблонизатор == | ||
23 | |||
24 | Шаблонизатор включает в себя: | ||
25 | |||
26 | * [[Переменные>>doc:||anchor="H41F43544043543C43543D43D44B435432A0SmartCommunications"]] — данные о клиенте, его чеках и продуктах в чеке. Например, с помощью переменной можно вывести в текст сообщения имя клиента; | ||
27 | * [[Макросы>>doc:||anchor="H41C43043A44043E44144B"]] — функции, позволяющие вывести информацию о промокодах, опросах и т. д.; | ||
28 | * [[Управляющие конструкции>>doc:||anchor="H42343F44043043243B44F44E44943843543A43E43D44144244044343A446438438"]] — циклы, условия, фильтры. | ||
29 | |||
30 | Пример использования переменной в тексте сообщения: | ||
31 | |||
32 | (% class="box" %) | ||
33 | ((( | ||
34 | ##Добрый день, ~{~{client.properties.full_name}}.## | ||
35 | ))) | ||
36 | |||
37 | При отправке сообщения переменная будет заменена на значение, например: | ||
38 | |||
39 | (% class="box" %) | ||
40 | ((( | ||
41 | Добрый день, Иванов Иван Иванович. | ||
42 | ))) | ||
43 | |||
44 | == Переменные в Smart Communications == | ||
45 | |||
46 | Переменные позволяют подставлять в текст сообщения (а для писем — и в тему письма) данные: | ||
47 | |||
48 | * Из [[профиля клиента>>doc:Main.Using.Smart_Communications.Customers.All_clients.WebHome||anchor="Profile"]]: | ||
49 | ** Атрибуты и метрики клиента; | ||
50 | ** Ссылки для [[управления подпиской>>doc:Main.Using.Smart_Communications.Mass_mailings.Mailing_Loyalty_SC.WebHome]]; | ||
51 | ** Атрибуты и содержимое из последнего чека; | ||
52 | ** Даты; | ||
53 | ** И любые другие атрибуты; | ||
54 | * О чеках клиента; | ||
55 | * О продуктах в чеке; | ||
56 | * О категории продукта. | ||
57 | |||
58 | Переменные бывают: | ||
59 | |||
60 | * [[Системные>>doc:||anchor="H42143844144243543C43D44B43543F43544043543C43543D43D44B435"]] — служат для доступа к системным полям; | ||
61 | * [[Пользовательские>>doc:||anchor="H41F43E43B44C43743E43243044243543B44C44143A43843543F43544043543C43543D43D44B435"]] — для доступа к пользовательским полям. Подробнее о полях можно прочитать [[здесь>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome]]. | ||
62 | |||
63 | Формат записи переменной: | ||
64 | |||
65 | (% class="box" %) | ||
66 | ((( | ||
67 | ##~{~{наименование_переменной}}## | ||
68 | ))) | ||
69 | |||
70 | === Системные переменные === | ||
71 | |||
72 | В Smart Communications доступны следующие системные переменные: | ||
73 | |||
74 | (% class="table-bordered" %) | ||
75 | |=((( | ||
76 | Переменная | ||
77 | )))|=((( | ||
78 | Назначение | ||
79 | ))) | ||
80 | |((( | ||
81 | ##~{~{client.properties.full_name}}## | ||
82 | )))|((( | ||
83 | Полное имя клиента | ||
84 | ))) | ||
85 | |((( | ||
86 | ##~{~{client.properties.last_name}}## | ||
87 | )))|((( | ||
88 | Фамилия клиента | ||
89 | ))) | ||
90 | |((( | ||
91 | ##~{~{client.properties.first_name}}## | ||
92 | )))|((( | ||
93 | Имя клиента | ||
94 | ))) | ||
95 | |((( | ||
96 | ##~{~{client.properties.middle_name}}## | ||
97 | )))|((( | ||
98 | Отчество клиента | ||
99 | ))) | ||
100 | |((( | ||
101 | ##~{~{client.properties.register_date}}## | ||
102 | )))|((( | ||
103 | Дата регистрации | ||
104 | ))) | ||
105 | |((( | ||
106 | ##~{~{client.properties.city}}## | ||
107 | )))|((( | ||
108 | Город клиента | ||
109 | ))) | ||
110 | |((( | ||
111 | ##~{~{client.properties.zip}}## | ||
112 | )))|((( | ||
113 | Индекс клиента | ||
114 | ))) | ||
115 | |((( | ||
116 | ##~{~{client.properties.email}}## | ||
117 | )))|((( | ||
118 | E-mail клиента | ||
119 | ))) | ||
120 | |((( | ||
121 | ##~{~{client.properties.password}}## | ||
122 | )))|((( | ||
123 | Пароль клиента | ||
124 | ))) | ||
125 | |((( | ||
126 | ##~{~{client.properties.phone}}## | ||
127 | )))|((( | ||
128 | Номер телефона клиента | ||
129 | ))) | ||
130 | |((( | ||
131 | ##~{~{client.properties.order_cnt}}## | ||
132 | )))|((( | ||
133 | Количество чеков клиента | ||
134 | ))) | ||
135 | |((( | ||
136 | ##~{~{client.properties.order_sum}}## | ||
137 | )))|((( | ||
138 | Общая сумма всех чеков клиента | ||
139 | ))) | ||
140 | |((( | ||
141 | ##~{~{client.orders.first.date}}## | ||
142 | )))|((( | ||
143 | Дата первого чека клиента | ||
144 | ))) | ||
145 | |((( | ||
146 | ##~{~{client.orders.last.date}}## | ||
147 | )))|((( | ||
148 | Дата последнего чека клиента | ||
149 | ))) | ||
150 | |((( | ||
151 | ##~{~{client.orders.last.number}}## | ||
152 | )))|((( | ||
153 | Номер последнего чека | ||
154 | ))) | ||
155 | |((( | ||
156 | ##~{~{client.properties.rating}}## | ||
157 | )))|((( | ||
158 | Скоринг клиента | ||
159 | ))) | ||
160 | |((( | ||
161 | ##~{~{client.links.profile}}## | ||
162 | )))|((( | ||
163 | Ссылка на профиль клиента на Платформе | ||
164 | ))) | ||
165 | |((( | ||
166 | ##~{~{client.links.unsubscribe}}## | ||
167 | )))|((( | ||
168 | Ссылка на [[управление подписками>>doc:Main.Using.Smart_Communications.Mass_mailings.Mailing_Loyalty_SC.WebHome]] | ||
169 | ))) | ||
170 | |((( | ||
171 | ##~{~{client.links.web_version}}## | ||
172 | )))|((( | ||
173 | Ссылка на веб-версию письма | ||
174 | ))) | ||
175 | |((( | ||
176 | ##~{~{client.properties.bonus_active}}## | ||
177 | )))|((( | ||
178 | Количество активных бонусов | ||
179 | ))) | ||
180 | |((( | ||
181 | ##~{~{client.properties.bonus_expect_activate}}## | ||
182 | )))|((( | ||
183 | Количество бонусов, которые ожидают активации | ||
184 | ))) | ||
185 | |((( | ||
186 | ##~{~{client.properties.bonus_expect_deactivate}}## | ||
187 | )))|((( | ||
188 | Количество бонусов, которые ожидают деактивации | ||
189 | ))) | ||
190 | |((( | ||
191 | ##~{~{client.properties.bonus_expect_deactivate_date}}## | ||
192 | )))|((( | ||
193 | Дата деактивации бонусов | ||
194 | ))) | ||
195 | |((( | ||
196 | ##~{~{client.properties.bonus_expect_deactivate_next}}## | ||
197 | )))|((( | ||
198 | Количество бонусов, которые будут деактивированы в ближайшее время | ||
199 | ))) | ||
200 | |((( | ||
201 | ##~{~{client.eventContext.<код_поля>}}## | ||
202 | )))|((( | ||
203 | Данные из [[контекста события>>doc:Main.Using.Smart_Communications.Events.WebHome]] | ||
204 | ))) | ||
205 | |((( | ||
206 | ##~{~{client.containers.webcart.items}}## | ||
207 | )))|((( | ||
208 | Содержимое корзины | ||
209 | ))) | ||
210 | |||
211 | === Пользовательские переменные === | ||
212 | |||
213 | Доступ к пользовательским полям **Клиент/Чек/Строка чека/Категория продукта** осуществляется по их коду с помощью конструкции вида ##~{~{client.properties.<код_поля>}}##. Например: | ||
214 | |||
215 | (% class="box" %) | ||
216 | ((( | ||
217 | ##~{~{client.properties.eye_color}}## | ||
218 | ))) | ||
219 | |||
220 | Узнать код поля можно в разделе **Настройки >** [[Поля>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome]] во вкладках **Клиенты/Транзакции/Строки транзакций/Категории**.** **Например, код атрибута чека "Статус оплаты" — "payment_status_name". | ||
221 | |||
222 | {{lightbox image="Code_example.png"/}} | ||
223 | |||
224 | Для формирования переменной необходимо использовать формат: | ||
225 | |||
226 | * ##~{~{client.properties.<код поля>}}## — значение атрибута в **профиле** клиента; | ||
227 | * ##~{~{client.orders.first.<код поля>}}## — значение атрибута в **первом чеке** клиента; | ||
228 | * ##~{~{client.orders.last.<код поля>}}## — значение атрибута в **последнем чеке** клиента. | ||
229 | |||
230 | Для вывода значений атрибутов продуктов в [[брошенной корзине>>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"]](%%). | ||
231 | |||
232 | === Значение по умолчанию === | ||
233 | |||
234 | Для атрибутов с типом **строка** можно установить значение по умолчанию. Это значение будет выведено в тексте сообщения, если атрибут не заполнен. Например, в сообщении можно обратиться к клиенту по имени, а если имя неизвестно — использовать значение по умолчанию: | ||
235 | |||
236 | (% class="box" %) | ||
237 | ((( | ||
238 | ##~{~{client.properties.full_name|default ('Уважаемый клиент')}## | ||
239 | ))) | ||
240 | |||
241 | == Макросы == | ||
242 | |||
243 | Макросы — это небольшие команды, которые позволяют выполнять заскриптованные действия в Системе. Например, макрос ##~{~{client.promocode('группа промокода')}}## находит и возвращает промокод из группы. | ||
244 | |||
245 | === Системные макросы === | ||
246 | |||
247 | В Smart Communications доступны макросы: | ||
248 | |||
249 | (% class="table-bordered" %) | ||
250 | |=((( | ||
251 | Макрос | ||
252 | )))|=((( | ||
253 | Назначение | ||
254 | ))) | ||
255 | |((( | ||
256 | ##~{~{"now"|date('формат')}}## | ||
257 | )))|((( | ||
258 | Текущая дата | ||
259 | ))) | ||
260 | |((( | ||
261 | ##~{~{client.promocode('группа промокода')}}## | ||
262 | )))|((( | ||
263 | Выдать промокод клиенту из группы промокодов | ||
264 | ))) | ||
265 | |((( | ||
266 | ##~{~{client.last_promocode('группа промокода')}}## | ||
267 | )))|((( | ||
268 | Последний выданный клиенту промокод из группы | ||
269 | ))) | ||
270 | |((( | ||
271 | ##~{~{client.last_campaign_promocode('группа промокода')}}## | ||
272 | )))|((( | ||
273 | Последний промокод из группы, выданный клиенту в рамках этой кампании | ||
274 | ))) | ||
275 | |((( | ||
276 | ##~{~{client.template_constant('наименование')}}## | ||
277 | )))|((( | ||
278 | Константа региона | ||
279 | ))) | ||
280 | |((( | ||
281 | ##~{~{client.poll('POLL-идентификатор_опроса')}}## | ||
282 | )))|((( | ||
283 | Ссылка на опрос | ||
284 | ))) | ||
285 | |((( | ||
286 | ##~{~{client.loyaltyCard.lastActive.number}}## | ||
287 | )))|((( | ||
288 | Информация по активной карте лояльности клиента | ||
289 | ))) | ||
290 | |||
291 | === Формат дат === | ||
292 | |||
293 | Поля с типом **дата** можно выводить в разном формате. Для обозначения формата можно использовать любые комбинации следующих значений: | ||
294 | |||
295 | * Год: | ||
296 | ** y — 2 цифры (например, 97, 20); | ||
297 | ** Y — 4 цифры (например, 1997, 2020); | ||
298 | * m — месяц (в формате от 01 до 12); | ||
299 | * d — день (в формате от 01 до 31); | ||
300 | * h — час; | ||
301 | * i — минута; | ||
302 | * s — секунда. | ||
303 | |||
304 | **Пример 1. Вывод даты в сообщении** | ||
305 | |||
306 | При заданном формате 'Y-m-d' дата будет выведена в виде '2020-10-20'. При формате 'd.m.Y h:i' — в виде '20.10.2020 11:56'. | ||
307 | |||
308 | Пример использования макроса **Благодарность клиенту за последний заказ**: | ||
309 | |||
310 | (% class="box" %) | ||
311 | ((( | ||
312 | ##Спасибо за заказ от ~{~{client.orders.last.date|date('d.m.Y')}}!## | ||
313 | ))) | ||
314 | |||
315 | Клиент получит сообщение со строкой вида: | ||
316 | |||
317 | (% class="box" %) | ||
318 | ((( | ||
319 | Спасибо за заказ от 29.06.2020! | ||
320 | ))) | ||
321 | |||
322 | **Пример 2. Вывод даты на несколько дней позже текущей** | ||
323 | |||
324 | Чтобы вывести в сообщение дату, которая на несколько дней позже текущей, используйте такой макрос: | ||
325 | |||
326 | (% class="box" %) | ||
327 | ((( | ||
328 | ##~{~{"now"|date_modify('+1 day')|date('Y-m-d')}}## | ||
329 | ))) | ||
330 | |||
331 | В сообщении для клиента будет выведена завтрашняя дата. | ||
332 | |||
333 | **Пример 3. Вывод даты —** **через месяц после даты регистрации клиента** | ||
334 | |||
335 | Вывод даты +1 месяц от даты регистрации клиента. | ||
336 | |||
337 | (% class="box" %) | ||
338 | ((( | ||
339 | ##~{~{client.properties.register_date|date_modify('+1 month')|date('Y-m-d')}}## | ||
340 | ))) | ||
341 | |||
342 | == Вставка переменной или макроса в сообщение == | ||
343 | |||
344 | В редакторах для всех видов сообщений есть кнопка с изображением флажка, при нажатии на которую раскрывается список доступных системных переменных и макросов: | ||
345 | |||
346 | |(% style="border-color:white; text-align:center" %){{lightbox image="Editor.png"/}} | ||
347 | |||
348 | Для вставки пользовательской переменной необходимо напечатать ее вручную. | ||
349 | |||
350 | == Предварительный просмотр == | ||
351 | |||
352 | |(% style="border-color:white; width:1115px" %)((( | ||
353 | Чтобы посмотреть, как будет выглядеть сообщение с переменными и макросами, замененными на их значение, используйте кнопку **Предпросмотр сообщения**. | ||
354 | )))|(% style="border-color:white; width:324px" %){{lightbox image="Preview.png"/}} | ||
355 | |(% style="border-color:white; width:1115px" %)((( | ||
356 | Можно увидеть предпросмотр письма для конкретного клиента. Для этого в поле **Клиент** необходимо ввести Фамилию/Имя/Номер телефона/email/идентификатор клиента (local_id). Чтобы результаты поиска были однозначны, рекомендуется искать по номеру телефона/email/локальному идентификатору клиента. | ||
357 | |||
358 | (% class="box infomessage" %) | ||
359 | ((( | ||
360 | Поиск в поле **Клиент **— регистрозависимый. Имя и фамилию клиента необходимо вводить с заглавной буквы. | ||
361 | ))) | ||
362 | )))|(% style="border-color:white; width:324px" %){{lightbox image="Client3.png"/}} | ||
363 | |||
364 | == Управляющие конструкции == | ||
365 | |||
366 | С помощью управляющих конструкций можно создавать более сложные шаблоны на основе переменных и макросов. Управляющие конструкции включают в себя for-циклы, условия (if/elseif/else) и фильтры. Управляющие конструкции выводятся внутри блоков {% ... %}. | ||
367 | |||
368 | === Переменные === | ||
369 | |||
370 | Чтобы несколько раз использовать в сообщении одно и то же выражение, можно ввести переменную. Например, введем переменную ##webcart## для массива элементов в корзине: | ||
371 | |||
372 | (% class="box" %) | ||
373 | ((( | ||
374 | ##{% set webcart = client.containers.webcart.items %}## | ||
375 | ))) | ||
376 | |||
377 | === Циклы === | ||
378 | |||
379 | В следующих случаях необходимо использовать циклы: | ||
380 | |||
381 | * Вывод атрибутов продуктов в первом/последнем чеке клиента; | ||
382 | * Вывод атрибутов продуктов в корзине; | ||
383 | * Вывод атрибутов категории продукта; | ||
384 | * Вывод информации по всем активным картам клиента, если их больше одной. | ||
385 | |||
386 | Например, можно вывести названия всех продуктов в последнем чеке клиента: | ||
387 | |||
388 | (% class="box" %) | ||
389 | ((( | ||
390 | ##{% for item in client.orders.last.items%} | ||
391 | ~{~{item.name}} | ||
392 | {% endfor %}## | ||
393 | ))) | ||
394 | |||
395 | Вывести название и цвет для всех продуктов из корзины: | ||
396 | |||
397 | (% class="box" %) | ||
398 | ##{% set webcart = client.containers.webcart.items %} | ||
399 | {% for item in webcart %} | ||
400 | ~{~{item.name}} | ||
401 | ~{~{item.color}} | ||
402 | {% endfor %}## | ||
403 | |||
404 | Вывести название категории для всех продуктов в последнем заказе: | ||
405 | |||
406 | (% class="box" %) | ||
407 | ((( | ||
408 | ##{% for item in client.orders.last.items%} | ||
409 | ~{~{item.category.name}} | ||
410 | {% endfor %}## | ||
411 | ))) | ||
412 | |||
413 | Вывести информацию по всем активным картам клиента: | ||
414 | |||
415 | (% class="box" %) | ||
416 | ((( | ||
417 | ##{% for card in client.loyaltyCard.items %} | ||
418 | ~{~{card.number}} | ||
419 | {% endfor %}## | ||
420 | ))) | ||
421 | |||
422 | === Условия === | ||
423 | |||
424 | Можно вывести в сообщении только те данные, для которых выполняется заданное условие. Например, можно выдать [[промокод>>doc:Main.Using.Smart_Communications.Promo_codes.WebHome]] только клиентам из Екатеринбурга: | ||
425 | |||
426 | (% class="box" %) | ||
427 | ((( | ||
428 | ##{% if client.properties.city == 'Екатеринбург' %} | ||
429 | ~{~{client.promocode('группа промокода')}} | ||
430 | {% endif %}## | ||
431 | ))) | ||
432 | |||
433 | Вот несколько вариантов условий: | ||
434 | |||
435 | * {% If client.properties.city == 'Екатеринбург' %} — если клиент из Екатеринбурга; | ||
436 | * {% If client.properties.city %} — если у клиента указан город; | ||
437 | * {% If not client.properties.city %} — если у клиента не указан город; | ||
438 | * {% If client.properties.city == 'Екатеринбург' OR client.properties.city == 'Пермь' %} — если клиент из Екатеринбурга или из Перми; | ||
439 | * {% If client.properties.city == 'Екатеринбург' AND client.properties.first_name == 'Мария' %} — если клиент из Екатеринбурга и его зовут Мария. | ||
440 | |||
441 | === Фильтры === | ||
442 | |||
443 | Для массивов доступны фильтры: | ||
444 | |||
445 | * sortArray — позволяет отсортировать массив данных по значению атрибутов: | ||
446 | ** sortArray('date', true) — сортировка по дате по убыванию; | ||
447 | ** sortArray('date', false) — сортировка по дате по возрастанию (сортировать элементы можно не только по дате, но и по другим атрибутам); | ||
448 | * get — выводит заданное количество элементов: | ||
449 | ** get(10) — вывести первые 10 элементов массива; | ||
450 | * date_diff('date') — выводит количество дней между двумя датами. Например, можно вывести, сколько дней прошло с **2020-11-11** до текущей даты: | ||
451 | |||
452 | (% class="box" %) | ||
453 | ((( | ||
454 | ##~{~{"now"|date('Y-m-d')|date_diff('2020-11-11')}}## | ||
455 | ))) | ||
456 | |||
457 | **Вывод информации из корзины** | ||
458 | |||
459 | Пример использования фильтров: вывести название, изображение и цену для 10 продуктов из корзины, которые были добавлены первыми. | ||
460 | |||
461 | (% class="box" %) | ||
462 | ((( | ||
463 | ##{% set webcart = client.containers.webcart.items|sortArray('date', false)|get(10) %} | ||
464 | {% for item in webcart %} | ||
465 | ~{~{item.name}} | ||
466 | ~{~{item.image_url}} | ||
467 | ~{~{item.price}} | ||
468 | {% endfor %}## | ||
469 | ))) | ||
470 | |||
471 | Чтобы название продукта было ссылкой, используйте тег <a> с атрибутом href: | ||
472 | |||
473 | (% class="box" %) | ||
474 | ((( | ||
475 | ##<a href ="~{~{item.product_url}}">~{~{item.name}}</a>## | ||
476 | ))) |