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

Las recomendaciones basadas en reglas se basan en una lógica fija que debes establecer manualmente. Esto significa que tus recomendaciones no se ajustarán al historial de compras y gustos de un usuario a menos que actualices la lógica.
Para crear recomendaciones de IA personalizadas que se ajusten automáticamente al historial del usuario, consulta Recomendaciones de elementos de IA.
Opciones de la herramienta 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:
| Herramienta de recomendaciones | Sin puntos de datos registrados | Solución sin código | Sin Liquid avanzado | Actualiza automáticamente la fuente de productos | Generado con la interfaz de Braze | Sin alojamiento de datos ni solución de problemas |
|---|---|---|---|---|---|---|
| Catálogos CSV | ✔ | Sí, si usas Liquid pregenerado. | ✔ | Sí, si las recomendaciones no se actualizan con frecuencia. | ✔ | ✔ |
| API de catálogos | ✔ | ✔ | Sí, si las recomendaciones se actualizan cada hora. | ✔ | ✔ | |
| Contenido conectado | ✔ | ✔ (Recomendaciones actualizadas en tiempo real) |
Sí, si se genera fuera de Braze. | |||
| Liquid | ✔ | ✔ |
Creación de una herramienta de recomendaciones
Crea tu herramienta de recomendaciones utilizando un catálogo o Contenido conectado:
Para crear tu herramienta de recomendaciones utilizando un catálogo:
- Crea un catálogo de productos.
- Para cada producto, añade una lista de productos recomendados como una cadena separada por un delimitador (como una barra vertical
|) en una columna llamada “product_recommendations”. - Pasa al catálogo el ID del producto para el que quieres encontrar recomendaciones.
- Obtén el valor
product_recommendationsde ese elemento del catálogo y divídelo por el delimitador con un filtro de división Liquid. - 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 saludable 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 sube un catálogo mediante un archivo CSV que incluya la siguiente información:
| Campo | Descripción |
|---|---|
| id | Un número único que se correlaciona con el número de días transcurridos desde que el usuario se registró en tu aplicación. Por ejemplo, 3 se correlaciona con tres días. |
| type | La categoría de la receta, como comfort, fresh y otras. |
| title | El título de la tarjeta de contenido que se enviará para cada ID, como “Prepárate para comer esta semana” o “Hablemos de tacos”. |
| link | El enlace al artículo de la receta. |
| image_url | La imagen que corresponde a la receta. |
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 se importó correctamente. Los elementos pueden aparecer en orden aleatorio en la vista previa, pero esto no afectará al resultado de la herramienta de recomendaciones.

Crea una campaña de tarjeta de contenido. En el creador de mensajes, 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 en 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
{% 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:

En la sección On click behavior, 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:

Ve a la pestaña Test y selecciona Custom user en Preview message as user. Introduce una fecha en el campo Custom attribute para obtener una vista previa de la tarjeta de contenido que se enviaría a un usuario que se hubiera registrado en esa fecha.

Para crear tu herramienta de recomendaciones utilizando Contenido conectado, primero crea un nuevo punto de conexión utilizando uno de los siguientes métodos:
| Opción | Descripción |
|---|---|
| Convertir una hoja de cálculo | Convierte una hoja de cálculo en un punto de conexión de API JSON utilizando un servicio como SheetDP y toma nota de la URL de la API que se genera. |
| Crear un punto de conexión personalizado | Crea, aloja y mantén un punto de conexión interno personalizado. |
| Utilizar una herramienta de terceros | Utiliza una herramienta de recomendaciones de terceros, como uno de nuestros socios de Alloy, entre los que se incluyen Amazon Personalise, Certona, Dynamic Yield y otros. |
A continuación, utiliza Liquid en tu mensaje que llama a tu punto de conexión para hacer coincidir un valor de 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:
| Atributo | Sustitución |
|---|---|
YOUR_API_URL |
Sustitúyelo por la URL real de tu API. |
RECOMMENDED_ITEM_IDS |
Sustitúyelo por el nombre real de tu atributo personalizado que contiene los ID de los elementos recomendados. Se espera que este atributo sea una cadena de ID separados por punto y coma. |
ITEM_ID |
Sustitúyelo por el nombre real del atributo en la respuesta de tu API que corresponde al ID del elemento. |

Este es un ejemplo básico y puede que tengas que modificarlo en función de tus necesidades específicas y de la estructura de tus datos. Para obtener información más detallada, consulta la documentación de Liquid o consulta con un desarrollador.
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, supongamos 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 de 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 solo el nombre y la valoración 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 valoración. Haz lo siguiente:
- Utiliza
assignpara crear matrices en blanco para las categorías de valoración “excellent”, “very good” y “good”. - Añade un bucle
forque examine la valoración de cada restaurante de la lista.- Si la valoración es “Excellent”, añade el nombre del restaurante a la cadena
excellent_restaurantsy, a continuación, añade un carácter * al final para separar cada nombre de restaurante. - Si la valoración es “Very Good”, añade el nombre del restaurante a la cadena
very_good_restaurantsy, a continuación, añade un carácter * al final. - Si la valoración es “Good”, añade el nombre del restaurante a la cadena
good_restaurantsy, a continuación, añade un carácter * al final.
- Si la valoración es “Excellent”, añade el nombre del restaurante a la cadena
- Limita el número de recomendaciones de restaurantes devueltas a cuatro por categoría.
Así sería la llamada 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: `*` %}
{% elsif {{list.restaurant.user_rating.rating_text}} == `Very Good` %}
{% assign very_good_restaurants = very_good_restaurants | append: list.restaurant.name | append: `*` %}
{% elsif {{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.
