Skip to content

Criação de recomendações de itens baseadas em regras

Saiba como criar um mecanismo de recomendação baseado em regras a partir de itens em seu catálogo.

Sobre recomendações de itens baseadas em regras

Um mecanismo de recomendação baseado em regras usa dados de usuários e informações de produtos para sugerir itens relevantes aos usuários dentro das mensagens. Ele usa o Liquid e os catálogos do Braze ou o Connected Content para personalizar dinamicamente o conteúdo com base no comportamento e nas atribuições do usuário.

Opções do mecanismo de recomendação

Ao decidir qual mecanismo de recomendação se adequa aos seus recursos disponíveis e aos casos de uso, consulte esta tabela de considerações:

Criação de um mecanismo de recomendação

Crie seu mecanismo de recomendação usando um catálogo ou o Connected Content:

Para criar seu mecanismo de recomendação usando um catálogo:

  1. Crie um catálogo de produtos.
  2. Para cada produto, adicione uma lista de produtos recomendados como uma string separada por um delimitador (como um pipe |) em uma coluna chamada “product_recommendations”.
  3. Passe para o catálogo o ID do produto para o qual você deseja encontrar recomendações.
  4. Obtenha o valor product_recommendations para esse item de catálogo e divida-o pelo delimitador com um filtro de divisão Liquid.
  5. Passe um ou mais desses IDs de volta para o catálogo para coletar os outros detalhes do produto.

Exemplo

Digamos que você tenha um aplicativo de alimentos saudáveis e queira criar uma campanha de cartão de conteúdo que envie receitas diferentes com base no tempo em que o usuário inscreveu-se em seu app. Primeiro, crie e faça upload de um catálogo por meio de um arquivo CSV que inclua as seguintes informações:

Depois que for feito o upload do catálogo para a Braze, verifique a prévia de um número selecionado de itens do catálogo para confirmar se as informações foram importadas com precisão. Os itens podem ser randomizados na prévia, mas isso não afetará o resultado do mecanismo de recomendação.

Exemplo de catálogo em Braze.

Crie uma campanha de cartão de conteúdo. No criador, insira a lógica Liquid para determinar quais usuários devem receber a campanha e qual receita e imagem devem ser exibidas. Nesse caso de uso, o Braze extrairá o endereço start_date do usuário (ou data de inscrição) e o comparará com a data atual. A diferença de dias determinará qual cartão de conteúdo será enviado.

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 exemplo:

Um exemplo de criador de mensagens de uma campanha de cartão de conteúdo.

Na seção Comportamento ao clicar, insira a lógica Liquid para onde os usuários devem ser redirecionados quando clicarem no Content Card em dispositivos iOS, Android e 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 exemplo:

Um exemplo de bloco de comportamento ao clicar no criador.

Acesse a guia Teste e selecione Usuário personalizado em Pré-visualizar mensagem como usuário. Insira uma data no campo Atributo personalizado para prévia do cartão de conteúdo que seria enviado a um usuário que inscreveu-se nessa data.

Um exemplo de atributo personalizado chamado 'start_date'.

Para criar seu mecanismo de recomendação usando o Connected Content, primeiro crie um novo endpoint usando um dos métodos a seguir:

Em seguida, use o Liquid em sua mensagem que chama o endpoint para fazer a correspondência de um valor de atributo personalizado com o perfil de um usuário e extrair a recomendação correspondente.

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 %}

Substitua o seguinte:

Exemplo

Digamos que você queira extrair recomendações de restaurantes do banco de dados do Zomato Restaurants e salvar o resultado como uma variável local chamada restaurants. Você pode fazer a seguinte chamada de Connected Content:

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]}}

Em seguida, digamos que você queira obter recomendações de restaurantes com base na cidade e no tipo de comida de um usuário. Isso pode ser feito inserindo dinamicamente os atributos personalizados da cidade e do tipo de alimento do usuário no início da chamada e atribuindo o valor de restaurants à variável city_food.restaurants.

A chamada do Connected Content seria semelhante a esta:

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]}}

Se quiser personalizar a resposta para recuperar apenas o nome e a classificação do restaurante, você pode adicionar filtros à ponta da chamada, da seguinte 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 fim, digamos que você queira agrupar as recomendações de restaurantes por classificação. Faça o seguinte:

  1. Use assign para criar matrizes em branco para categorias de classificação de “excelente”, “muito bom” e “bom”.
  2. Adicione um loop for que examine a classificação de cada restaurante da lista.
    • Se uma classificação for “Excelente”, acrescente o nome do restaurante à string excellent_restaurants e, em seguida, adicione um caractere * no final para separar cada nome de restaurante.
    • Se uma classificação for “Muito bom”, acrescente o nome do restaurante à string very_good_restaurants e, em seguida, adicione um caractere * no final.
    • Se uma classificação for “Boa”, acrescente o nome do restaurante à string good_restaurants e, em seguida, adicione um caractere * no final.
  3. Limite o número de recomendações de restaurantes retornadas a quatro por categoria.

Esta é a aparência da chamada 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 %}

Veja na captura de tela abaixo um exemplo de como a resposta é exibida no dispositivo de um usuário.

Renderização de uma lista de restaurantes gerada pelo exemplo de chamada final.

QUÃO ÚTIL FOI ESTA PÁGINA?
New Stuff!