Shopify商品同期
Shopifyストアのすべての商品をBrazeのカタログに同期し、より深いメッセージングパーソナライゼーションを実現できます。
Shopifyカタログは、Shopifyストア内の商品に編集や変更を加えると、ほぼリアルタイムで更新されます。カート放棄や注文確認などを、最新の商品詳細や情報で強化できます。
コアのShopify商品データのサポートに加えて、Shopifyコレクション、商品タグ、商品メタフィールドをBrazeカタログに同期できます。これらの追加フィールドにより、よりリッチなパーソナライゼーション、より正確なカタログセレクション、セグメントエクステンションを通じたより強力なセグメンテーションが可能になります。
Shopify商品同期を設定する
Shopifyストアがすでにインストールされている場合でも、このセクションの手順に従って商品を同期できます。
ステップ1: 同期をオンにする
ShopifyのインストールフローまたはShopifyパートナーページで、商品をBrazeカタログに同期できます。

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

カタログIDとしてSKUを使用する場合は、ストア内のすべての商品とバリアントにSKUが設定されており、それらが一意であることを確認してください。
- アイテムにSKUが設定されていない場合、Brazeはその商品をカタログに同期できません。
- 同じSKUを持つ複数の商品がある場合、予期しない動作が発生したり、意図せず商品情報が上書きされる可能性があります。
ステップ3: 追加の商品データを設定する(オプション)
オプションで、商品タグ、Shopifyコレクション、メタフィールドの同期を有効にできます。初回同期後にShopifyパートナーページからこれらの設定を有効化または変更できます。

まずShopifyで商品タグ、Shopifyコレクション、メタフィールドを追加してください。Shopifyに存在しない場合、Brazeには表示されません。

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

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

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

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

Brazeは同期されたコレクションの識別にShopifyコレクションIDを使用し、カタログセレクションやセグメントフィルターの構築時に使用されます。


ステップ4: 同期の進捗を追跡する
設定を保存すると、Brazeは商品の同期を開始し、Shopifyパートナーページのステータスを進行中に更新します。同期にかかる時間は、ストア内の商品とバリアントの数によって異なります。
同期が進行中であればページを離れることができます。同期が完了するとBrazeからダッシュボード通知が届きます。完了後、ステータスがアクティブに更新され、Shopifyパートナーページでカタログ名を選択して商品を表示できます。

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


同期がカタログのストレージ制限を超えた場合、Brazeは同期を停止し、新しい商品の更新は反映されなくなります。必要に応じてティアのアップグレードについてカスタマーサクセスマネージャーにお問い合わせください。
ステップ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.99Shopifyは多くの場合、価格を文字列として返します(例:REST Admin APIでは "199.00")。Brazeはこのカタログフィールドでは、それらを数値に変換します。 |
compare_at_price |
数値 | Shopifyで 割引前の価格 が設定されている場合は 15.00Shopifyに割引前の価格がない場合は 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ストアで直接変更を行ってください。変更は自動的にBrazeに同期されます。Shopifyカタログを削除するには、BrazeのShopifyパートナーページに移動し、同期を無効にします。
Shopify カタログのユースケース
以下のユースケースでは、同期した Shopify カタログデータを使用してメッセージをパーソナライズする方法を紹介します。

Braze は、各 Shopify 商品につき最大 250 のバリアントをカタログに同期します。この上限を超えるバリアントは同期されません。1 商品あたり 250 を超えるバリアントが必要な場合は、Braze のカスタマーサクセスマネージャーにお問い合わせください。
商品タグを使用すると、Shopify での商品の分類に基づいてメッセージをパーソナライズできます。たとえば、「Summer Sale」タグが付いたすべての商品を紹介するプロモーションをカタログセレクションで送信したり、「Premium」タグが付いた商品を購入したユーザーのセグメントを作成したりできます。
商品タグは、各カタログアイテムの配列フィールドとして保存されます。商品タグの同期を設定するには、Shopify 商品タグを参照してください。
カタログセレクション
- Shopify で、該当する商品に「Women’s」という商品タグを付けます。

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

パーソナライゼーション

カタログセレクションで商品タグやコレクションを参照する場合は、カタログデータに表示される配列の角かっこ [] や引用符 "" を付けずに、値そのものだけを使用してください。たとえば、カタログで商品タグが ["Women's"] と表示されている場合、セレクションのフィルターには Women's と入力します。
- 「Women’s」など、該当する商品タグを持つ商品で絞り込むカタログセレクションを作成します。1 つのカタログセレクション内で使用できる一意の配列フィールドは 1 つのみで、カタログセレクションには最大 50 件の商品を含めることができます。

- メッセージ作成画面で、カタログセレクションのうち「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}}

カタログセグメンテーション (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 商品メタフィールドを参照してください。
カタログセレクション
- Shopify で、該当する商品の
seasonal商品メタフィールドをsummerに設定します (これは商品タグではなく、メタフィールドの値です)。

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

パーソナライゼーション
- 該当する値を含むメタフィールドで絞り込むカタログセレクションを作成します。

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

カタログセグメンテーション (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」をクロスセルしたり、季節のコレクションを閲覧したユーザーをターゲットにしたりできます。
カタログセレクション
- Shopify で、パフォーマンスの高い商品を集めた「New Women’s Products - In Stock」コレクションを作成します。

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


Shopify コレクションには、コレクション ID を使用する必要があります。コレクション ID は、コレクションを表示したときの URL に含まれています。たとえば、URL が https://admin.shopify.com/store/se-team-ecommerce/collections/470645342446 の場合、コレクション ID は 470645342446 です。
パーソナライゼーション

カタログセレクションでコレクション ID を参照する場合は、カタログデータに表示される配列の角かっこ [] を付けずに、数値の ID 値だけを使用してください。たとえば、カタログでコレクション ID が [123456789012, 987654321098] と表示されている場合、セレクションのフィルターには数値の ID (470645342446 など) のみを入力します。
- 「New Women’s Products - In Stock」という名前のカタログセレクションを作成し、そのコレクションの ID を持つ商品で絞り込みます。1 つのカタログセレクション内で使用できる一意の配列フィールドは 1 つのみで、コレクションには最大 50 件の商品を含めることができます。
- コレクションフィールドで絞り込んで、独自のカスタムセレクションを作成することもできます。

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

カタログセグメンテーション (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 商品同期の一部として選択した SKU または Shopify バリアント ID のいずれかに対応するイベントプロパティが必要です。
商品同期を非アクティブにする
Shopify商品同期機能を非アクティブにすると、カタログと商品がすべて削除されます。この操作は、このカタログの商品データをアクティブに使用しているメッセージにも影響する可能性があります。商品詳細のないメッセージが送信される可能性があるため、非アクティブ化する前にキャンペーンまたはキャンバスを更新または一時停止していることを確認してください。カタログページでShopifyカタログを直接削除しないでください。
トラブルシューティング
Shopify商品同期でエラーが発生した場合は、以下のいずれかのエラーが原因である可能性があります。各エラーの手順に従って問題を修正し、同期を復旧してください。
| エラー | 理由 | 解決策 |
|---|---|---|
| サーバーエラー | 商品の同期を試みた際に、Shopify側でサーバーエラーが発生した場合に起こります。 | 同期を無効にし、商品の在庫全体を再同期してください。 |
| SKUの重複 | SKUをカタログアイテムIDとして使用していて、複数のバリアントが同じSKUを共有している場合に起こります。各カタログの item_id は一意である必要があるため、該当するアイテムは同期に失敗したり、エラーレコードが蓄積されたり、商品情報が意図せず上書きされたりする可能性があります。 |
Shopifyで商品とバリアントの全リストを確認し、重複するSKUがないことを確認してください。重複するSKUがある場合は、Shopifyストアのアカウントでのみ、一意のSKUになるように更新してください。修正後、同期を無効にし、商品の在庫全体を再同期してください。 |
| カタログ上限超過 | カタログの上限を超えた場合に起こります。ストレージの空きがなくなるため、Brazeは同期を完了することも、同期をアクティブな状態に保つこともできません。 | この問題には2つの解決策があります。 1. アカウントマネージャーに連絡してティアをアップグレードし、カタログの上限を引き上げます。 2. 次のいずれかを削除して、ストレージの空き容量を確保します。 - 他のカタログのカタログアイテム - 他のカタログ - 作成したセレクション いずれかの解決策を実施した後、同期を無効にしてから再同期する必要があります。 |
カタログアイテムの検証の詳細については、カタログAPIドキュメントのトラブルシューティングを参照してください。