Pour utiliser des filtres en temps réel dans Experience OS, reportez-vous à l'article Règles de Filtrage Personnalisé des Recommandations.
Dans vos campagnes API, les filtres en temps réel permettent d'obtenir des résultats en temps réel basés sur les données obtenues en cours de session. Par exemple, montrez les produits dont le prix est supérieur à celui du produit actuellement consulté ou présenter des produits en fonction de la sélection explicite de l'utilisateur.
Les cas d'utilisation courants comprennent :
- Suggestions de livraison gratuite : produits recommandés qui se situent dans la fourchette de prix qui permet à l'utilisateur de bénéficier d'une livraison gratuite (au-dessus du seuil).
- Vente incitative : produits recommandés dont le prix est supérieur à celui du produit actuellement consulté.
- Recherche de produits : produits recommandés basés sur les filtres explicites définis par le visiteur dans la session (par exemple, assistant de recherche pour cadeau).
- Propriété explicite de l'utilisateur : produits recommandés qui correspondent à une propriété utilisateur connue dans la session (sexe ou emplacement).
Limites
- Jusqu'à 30 règles de filtre personnalisées par widget.
- Jusqu'à 5 règles en temps réel par widget (sur les 30 règles de filtre personnalisées au total).
- Chaque règle peut avoir jusqu'à 10 conditions/arguments.
- La limite de taille de chaîne de la règle est 2048 et la limite de longueur de valeur évaluée est 255.
Paramètres
- id : API côté client uniquement. Le numéro d'identification unique pour chaque règle. Cet ID est utilisé dans la réponse de l'API (si deux règles ont le même ID, la deuxième règle est abandonnée).
- type : inclure/exclure uniquement.
- slots : toutes les positions d'emplacement ou des positions d'emplacement spécifiques où le premier emplacement est en position 0.
- conditions : types de conditions pour les recommandations de filtrage include :
- IS // chaîne ou expression booléenne (‘In stock’ - true/false) uniquement
- IS_NOT // chaîne uniquement
- CONTAINS // Jusqu'à 10 de ce type par filtre
- EQ, GT, GTE, LT, LTE // chiffres uniquement
- Lorsque vous créez la règle, plusieurs arguments à l'intérieur de la même condition utilisent l'opérateur OR entre eux, tandis que si vous ajoutez des conditions supplémentaires à l'intérieur d'une règle, ils utilisent l'opérateur AND.
{
"user":{
"dyid": "3337168279039708439",
"dyid_server":"3337168279039708439"
},
"session":{
"dy":"dy_session1000000000010"
},
"context":{
"page":{
"type":"PAGE D'ACCUEIL",
"location":"https://website.com/",
"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":"basketball"
}
]
},
{
"field":"categories",
"arguments":[
{
"action":"CONTAINS",
"value":"football"
}
]
}
]
}
}
]
}
}
},
"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":"basketball"
},
{
action":"IS",
"value":"football"
},
]
}
......
- value : paramètre pour la valeur du filtre par condition. Les expressions régulières ne sont pas prises en charge pour les filtres en temps réel (peuvent et doivent être ajoutées comme conditions supplémentaires au filtre).
-
priority (facultatif) : les filtres temps réel sont prioritaires par rapport à tous les filtres existants (intégrés).
Pour l'API côté client uniquement : ajoutez des données de priorité et définissez une priorité entre 0 et 29. S'il y a des règles existantes définies dans Experience OS (régulières ou en temps réel, tout type de règle), cela réduit leurs priorités existantes.
Cas d'utilisation 1 : ajout de suggestions de livraison gratuite
Demander des produits recommandés qui se situent dans la fourchette de prix qui permettraient au visiteur de bénéficier d'une livraison gratuite (dépasser le seuil). Dans cet exemple, le seuil de livraison gratuite est de 50, et nous aimerions recommander des produits dont le prix est supérieur à la différence entre le seuil de livraison gratuite et le total du panier et dont le prix est inférieur au seuil de livraison gratuite (50 dans ce cas).
var THRESHOLD = 50; // Seuil du panier
var CART_TOTAL_SELECTOR = '.js-cart-totals__total' // Sélecteur de panier par site
var STRATEGY_ID = 64040; // ID de stratégie pour les recommandations
var cartValuePromise = DYO.waitForElementAsync(CART_TOTAL_SELECTOR).then(function(elements) {
return parseFloat(elements[0].textContent.replace(/[^\d.-]/g, ''))
});
cartValuePromise.then(fonction(cartValue) {
var freeShippingRemainder = THRESHOLD - cartValue;
if (freeShippingRemainder > 0) {
console.log('Products above', freeShippingRemainder);
getProducts(STRATEGY_ID, freeShippingRemainder, THRESHOLD);
} else {
console.log('Over shipping limit')
// pas besoin de recommandations.
}
});
function getProducts(strategyId, min, max) {
var realtimeRules = [{
"id": -1,
"query": {
"conditions": [{
"field": "price", // Condition
"arguments": [{
"action": "GTE", // Type d'action IS / IS_NOT / CONTAINS / EQ / GT / GTE / LT / LTE
"value": min // Valeur de la condition
}]
}, {
"field": "price", // Condition
"arguments": [{
"action": "LTE",
"value": max
}]
}]
},
"type": "include", // Inclure ou exclure
"slots": [] // Position dans le widget
}];
DYO.recommendationWidgetData(strategyId, {maxProducts: 10, realtimeRules: realtimeRules}, function(err, data) {
console.log(data);
});
}
{
"user": {
"id": "yaexono4ohphania" //pour le mode WEB, utilisez "dyid"
},
"session": {
"custom": "iquahngaishe2koh" //pour le mode WEB, utilisez "dy"
},
"selector": {
"names": [
"recs campaign"
],
"args": {
"campagne recs": { //La campagne sur laquelle la règle sera appliquée
"realtimeRules": [
{
"type": "include", // Inclure ou exclure
"slots": [], // Position dans le widget
"query": {
"conditions": [
{
"field": "price", // Condition
"arguments": [
{
"action": "GTE", //Type d'action IS / IS_NOT / CONTAINS / EQ / GT / GTE / LT / LTE
"value": min // Valeur de la condition
}
]
},
{
"field": "price", // Condition
"arguments": [
{
"action": "LTE",
"value": max
}
]
}
]
}
}
]
}
}
},
"context": {
"page": {
"type": "PANIER",
"data": [
"7383723-010"
],
"location": "https://example.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": "someValue"
},
"options": {
"isImplicitPageview": true
}
},
"options": {}
}
Cas d'utilisation 2 : créer un outil de recherche de produits
Utiliser pour demander des produits recommandés en fonction de filtres explicites définis par le visiteur au cours de la session. Dans cet exemple, nous allons déclencher 3 emplacements (2, 3 et 4) de recommandations de produits de la catégorie avec le score le plus élevé en fonction du profil d’affinité des utilisateurs.
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", // Condition
"arguments": [{
"action": "IS", //Type d'action IS / IS_NOT / CONTAINS / EQ / GT / GTE / LT / LTE
"value": categoryName // Valeur de la condition
}]
}]
},
"type": "include", // Inclure ou exclure
"slots": [1, 2, 3] // Position dans le widget
}];
DYO.recommendationWidgetData(strategyId, {maxProducts: 10, realtimeRules: realtimeRules}, function(err, data) {
console.log(data);
});
}
{
"user": {
"id": "yaexono4ohphania" //pour le mode WEB, utilisez "dyid"
},
"session": {
"custom": "iquahngaishe2koh" //pour le mode WEB, utilisez "dyid"
},
"selector": {
"names": [
"recs campaign"
],
"args": {
"campagne recs": { //la campagne sur laquelle la règle sera appliquée
"realtimeRules": [
{
"type": "include", // Inclure ou exclure
"slots": [
1,
2,
3
], // Position dans le widget
"query": {
"conditions": [
{
"field": "categories", // Condition
"arguments": [
{
"action": "IS", //Type d'action IS / IS_NOT / CONTAINS / EQ / GT / GTE / LT / LTE
"value": categoryName // Valeur de la condition
}
]
}
]
}
}
]
}
}
},
"context": {
"page": {
"type": "PANIER",
"data": [
"7383723-010"
],
"location": "https://example.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": "someValue"
},
"options": {
"isImplicitPageview": true
}
},
"options": {}
}