Para usar filtros em tempo real no Experience OS, consulte regras de filtro personalizadas para o Recommendations.
Nas suas campanhas de API, os filtros em tempo real permitem resultados em tempo real com base em dados obtidos dentro da sessão. Por exemplo, mostrar produtos com preços mais altos do que o produto atualmente visualizado ou apresentar produtos com base na seleção explícita do usuário.
Casos de uso comuns incluem:
- Sugestões de frete grátis: produtos recomendados que se enquadram na faixa de preço que qualifica o usuário a obter frete grátis (acima do mínimo).
- Upsell: produtos recomendados com preços mais altos do que o produto atualmente visualizado.
- Localizador de produtos: produtos recomendados com base em filtros explícitos definidos pelo visitante na sessão (por exemplo, assistente localizador de presentes).
- Propriedade explícita do usuário: produtos recomendados que correspondem a uma propriedade de usuário conhecida na sessão (gênero ou local).
Limitações
- Até 30 regras de filtro personalizadas por widget.
- Até 5 regras em tempo real por widget (das 30 regras de filtro personalizadas em todos).
- Cada regra pode ter até 10 condições/argumentos.
- O limite de tamanho da string de regra é de 2048 e o limite de comprimento do valor avaliado é de 255.
Parâmetros
- id: somente API do lado do cliente. O número de ID exclusivo para cada regra. Esse ID é usado na resposta da API (se 2 regras tiverem o mesmo ID, a segunda regra é descartada).
- type: apenas include/exclude (incluir/excluir).
- slots: todas as posições de espaços ou posições específicas em que o primeiro espaço está na posição 0.
- conditions: tipos de condição para filtrar recomendações incluem:
- IS // apenas string ou booleano ("In stock" - true/false)
- IS_NOT // somente string
- CONTAINS // Até 10 desse tipo por filtro
- EQ, GT, GTE, LT, LTE // apenas números
- Quando você constrói a regra, vários argumentos dentro da mesma condição usam o operador OR entre eles, enquanto que, se você adicionar outras condições dentro de uma regra, elas usam o operador AND.
{
"user":{
"dyid": "3337168279039708439",
"dyid_server":"3337168279039708439"
},
"session":{
"dy":"dy_session1000000000010"
},
"context":{
"page":{
"type":"HOMEPAGE",
"location":"https://website.com.br/",
"data":[]
}
},
"options":{
"isImplicitPageview": true,
"recsProductData": {
"fieldFilter": [
"categories"
]
}
},
"selector":{
"names":[
"test_rcom"
],
"args":{
"test_rcom":{
"realtimeRules":[
{
"type":"include",
"slots":[],
"query":{
"conditions":[
{
"field":"categories",
"arguments":[
{
"action":"CONTAINS",
"value":"basquete"
}
]
},
{
"field":"categories",
"arguments":[
{
"action":"CONTAINS",
"value":"futebol"
}
]
}
]
}
}
]
}
}
},
"device":{
"userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
"ip":"54.100.200.255"
}
}
...
"selector":{
"names":[
"test_rcom"
],
"args":{
"test_rcom":{
"realtimeRules":[
{
"type":"include",
"slots":[],
"query":{
"conditions":[
{
"field":"categories",
"arguments":[
{
"action":"IS",
"value":"basquete"
},
{
action":"IS",
"value":"futebol"
},
]
}
......
- value: parâmetro para filtrar valor por condição. Expressões regulares não são compatíveis com filtros em tempo real (podem e devem ser adicionadas como condições adicionais ao filtro).
-
priority (opcional): os filtros em tempo real têm prioridade sobre quaisquer filtros existentes (embutidos).
Apenas para API do lado do cliente: adicione dados de prioridade e defina uma prioridade entre 0 e 29. Se houver regras existentes definidas no Experience OS (regulares ou em tempo real, qualquer tipo de regra), isso reduz suas prioridades existentes.
Caso de uso 1: adicionar sugestões de frete grátis
Solicite produtos recomendados que se enquadrem na faixa de preço que qualificaria o visitante ao frete grátis (acima do mínimo). Neste exemplo, o mínimo para frete grátis é de 50, e gostaríamos de recomendar produtos com preço diferença entre o mínimo para frete grátis e o total do carrinho e com preço <mínimo para="para" frete="frete" grátis="grátis" (50="(50" nesse="nesse" caso).="caso)."></mínimo>
var THRESHOLD = 50; // Mínimo do carrinho
var CART_TOTAL_SELECTOR = '.js-cart-totals__total' // Seletor do carrinho por seção
var STRATEGY_ID = 64040; // ID da estratégia para recomendações
var cartValuePromise = DYO.waitForElementAsync(CART_TOTAL_SELECTOR).then(function(elements) {
return parseFloat(elements[0].textContent.replace(/[^\d.-]/g, ''))
});
cartValuePromise.then(function(cartValue) {
var freeShippingRemainder = THRESHOLD - cartValue;
if (freeShippingRemainder > 0) {
console.log('Produtos acima', freeShippingRemainder);
getProducts(STRATEGY_ID, freeShippingRemainder, THRESHOLD);
} else {
console.log('Acima do limite de envio')
// sem necessidade de recomendações
}
});
function getProducts(strategyId, min, max) {
var realtimeRules = [{
"id": -1,
"query": {
"conditions": [{
"field": "price", // Condição
"arguments": [{
"action": "GTE", // Tipo de ação IS / IS_NOT / CONTAINS / EQ / GT / GTE / LT / LTE
"value": min // Valor da condição
}]
}, {
"field": "price", // Condição
"arguments": [{
"action": "LTE",
"value": max
}]
}]
},
"type": "include", // Include ou exclude (incluir ou excluir, respectivamente)
"slots": [] // Posição no widget
}];
DYO.recommendationWidgetData(strategyId, {maxProducts: 10, realtimeRules: realtimeRules}, function(err, data) {
console.log(data);
});
}
{
"user": {
"id": "yaexono4ohphania" //para o modo WEB use "dyid"
},
"session": {
"custom": "iquahngaishe2koh" //para o modo WEB use "dy"
},
"selector": {
"names": [
"campanha recs"
],
"args": {
"campanha recs": { //A campanha em que a regra será aplicada
"realtimeRules": [
{
"type": "include", // Include ou exclude (incluir ou excluir, respectivamente)
"slots": [], // Posição no widget
"query": {
"conditions": [
{
"field": "price", // Condição
"arguments": [
{
"action": "GTE", // Tipo de ação IS / IS_NOT / CONTAINS / EQ / GT / GTE / LT / LTE
"value": min // Valor da condição
}
]
},
{
"field": "price", // Condição
"arguments": [
{
"action": "LTE",
"value": max
}
]
}
]
}
}
]
}
}
},
"context": {
"page": {
"type": "CART",
"data": [
"7383723-010"
],
"location": "https://exemplo.org",
"locale": "en_US"
},
"device": {
"userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
"ip": "54.100.200.255"
},
"pageAttributes": {
"customPageAttribute": "algumValor"
},
"options": {
"isImplicitPageview": true
}
},
"options": {}
}
Caso de uso 2: criar um localizador de produtos
Use para solicitar produtos recomendados com base em filtros explícitos definidos pelo visitante na sessão. Neste exemplo, vamos acionar 3 espaços (2, 3 e 4) de recomendações de produtos da categoria com a maior pontuação com base no perfil de afinidade do usuário.
var STRATEGY_ID = 12345;
DY.API('callback', function() {
DY.ServerUtil.getUserAffinities(function(error, affinityObject) {
if (error || !affinityObject.categories) {
getProducts(STRATEGY_ID, null);
return;
}
var categories = affinityObject.categories;
var sortedCategories = Object.keys(categories).map(function(name) {
return {
name: name,
score: categories[name]
};
}).sort(function(a,b) {
return b.score - a.score;
});
getProducts(STRATEGY_ID, sortedCategories[0].name);
}, 5);
});
function getProducts(strategyId, categoryName) {
var realtimeRules = [{
"id": -2,
"query": {
"conditions": [{
"field": "categories", // Condição
"arguments": [{
"action": "IS", // Tipo de ação IS / IS_NOT / CONTAINS / EQ / GT / GTE / LT / LTE
"value": categoryName // Valor da condição
}]
}]
},
"type": "include", // Include ou exclude (incluir ou excluir, respectivamente)
"slots": [1, 2, 3] // Posição no widget
}];
DYO.recommendationWidgetData(strategyId, {maxProducts: 10, realtimeRules: realtimeRules}, function(err, data) {
console.log(data);
});
}
{
"user": {
"id": "yaexono4ohphania" //para o modo WEB use "dyid"
},
"session": {
"custom": "iquahngaishe2koh" //para o modo WEB use "dy"
},
"selector": {
"names": [
"campanha recs"
],
"args": {
"campanha recs": { //a campanha na qual a regra será aplicada
"realtimeRules": [
{
"type": "include", // Include ou exclude (incluir ou excluir, respectivamente)
"slots": [
1,
2,
3
], // Posição no widget
"query": {
"conditions": [
{
"field": "categories", // Condição
"arguments": [
{
"action": "IS", // Tipo de ação IS / IS_NOT / CONTAINS / EQ / GT / GTE / LT / LTE
"value": categoryName // Valor da condição
}
]
}
]
}
}
]
}
}
},
"context": {
"page": {
"type": "CART",
"data": [
"7383723-010"
],
"location": "https://exemplo.org",
"locale": "en_US"
},
"device": {
"userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
"ip": "54.100.200.255"
},
"pageAttributes": {
"customPageAttribute": "algumValor"
},
"options": {
"isImplicitPageview": true
}
},
"options": {}
}