Изменения документа Товарные рекомендации


<
От версии < 10.1 >
отредактировано Андрей Рылов
на 26/12/2025 14:35
К версии < 11.1 >
отредактировано Андрей Рылов
на 29/12/2025 10:52
>
Изменить комментарий: К данной версии нет комментариев

Комментарий

Подробности

Свойства страницы
Содержимое
... ... @@ -1,5 +1,5 @@
1 1  (% class="lead" %)
2 -Функционал рекомендаций позволяет выводить в текст сообщений товары, подобранные по одному из поддерживаемых алгоритмов на основе прошлых действий данного клиента.
2 +Функционал рекомендаций позволяет выводить в текст сообщений товары, подобранные по одному из поддерживаемых алгоритмов на основе предпочтений клиентов.
3 3  
4 4  {{info}}
5 5  Функционал рекомендаций поддерживается только при настроенной интеграции с модулем Loymax AI.
... ... @@ -21,7 +21,7 @@
21 21  1*. название алгоритма рекомендации,
22 22  1*. параметры алгоритма (например, сколько продуктов рекомендовать).
23 23  1. Loymax AI возвращает массив продуктов, сформированный по указанному алгоритму.
24 -1. Loymax Smart Communications отправляет сообщение с рекомендациями.
24 +1. Loymax Smart Communications отправляет персонализированное сообщение с рекомендациями.
25 25  
26 26  == Настройка рекомендаций ==
27 27  
... ... @@ -83,8 +83,6 @@
83 83  
84 84  Рассмотрим пример добавления рекомендаций в сообщения. Мы хотим отправить клиентам email-рассылку с рекомендациями по алгоритму //Совместные покупки// (для этого в Системе создана рекомендация с кодом ##sov_pok##). У некоторых клиентов еще нет истории покупок, поэтому для них будем выдавать рекомендации по алгоритму //Популярные товары// (для этого в Системе создана рекомендация с кодом ##popular##).
85 85  
86 -Для удобства работы определим переменную и проверим, можем ли мы рекомендовать клиенту хотя бы три продукта по алгоритму //Совместные покупки//.
87 -
88 88  {{code}}
89 89  {% set Rec=client.recommendations.sov_pok %}
90 90  {% if not Rec or Rec|length < 3 %}
... ... @@ -93,106 +93,89 @@
93 93  
94 94  {{/code}}
95 95  
94 +Теперь переменная ##Rec## хранит массив объектов Продукт (##product##), подобранных по алгоритму //Совместные покупки//, а если клиент не совершил достаточного количества покупок, то по алгоритму //Популярные//.
96 96  
97 -{% set count_recs=0 %}{% set filteredRecommendation=[] %}
98 -{% for recommendation in clientRecommendation %}
99 -{% set item=recommendation %}
100 -{% if item not in filteredRecommendation and item.eComAvailable=='Y' and count_recs < 9 %}
101 - {% set filteredRecommendation=filteredRecommendation|merge([item]) %}
102 - {% set count_recs=count_recs + 1 %}
103 -{% endif %}
104 -{% endfor %}
105 -{% for batchrecommendation in filteredRecommendation|batch(3) %}##
106 -(% style="font-family:Menlo,Monaco,Consolas,~"Courier New~",monospace; white-space:pre" %){% if batchrecommendation|length == 3 %}(%%)##
96 +Отфильтруем массив рекомендованных продуктов, оставив только те, которые можно купить в интернет-магазине (значение логического пользовательского поля ##eComAvailable## — ##true##). Кроме того, для вывода в сообщение нам понадобится не более 9 продуктов (три ряда по три продукта).
107 107  
108 -== Механизм получения товарных рекомендаций ==
98 +Для этого определим две новых переменные: в массив ##filteredRec## мы будем записывать отфильтрованные рекомендации, а переменная ##count_recs## будет служить в качестве счётчика.
109 109  
110 -(((
111 -* (((
112 -=== Получение товарных рекомендаций целевым методом ===
113 -)))
114 -)))
100 +Переберём все продукты и добавим в массив те из них, которые не были добавлены ранее (таким образом обеспечивается дедупликация продуктов) и которые доступны для заказа в интернет-магазине. Каждый раз, когда мы добавляем продукт в массив отфильтрованных рекомендаций, значение переменной-счётчика увеличивается на 1. Таким образом, есть два сценария выхода из цикла: либо мы перебрали все продукты, либо мы отобрали 9 подходящих для добавления в сообщение.
115 115  
116 -Пример запроса с использованием целевого метода (Примечание: значение в кавычках отличается в зависимости от используемого метода):
102 +{{code}}
103 +{% set count_recs=0 %}
104 +{% set filteredRec=[] %}
105 +{% for product in Rec %}
106 + {% set item=product %}
107 + {% if item not in filteredRec and item.eComAvailable=='Y' and count_recs < 9 %}
108 +  {% set filteredRec=filteredRec|merge([item]) %}
109 +  {% set count_recs=count_recs + 1 %}
110 + {% endif %}
111 +{% endfor %}
112 +{{/code}}
117 117  
118 -(% class="box" %)
119 -(((
120 -##{% set clientRecommendation=client.recommendations('RelatedPurchases') %}##
121 -)))
114 +Теперь разобьём отфильтрованные рекомендации на группы по три.
122 122  
123 -* (((
124 -=== Получение товарных рекомендаций методом "Популярные" ===
125 -)))
116 +Если в процессе фильтрации мы получили количество подходящих продуктов, не кратное 3, в последней группе будет меньше 3 продуктов (например, 7=3+3+1). Проверим и выведем в сообщение только те группы, в которых ровно три продукта.
126 126  
127 -Если после обработки целевым методом товаров нет или недостаточно, то выполняется запрос по методу **Популярные**:
118 +Для каждого продукта выведем наименование и изображение.
128 128  
129 -(% class="box" %)
130 -(((
131 -##{% if not clientRecommendation or clientRecommendation|length < 3 %}
132 - {% set clientRecommendation=client.recommendations('Popular') %}
133 -{% endif %}##
134 -)))
120 +{{code}}
121 +{% for batch in filteredRec|batch(3) %}
122 +    {% if batch|length==3 %}
123 +        {% for recommendation in batch %}}
124 + {{ recommendation.name }}
125 + {{ recommendation.image_url }}
126 +{{/code}}
135 135  
136 -В результате создаётся массив отфильтрованных товаров, которые соответствуют условиям ниже:
128 +Далее реализуем такой сценарий:
137 137  
138 -(% class="box" %)
139 -(((
140 -##{% set count_recs=0 %}
141 -{% set filteredRecommendation=[] %}
142 -{% for recommendation in clientRecommendation %}
143 - {% set item=recommendation %}##
144 -)))
130 +* если цена продукта менялась (значения полей текущей цены в интернет-магазине и старой цены не равны), выведем старую и новую цену;
131 +* если цена продукта не менялась и поле цены в интернет-магазине заполнено, выведем текущую цену;
132 +* если поле цены в интернет-магазине не заполнено, выведем "Цена уточняется".
145 145  
146 -Далее из массива товаров выбираются только те товары, в которых атрибут ##eComAvailable=='Y'##. Аналогичным образом товары добавляются в массив отсортированных до тех пор, пока не наберётся 9 штук:
134 +{{code}}
135 +{% if recommendation.priceim and recommendation.oldprice and recommendation.priceim != recommendation.oldprice %}
136 +  Цена: {{ recommendation.priceim }}
137 +  Старая цена: {{ recommendation.oldprice_19 }}
138 +{% elseif recommendation.priceim %}
139 +  Цена: {{ recommendation.priceim }}
140 +{% else %}
141 +  Цена уточняется
142 +{% endif %}
143 +{% endfor %}
144 +{{/code}}
147 147  
148 -(% class="box" %)
149 -(((
150 - ## {% if item not in filteredRecommendation and item.eComAvailable=='Y' and count_recs < 9 %}
151 - {% set filteredRecommendation=filteredRecommendation|merge([item]) %}
152 - {% set count_recs=count_recs + 1 %}
153 - {% endif %}
154 -{% endfor %}##
155 -)))
146 +В итоге получим следующую конструкцию:
156 156  
157 -* (((
158 -=== Вывод товаров ===
159 -)))
160 -
161 -Товары выводятся строго по 3 штуки на 1 строку:
162 -
163 -(% class="box" %)
164 -(((
165 -##{% for batchrecommendation in filteredRecommendation|batch(3) %}
166 - {% if batchrecommendation|length==3 %}
167 - {% for recommendation in batchrecommendation %}}##
168 -)))
169 -
170 -* (((
171 -=== Вывод цен ===
172 -)))
173 -
174 -Если заполнены атрибуты старой и новой цены и они отличаются друг от друга, то выводятся обе цены:
175 -
176 -(% class="box" %)
177 -(((
178 -##{% if recommendation.priceim and recommendation.oldprice_19 and recommendation.priceim != recommendation.oldprice_19 %}
179 - ~{~{ recommendation.priceim }}
180 - ~{~{ recommendation.oldprice_19 }}##
181 -)))
182 -
183 -Если заполнен атрибут цены Интернет-магазина (##priceim)##, выводится цена Интернет-магазина:
184 -
185 -(% class="box" %)
186 -(((
187 -##{% elseif recommendation.priceim %}
188 - ~{~{ recommendation.priceim }}##
189 -)))
190 -
191 -Если нет данных, то отображается "n/a":
192 -
193 -(% class="box" %)
194 -(((
195 -##{% else %}
196 - n/a
197 -{% endif %}##
198 -)))
148 +{{showhide showmessage="Показать пример" hidemessage="Скрыть пример"}}
149 +{{code}}
150 +{% set Rec=client.recommendations.sov_pok %}
151 +{% if not Rec or Rec|length < 3 %}
152 + {% set Rec=client.recommendations.popular %}
153 +{% endif %}
154 +{% set count_recs=0 %}
155 +{% set filteredRec=[] %}
156 +{% for product in Rec %}
157 + {% if product not in filteredRec and product.eComAvailable=='Y' and count_recs < 9 %}
158 +  {% set filteredRec=filteredRec|merge([product]) %}
159 +  {% set count_recs=count_recs + 1 %}
160 + {% endif %}
161 +{% endfor %}
162 +{% for batch in filteredRec|batch(3) %}
163 +    {% if batch|length==3 %}
164 +        {% for recommendation in batch %}}
165 + {{ recommendation.name }}
166 + {{ recommendation.image_url }}
167 + {% if recommendation.priceim and recommendation.oldprice and recommendation.priceim != recommendation.oldprice %}
168 +   Цена: {{ recommendation.priceim }}
169 +   Старая цена: {{ recommendation.oldprice_19 }}
170 + {% elseif recommendation.priceim %}
171 +   Цена: {{ recommendation.priceim }}
172 + {% else %}
173 +   Цена уточняется
174 + {% endif %}
175 + {% endfor %}
176 + {% endif %}
177 +{% endfor %}
178 +{{/code}}
179 +{{/showhide}}

Новости
Обновления
Облако тегов
Словарь
Наш блог
YouTube и Rutube
Telegram