Skip to content

Crear recomendaciones de artículos basadas en reglas

Aprende a crear una herramienta de recomendaciones basada en reglas a partir de los elementos de tu catálogo.

Acerca de las recomendaciones de artículos basadas en reglas

Una herramienta de recomendaciones basada en reglas utiliza datos de usuario e información sobre productos para sugerir a los usuarios elementos relevantes dentro de los mensajes. Utiliza Liquid y los catálogos Braze o el Contenido conectado para personalizar dinámicamente el contenido en función del comportamiento y los atributos del usuario.

Opciones del motor de recomendaciones

Cuando decidas qué herramienta de recomendaciones se adapta a tus recursos disponibles y a tus casos de uso, consulta esta tabla de consideraciones:

Creación de una herramienta de recomendaciones

Crea tu herramienta de recomendaciones utilizando un catálogo o Contenidos Conectados:

Para crear tu herramienta de recomendaciones utilizando un catálogo:

  1. Crea un catálogo de productos.
  2. Para cada producto, añade una lista de productos recomendados como una cadena separada por un delimitador (como una tubería |) en una columna llamada “recomendaciones_productos”.
  3. Pasa al catálogo el ID del producto para el que quieres encontrar recomendaciones.
  4. Obtén el valor product_recommendations de ese artículo del catálogo y divídelo por el delimitador con un filtro de división Liquid.
  5. Vuelve a pasar uno o varios de esos ID al catálogo para recoger los demás detalles del producto.

Ejemplo

Supongamos que tienes una aplicación de comida sana y quieres crear una campaña de tarjeta de contenido que envíe recetas diferentes en función del tiempo que un usuario lleva registrado en tu aplicación. En primer lugar, crea y carga un catálogo mediante un archivo CSV que incluya la siguiente información:

Una vez cargado el catálogo en Braze, comprueba la vista previa de un número selecto de elementos del catálogo para confirmar que la información importada es correcta. Los elementos pueden ser aleatorios en la vista previa, pero esto no afectará al resultado de la herramienta de recomendaciones.

Ejemplo de catálogo en Braze.

Crea una campaña de tarjeta de contenido. En el compositor, introduce la lógica Liquid para determinar qué usuarios deben recibir la campaña, y qué receta e imagen deben mostrarse. En este caso de uso, Braze obtendrá el start_date (o fecha de registro) del usuario y lo comparará con la fecha actual. La diferencia de días determinará qué tarjeta de contenido se envía.

1
2
3
4
5
6
{% assign start_date = {{custom_attribute.${start_date}}} | date: "%s" %}
{% assign current_date = "now" | date: "%s" %}
{% assign diff = {{current_date}} | minus: {{start_date}} | divided_by: 86400 %}
{% assign days = {{diff}} | round %}
{% catalog_items Healthy_Recipe_Catalog_SMB {{days}} %}
{{ items[0].title }}
1
2
3
4
5
6
7
8
9
10
{% assign start_date = {{custom_attribute.${start_date}}} | date: "%s" %}
{% assign current_date = "now" | date: "%s" %}
{% assign diff = {{current_date}} | minus: {{start_date}} | divided_by: 86400 %}
{% assign days = {{diff}} | round %}
{% catalog_items Healthy_Recipe_Catalog_SMB {{days}} %}
{% if items[0].title != blank %}
{{ items[0].body }}
{% else %}
{% abort_message('no card for today') %}
{% endif %}
1
2
3
4
5
6
{% assign start_date = {{custom_attribute.${start_date}}} | date: "%s" %}
{% assign current_date = "now" | date: "%s" %}
{% assign diff = {{current_date}} | minus: {{start_date}} | divided_by: 86400 %}
{% assign days = {{diff}} | round %}
{% catalog_items Healthy_Recipe_Catalog_SMB {{days}} %}
{{ items[0].image_url }}

Por ejemplo:

Un ejemplo de creador de mensajes de una campaña de tarjeta de contenido.

En la sección Comportamiento al hacer clic, introduce la lógica Liquid para saber a dónde deben ser redirigidos los usuarios cuando hacen clic en la tarjeta de contenido en dispositivos iOS, Android y Web.

1
2
3
4
5
6
{% assign start_date = {{custom_attribute.${start_date}}} | date: "%s" %}
{% assign current_date = "now" | date: "%s" %}
{% assign diff = {{current_date}} | minus: {{start_date}} | divided_by: 86400 %}
{% assign days = {{diff}} | round %}
{% catalog_items Healthy_Recipe_Catalog_SMB {{days}} %}
{{ items[0].link }}

Por ejemplo:

Un ejemplo de bloque de comportamiento al hacer clic en el compositor.

Ve a la pestaña de Prueba y selecciona Usuario personalizado en Vista previa del mensaje como usuario. Introduce una fecha en el campo Atributo personalizado para obtener una vista previa de la tarjeta de contenido que se enviaría a un usuario que se hubiera registrado en esa fecha.

Un ejemplo de atributo personalizado llamado 'fecha_inicio'.

Para crear tu herramienta de recomendaciones utilizando contenido conectado, crea primero un nuevo punto final utilizando uno de los siguientes métodos:

A continuación, utiliza Liquid en tu mensaje que llama a tu punto final para hacer coincidir el valor de un atributo personalizado con el perfil de un usuario y extraer la recomendación correspondiente.

1
2
3
4
5
6
7
8
{% connected_content YOUR_API_URL :save items %}

{% assign recommended_item_ids_from_user_profile = custom_attribute.${RECOMMENDED_ITEM_IDS} | split: ';' %}

{% for item_id in recommended_item_ids_from_user_profile %}
  {% assign recommended_item = items | where: "ITEM_ID", ITEM_ID | first %}
  recommended_item.item_name
{% endfor %}

Sustituye lo siguiente:

Ejemplo

Supongamos que quieres extraer recomendaciones de restaurantes de la base de datos Zomato Restaurants y guardar el resultado como una variable local llamada restaurants. Puedes hacer la siguiente llamada de Contenido conectado:

1
2
3
4
{% connected_content https://developers.zomato.com/api/v2.1/search?entity_id={{city_id}}&entity_type=city&count=20&cuisines={{food_type}}&sort=rating:headers{“user-key”:“USER_KEY”} :save restaurants %}

{{city_food.restaurants[0]}}

A continuación, digamos que quieres obtener recomendaciones de restaurantes en función de la ciudad y el tipo de comida de un usuario. Puedes hacerlo insertando dinámicamente los atributos personalizados para la ciudad y el tipo de comida del usuario al principio de la llamada, y asignando después el valor de restaurants a la variable city_food.restaurants.

La llamada al Contenido conectado tendría el siguiente aspecto:

1
2
3
4
5
6
7
8
{% assign city_id = {{custom_attribute.${city_id} | default: ‘306’}} %}
{% assign food_type = {{custom_attribute.${food_type} | default: ‘471’}} %}

{%- connected_content https://developers.zomato.com/api/v2.1/search?entity_id={{city_id}}&entity_type=city&count=20&cuisines={{food_type}}&sort=rating:headers{“user-key”:“USER_KEY”} :save restaurants %}

{% assign restaurants = city_food.restaurants %}

{{city_food.restaurants[0]}}

Si quieres adaptar la respuesta para recuperar sólo el nombre y la tasa del restaurante, puedes añadir filtros al final de la llamada, de esta forma

1
2
3
4
5
6
7
8
{% assign city_id = {{custom_attribute.${city_id} | default: ‘306’}} %}
{% assign food_type = {{custom_attribute.${food_type} | default: ‘471’}} %}

{%- connected_content https://developers.zomato.com/api/v2.1/search?entity_id={{city_id}}&entity_type=city&count=20&cuisines={{food_type}}&sort=rating:headers{“user-key”:”USER_KEY”} :save restaurants %}
{% assign restaurants = city_food.restaurants %}

{{city_food.restaurants[0].restaurant.name}}
{{city_food.restaurants[0].restaurant.user_rating.rating_text}}

Por último, supongamos que quieres agrupar las recomendaciones de restaurantes por tasas. Haz lo siguiente:

  1. Utiliza assign para crear matrices en blanco para las categorías de valoración “excelente”, “muy bueno” y “bueno”.
  2. Añade un bucle for que examine la tasa de cada restaurante de la lista.
    • Si la tasa es “Excelente”, añade el nombre del restaurante a la cadena excellent_restaurants y, a continuación, añade un carácter * al final para separar cada nombre de restaurante.
    • Si la tasa es “Muy buena”, añade el nombre del restaurante a la cadena very_good_restaurants y, a continuación, añade un carácter * al final.
    • Si la valoración es “Buena”, añade el nombre del restaurante a la cadena good_restaurants y, a continuación, añade un carácter * al final.
  3. Limita el número de recomendaciones de restaurantes devueltas a cuatro por categoría.

Así sería la convocatoria final:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{% assign city_id = {{custom_attribute.${city_id} | default: ‘306’}} %}
{% assign food_type = {{custom_attribute.${food_type} | default: ‘471’}} %}
{%- connected_content https://developers.zomato.com/api/v2.1/search?entity_id={{city_id}}&entity_type=city&count=20&cuisines={{food_type}}&sort=rating:headers{“user-key”:”USER_KEY”} :save restaurants %}
{% assign restaurants = city_food.restaurants %}
{% assign excellent_restaurants = “” %}
{% assign very_good_resturants = “” %}
{% assign good_restaurants = “” %}
{% for list in restaurants %}
{% if {{list.restaurant.user_rating.rating_text}} == `Excellent` %}
{% assign excellent_restaurants = excellent_restaurants | append: list.restaurant.name | append: `*` %}
{% elseif {{list.restaurant.user_rating.rating_text}} == `Very Good` %}
{% assign very_good_restaurants = very_good_restaurants | append: list.restaurant.name | append: `*` %}
{% elseif {{list.restaurant.user_rating.rating_text}} == `Good` %}
{% assign good_restaurants = good_restaurants | append: list.restaurant.name | append: `*` %}
{% endif %}
{% endfor %}
{% assign excellent_array = excellent_restaurants | split: `*` %}
{% assign very_good_array = very_good_restaurants | split: `*` %}
{% assign good_array = good_restaurants | split: `*` %}

Excellent places
{% for list in excellent_array %}

{{list}}
{% assign total_count = total_count | plus:1 %}
{% if total_count >= 4 %}
{% break %}
{% endif %}
{% endfor %}

Very good places
{% for list in very_good_array %}

{{list}}
{% assign total_count = total_count | plus:1 %}
{% if total_count >= 4 %}
{% break %}
{% endif %}
{% endfor %}

Good places
{% for list in good_array %}

{{list}}
{% assign total_count = total_count | plus:1 %}
{% if total_count >= 4 %}
{% break %}
{% endif %}
{% endfor %}

Mira la siguiente captura de pantalla para ver un ejemplo de cómo se muestra la respuesta en el dispositivo de un usuario.

Representación de una lista de restaurantes generada por la llamada final del ejemplo.

¿QUÉ TAN ÚTIL FUE ESTA PÁGINA?
New Stuff!