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, confirma que la información se importó correctamente seleccionando tu catálogo en la página de catálogos y abriendo la pestaña Vista previa. Aparecerá un número selecto de elementos en la vista previa, y pueden estar en orden aleatorio, pero esto no afecta al resultado de la herramienta de recomendaciones.
Con el catálogo listo, 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 obtiene el start_date (o fecha de registro) del usuario y lo compara con la fecha actual. La diferencia en días determina 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 Comportamiento de 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:

Ve a la pestaña 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.

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.
