Ir al contenido

Sincronización de productos de Shopify

Puedes sincronizar todos los productos de tu tienda Shopify con un catálogo de Braze para una personalización más profunda de la mensajería.

Los catálogos de Shopify se actualizarán casi en tiempo real a medida que realices ediciones y cambios en los productos de tu tienda Shopify. Puedes enriquecer tu carrito abandonado, la confirmación del pedido y mucho más con los detalles y la información más actualizados sobre los productos.

Además de admitir los datos principales de productos de Shopify, puedes sincronizar colecciones de Shopify, etiquetas de productos y metacampos de productos con tu catálogo de Braze. Estos campos adicionales desbloquean una personalización más rica, selecciones de catálogo más precisas y una segmentación más potente a través de las extensiones de segmento.

Configura tu sincronización de productos de Shopify

Si ya has instalado tu tienda Shopify, puedes sincronizar tus productos siguiendo las instrucciones de esta sección.

Paso 1: Activa la sincronización

Puedes sincronizar tus productos con un catálogo de Braze a través del flujo de instalación de Shopify o en la página del partner de Shopify.

Paso 3 del proceso de configuración con "Shopify Variant ID" como "Catalog product identifier".

Paso 2: Selecciona el identificador de tu producto

Selecciona el identificador de producto principal que se usará como ID del catálogo de Braze:

  • Shopify Variant ID es una buena opción predeterminada cuando tus SKU faltan, están duplicados entre variantes o pueden contener caracteres como barras, puntos, espacios o ampersands. Los Variant ID son numéricos y siempre cumplen estos requisitos.
  • SKU funciona bien cuando cada variante tiene un SKU único que sigue las mismas reglas de caracteres que Shopify Variant ID, y quieres que la mensajería o los análisis usen los SKU de comercio minorista como clave del catálogo.
    • Puedes usar SKU de texto libre que contengan caracteres no permitidos utilizando Shopify Variant ID en lugar de SKU.

El valor que selecciones se convierte en el item_id del catálogo y solo puede contener letras, números, guiones y guiones bajos.

Paso 3: Configura datos de producto adicionales (opcional)

Opcionalmente, puedes habilitar la sincronización de etiquetas de productos, colecciones de Shopify y metacampos. Habilita o modifica estos ajustes después de la sincronización inicial desde la página del partner de Shopify.

Configuración para sincronizar productos y variantes de Shopify con Braze.

  1. En la página Sync product data to Braze, selecciona la casilla Sync product tags para abrir el modal Select product tags.
  2. Selecciona hasta 20 etiquetas de productos para sincronizar con tu catálogo de Braze. Solo se sincronizarán las etiquetas que selecciones.

Modal para seleccionar etiquetas de productos con una selección de etiquetas.

  1. Si tienes una integración de Shopify existente, vuelve a autorizar la aplicación Braze Shopify para instalar los nuevos permisos necesarios para sincronizar productos. Si eres un cliente nuevo, ve al siguiente paso.

Banner que indica volver a autorizar la aplicación Braze Shopify.

  1. Selecciona Sync product metafields para abrir el modal de configuración de metacampos.

Sección de sincronización de datos de productos con Braze con opciones para seleccionar entre múltiples configuraciones, incluidas las colecciones.

  1. Selecciona hasta 20 de los metacampos buscables para sincronizar. Cada uno se convierte en una columna separada en tu catálogo para usar en características como selecciones de catálogo o extensiones de segmento.
    • Al nombrar metacampos, ten en cuenta que los espacios se convierten en “_” y todos los caracteres especiales se eliminan para cumplir con las restricciones de nomenclatura de campos de catálogo de Braze.

Modal para seleccionar metacampos de productos.

Braze admite los siguientes objetos de metacampos y algunos de sus tipos respectivos.

Tipo de metacampo Tipo de datos
boolean Booleano
color, list.color Cadena (color hexadecimal, como #FFF123), Matriz de cadenas
date, list.date Cadena (fecha ISO 8601), Matriz de cadenas (fechas ISO 8601)
date_time, list.date_time Cadena (fecha y hora ISO 8601), Matriz de cadenas (fechas y horas ISO 8601)
id, list.id Cadena, Matriz de cadenas
multi_line_text_field Cadena
number_decimal Cadena
number_integer Entero
single_line_text_field, list.single_line_text_field Cadena, Matriz de cadenas
url, list.url Cadena (URL), Matriz de cadenas (URLs)
metaobject_reference, list.metaobject_reference Cadena, Matriz de cadenas
mixed_reference, list.mixed_reference Cadena, Matriz de cadenas

Braze no admite objetos de metacampos, incluidos algunos tipos de lista respectivos:

  • 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. Selecciona Sync Shopify collections para abrir el modal de configuración de colecciones.
  2. Selecciona hasta 20 colecciones para sincronizar.
    • El modal proporciona una lista buscable de hasta 5000 de las colecciones creadas o actualizadas más recientemente de tu tienda Shopify.
    • Las colecciones seleccionadas previamente que ya no están entre las 5000 principales seguirán apareciendo en tu selección.

Modal para seleccionar colecciones de un menú desplegable.

Paso 4: Sigue el progreso de tu sincronización

Después de guardar tu configuración, Braze comenzará a sincronizar tus productos y actualizará el estado a In Progress en tu página del partner de Shopify. El tiempo de sincronización depende del número de productos y variantes en tu tienda.

Puedes salir de la página una vez que la sincronización esté en curso; Braze te enviará una notificación en el panel cuando la sincronización se complete. Después de completarse, el estado se actualizará a Active y podrás ver tus productos seleccionando el nombre del catálogo en tu página del partner de Shopify.

Página de configuración de la integración con un estado de sincronización de productos.

También puedes ver las etiquetas de productos, metacampos y colecciones sincronizados dentro de tu catálogo de Shopify como nuevas columnas.

Catálogo de Shopify con datos sincronizados.

Paso 5: Administra tu configuración

Cada tipo de sincronización tiene una tarjeta de resumen en la página del partner de Shopify que muestra el recuento total sincronizado, el estado actual y un enlace a tu catálogo. Selecciona el icono de vista para ver tu configuración activa y editarla.

Puedes modificar tu sincronización de productos de Shopify, incluida la administración de tus etiquetas de productos, colecciones y metacampos de productos en cualquier momento desde la página del partner de Shopify.

Página de configuración de la integración con una sincronización de catálogo de productos activa.

Datos de catálogo de Shopify compatibles

Campo Tipo de datos Ejemplos
id cadena 45264808411274 cuando el identificador de producto del catálogo es Shopify Variant ID

12345 cuando el identificador de producto del catálogo es SKU (coincide con el valor que seleccionaste en el paso 2)
store_name cadena “your-store” (subdominio de la tienda de Shopify, sin .myshopify.com)
shopify_product_id número 7939032613002 (se almacena como número en tu catálogo de Braze; las API de Shopify pueden devolver este ID como cadena)
shopify_variant_id número 45264808411274 (se almacena como número en tu catálogo de Braze; las API de Shopify pueden devolver este ID como cadena)
product_title cadena “Classic leather jacket”
variant_title cadena “Large / Red”, “Medium” o “Default Title” para productos con una sola variante
status cadena “active”, “draft”, “archived”
product_image_url cadena “https://cdn.shopify.com/s/files/1/0641/0970/7402/files/t_shir.jpg?v=1736538760”
variant_image_url cadena La misma URL de estilo CDN que la imagen del producto cuando no existe una imagen de variante; en caso contrario, una URL de imagen específica de la variante
vendor cadena “Flash and Thread”, “PantsLabyrinth”
product_type cadena “Outerwear”, “T-Shirts” (del Product type del producto en Shopify)
product_url cadena “https://your-store.myshopify.com/products/classic-leather-jacket”
product_handle cadena “classic-leather-jacket”
published_scope cadena “web”, “global”
price número 10.00, 24.99

Shopify suele devolver los precios como cadenas (por ejemplo, "199.00" en la REST Admin API). Braze los convierte en números para este campo del catálogo.
compare_at_price número 15.00 cuando Compare at price está configurado en Shopify

0 cuando Shopify no tiene precio de comparación. Las API de Shopify suelen devolver null para un precio de comparación no configurado; Braze almacena 0 en el catálogo para que el campo siempre sea numérico (es un valor predeterminado de Braze, no un valor que Shopify envíe como 0).
inventory_quantity número 20, 0 o un valor negativo cuando se permite la sobreventa (por ejemplo, -18)
options cadena “Size,Color”

Shopify permite hasta tres tipos de opciones por producto (por ejemplo, talla, color, material). El valor de options es una lista separada por comas de esos nombres.
option_values cadena “Medium,Red”, “Large,Red”

Cada valor sigue el mismo orden que options (hasta tres valores).
sku cadena “12345”, “SKU-001-RED-L”
product_tags matriz ["Summer", "Sale", "New"]

Requiere la sincronización de etiquetas de producto.
collection_ids matriz [123456789012, 987654321098] (ID de colecciones de Shopify)

Requiere la sincronización de colecciones de Shopify.
Columnas de metacampos Varía según el tipo Cada metacampo sincronizado aparece como una columna independiente con el nombre de su clave. Para más información, consulta Metacampos compatibles en la pestaña “Metacampos de producto” del paso 3.

Casos de uso del catálogo de Shopify

Estos casos de uso muestran cómo puedes utilizar los datos sincronizados de tu catálogo de Shopify para personalizar mensajes.

Utiliza las etiquetas de producto para personalizar mensajes según cómo estén categorizados tus productos en Shopify. Por ejemplo, puedes enviar una promoción con todos los productos etiquetados como “Summer Sale” mediante una selección de catálogo, o crear un Segment de usuarios que compraron productos etiquetados como “Premium”.

Las etiquetas de producto se almacenan como un campo de matriz en cada artículo del catálogo. Para configurar la sincronización de etiquetas de producto, consulta Etiquetas de producto de Shopify.

Selección de catálogo

  1. En Shopify, asigna a los productos relevantes la etiqueta de producto “Women’s”.

Un tipo de producto "Women's - Sweaters" con las etiquetas "Women's", "Sweaters" y "Men".

  1. En Braze, habilita la sincronización de etiquetas y selecciona la etiqueta de producto “Women’s”.

Modal para seleccionar etiquetas de producto de Shopify, con 15 etiquetas relacionadas con ropa seleccionadas, incluida "Women's".

Personalización

  1. Crea una selección de catálogo que filtre los productos que tengan la etiqueta de producto correspondiente, como “Women’s”. Solo puedes usar un campo de matriz único dentro de una misma selección de catálogo, y hasta 50 productos en tu selección de catálogo.

Una selección de catálogo que filtra por etiquetas de producto que tienen el atributo "Women's".

  1. En el creador de mensajes, añade la selección donde quieras insertar con plantillas los productos de la selección de catálogo etiquetados como “Women’s”. Por ejemplo, podrías usar un bloque de producto HTML como este:
{% 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>

O bien, si quieres mencionar productos específicos etiquetados como “Women’s” en una notificación push, puedes usar la herramienta Añadir personalización y especificar los artículos de tu catálogo.

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

Creador de notificaciones push con una selección de catálogo que incluye tres artículos con una etiqueta de producto.

Segmentación de catálogos (SQL)

Utiliza las extensiones de segmento para crear Segments basados en usuarios que interactuaron con una etiqueta de producto. Por ejemplo, para encontrar usuarios que hayan interactuado con artículos del catálogo que contengan una etiqueta de producto específica, utiliza esta consulta:

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

Utiliza los metacampos de producto para personalizar mensajes con detalles personalizados del producto más allá de los campos estándar de Shopify. Por ejemplo, incluye instrucciones de cuidado en una confirmación de pedido, muestra el país de origen en un correo electrónico de recomendaciones o segmenta a los usuarios que compraron un material específico.

Cada metacampo sincronizado se convierte en una columna independiente de tu catálogo, con un tipo de datos determinado por el tipo de metacampo. Para configurar la sincronización de metacampos, consulta Metacampos de producto de Shopify.

  1. En Shopify, establece el metacampo de producto seasonal en summer para los productos relevantes (se trata de un valor de metacampo, no de una etiqueta de producto).

Modal para añadir metacampos de producto, incluido el metacampo seasonal con el valor summer.

  1. En Braze, habilita la sincronización de metacampos y selecciona custom.seasonal (o el espacio de nombres y la clave que coincidan con tu metacampo de Shopify).

Modal para seleccionar metacampos de producto, con un desplegable expandido que tiene cuatro elementos seleccionados, incluido custom.seasonal.

Personalización

  1. Crea una selección de catálogo que filtre los metacampos que incluyan el valor correspondiente.

Una selección de catálogo que filtra por metacampos que tienen el atributo summer.

  1. En el creador de mensajes, añade la selección donde quieras insertar con plantillas los metacampos de producto. Por ejemplo, podrías usar un bloque de producto HTML como este:
{% 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>

O bien, si quieres mencionar productos específicos con un valor de metacampo concreto en una notificación push, puedes usar la herramienta Añadir personalización y especificar los artículos de tu catálogo.

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

Creador de notificaciones push con una selección de catálogo que incluye tres artículos mediante una selección basada en metacampos.

Segmentación de catálogos (SQL)

Utiliza las extensiones de segmento para crear Segments basados en usuarios que interactuaron con un metacampo de producto. Por ejemplo, para encontrar usuarios que desencadenaron un evento de comercio electrónico con un producto cuya matriz de metacampo contiene un valor específico, utiliza esta consulta:

-- -----------------------------------------------------------------------------
-- 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 quieres segmentar a los clientes que han realizado un pedido con metacampos de producto específicos, utiliza una de las siguientes plantillas de extensión de segmento SQL (todo el tiempo, un periodo de tiempo específico, o la primera o última vez que se desencadenó un evento).

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

Utiliza las colecciones de Shopify para incluir en tus mensajes agrupaciones de productos seleccionadas que también se utilizan en tu sitio de Shopify y en las experiencias de tu aplicación. Por ejemplo, destaca “New Arrivals” en un correo electrónico promocional, haz venta cruzada de “Best Sellers” en un Canvas de carrito abandonado o dirígete a los usuarios que navegaron por una colección de temporada.

  1. En Shopify, crea una colección “New Women’s Products - In Stock” con tus productos de mejor rendimiento.

Lista de colecciones de Shopify, incluida "New Women's Products - In Stock".

  1. En Braze, habilita la sincronización de colecciones y selecciona “Women’s Products - In Stock”.

Modal para seleccionar colecciones, con un desplegable expandido que selecciona cuatro colecciones.

Personalización

  1. Crea una selección de catálogo llamada “New Women’s Products - In Stock” filtrada por los productos que tengan el ID de esa colección. Solo puedes usar un campo de matriz único dentro de una misma selección de catálogo, y hasta 50 productos en tu colección.
    • También puedes crear tus propias selecciones personalizadas filtrando con el campo Colecciones.

Una selección de catálogo que filtra por colecciones que tienen el atributo de ID de colección "470645342446".

  1. En tu mensaje, inserta tu colección con plantillas utilizando la selección que creaste o haciendo referencia directamente a la colección. Por ejemplo, podrías usar un bloque de producto HTML como este:
{% 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>

O bien, si quieres mencionar productos nuevos específicos en una notificación push, puedes usar la herramienta Añadir personalización y especificar los artículos de tu catálogo.

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

Creador de notificaciones push con una selección de catálogo que incluye tres artículos de una colección.

Segmentación de catálogos (SQL)

Crea un Segment de usuarios que interactuaron con una colección. Utiliza las extensiones de segmento para crear Segments basados en la pertenencia a colecciones. Por ejemplo, para encontrar usuarios que compraron productos de una colección específica en el último año, utiliza esta consulta:

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

Desactivar la sincronización de productos

Desactivar la característica de sincronización de productos de Shopify eliminará todo tu catálogo y productos. Esto también puede afectar a cualquier mensaje que pueda estar utilizando activamente los datos de producto de este catálogo. Confirma que has actualizado o pausado estas Campaigns o Canvas antes de la desactivación, ya que esto podría dar lugar al envío de mensajes sin detalles del producto. No elimines el catálogo de Shopify directamente en la página de catálogos.

Solución de problemas

Si la sincronización de productos de Shopify encuentra un error, puede deberse a alguno de los siguientes errores. Sigue las instrucciones para corregir el problema y resolver la sincronización:

Error Motivo Solución
Error del servidor Se produce si hay un error del servidor por parte de Shopify cuando intentamos sincronizar tus productos. Desactiva la sincronización y vuelve a sincronizar todo tu inventario de productos.
SKU duplicado Se produce si utilizas el SKU como ID de artículo del catálogo y varias variantes comparten el mismo SKU. Cada item_id del catálogo debe ser único, por lo que los artículos afectados pueden no sincronizarse, acumular registros de error o ver su información de producto sobrescrita de forma involuntaria. Revisa la lista completa de productos y variantes en Shopify para asegurarte de que no haya SKU duplicados. Si hay SKU duplicados, actualízalos para que sean SKU únicos solo en la cuenta de tu tienda de Shopify. Una vez corregido, desactiva la sincronización y vuelve a sincronizar todo tu inventario de productos.
Límite de catálogo superado Se produce si superas el límite de tu catálogo. Braze no podrá finalizar la sincronización ni mantenerla activa porque no hay más espacio de almacenamiento disponible. Hay dos soluciones para este problema:

1. Ponte en contacto con tu director de cuentas para mejorar tu nivel y aumentar el límite de tu catálogo.

2. Libera espacio de almacenamiento eliminando cualquiera de los siguientes elementos:
- Artículos de otros catálogos
- Otros catálogos
- Selecciones creadas

Después de aplicar cualquiera de las soluciones, debes desactivar la sincronización y volver a sincronizar.

Para obtener más información sobre la validación de artículos del catálogo, consulta Solución de problemas en la documentación de la API de catálogos.

New Stuff!