Skip to content

Synchronisation des produits Shopify

Vous pouvez synchroniser tous les produits de votre boutique Shopify avec un catalogue Braze pour une personnalisation plus poussée des messages.

Les catalogues Shopify se mettent à jour en quasi-temps réel à mesure que vous apportez des modifications aux produits de votre boutique Shopify. Vous pouvez enrichir votre panier abandonné, votre confirmation de commande et bien plus encore avec les détails et informations produit les plus à jour.

En plus de prendre en charge les données produit Shopify de base, vous pouvez synchroniser les collections Shopify, les étiquettes de produit et les métachamps de produit vers votre catalogue Braze. Ces champs supplémentaires permettent une personnalisation plus riche, des sélections de catalogue plus précises et une segmentation plus puissante grâce aux extensions de segments.

Configurer la synchronisation des produits Shopify

Si vous avez déjà installé votre boutique Shopify, vous pouvez toujours synchroniser vos produits en suivant les instructions de cette section.

Étape 1 : Activer la synchronisation

Vous pouvez synchroniser vos produits avec un catalogue Braze via le flux d’installation Shopify ou sur la page partenaire Shopify.

Étape 3 du processus de configuration avec « Shopify Variant ID » comme « identifiant de produit du catalogue ».

Étape 2 : Sélectionner votre identifiant de produit

Sélectionnez l’identifiant de produit principal à utiliser comme ID de catalogue Braze :

  • Shopify Variant ID est un bon choix par défaut lorsque vos SKU sont manquants, dupliqués entre les variantes, ou peuvent contenir des caractères tels que des barres obliques, des points, des espaces ou des esperluettes. Les Variant ID sont numériques et respectent toujours ces exigences.
  • SKU fonctionne bien lorsque chaque variante possède un SKU unique qui respecte les mêmes règles de caractères que le Shopify Variant ID, et que vous souhaitez utiliser les SKU de vente au détail comme clé de catalogue pour vos messages ou analyses.
    • Vous pouvez utiliser des SKU en texte libre contenant des caractères non autorisés en utilisant le Shopify Variant ID au lieu du SKU.

La valeur que vous sélectionnez devient l’item_id du catalogue et ne peut contenir que des lettres, des chiffres, des tirets et des underscores.

Étape 3 : Configurer des données produit supplémentaires (facultatif)

Vous pouvez activer de manière facultative la synchronisation des étiquettes de produit, des collections Shopify et des métachamps. Activez ou modifiez ces paramètres après la synchronisation initiale depuis la page partenaire Shopify.

Paramètres de synchronisation des produits et variantes Shopify vers Braze.

  1. Sur la page Synchroniser les données produit vers Braze, cochez la case Synchroniser les étiquettes de produit pour ouvrir la fenêtre modale Sélectionner les étiquettes de produit.
  2. Sélectionnez jusqu’à 20 étiquettes de produit à synchroniser avec votre catalogue Braze. Seules les étiquettes que vous sélectionnez seront synchronisées.

Fenêtre modale de sélection des étiquettes de produit avec une sélection d'étiquettes.

  1. Si vous disposez d’une intégration Shopify existante, réautorisez l’application Braze Shopify pour installer les nouvelles autorisations requises pour la synchronisation des produits. Si vous êtes un nouveau client, passez à l’étape suivante.

Bannière invitant à réautoriser l'application Braze Shopify.

  1. Sélectionnez Synchroniser les métachamps de produit pour ouvrir la fenêtre modale de configuration des métachamps.

Section de synchronisation des données produit vers Braze avec des options à sélectionner parmi plusieurs paramètres, y compris les collections.

  1. Sélectionnez jusqu’à 20 métachamps recherchables à synchroniser. Chacun devient une colonne distincte dans votre catalogue, utilisable dans des fonctionnalités comme les sélections de catalogue ou les extensions de segments.
    • Lors du nommage des métachamps, notez que les espaces deviennent « _ » et que tous les caractères spéciaux sont supprimés pour respecter les restrictions de nommage des champs de catalogue Braze.

Fenêtre modale de sélection des métachamps de produit.

Braze prend en charge les objets de métachamps suivants ainsi que certains de leurs types respectifs.

Type de métachamp Type de données
boolean Valeur booléenne
color, list.color Chaîne de caractères (couleur hexadécimale, comme #FFF123), Tableau de chaînes de caractères
date, list.date Chaîne de caractères (date ISO 8601), Tableau de chaînes de caractères (dates ISO 8601)
date_time, list.date_time Chaîne de caractères (datetime ISO 8601), Tableau de chaînes de caractères (datetimes ISO 8601)
id, list.id Chaîne de caractères, Tableau de chaînes de caractères
multi_line_text_field Chaîne de caractères
number_decimal Chaîne de caractères
number_integer Entier
single_line_text_field, list.single_line_text_field Chaîne de caractères, Tableau de chaînes de caractères
url, list.url Chaîne de caractères (URL), Tableau de chaînes de caractères (URL)
metaobject_reference, list.metaobject_reference Chaîne de caractères, Tableau de chaînes de caractères
mixed_reference, list.mixed_reference Chaîne de caractères, Tableau de chaînes de caractères

Braze ne prend pas en charge les objets de métachamps suivants, y compris certains types de liste respectifs :

  • 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. Sélectionnez Synchroniser les collections Shopify pour ouvrir la fenêtre modale de configuration des collections.
  2. Sélectionnez jusqu’à 20 collections à synchroniser.
    • La fenêtre modale fournit une liste recherchable des 5 000 collections les plus récemment créées ou mises à jour de votre boutique Shopify.
    • Les collections précédemment sélectionnées qui ne figurent plus dans les 5 000 premières apparaîtront toujours dans votre sélection.

Fenêtre modale de sélection des collections depuis un menu déroulant.

Étape 4 : Suivre la progression de la synchronisation

Après avoir enregistré votre configuration, Braze commencera à synchroniser vos produits et mettra à jour le statut sur En cours sur votre page partenaire Shopify. Le temps de synchronisation dépend du nombre de produits et de variantes dans votre boutique.

Vous pouvez quitter la page une fois la synchronisation en cours ; Braze vous enverra une notification sur le tableau de bord lorsque la synchronisation sera terminée. Une fois terminée, le statut passera à Actif et vous pourrez consulter vos produits en sélectionnant le nom du catalogue sur votre page partenaire Shopify.

Page des paramètres d'intégration avec un statut de synchronisation des produits.

Vous pouvez également consulter les étiquettes de produit, les métachamps et les collections synchronisés dans votre catalogue Shopify sous forme de nouvelles colonnes.

Catalogue Shopify avec des données synchronisées.

Étape 5 : Gérer votre configuration

Chaque type de synchronisation dispose d’une carte récapitulative sur la page partenaire Shopify affichant le nombre total synchronisé, le statut actuel et un lien vers votre catalogue. Sélectionnez l’icône d’affichage pour consulter votre configuration active et la modifier.

Vous pouvez modifier votre synchronisation de produits Shopify, y compris la gestion de vos étiquettes de produit, collections et métachamps de produit, à tout moment depuis la page partenaire Shopify.

Page des paramètres d'intégration avec une synchronisation active du catalogue de produits.

Données de catalogue Shopify prises en charge

Champ Type de donnée Exemples
id string 45264808411274 lorsque l’identifiant de produit du catalogue est Shopify Variant ID

12345 lorsque l’identifiant de produit du catalogue est SKU (correspond à la valeur que vous avez sélectionnée à l’étape 2)
store_name string “your-store” (sous-domaine de la boutique Shopify, sans .myshopify.com)
shopify_product_id number 7939032613002 (stocké sous forme de nombre dans votre catalogue Braze ; les API Shopify peuvent renvoyer cet ID sous forme de chaîne de caractères)
shopify_variant_id number 45264808411274 (stocké sous forme de nombre dans votre catalogue Braze ; les API Shopify peuvent renvoyer cet ID sous forme de chaîne de caractères)
product_title string “Classic leather jacket”
variant_title string “Large / Red”, “Medium” ou “Default Title” pour les produits à variante unique
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 Même URL de style CDN que l’image du produit lorsqu’aucune image de variante n’existe ; sinon une URL d’image spécifique à la variante
vendor string “Flash and Thread”, “PantsLabyrinth”
product_type string “Outerwear”, “T-Shirts” (depuis le champ Product type du produit dans 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

Shopify renvoie souvent les prix sous forme de chaînes de caractères (par exemple "199.00" dans l’API REST Admin). Braze les convertit en nombres pour ce champ de catalogue.
compare_at_price number 15.00 lorsque Compare at price est défini dans Shopify

0 lorsque Shopify n’a pas de prix de comparaison. Les API Shopify renvoient généralement null pour un prix de comparaison non défini ; Braze stocke 0 dans le catalogue afin que le champ soit toujours numérique (il s’agit d’une valeur par défaut de Braze, et non d’une valeur que Shopify envoie sous forme de 0).
inventory_quantity number 20, 0, ou une valeur négative lorsque la survente est autorisée (par exemple -18)
options string “Size,Color”

Shopify autorise jusqu’à trois types d’options par produit (par exemple Size, Color, Material). La valeur options est une liste de ces noms séparée par des virgules.
option_values string “Medium,Red”, “Large,Red”

Chaque valeur correspond au même ordre que options (jusqu’à trois valeurs).
sku string “12345”, “SKU-001-RED-L”
product_tags array ["Summer", "Sale", "New"]

Nécessite la synchronisation des étiquettes de produit.
collection_ids array [123456789012, 987654321098] (ID de collections Shopify)

Nécessite la synchronisation des collections Shopify.
Metafield columns Varie selon le type Chaque métachamp synchronisé apparaît sous forme de colonne distincte nommée par sa clé. Consultez Métachamps pris en charge dans l’onglet « Product metafields » de l’étape 3 pour plus d’informations.

Cas d’usage du catalogue Shopify

Ces cas d’usage montrent comment utiliser les données de votre catalogue Shopify synchronisé pour personnaliser vos messages.

Utilisez les étiquettes de produit pour personnaliser les messages en fonction de la catégorisation de vos produits dans Shopify. Par exemple, vous pouvez envoyer une promotion présentant tous les produits étiquetés « Summer Sale » via une sélection de catalogue, ou créer un Segment d’utilisateurs ayant acheté des produits étiquetés « Premium ».

Les étiquettes de produit sont stockées sous forme de champ tableau sur chaque élément du catalogue. Pour configurer la synchronisation des étiquettes de produit, consultez Étiquettes de produit Shopify.

Sélection de catalogue

  1. Dans Shopify, attribuez l’étiquette de produit « Women’s » aux produits concernés.

Un type de produit « Women's - Sweaters » avec les étiquettes « Women's », « Sweaters » et « Men ».

  1. Dans Braze, activez la synchronisation des étiquettes et sélectionnez l’étiquette de produit « Women’s ».

Fenêtre modale pour sélectionner les étiquettes de produit Shopify, avec 15 étiquettes liées aux vêtements sélectionnées, dont « Women's ».

Personnalisation

  1. Créez une sélection de catalogue qui filtre les produits possédant l’étiquette de produit correspondante, comme « Women’s ». Vous ne pouvez utiliser qu’un seul champ tableau unique au sein d’une même sélection de catalogue, et jusqu’à 50 produits dans votre sélection de catalogue.

Une sélection de catalogue qui filtre les étiquettes de produit ayant l'attribut « Women's ».

  1. Dans le compositeur de messages, ajoutez la sélection à l’endroit où vous souhaitez intégrer les produits de la sélection de catalogue étiquetés « Women’s ». Par exemple, vous pouvez utiliser un bloc produit HTML comme celui-ci :
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, si vous souhaitez mentionner des produits spécifiques étiquetés « Women’s » dans une notification push, vous pouvez utiliser l’outil Add Personalization et spécifier vos éléments de catalogue.

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

Compositeur de notification push avec une sélection de catalogue intégrant trois éléments à l'aide d'une étiquette de produit.

Segmentation par catalogue (SQL)

Utilisez les extensions de segments pour créer des Segments basés sur les utilisateurs ayant interagi avec une étiquette de produit. Par exemple, pour trouver les utilisateurs ayant interagi avec des éléments de catalogue contenant une étiquette de produit spécifique, utilisez cette requête :

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)));

Utilisez les métachamps de produit pour personnaliser les messages avec des détails de produit personnalisés au-delà des champs standard de Shopify. Par exemple, incluez des instructions d’entretien dans une confirmation de commande, affichez le pays d’origine dans un e-mail de recommandation, ou segmentez les utilisateurs ayant acheté un matériau spécifique.

Chaque métachamp synchronisé devient une colonne distincte dans votre catalogue, avec un type de données déterminé par le type de métachamp. Pour configurer la synchronisation des métachamps, consultez Métachamps de produit Shopify.

Sélection de catalogue

  1. Dans Shopify, définissez le métachamp de produit seasonal sur les produits concernés avec la valeur summer (il s’agit d’une valeur de métachamp, pas d’une étiquette de produit).

Fenêtre modale pour ajouter des métachamps de produit, incluant le métachamp seasonal avec la valeur summer.

  1. Dans Braze, activez la synchronisation des métachamps et sélectionnez custom.seasonal (ou l’espace de noms et la clé correspondant à votre métachamp Shopify).

Fenêtre modale pour sélectionner les métachamps de produit, avec un menu déroulant étendu montrant quatre éléments sélectionnés, dont custom.seasonal.

Personnalisation

  1. Créez une sélection de catalogue qui filtre les métachamps incluant la valeur correspondante.

Une sélection de catalogue qui filtre les métachamps ayant l'attribut summer.

  1. Dans le compositeur de messages, ajoutez la sélection à l’endroit où vous souhaitez intégrer les métachamps de produit. Par exemple, vous pouvez utiliser un bloc produit HTML comme celui-ci :
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, si vous souhaitez mentionner des produits spécifiques avec une valeur de métachamp donnée dans une notification push, vous pouvez utiliser l’outil Add Personalization et spécifier vos éléments de catalogue.

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

Compositeur de notification push avec une sélection de catalogue intégrant trois éléments à l'aide d'une sélection basée sur les métachamps.

Segmentation par catalogue (SQL)

Utilisez les extensions de segments pour créer des Segments basés sur les utilisateurs ayant interagi avec un métachamp de produit. Par exemple, pour trouver les utilisateurs ayant déclenché un événement ecommerce avec un produit dont le tableau de métachamps contient une valeur spécifique, utilisez cette requête :

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));

Si vous souhaitez segmenter les clients ayant passé une commande avec des métachamps de produit spécifiques, utilisez l’un des modèles SQL d’extension de segments suivants (tout le temps, période spécifique, premier ou dernier déclenchement d’un événement).

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;

Utilisez les collections Shopify pour intégrer dans vos messages des regroupements de produits sélectionnés qui sont également utilisés sur votre site Shopify et dans vos expériences sur l’application. Par exemple, mettez en avant les « New Arrivals » dans un e-mail promotionnel, proposez des ventes croisées avec les « Best Sellers » dans un Canvas de panier abandonné, ou ciblez les utilisateurs ayant consulté une collection saisonnière.

Sélection de catalogue

  1. Dans Shopify, créez une collection « New Women’s Products - In Stock » avec vos produits les plus performants.

Liste des collections Shopify, y compris « New Women's Products - In Stock ».

  1. Dans Braze, activez la synchronisation des collections et sélectionnez « Women’s Products - In Stock ».

Fenêtre modale pour sélectionner les collections, avec un menu déroulant étendu sélectionnant quatre collections.

Personnalisation

  1. Créez une sélection de catalogue nommée « New Women’s Products - In Stock » filtrée avec les produits possédant l’ID de cette collection. Vous ne pouvez utiliser qu’un seul champ tableau unique au sein d’une même sélection de catalogue, et jusqu’à 50 produits dans votre collection.
    • Vous pouvez également créer vos propres sélections personnalisées en filtrant avec le champ Collections.

Une sélection de catalogue qui filtre les collections ayant l'attribut d'ID de collection « 470645342446 ».

  1. Dans votre message, intégrez votre collection en utilisant la sélection créée ou en référençant directement la collection. Par exemple, vous pouvez utiliser un bloc produit HTML comme celui-ci :
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, si vous souhaitez mentionner des nouveaux produits spécifiques dans une notification push, vous pouvez utiliser l’outil Add Personalization et spécifier vos éléments de catalogue.

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

Compositeur de notification push avec une sélection de catalogue intégrant trois éléments à l'aide d'une étiquette de produit.

Segmentation par catalogue (SQL)

Créez un Segment d’utilisateurs ayant interagi avec une collection. Utilisez les extensions de segments pour créer des Segments basés sur l’appartenance à une collection. Par exemple, pour trouver les utilisateurs ayant acheté des produits d’une collection spécifique au cours de la dernière année, utilisez cette requête :

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)));

Désactiver la synchronisation des produits

La désactivation de la fonctionnalité de synchronisation des produits Shopify supprimera l’intégralité de votre catalogue et de vos produits. Cela peut également avoir un impact sur les messages qui utilisent activement les données produit de ce catalogue. Confirmez que vous avez mis à jour ou mis en pause ces Campaigns ou Canvas avant la désactivation, car cela pourrait entraîner l’envoi de messages sans détails sur les produits. Ne supprimez pas directement le catalogue Shopify sur la page des catalogues.

Résolution des problèmes

Si votre synchronisation de produits Shopify rencontre une erreur, elle peut être causée par les erreurs suivantes. Suivez les instructions pour corriger le problème et résoudre la synchronisation :

Erreur Raison Solution
Erreur serveur Cela se produit lorsqu’il y a une erreur de serveur du côté de Shopify lorsque nous tentons de synchroniser vos produits. Désactivez la synchronisation et resynchronisez l’intégralité de votre inventaire de produits.
SKU en double Cela se produit si vous utilisez le SKU comme identifiant d’article de catalogue et que plusieurs variantes partagent le même SKU. Chaque item_id de catalogue doit être unique, de sorte que les articles concernés peuvent échouer à se synchroniser, accumuler des enregistrements d’erreurs, ou avoir leurs informations produit écrasées involontairement. Auditez votre liste complète de produits et de variantes dans Shopify pour vous assurer qu’il n’y a pas de SKU en double. S’il y en a, mettez-les à jour pour qu’ils soient des SKU uniques uniquement dans votre compte de boutique Shopify. Une fois cela corrigé, désactivez la synchronisation et resynchronisez l’intégralité de votre inventaire de produits.
Limite de catalogue dépassée Cela se produit si vous dépassez la limite de votre catalogue. Braze ne pourra pas terminer la synchronisation ni maintenir la synchronisation active en raison d’un manque d’espace de stockage. Il existe deux solutions à ce problème :

1. Contactez votre gestionnaire de compte pour mettre à niveau votre niveau et augmenter la limite de votre catalogue.

2. Libérez de l’espace de stockage en supprimant l’un des éléments suivants :
- Des articles de catalogue provenant d’autres catalogues
- D’autres catalogues
- Des sélections créées

Après avoir utilisé l’une des solutions, la synchronisation doit être désactivée puis relancée.

Pour plus de détails sur la validation des articles de catalogue, consultez la section Résolution des problèmes dans la documentation de l’API de catalogue.

New Stuff!