Изменения документа Товарные рекомендации
<
>
отредактировано Андрей Рылов
на 26/12/2025 14:35
на 26/12/2025 14:35
отредактировано Андрей Рылов
на 29/12/2025 11:43
на 29/12/2025 11:43
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -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,97 @@ 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 +Отфильтруем массив рекомендованных продуктов, оставив только те, которые можно купить в интернет-магазине (значение логического пользовательского [[поля>>doc:Main.Using.Smart_Communications.Settings_SC.Data_field.WebHome]] ##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 %} 146 +В итоге получим следующую конструкцию: 147 + 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 %} 153 153 {% endif %} 154 -{% endfor %}## 155 -))) 177 +{% endfor %} 178 +{{/code}} 179 +{{/showhide}} 156 156 157 -* ((( 158 -=== Вывод товаров === 159 -))) 160 - 161 -Товары выводятся строго по 3 штуки на 1 строку: 162 - 163 163 (% class="box" %) 164 164 ((( 165 -##{% for batchrecommendation in filteredRecommendation|batch(3) %} 166 - {% if batchrecommendation|length==3 %} 167 - {% for recommendation in batchrecommendation %}}## 168 -))) 183 +**Читайте также:** 169 169 170 -* (((171 - ===Выводцен===185 +* [[Рекомендации>>doc:Main.General_information.Loymax_Loyalty.recommendation_systems.Commercial_recommendations.WebHome]] 186 +* [[Шаблонизатор сообщений>>doc:Main.Using.Smart_Communications.Mass_mailings.Template_builder.WebHome]] 172 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 -)))