Изменения документа Товарные рекомендации
<
>
отредактировано Андрей Рылов
на 29/12/2025 10:52
на 29/12/2025 10:52
отредактировано Андрей Рылов
на 26/12/2025 14:35
на 26/12/2025 14:35
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (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,6 +83,8 @@ 83 83 84 84 Рассмотрим пример добавления рекомендаций в сообщения. Мы хотим отправить клиентам email-рассылку с рекомендациями по алгоритму //Совместные покупки// (для этого в Системе создана рекомендация с кодом ##sov_pok##). У некоторых клиентов еще нет истории покупок, поэтому для них будем выдавать рекомендации по алгоритму //Популярные товары// (для этого в Системе создана рекомендация с кодом ##popular##). 85 85 86 +Для удобства работы определим переменную и проверим, можем ли мы рекомендовать клиенту хотя бы три продукта по алгоритму //Совместные покупки//. 87 + 86 86 {{code}} 87 87 {% set Rec=client.recommendations.sov_pok %} 88 88 {% if not Rec or Rec|length < 3 %} ... ... @@ -91,89 +91,106 @@ 91 91 92 92 {{/code}} 93 93 94 -Теперь переменная ##Rec## хранит массив объектов Продукт (##product##), подобранных по алгоритму //Совместные покупки//, а если клиент не совершил достаточного количества покупок, то по алгоритму //Популярные//. 95 95 96 -Отфильтруем массив рекомендованных продуктов, оставив только те, которые можно купить в интернет-магазине (значение логического пользовательского поля ##eComAvailable## — ##true##). Кроме того, для вывода в сообщение нам понадобится не более 9 продуктов (три ряда по три продукта). 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 %}(%%)## 97 97 98 - Дляэтого определим две новыхпеременные: в массив ##filteredRec##мыбудем записыватьотфильтрованныерекомендации,а переменная ##count_recs## будет служить в качестве счётчика.108 +== Механизм получения товарных рекомендаций == 99 99 100 -Переберём все продукты и добавим в массив те из них, которые не были добавлены ранее (таким образом обеспечивается дедупликация продуктов) и которые доступны для заказа в интернет-магазине. Каждый раз, когда мы добавляем продукт в массив отфильтрованных рекомендаций, значение переменной-счётчика увеличивается на 1. Таким образом, есть два сценария выхода из цикла: либо мы перебрали все продукты, либо мы отобрали 9 подходящих для добавления в сообщение. 110 +((( 111 +* ((( 112 +=== Получение товарных рекомендаций целевым методом === 113 +))) 114 +))) 101 101 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}} 116 +Пример запроса с использованием целевого метода (Примечание: значение в кавычках отличается в зависимости от используемого метода): 113 113 114 -Теперь разобьём отфильтрованные рекомендации на группы по три. 118 +(% class="box" %) 119 +((( 120 +##{% set clientRecommendation=client.recommendations('RelatedPurchases') %}## 121 +))) 115 115 116 -Если в процессе фильтрации мы получили количество подходящих продуктов, не кратное 3, в последней группе будет меньше 3 продуктов (например, 7=3+3+1). Проверим и выведем в сообщение только те группы, в которых ровно три продукта. 123 +* ((( 124 +=== Получение товарных рекомендаций методом "Популярные" === 125 +))) 117 117 118 - Длякаждогопродуктавыведемнаименованиеи изображение.127 +Если после обработки целевым методом товаров нет или недостаточно, то выполняется запрос по методу **Популярные**: 119 119 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}} 129 +(% class="box" %) 130 +((( 131 +##{% if not clientRecommendation or clientRecommendation|length < 3 %} 132 + {% set clientRecommendation=client.recommendations('Popular') %} 133 +{% endif %}## 134 +))) 127 127 128 - Далеереализуем такойсценарий:136 +В результате создаётся массив отфильтрованных товаров, которые соответствуют условиям ниже: 129 129 130 -* если цена продукта менялась (значения полей текущей цены в интернет-магазине и старой цены не равны), выведем старую и новую цену; 131 -* если цена продукта не менялась и поле цены в интернет-магазине заполнено, выведем текущую цену; 132 -* если поле цены в интернет-магазине не заполнено, выведем "Цена уточняется". 138 +(% class="box" %) 139 +((( 140 +##{% set count_recs=0 %} 141 +{% set filteredRecommendation=[] %} 142 +{% for recommendation in clientRecommendation %} 143 + {% set item=recommendation %}## 144 +))) 133 133 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}} 146 +Далее из массива товаров выбираются только те товары, в которых атрибут ##eComAvailable=='Y'##. Аналогичным образом товары добавляются в массив отсортированных до тех пор, пока не наберётся 9 штук: 145 145 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 %} 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 %} 176 176 {% endif %} 177 -{% endfor %} 178 -{{/code}} 179 -{{/showhide}} 154 +{% endfor %}## 155 +))) 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 +)))