Skip to content

Recomendações 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.

Para saber mais sobre o Liquid, os catálogos e o Connected Content, confira estes cursos do Braze Learning:

Criação de um mecanismo de recomendação de catálogos

  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.

Caso de uso de catálogos

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.

  1. Crie e faça upload de um catálogo via CSV que inclua as seguintes informações:
    - id: Um número exclusivo que se correlaciona com o número de dias desde que o usuário inscreveu-se no seu app. Por exemplo, 3 está correlacionado a três dias.
    - tipo: A categoria da receita, como comfort, fresh, e outras.
    - título: O título do cartão de conteúdo que será enviado para cada ID, como “Prepare-se para o almoço desta semana” ou “Vamos almoçar tacos”.
    - link: O link para o artigo da receita.
    - image_url: A imagem que corresponde à receita.

2. 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.

3. 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.

Título:

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

Mensagem:

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

Imagem:

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

4. 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 }}



5. 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.

Criação de um mecanismo de recomendação do Connected Content

  1. Crie um endpoint “conteúdo conectado” de uma das seguintes maneiras:
    • Converta uma planilha em um ponto de extremidade da API JSON usando um serviço como o SheetDP e anote o URL da API que isso gera
    • Criar, hospedar e manter um endpoint interno personalizado
    • Comprar um mecanismo de recomendações por meio de um parceiro terceirizado, como um de nossos parceiros da Alloys, incluindo Amazon Personalise, Certona, Dynamic Yield e outros
  2. Escreva Connected Content Liquid no corpo da mensagem ou no editor de HTML do bloco de conteúdo que chamará seu endpoint para pesquisar seu banco de dados.
  3. Alinhe o Liquid com um valor de atributo personalizado que ele encontra no perfil de um determinado usuário.
  4. Como resultado, puxe a recomendação correta.
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 %}

Caso de uso do Connected Content

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.

Considerações

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:

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