コンテンツにスキップ

Shopify商品同期

Shopifyストアのすべての商品をBrazeのカタログに同期し、より深いメッセージングパーソナライゼーションを実現できます。

Shopifyカタログは、Shopifyストア内の商品に編集や変更を加えると、ほぼリアルタイムで更新されます。カート放棄や注文確認などを、最新の商品詳細や情報で強化できます。

コアのShopify商品データのサポートに加えて、Shopifyコレクション、商品タグ、商品メタフィールドをBrazeカタログに同期できます。これらの追加フィールドにより、よりリッチなパーソナライゼーション、より正確なカタログセレクション、セグメントエクステンションを通じたより強力なセグメンテーションが可能になります。

Shopify商品同期を設定する

Shopifyストアがすでにインストールされている場合でも、このセクションの手順に従って商品を同期できます。

ステップ1: 同期をオンにする

ShopifyのインストールフローまたはShopifyパートナーページで、商品をBrazeカタログに同期できます。

設定プロセスのステップ3。「カタログの商品識別子」に「Shopify Variant ID」が設定されている。

ステップ2: 商品識別子を選択する

BrazeカタログIDとして使用するプライマリ商品識別子を選択します。

  • Shopify Variant IDは、SKUが欠落している場合、バリアント間で重複している場合、またはスラッシュ、ピリオド、スペース、アンパサンドなどの文字を含む可能性がある場合に適したデフォルトです。バリアントIDは数値であり、常にこれらの要件を満たします。
  • SKUは、すべてのバリアントにShopify Variant IDと同じ文字ルールに従う一意のSKUがあり、メッセージングや分析で小売SKUをカタログキーとして使用したい場合に適しています。
    • 許可されていない文字を含むフリーテキストSKUは、SKUの代わりにShopify Variant IDを使用することで対応できます。

選択した値はカタログのitem_idとなり、文字、数字、ハイフン、アンダースコアのみを含めることができます。

ステップ3: 追加の商品データを設定する(オプション)

オプションで、商品タグ、Shopifyコレクション、メタフィールドの同期を有効にできます。初回同期後にShopifyパートナーページからこれらの設定を有効化または変更できます。

Shopifyの商品とバリアントをBrazeに同期するための設定。

  1. 商品データをBrazeに同期ページで、商品タグを同期チェックボックスを選択して商品タグを選択モーダルを開きます。
  2. Brazeカタログに同期する商品タグを最大20個選択します。選択したタグのみが同期されます。

タグのセレクションが表示された商品タグ選択モーダル。

  1. 既存のShopifyインテグレーションがある場合は、Braze Shopifyアプリを再認証して、商品を同期するために必要な新しいスコープをインストールします。新規のお客様の場合は、次のステップに進んでください。

Braze Shopifyアプリの再認証を促すバナー。

  1. 商品メタフィールドを同期を選択して、メタフィールド設定モーダルを開きます。

コレクションを含む複数の設定から選択できるオプションがある「商品データをBrazeに同期」セクション。

  1. 同期する検索可能なメタフィールドを最大20個選択します。各メタフィールドはカタログ内の個別の列となり、カタログセレクションやセグメントエクステンションなどの機能で使用できます。
    • メタフィールドの命名時、スペースは「_」に変換され、すべての特殊文字はBrazeカタログのフィールド命名制限に対応するために削除されます。

商品メタフィールドを選択するモーダル。

Brazeは以下のメタフィールドオブジェクトとそれぞれのタイプの一部をサポートしています。

メタフィールドタイプ データタイプ
boolean ブール値
color, list.color 文字列(16進カラーコード、例: #FFF123)、文字列の配列
date, list.date 文字列(ISO 8601日付)、文字列の配列(ISO 8601日付)
date_time, list.date_time 文字列(ISO 8601日時)、文字列の配列(ISO 8601日時)
id, list.id 文字列、文字列の配列
multi_line_text_field 文字列
number_decimal 文字列
number_integer 整数
single_line_text_field, list.single_line_text_field 文字列、文字列の配列
url, list.url 文字列(URL)、文字列の配列(URL)
metaobject_reference, list.metaobject_reference 文字列、文字列の配列
mixed_reference, list.mixed_reference 文字列、文字列の配列

Brazeは、一部のリストタイプを含む以下のメタフィールドオブジェクトをサポートしていません。

  • 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. Shopifyコレクションを同期を選択して、コレクション設定モーダルを開きます。
  2. 同期するコレクションを最大20個選択します。
    • モーダルには、Shopifyストアから最近作成または更新されたコレクションのうち、最大5,000件の検索可能なリストが表示されます。
    • 上位5,000件に含まれなくなった以前選択したコレクションも、選択内容に引き続き表示されます。

ドロップダウンからコレクションを選択するモーダル。

ステップ4: 同期の進捗を追跡する

設定を保存すると、Brazeは商品の同期を開始し、Shopifyパートナーページのステータスを進行中に更新します。同期にかかる時間は、ストア内の商品とバリアントの数によって異なります。

同期が進行中であればページを離れることができます。同期が完了するとBrazeからダッシュボード通知が届きます。完了後、ステータスがアクティブに更新され、Shopifyパートナーページでカタログ名を選択して商品を表示できます。

商品同期ステータスが表示されたインテグレーション設定ページ。

Shopifyカタログ内で、同期された商品タグ、メタフィールド、コレクションを新しい列として表示することもできます。

同期されたデータが表示されたShopifyカタログ。

ステップ5: 設定を管理する

各同期タイプには、Shopifyパートナーページに同期された合計数、現在のステータス、カタログへのリンクを表示するサマリーカードがあります。表示アイコンを選択して、アクティブな設定を表示・編集できます。

Shopifyパートナーページから、商品タグ、コレクション、商品メタフィールドの管理を含むShopify商品同期をいつでも変更できます。

アクティブな商品カタログ同期が表示されたインテグレーション設定ページ。

サポートされているShopifyカタログデータ

フィールド データ型 例
id 文字列 カタログ商品識別子が Shopify Variant ID の場合は 45264808411274

カタログ商品識別子が SKU の場合は 12345(ステップ2で選択した値と一致します)
store_name 文字列 “your-store”(.myshopify.com を除いたShopifyストアのサブドメイン)
shopify_product_id 数値 7939032613002(Brazeカタログでは数値として保存されます。Shopify APIはこのIDを文字列として返す場合があります)
shopify_variant_id 数値 45264808411274(Brazeカタログでは数値として保存されます。Shopify APIはこのIDを文字列として返す場合があります)
product_title 文字列 “Classic leather jacket”
variant_title 文字列 “Large / Red”、”Medium”、またはバリアントが1つだけの商品の場合は “Default Title”
status 文字列 “active”、”draft”、”archived”
product_image_url 文字列 “https://cdn.shopify.com/s/files/1/0641/0970/7402/files/t_shir.jpg?v=1736538760”
variant_image_url 文字列 バリアント画像がない場合は商品画像と同じCDN形式のURL、それ以外の場合はバリアント固有の画像URL
vendor 文字列 “Flash and Thread”、”PantsLabyrinth”
product_type 文字列 “Outerwear”、”T-Shirts”(Shopifyの商品の 商品タイプ から取得)
product_url 文字列 “https://your-store.myshopify.com/products/classic-leather-jacket”
product_handle 文字列 “classic-leather-jacket”
published_scope 文字列 “web”、”global”
price 数値 10.00、24.99

Shopifyは多くの場合、価格を文字列として返します(例:REST Admin APIでは "199.00")。Brazeはこのカタログフィールドでは、それらを数値に変換します。
compare_at_price 数値 Shopifyで 割引前の価格 が設定されている場合は 15.00

Shopifyに割引前の価格がない場合は 0。Shopify APIでは通常、未設定の割引前価格に対して null が返されますが、フィールドが常に数値になるように、Brazeはカタログに 0 を保存します(これはBrazeのデフォルトであり、Shopifyが 0 として送信する値ではありません)。
inventory_quantity 数値 20、0、または売り越しが許可されている場合は負の値(例:-18)
options 文字列 “Size,Color”

Shopifyでは、1つの商品につき最大3つのオプションタイプ(例:サイズ、カラー、素材)を設定できます。options の値は、それらの名前のカンマ区切りリストです。
option_values 文字列 “Medium,Red”、”Large,Red”

各値は options と同じ順序に対応します(最大3つの値)。
sku 文字列 “12345”、”SKU-001-RED-L”
product_tags 配列 ["Summer", "Sale", "New"]

商品タグの同期が必要です。
collection_ids 配列 [123456789012, 987654321098](ShopifyのコレクションID)

Shopifyコレクションの同期が必要です。
Metafield columns タイプによって異なる 同期された各メタフィールドは、そのキーを名前とする個別の列として表示されます。詳しくは、ステップ3の「商品メタフィールド」タブにあるサポートされているメタフィールドを参照してください。

Shopify カタログのユースケース

以下のユースケースでは、同期した Shopify カタログデータを使用してメッセージをパーソナライズする方法を紹介します。

商品タグを使用すると、Shopify での商品の分類に基づいてメッセージをパーソナライズできます。たとえば、「Summer Sale」タグが付いたすべての商品を紹介するプロモーションをカタログセレクションで送信したり、「Premium」タグが付いた商品を購入したユーザーのセグメントを作成したりできます。

商品タグは、各カタログアイテムの配列フィールドとして保存されます。商品タグの同期を設定するには、Shopify 商品タグを参照してください。

カタログセレクション

  1. Shopify で、該当する商品に「Women’s」という商品タグを付けます。

「Women's」、「Sweaters」、「Men」のタグが付いた「Women's - Sweaters」の商品タイプ。

  1. Braze で、タグの同期を有効にし、「Women’s」商品タグを選択します。

Shopify 商品タグを選択するモーダル。「Women's」を含む衣料品関連の 15 個のタグが選択されている。

パーソナライゼーション

  1. 「Women’s」など、該当する商品タグを持つ商品で絞り込むカタログセレクションを作成します。1 つのカタログセレクション内で使用できる一意の配列フィールドは 1 つのみで、カタログセレクションには最大 50 件の商品を含めることができます。

属性「Women's」を持つ商品タグで絞り込むカタログセレクション。

  1. メッセージ作成画面で、カタログセレクションのうち「Women’s」タグが付いた商品をテンプレート化したい位置にセレクションを追加します。たとえば、次のような HTML 商品ブロックを使用できます。
{% 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>

または、プッシュ通知で「Women’s」タグが付いた特定の商品に言及したい場合は、パーソナライゼーションを追加ツールを使用してカタログアイテムを指定できます。

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

商品タグを持つ 3 つのアイテムをカタログセレクションから取り込んでいるプッシュ通知作成画面。

カタログセグメンテーション (SQL)

セグメントエクステンションを使用すると、商品タグに関連する操作を行ったユーザーに基づいてセグメントを作成できます。たとえば、特定の商品タグを含むカタログアイテムにエンゲージしたユーザーを見つけるには、次のクエリを使用します。

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

商品メタフィールドを使用すると、Shopify の標準フィールド以外のカスタム商品詳細でメッセージをパーソナライズできます。たとえば、注文確認にお手入れ方法を記載したり、レコメンデーションメールに原産国を表示したり、特定の素材の商品を購入したユーザーをセグメント化したりできます。

同期された各メタフィールドはカタログ内の個別の列になり、データ型はメタフィールドのタイプによって決まります。メタフィールドの同期を設定するには、Shopify 商品メタフィールドを参照してください。

カタログセレクション

  1. Shopify で、該当する商品の seasonal 商品メタフィールドを summer に設定します (これは商品タグではなく、メタフィールドの値です)。

商品メタフィールドを追加するモーダル。値 summer を持つメタフィールド seasonal が含まれている。

  1. Braze で、メタフィールドの同期を有効にし、custom.seasonal (または Shopify メタフィールドに対応する名前空間とキー) を選択します。

商品メタフィールドを選択するモーダル。展開されたドロップダウンで custom.seasonal を含む 4 つの項目が選択されている。

パーソナライゼーション

  1. 該当する値を含むメタフィールドで絞り込むカタログセレクションを作成します。

属性 summer を持つメタフィールドで絞り込むカタログセレクション。

  1. メッセージ作成画面で、商品メタフィールドをテンプレート化したい位置にセレクションを追加します。たとえば、次のような HTML 商品ブロックを使用できます。
{% 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>

または、プッシュ通知で特定のメタフィールド値を持つ特定の商品に言及したい場合は、パーソナライゼーションを追加ツールを使用してカタログアイテムを指定できます。

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

メタフィールドに基づくセレクションを使用して 3 つのアイテムをカタログセレクションから取り込んでいるプッシュ通知作成画面。

カタログセグメンテーション (SQL)

セグメントエクステンションを使用すると、商品メタフィールドに関連する操作を行ったユーザーに基づいてセグメントを作成できます。たとえば、メタフィールド配列に特定の値を含む商品で e コマースイベントをトリガーしたユーザーを見つけるには、次のクエリを使用します。

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

特定の商品メタフィールドを持つ商品を注文した顧客をセグメント化したい場合は、次の SQL セグメントエクステンションテンプレート (全期間、特定の期間、イベントを最初または最後にトリガー) のいずれかを使用してください。

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

Shopify コレクションを使用すると、Shopify のサイトやアプリでも使用しているキュレートされた商品グループをメッセージに取り込めます。たとえば、プロモーションメールで「New Arrivals」を紹介したり、カート放棄キャンバスで「Best Sellers」をクロスセルしたり、季節のコレクションを閲覧したユーザーをターゲットにしたりできます。

カタログセレクション

  1. Shopify で、パフォーマンスの高い商品を集めた「New Women’s Products - In Stock」コレクションを作成します。

「New Women's Products - In Stock」を含む Shopify コレクションのリスト。

  1. Braze で、コレクションの同期を有効にし、「Women’s Products - In Stock」を選択します。

コレクションを選択するモーダル。展開されたドロップダウンで 4 つのコレクションが選択されている。

パーソナライゼーション

  1. 「New Women’s Products - In Stock」という名前のカタログセレクションを作成し、そのコレクションの ID を持つ商品で絞り込みます。1 つのカタログセレクション内で使用できる一意の配列フィールドは 1 つのみで、コレクションには最大 50 件の商品を含めることができます。
    • コレクションフィールドで絞り込んで、独自のカスタムセレクションを作成することもできます。

コレクション ID 属性「470645342446」を持つコレクションで絞り込むカタログセレクション。

  1. メッセージ内で、作成したセレクションを使用するか、コレクションを直接参照して、コレクションをテンプレート化します。たとえば、次のような HTML 商品ブロックを使用できます。
{% 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>

または、プッシュ通知で特定の新商品に言及したい場合は、パーソナライゼーションを追加ツールを使用してカタログアイテムを指定できます。

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

コレクションに含まれる 3 つのアイテムをカタログセレクションから取り込んでいるプッシュ通知作成画面。

カタログセグメンテーション (SQL)

コレクションに関連する操作を行ったユーザーのセグメントを作成します。セグメントエクステンションを使用すると、コレクションへの所属に基づいてセグメントを作成できます。たとえば、過去 1 年間に特定のコレクションの商品を購入したユーザーを見つけるには、次のクエリを使用します。

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

商品同期を非アクティブにする

Shopify商品同期機能を非アクティブにすると、カタログと商品がすべて削除されます。この操作は、このカタログの商品データをアクティブに使用しているメッセージにも影響する可能性があります。商品詳細のないメッセージが送信される可能性があるため、非アクティブ化する前にキャンペーンまたはキャンバスを更新または一時停止していることを確認してください。カタログページでShopifyカタログを直接削除しないでください。

トラブルシューティング

Shopify商品同期でエラーが発生した場合は、以下のいずれかのエラーが原因である可能性があります。各エラーの手順に従って問題を修正し、同期を復旧してください。

エラー 理由 解決策
サーバーエラー 商品の同期を試みた際に、Shopify側でサーバーエラーが発生した場合に起こります。 同期を無効にし、商品の在庫全体を再同期してください。
SKUの重複 SKUをカタログアイテムIDとして使用していて、複数のバリアントが同じSKUを共有している場合に起こります。各カタログの item_id は一意である必要があるため、該当するアイテムは同期に失敗したり、エラーレコードが蓄積されたり、商品情報が意図せず上書きされたりする可能性があります。 Shopifyで商品とバリアントの全リストを確認し、重複するSKUがないことを確認してください。重複するSKUがある場合は、Shopifyストアのアカウントでのみ、一意のSKUになるように更新してください。修正後、同期を無効にし、商品の在庫全体を再同期してください。
カタログ上限超過 カタログの上限を超えた場合に起こります。ストレージの空きがなくなるため、Brazeは同期を完了することも、同期をアクティブな状態に保つこともできません。 この問題には2つの解決策があります。

1. アカウントマネージャーに連絡してティアをアップグレードし、カタログの上限を引き上げます。

2. 次のいずれかを削除して、ストレージの空き容量を確保します。
- 他のカタログのカタログアイテム
- 他のカタログ
- 作成したセレクション

いずれかの解決策を実施した後、同期を無効にしてから再同期する必要があります。

カタログアイテムの検証の詳細については、カタログAPIドキュメントのトラブルシューティングを参照してください。

New Stuff!