Skip to content

Sincronização de produtos da Shopify

Você pode sincronizar todos os produtos da sua loja Shopify com um catálogo da Braze para uma personalização mais profunda do envio de mensagens.

Os catálogos da Shopify serão atualizados quase em tempo real à medida que você fizer edições e alterações nos produtos da sua loja Shopify. É possível enriquecer seu carrinho abandonado, a confirmação do pedido e muito mais com os detalhes e as informações mais atualizadas do produto.

Além de oferecer suporte aos dados principais de produtos da Shopify, você pode sincronizar coleções da Shopify, tags de produtos e metacampos de produtos com o seu catálogo da Braze. Esses campos adicionais possibilitam uma personalização mais rica, seleções de catálogo mais precisas e uma segmentação mais poderosa por meio de extensões de Segment.

Configure sua sincronização de produtos da Shopify

Se você já instalou sua loja Shopify, ainda poderá sincronizar seus produtos seguindo as instruções desta seção.

Etapa 1: Ativar a sincronização

Você pode sincronizar seus produtos com um catálogo da Braze por meio do fluxo de instalação da Shopify ou na página de parceiros da Shopify.

Etapa 3 do processo de configuração com "Shopify Variant ID" como o "Catalog product identifier".

Etapa 2: Selecione o identificador do seu produto

Selecione o identificador de produto principal a ser usado como ID do catálogo da Braze:

  • Shopify Variant ID é uma boa opção padrão quando seus SKUs estão ausentes, duplicados entre variantes ou podem conter caracteres como barras, pontos, espaços ou “e” comercial. Os Variant IDs são numéricos e sempre atendem a esses requisitos.
  • SKU funciona bem quando cada variante tem um SKU exclusivo que segue as mesmas regras de caracteres do Shopify Variant ID, e você deseja que o envio de mensagens ou a análise de dados use SKUs de varejo como chave do catálogo.
    • Você pode usar SKUs de texto livre que contenham caracteres não permitidos usando o Shopify Variant ID em vez do SKU.

O valor selecionado se torna o item_id do catálogo e pode conter apenas letras, números, hífens e sublinhados.

Etapa 3: Configure dados adicionais de produtos (opcional)

Opcionalmente, você pode ativar a sincronização de tags de produtos, coleções da Shopify e metacampos. Ative ou modifique essas configurações após a sincronização inicial na página de parceiros da Shopify.

Configurações para sincronizar produtos e variantes da Shopify com a Braze.

  1. Na página Sync product data to Braze, marque a caixa de seleção Sync product tags para abrir o modal Select product tags.
  2. Selecione até 20 tags de produtos para sincronizar com o seu catálogo da Braze. Somente as tags selecionadas serão sincronizadas.

Modal de seleção de tags de produtos com uma seleção de tags.

  1. Se você já possui uma integração com a Shopify, reautorize o app Braze Shopify para instalar os novos escopos necessários para sincronizar produtos. Se você é um novo cliente, vá para a próxima etapa.

Banner solicitando a reautorização do app Braze Shopify.

  1. Selecione Sync product metafields para abrir o modal de configuração de metacampos.

Seção de sincronização de dados de produtos com a Braze, com opções para selecionar entre múltiplas configurações, incluindo coleções.

  1. Selecione até 20 metacampos pesquisáveis para sincronizar. Cada um se torna uma coluna separada no seu catálogo para uso em recursos como seleções de catálogo ou extensões de Segment.
    • Ao nomear metacampos, observe que espaços se tornam “_” e todos os caracteres especiais são removidos para atender às restrições de nomenclatura de campos do catálogo da Braze.

Modal para selecionar metacampos de produtos.

A Braze oferece suporte aos seguintes objetos de metacampos e alguns de seus respectivos tipos.

Tipo de metacampo Tipo de dado
boolean Booleano
color, list.color String (cor hexadecimal, como #FFF123), Array de Strings
date, list.date String (data ISO 8601), Array de Strings (datas ISO 8601)
date_time, list.date_time String (datetime ISO 8601), Array de Strings (datetimes ISO 8601)
id, list.id String, Array de Strings
multi_line_text_field String
number_decimal String
number_integer Inteiro
single_line_text_field, list.single_line_text_field String, Array de Strings
url, list.url String (URL), Array de Strings (URLs)
metaobject_reference, list.metaobject_reference String, Array de Strings
mixed_reference, list.mixed_reference String, Array de Strings

A Braze não oferece suporte a objetos de metacampos, incluindo alguns respectivos tipos de lista:

  • dimension (list.dimension)
  • weight (list.weight)
  • link (list.link)
  • json
  • list.number_decimal
  • list.number_integer
  • money
  • rating (list.rating)
  • volume (list.volume)
  • rich_text_field
  1. Selecione Sync Shopify collections para abrir o modal de configuração de coleções.
  2. Selecione até 20 coleções para sincronizar.
    • O modal fornece uma lista pesquisável de até 5.000 das coleções criadas ou atualizadas mais recentemente na sua loja Shopify.
    • Coleções selecionadas anteriormente que não estão mais entre as 5.000 principais ainda aparecerão na sua seleção.

Modal para selecionar coleções em um menu suspenso.

Etapa 4: Acompanhe o progresso da sincronização

Após salvar sua configuração, a Braze começará a sincronizar seus produtos e atualizará o status para In Progress na página de parceiros da Shopify. O tempo de sincronização depende do número de produtos e variantes na sua loja.

Você pode sair da página assim que a sincronização estiver em andamento; a Braze enviará uma notificação no dashboard quando a sincronização for concluída. Após a conclusão, o status será atualizado para Active e você poderá visualizar seus produtos selecionando o nome do catálogo na página de parceiros da Shopify.

Página de configurações de integração com o status de sincronização de produtos.

Você também pode visualizar tags de produtos, metacampos e coleções sincronizados no seu catálogo da Shopify como novas colunas.

Catálogo da Shopify com dados sincronizados.

Etapa 5: Gerencie sua configuração

Cada tipo de sincronização possui um cartão de resumo na página de parceiros da Shopify mostrando a contagem total sincronizada, o status atual e um link para o seu catálogo. Selecione o ícone de visualização para ver sua configuração ativa e editá-la.

Você pode modificar a sincronização de produtos da Shopify, incluindo o gerenciamento de tags de produtos, coleções e metacampos de produtos a qualquer momento na página de parceiros da Shopify.

Página de configurações de integração com uma sincronização ativa de catálogo de produtos.

Dados compatíveis do catálogo do Shopify

Campo Tipo de dados Exemplos
id string 45264808411274 quando o identificador de produto do catálogo é Shopify Variant ID

12345 quando o identificador de produto do catálogo é SKU (corresponde ao valor que você selecionou na Etapa 2)
store_name string “your-store” (subdomínio da loja Shopify, sem .myshopify.com)
shopify_product_id number 7939032613002 (armazenado como número no seu catálogo da Braze; as APIs do Shopify podem retornar esse ID como string)
shopify_variant_id number 45264808411274 (armazenado como número no seu catálogo da Braze; as APIs do Shopify podem retornar esse ID como string)
product_title string “Classic leather jacket”
variant_title string “Large / Red”, “Medium” ou “Default Title” para produtos com uma única variante
status string “active”, “draft”, “archived”
product_image_url string “https://cdn.shopify.com/s/files/1/0641/0970/7402/files/t_shir.jpg?v=1736538760”
variant_image_url string Mesma URL no estilo CDN da imagem do produto quando não existe imagem de variante; caso contrário, uma URL de imagem específica da variante
vendor string “Flash and Thread”, “PantsLabyrinth”
product_type string “Outerwear”, “T-Shirts” (do campo Product type do produto no Shopify)
product_url string “https://your-store.myshopify.com/products/classic-leather-jacket”
product_handle string “classic-leather-jacket”
published_scope string “web”, “global”
price number 10.00, 24.99

O Shopify frequentemente retorna preços como strings (por exemplo, "199.00" na REST Admin API). A Braze os converte para números nesse campo do catálogo.
compare_at_price number 15.00 quando Compare at price está definido no Shopify

0 quando o Shopify não tem um preço de comparação. As APIs do Shopify normalmente retornam null para um preço de comparação não definido; a Braze armazena 0 no catálogo para que o campo seja sempre numérico (esse é um padrão da Braze, não um valor que o Shopify envia como 0).
inventory_quantity number 20, 0 ou um valor negativo quando a sobrevenda é permitida (por exemplo, -18)
options string “Size,Color”

O Shopify permite até três tipos de opção por produto (por exemplo, Size, Color, Material). O valor de options é uma lista separada por vírgulas desses nomes.
option_values string “Medium,Red”, “Large,Red”

Cada valor corresponde à mesma ordem de options (até três valores).
sku string “12345”, “SKU-001-RED-L”
product_tags array ["Summer", "Sale", "New"]

Requer a sincronização de tags de produto.
collection_ids array [123456789012, 987654321098] (IDs de coleção do Shopify)

Requer a sincronização de coleções do Shopify.
Metafield columns Varia por tipo Cada metafield sincronizado aparece como uma coluna separada nomeada pela sua chave. Consulte Metafields compatíveis na guia “Product metafields” da etapa 3 para mais informações.

Casos de uso do catálogo Shopify

Esses casos de uso mostram como você pode usar os dados sincronizados do seu catálogo Shopify para personalizar mensagens.

Use tags de produto para personalizar mensagens com base em como seus produtos são categorizados no Shopify. Por exemplo, você pode enviar uma promoção com todos os produtos marcados com “Summer Sale” por meio de uma seleção de catálogo, ou criar um Segment de usuários que compraram produtos marcados como “Premium.”

As tags de produto são armazenadas como um campo de array em cada item do catálogo. Para configurar a sincronização de tags de produto, consulte Tags de produto do Shopify.

Seleção de catálogo

  1. No Shopify, atribua aos produtos relevantes a tag de produto “Women’s”.

Um tipo de produto "Women's - Sweaters" com as tags "Women's", "Sweaters" e "Men".

  1. Na Braze, ative a sincronização de tags e selecione a tag de produto “Women’s”.

Modal para selecionar tags de produto do Shopify, com 15 tags relacionadas a roupas selecionadas, incluindo "Women's".

Personalização

  1. Crie uma seleção de catálogo que filtre produtos que tenham a respectiva tag de produto, como “Women’s”. Você pode usar apenas um campo de array único em uma seleção de catálogo, e até 50 produtos na sua seleção.

Uma seleção de catálogo que filtra por tags de produto que possuem o atributo "Women's".

  1. No criador de mensagem, adicione a seleção onde você deseja inserir os produtos da seleção de catálogo marcados com “Women’s”. Por exemplo, você pode usar um bloco de produto HTML como este:
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
{% catalog_selection_items se-team-ecommerce_shopify_catalog womens_clothing %}

{% if items[0] == blank %}
{% abort_message('Catalog selection returned no items') %}
{% endif %}

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
  {% for item in items %}
  {% if forloop.index0 < 3 %}
  {% assign title = item.product_title | default: '' %}
  {% assign image_url = item.variant_image_url | default: '' %}
  {% assign price = item.price | default: '' %}
  {% assign url = item.product_url | default: '' %}

  <tr>
    <td width="200" valign="top" style="padding:12px 12px 12px 0;">
      {% if image_url == blank %}
      <div style="width:200px;height:200px;background:#f2f2f2;line-height:200px;text-align:center;font-family:Arial,sans-serif;font-size:12px;color:#666;">
        No image
      </div>
      {% else %}
        {% if url == blank %}
        <img src="{{ image_url }}" width="200" height="200" alt="{{ title | escape }}" style="display:block;border:0;outline:none;text-decoration:none;" />
        {% else %}
        <a href="{{ url }}" style="text-decoration:none;">
          <img src="{{ image_url }}" width="200" height="200" alt="{{ title | escape }}" style="display:block;border:0;outline:none;text-decoration:none;" />
        </a>
        {% endif %}
      {% endif %}
    </td>

    <td valign="top" style="padding:12px 0;font-family:Arial,sans-serif;font-size:14px;line-height:20px;color:#111;">
      {% if title != blank %}<div style="font-weight:600;">{{ title | escape }}</div>{% endif %}
      {% if price != blank %}<div>Price: ${{ price }}</div>{% endif %}
      {% if url != blank %}<div><a href="{{ url }}" style="color:#F84B09;">View product</a></div>{% endif %}
    </td>
  </tr>
  {% endif %}
  {% endfor %}
</table>

Ou, se você quiser mencionar produtos específicos marcados com “Women’s” em uma notificação por push, pode usar a ferramenta Adicionar personalização e especificar os itens do seu catálogo.

1
2
3
4
5
Checkout the latest women's clothing:
    {% catalog_selection_items se-team-ecommerce_shopify_catalog womens_clothing %}
    {{ items[0].product_title}}{{items[0].price}}
    {{ items[1].product_title}}{{items[1].price}}
    {{ items[2].product_title}}{{items[2].price}}

Criador de notificação por push com uma seleção de catálogo puxando três itens com uma tag de produto.

Segmentação de catálogo (SQL)

Use extensões de Segment para criar segmentos com base em usuários que interagiram com uma tag de produto. Por exemplo, para encontrar usuários que se engajaram com itens do catálogo que contêm uma tag de produto específica, use esta consulta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- Description:
-- This query fetches users who have engaged with catalog items that contain a specific product tag. It joins the catalog
-- to custom events by matching any element in an array within events.properties.products (e.g. any product
-- with variant_id equal to a catalog item), using Snowflake LATERAL FLATTEN to explode the array.
SELECT
DISTINCT(events.user_id)
FROM
    USERS_BEHAVIORS_CUSTOMEVENT_SHARED AS events,
    LATERAL FLATTEN(input => GET_PATH(TRY_PARSE_JSON(events.properties), 'products'), outer => false) AS event_item
    JOIN CATALOGS_ITEMS_SHARED AS items ON (
        (
                items.field_name = 'id'
                    AND
                items.field_value = GET_PATH(event_item.value, 'variant_id')::STRING
            )
            OR
        items.item_id = GET_PATH(event_item.value, 'variant_id')::STRING
    )
WHERE
    events.name = 'ecommerce.order_placed'
    and events.app_group_id = '<app_group_id>'
    AND items.catalog_id = '<catalog_id>'
    AND (items.field_name = 'product_tags' AND ARRAY_CONTAINS('<product_tag_value>'::VARIANT, TRY_PARSE_JSON(items.field_value)));

Use metafields de produto para personalizar mensagens com detalhes personalizados de produto além dos campos padrão do Shopify. Por exemplo, inclua instruções de cuidado em uma confirmação de pedido, exiba o país de origem em um e-mail de recomendação ou segmente usuários que compraram um material específico.

Cada metafield sincronizado se torna uma coluna separada no seu catálogo, com o tipo de dados determinado pelo tipo do metafield. Para configurar a sincronização de metafields, consulte Metafields de produto do Shopify.

  1. No Shopify, defina o metafield de produto seasonal nos produtos relevantes como summer (este é um valor de metafield, não uma tag de produto).

Modal para adicionar metafields de produto, incluindo o metafield seasonal com valor summer.

  1. Na Braze, ative a sincronização de metafields e selecione custom.seasonal (ou o namespace e a chave que correspondem ao seu metafield do Shopify).

Modal para selecionar metafields de produto, com um dropdown expandido que tem quatro itens selecionados, incluindo custom.seasonal.

Personalização

  1. Crie uma seleção de catálogo que filtre por metafields que incluam o respectivo valor.

Uma seleção de catálogo que filtra por metafields que possuem o atributo summer.

  1. No criador de mensagem, adicione a seleção onde você deseja inserir os metafields de produto. Por exemplo, você pode usar um bloco de produto HTML como este:
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
{% catalog_selection_items se-team-ecommerce_shopify_catalog seasonal_summer %}

{% if items[0] == blank %}
{% abort_message('Catalog selection returned no items') %}
{% endif %}

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
  {% for item in items %}
  {% if forloop.index0 < 3 %}
  {% assign title = item.product_title | default: '' %}
  {% assign image_url = item.variant_image_url | default: '' %}
  {% assign price = item.price | default: '' %}
  {% assign url = item.product_url | default: '' %}

  <tr>
    <td width="200" valign="top" style="padding:12px 12px 12px 0;">
      {% if image_url == blank %}
      <div style="width:200px;height:200px;background:#f2f2f2;line-height:200px;text-align:center;font-family:Arial,sans-serif;font-size:12px;color:#666;">
        No image
      </div>
      {% else %}
        {% if url == blank %}
        <img src="{{ image_url }}" width="200" height="200" alt="{{ title | escape }}" style="display:block;border:0;outline:none;text-decoration:none;" />
        {% else %}
        <a href="{{ url }}" style="text-decoration:none;">
          <img src="{{ image_url }}" width="200" height="200" alt="{{ title | escape }}" style="display:block;border:0;outline:none;text-decoration:none;" />
        </a>
        {% endif %}
      {% endif %}
    </td>

    <td valign="top" style="padding:12px 0;font-family:Arial,sans-serif;font-size:14px;line-height:20px;color:#111;">
      {% if title != blank %}<div style="font-weight:600;">{{ title | escape }}</div>{% endif %}
      {% if price != blank %}<div>Price: ${{ price }}</div>{% endif %}
      {% if url != blank %}<div><a href="{{ url }}" style="color:#F84B09;">View product</a></div>{% endif %}
    </td>
  </tr>
  {% endif %}
  {% endfor %}
</table>

Ou, se você quiser mencionar produtos específicos com um valor de metafield específico em uma notificação por push, pode usar a ferramenta Adicionar personalização e especificar os itens do seu catálogo.

1
2
3
4
5
Check out the latest summer products:
    {% catalog_selection_items se-team-ecommerce_shopify_catalog seasonal_summer %}
    {{ items[0].product_title}}{{items[0].price}}
    {{ items[1].product_title}}{{items[1].price}}
    {{ items[2].product_title}}{{items[2].price}}

Criador de notificação por push com uma seleção de catálogo puxando três itens usando uma seleção baseada em metafield.

Segmentação de catálogo (SQL)

Use extensões de Segment para criar segmentos com base em usuários que interagiram com um metafield de produto. Por exemplo, para encontrar usuários que dispararam um evento de e-commerce com um produto cujo array de metafield contém um valor específico, use esta consulta:

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
-- -----------------------------------------------------------------------------
-- When the metafield is stored as a JSON array in catalog field_value (for example,
-- '["winter","summer"]' or a list-type Shopify metafield serialized to JSON),
-- use ARRAY_CONTAINS like product_tags. Cast the element you search for to
-- VARIANT so types match the parsed array elements.
-- -----------------------------------------------------------------------------

-- Description:
-- Fetches users who triggered the ecommerce event with a product whose
-- metafield array contains a specific value (for example, segment on "seasonal").
-- For a date range, add events.time >= $start_date AND events.time <= $end_date.
-- For first/last triggered, reuse the CTE pattern from Template 3 with this
-- ARRAY_CONTAINS predicate instead of items.field_value = '<metafield_value>'.
SELECT
    DISTINCT(events.user_id)
FROM
    USERS_BEHAVIORS_CUSTOMEVENT_SHARED AS events,
    LATERAL FLATTEN(input => GET_PATH(TRY_PARSE_JSON(events.properties), 'products'), outer => false) AS event_item
    JOIN CATALOGS_ITEMS_SHARED AS items ON (
        (
            items.field_name = 'id'
            AND items.field_value = GET_PATH(event_item.value, 'variant_id')::STRING
        )
        OR
        items.item_id = GET_PATH(event_item.value, 'variant_id')::STRING
    )
WHERE
    events.name = 'ecommerce.order_placed'
    AND events.app_group_id = '<app_group_id>'
    AND items.catalog_id = '<catalog_id>'
    AND items.field_name = '<metafield_name>'
    AND ARRAY_CONTAINS('<array_element_value>'::VARIANT, TRY_PARSE_JSON(items.field_value));

Se você quiser segmentar clientes que fizeram um pedido com metafields de produto específicos, use um dos seguintes modelos de extensão de Segment SQL (todo o período, período específico, primeiro ou último disparo de evento).

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
-- =============================================================================
-- Segment Extension: Metafields × Ecommerce Events — Example SQL Templates
-- =============================================================================
-- Metafield column names in CATALOGS_ITEMS_SHARED follow:
--   field_name = 'metafield_<namespace>_<key>'
-- Replace placeholders: app_group_id, catalog_id, event name, and the metafield
-- field_name + value. For array-type metafield values, use ARRAY_CONTAINS
-- with TRY_PARSE_JSON(items.field_value) similar to the product_tags example.
-- =============================================================================

-- -----------------------------------------------------------------------------
-- Template 1: Map metafields to event triggers (all time)
-- -----------------------------------------------------------------------------
-- Users who have ever triggered the ecommerce event with a product that has
-- the given metafield value. Event-agnostic: change events.name for the
-- desired event (e.g. ecommerce.order_placed, ecommerce.product_viewed).
-- -----------------------------------------------------------------------------

-- Description:
-- Fetches users who have engaged with catalog items that have a specific
-- product metafield. Joins the catalog to custom events by matching
-- events.properties.products (e.g. variant_id) to catalog items.
SELECT
    DISTINCT(events.user_id)
FROM
    USERS_BEHAVIORS_CUSTOMEVENT_SHARED AS events,
    LATERAL FLATTEN(input => GET_PATH(TRY_PARSE_JSON(events.properties), 'products'), outer => false) AS event_item
    JOIN CATALOGS_ITEMS_SHARED AS items ON (
        (
            items.field_name = 'id'
            AND items.field_value = GET_PATH(event_item.value, 'variant_id')::STRING
        )
        OR
        items.item_id = GET_PATH(event_item.value, 'variant_id')::STRING
    )
WHERE
    events.name = 'ecommerce.order_placed'
    AND events.app_group_id = '<app_group_id>'
    AND items.catalog_id = '<catalog_id>'
    AND items.field_name = '<metafield_name>'
    AND items.field_value = '<metafield_value>';


-- -----------------------------------------------------------------------------
-- Template 2: Map metafields to event triggers (for a specific period)
-- -----------------------------------------------------------------------------
-- Same as Template 1, restricted to events within a time window. Use
-- $start_date and $end_date (Segment Extension parameters) or literal
-- Unix timestamps.
-- -----------------------------------------------------------------------------

-- Description:
-- Fetches users who triggered the ecommerce event with a product that has
-- the given metafield value within the specified time range.
SELECT
    DISTINCT(events.user_id)
FROM
    USERS_BEHAVIORS_CUSTOMEVENT_SHARED AS events,
    LATERAL FLATTEN(input => GET_PATH(TRY_PARSE_JSON(events.properties), 'products'), outer => false) AS event_item
    JOIN CATALOGS_ITEMS_SHARED AS items ON (
        (
            items.field_name = 'id'
            AND items.field_value = GET_PATH(event_item.value, 'variant_id')::STRING
        )
        OR
        items.item_id = GET_PATH(event_item.value, 'variant_id')::STRING
    )
WHERE
    events.name = 'ecommerce.order_placed'
    AND events.app_group_id = '<app_group_id>'
    AND events.time >= $start_date
    AND events.time <= $end_date
    AND items.catalog_id = '<catalog_id>'
    AND items.field_name = '<metafield_name>'
    AND items.field_value = '<metafield_value>';


-- -----------------------------------------------------------------------------
-- Template 3: Map metafields — first or last triggered an event
-- -----------------------------------------------------------------------------
-- Users for whom the *first* (earliest) or *last* (most recent) matching
-- event (by time) involved a product with the given metafield. Switch
-- ORDER BY to time ASC for first, time DESC for last.
-- -----------------------------------------------------------------------------

-- Description:
-- Fetches users whose first (or last) occurrence of the ecommerce event
-- involved a catalog item with the specified metafield value.
WITH events_with_catalog_metafield AS (
    SELECT
        events.user_id,
        events.time,
        events.id AS event_id,
        ROW_NUMBER() OVER (
            PARTITION BY events.user_id
            ORDER BY events.time ASC   -- use DESC for "last triggered"
        ) AS rn
    FROM
        USERS_BEHAVIORS_CUSTOMEVENT_SHARED AS events,
        LATERAL FLATTEN(input => GET_PATH(TRY_PARSE_JSON(events.properties), 'products'), outer => false) AS event_item
        JOIN CATALOGS_ITEMS_SHARED AS items ON (
            (
                items.field_name = 'id'
                AND items.field_value = GET_PATH(event_item.value, 'variant_id')::STRING
            )
            OR
            items.item_id = GET_PATH(event_item.value, 'variant_id')::STRING
        )
    WHERE
        events.name = 'ecommerce.order_placed'
        AND events.app_group_id = '<app_group_id>'
        AND items.catalog_id = '<catalog_id>'
        AND items.field_name = '<metafield_name>'
        AND items.field_value = '<metafield_value>'
)
SELECT
    user_id
FROM
    events_with_catalog_metafield
WHERE
    rn = 1;

Use coleções do Shopify para trazer agrupamentos curados de produtos para suas mensagens, que também são usados no seu site e experiências de aplicativo do Shopify. Por exemplo, destaque “Novidades” em um e-mail promocional, faça vendas cruzadas de “Mais vendidos” em um Canvas de carrinho abandonado, ou segmente usuários que navegaram por uma coleção sazonal.

  1. No Shopify, crie uma coleção “New Women’s Products - In Stock” com seus produtos de melhor desempenho.

Lista de coleções do Shopify, incluindo "New Women's Products - In Stock".

  1. Na Braze, ative a sincronização de coleções e selecione “Women’s Products - In Stock”.

Modal para selecionar coleções, com um dropdown expandido que seleciona quatro coleções.

Personalização

  1. Crie uma seleção de catálogo chamada “New Women’s Products - In Stock” que filtre produtos com o ID dessa coleção. Você pode usar apenas um campo de array único em uma seleção de catálogo, e até 50 produtos na sua coleção.
    • Você também pode criar suas próprias seleções personalizadas filtrando pelo campo Collections.

Uma seleção de catálogo que filtra por coleções que possuem o atributo de ID de coleção "470645342446".

  1. Na sua mensagem, insira sua coleção usando a seleção criada ou referenciando diretamente a coleção. Por exemplo, você pode usar um bloco de produto HTML como este:
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
{% catalog_selection_items se-team-ecommerce_shopify_catalog shopify_collection_womens_instock %}

{% if items[0] == blank %}
{% abort_message('Catalog selection returned no items') %}
{% endif %}

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
  {% for item in items %}
  {% if forloop.index0 < 3 %}
  {% assign title = item.product_title | default: '' %}
  {% assign image_url = item.variant_image_url | default: '' %}
  {% assign price = item.price | default: '' %}
  {% assign url = item.product_url | default: '' %}

  <tr>
    <td width="200" valign="top" style="padding:12px 12px 12px 0;">
      {% if image_url == blank %}
      <div style="width:200px;height:200px;background:#f2f2f2;line-height:200px;text-align:center;font-family:Arial,sans-serif;font-size:12px;color:#666;">
        No image
      </div>
      {% else %}
      {% if url == blank %}
      <img src="{{ image_url }}" width="200" height="200" alt="{{ title | escape }}" style="display:block;border:0;outline:none;text-decoration:none;" />
      {% else %}
      <a href="{{ url }}" style="text-decoration:none;">
        <img src="{{ image_url }}" width="200" height="200" alt="{{ title | escape }}" style="display:block;border:0;outline:none;text-decoration:none;" />
      </a>
      {% endif %}
      {% endif %}
    </td>

    <td valign="top" style="padding:12px 0;font-family:Arial,sans-serif;font-size:14px;line-height:20px;color:#111;">
      {% if title != blank %}<div style="font-weight:600;">{{ title | escape }}</div>{% endif %}
      {% if price != blank %}<div>Price: ${{ price }}</div>{% endif %}
      {% if url != blank %}<div><a href="{{ url }}" style="color:#F84B09;">View product</a></div>{% endif %}
    </td>
  </tr>
  {% endif %}
  {% endfor %}
</table>

Ou, se você quiser mencionar novos produtos específicos em uma notificação por push, pode usar a ferramenta Adicionar personalização e especificar os itens do seu catálogo.

1
2
3
4
5
Checkout the latest women's clothing:
    {% catalog_selection_items se-team-ecommerce_shopify_catalog shopify_collection_womens_instock %}
    {{ items[0].product_title}}{{items[0].price}}
    {{ items[1].product_title}}{{items[1].price}}
    {{ items[2].product_title}}{{items[2].price}}

Criador de notificação por push com uma seleção de catálogo puxando três itens com uma tag de produto.

Segmentação de catálogo (SQL)

Crie um Segment de usuários que interagiram com uma coleção. Use extensões de Segment para criar segmentos com base na associação a coleções. Por exemplo, para encontrar usuários que compraram produtos de uma coleção específica no último ano, use esta consulta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- Description:
-- This query fetches users who have engaged with catalog items that contain a specific collection ID. It joins the catalog
-- to custom events by matching any element in an array within events.properties.products (e.g. any product
-- with variant_id equal to a catalog item), using Snowflake LATERAL FLATTEN to explode the array.
SELECT
DISTINCT(events.user_id)
FROM
    USERS_BEHAVIORS_CUSTOMEVENT_SHARED AS events,
    LATERAL FLATTEN(input => GET_PATH(TRY_PARSE_JSON(events.properties), 'products'), outer => false) AS event_item
    JOIN CATALOGS_ITEMS_SHARED AS items ON (
        (
                items.field_name = 'id'
                    AND
                items.field_value = GET_PATH(event_item.value, 'variant_id')::STRING
            )
            OR
        items.item_id = GET_PATH(event_item.value, 'variant_id')::STRING
    )
WHERE
    events.name = 'ecommerce.order_placed'
    and events.app_group_id = '<app_group_id>'
    AND items.catalog_id = '<catalog_id>'
    AND (items.field_name = 'collection_ids' AND ARRAY_CONTAINS('<collection_ids_value>'::VARIANT, TRY_PARSE_JSON(items.field_value)));

Desativar a sincronização de produtos

A desativação do recurso de sincronização de produtos da Shopify excluirá o catálogo completo e os produtos. Isso também pode afetar quaisquer mensagens que possam estar usando ativamente os dados do produto desse catálogo. Confirme se você atualizou ou pausou essas Campaigns ou Canvas antes da desativação, pois isso pode resultar no envio de mensagens sem detalhes do produto. Não exclua o catálogo da Shopify diretamente na página de catálogos.

Solução de problemas

Se a sincronização de produtos do Shopify apresentar um erro, isso pode ser resultado dos seguintes problemas. Siga as instruções sobre como corrigir o problema e resolver a sincronização:

Erro Motivo Solução
Erro de servidor Isso ocorre quando há um erro de servidor no lado do Shopify quando tentamos sincronizar seus produtos. Desative a sincronização e sincronize novamente todo o seu inventário de produtos.
SKU duplicado Isso ocorre quando você usa o SKU como ID do item do catálogo e múltiplas variantes compartilham o mesmo SKU. Cada item_id do catálogo deve ser único, então os itens afetados podem falhar na sincronização, acumular registros de erro ou ter as informações do produto sobrescritas de forma não intencional. Audite sua lista completa de produtos e variantes no Shopify para garantir que não existam SKUs duplicados. Se houver SKUs duplicados, atualize-os para que sejam SKUs únicos apenas na sua conta da loja Shopify. Depois de corrigir isso, desative a sincronização e sincronize novamente todo o seu inventário de produtos.
Limite do catálogo excedido Isso ocorre quando você excede o limite do seu catálogo. A Braze não conseguirá concluir a sincronização ou manter a sincronização ativa devido à falta de espaço de armazenamento disponível. Existem duas soluções para esse problema:

1. Entre em contato com seu gerente de conta para fazer upgrade do seu plano e aumentar o limite do catálogo.

2. Libere espaço de armazenamento excluindo qualquer um dos seguintes itens:
- Itens de catálogo de outros catálogos
- Outros catálogos
- Seleções criadas

Após utilizar qualquer uma das soluções, a sincronização deve ser desativada e então refeita.

Para mais detalhes sobre a validação de itens do catálogo, consulte Solução de problemas na documentação da API de catálogos.

New Stuff!