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

ステップ2: 商品識別子を選択する
カタログIDとして使用する商品識別子を選択します。
- ShopifyバリアントID
- SKU
選択する商品識別子のIDとヘッダーの値には、文字、数字、ハイフン、アンダースコアのみを使用できます。商品識別子がこの形式に従っていない場合、Brazeはカタログの同期からその識別子を除外します。
これは、Brazeカタログ情報を参照するときに使用する主要な識別子です。
カタログIDとしてSKUを選択する場合は、ストア内のすべての商品とバリアントにSKUが設定されており、それらが一意であることを確認してください。
- アイテムにSKUが設定されていない場合、Brazeはその商品をカタログに同期できません。
- 同じSKUを持つ複数の商品がある場合、予期しない動作が発生したり、重複した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) |
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を使用し、カタログセレクションやSegmentフィルターの構築時に使用されます。

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

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

同期がカタログのストレージ制限を超えた場合、Brazeは同期を停止し、新しい商品の更新は反映されなくなります。必要に応じてティアのアップグレードについてカスタマーサクセスマネージャーにお問い合わせください。
ステップ5: 設定を管理する
各同期タイプには、Shopifyパートナーページに同期された合計数、現在のステータス、カタログへのリンクを表示するサマリーカードがあります。表示アイコンを選択して、アクティブな設定を表示・編集できます。
Shopifyパートナーページから、商品タグ、コレクション、商品メタフィールドの管理を含むShopify商品同期をいつでも変更できます。

同期するセレクションを変更すると、それらを参照しているアクティブなCampaigns、Canvases、またはカタログセレクションに影響する可能性があります。変更を適用する際は、アクティブなコンテンツが正しく動作するように更新してください。
サポートされているShopifyカタログデータ
| フィールド | データタイプ | 例 |
|---|---|---|
id |
文字列 | カタログの商品識別子がShopifyバリアントIDの場合は45264808411274カタログの商品識別子がSKUの場合は 12345(ステップ2で選択した値と一致します) |
store_name |
文字列 | “your-store”(Shopifyストアのサブドメイン、.myshopify.comなし) |
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”、または単一バリアント商品の場合は”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 typeから取得) |
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でCompare at priceが設定されている場合は15.00Shopifyに比較価格が設定されていない場合は 0。Shopify APIは未設定の比較価格に対して通常nullを返しますが、Brazeはフィールドが常に数値になるようにカタログに0を保存します(これはBrazeのデフォルトであり、Shopifyが0として送信する値ではありません)。 |
inventory_quantity |
数値 | 20、0、または過剰販売が許可されている場合は負の値(例: -18) |
options |
文字列 | “Size,Color” Shopifyでは商品ごとに最大3つのオプションタイプを設定できます(例: Size、Color、Material)。 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コレクションの同期が必要です。 |
| メタフィールド列 | タイプにより異なる | 同期された各メタフィールドは、そのキーで名前が付けられた個別の列として表示されます。詳細については、ステップ3の「商品メタフィールド」タブのサポートされているメタフィールドを参照してください。 |
Shopifyカタログは、Shopifyによって管理されています。カタログを更新するには、Shopifyストアで直接変更を行ってください。変更は自動的にBrazeに同期されます。Shopifyカタログを削除するには、BrazeのShopifyパートナーページに移動し、同期を非アクティブにしてください。
Shopifyカタログのユースケース
これらのユースケースでは、同期されたShopifyカタログデータを使用してメッセージをパーソナライズする方法を示します。
Brazeは各Shopify商品につき最大250のバリアントをカタログに同期します。この制限を超えるバリアントは同期されません。1商品あたり250を超えるバリアントが必要な場合は、Brazeカスタマーサクセスマネージャーにお問い合わせください。
商品タグを使用して、Shopifyでの商品のカテゴリ分けに基づいてメッセージをパーソナライズできます。例えば、カタログセレクションを通じて「Summer Sale」タグが付いたすべての商品を紹介するプロモーションを送信したり、「Premium」タグが付いた商品を購入したユーザーのSegmentを構築したりできます。
商品タグは、各カタログアイテムの配列フィールドとして保存されます。商品タグの同期を設定するには、Shopify商品タグを参照してください。
カタログセレクション
- Shopifyで、関連する商品に「Women’s」の商品タグを付けます。

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

パーソナライゼーション
- 「Women’s」などの該当する商品タグを持つ商品をフィルタリングするカタログセレクションを作成します。単一のカタログセレクション内で使用できるユニークな配列フィールドは1つのみで、カタログセレクション内の商品は最大50個です。

- メッセージ作成画面で、「Women’s」タグが付いたカタログセレクションの商品をテンプレートに挿入したい場所にセレクションを追加します。例えば、次のようなHTML商品ブロックを使用できます。
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>
または、「Women’s」タグが付いた特定の商品をプッシュ通知で紹介したい場合は、パーソナライゼーションを追加ツールを使用してカタログアイテムを指定できます。
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}}

カタログセグメンテーション(SQL)
セグメントエクステンションを使用して、商品タグとインタラクションしたユーザーに基づいてSegmentを構築します。例えば、特定の商品タグを含むカタログアイテムとエンゲージしたユーザーを見つけるには、次のクエリを使用します。
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)));
商品メタフィールドを使用して、Shopifyの標準フィールドを超えたカスタム商品詳細でメッセージをパーソナライズできます。例えば、注文確認にケア方法を含めたり、おすすめメールに原産国を表示したり、特定の素材の商品を購入したユーザーをセグメント化したりできます。
同期された各メタフィールドは、カタログ内の個別の列となり、データタイプはメタフィールドタイプによって決まります。メタフィールドの同期を設定するには、Shopify商品メタフィールドを参照してください。
カタログセレクション
- Shopifyで、関連する商品の
seasonal商品メタフィールドをsummerに設定します(これはメタフィールドの値であり、商品タグではありません)。

- Brazeで、メタフィールドの同期を有効にし、
custom.seasonal(またはShopifyメタフィールドに一致するネームスペースとキー)を選択します。

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

- メッセージ作成画面で、商品メタフィールドをテンプレートに挿入したい場所にセレクションを追加します。例えば、次のようなHTML商品ブロックを使用できます。
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>
または、特定のメタフィールド値を持つ商品をプッシュ通知で紹介したい場合は、パーソナライゼーションを追加ツールを使用してカタログアイテムを指定できます。
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}}

カタログセグメンテーション(SQL)
セグメントエクステンションを使用して、商品メタフィールドとインタラクションしたユーザーに基づいてSegmentを構築します。例えば、メタフィールド配列に特定の値を含む商品でeコマースイベントをトリガーしたユーザーを見つけるには、次のクエリを使用します。
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));
特定の商品メタフィールドを持つ注文を行った顧客をセグメント化したい場合は、以下のSQLセグメントエクステンションテンプレート(全期間、特定の期間、最初または最後にイベントをトリガー)のいずれかを使用してください。
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;
Shopifyコレクションを使用して、Shopifyサイトやアプリ体験でも使用されているキュレートされた商品グループをメッセージに取り込みます。例えば、プロモーションメールで「New Arrivals」を紹介したり、カート放棄Canvasで「Best Sellers」をクロスセルしたり、季節限定コレクションを閲覧したユーザーをターゲットにしたりできます。
カタログセレクション
- Shopifyで、トップパフォーマンスの商品を含む「New Women’s Products - In Stock」コレクションを作成します。

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

Shopifyコレクションの場合、コレクションを表示したときのURLに含まれるコレクションIDを使用する必要があります。例えば、URLがhttps://admin.shopify.com/store/se-team-ecommerce/collections/470645342446の場合、コレクションIDは470645342446です。
パーソナライゼーション
- そのコレクションのIDを持つ商品でフィルタリングされた「New Women’s Products - In Stock」というカタログセレクションを作成します。単一のカタログセレクション内で使用できるユニークな配列フィールドは1つのみで、コレクション内の商品は最大50個です。
- Collectionsフィールドでフィルタリングして、独自のカスタムセレクションを作成することもできます。

- メッセージで、作成したセレクションを使用するか、コレクションを直接参照してテンプレートに挿入します。例えば、次のようなHTML商品ブロックを使用できます。
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>
または、特定の新商品をプッシュ通知で紹介したい場合は、パーソナライゼーションを追加ツールを使用してカタログアイテムを指定できます。
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}}

カタログセグメンテーション(SQL)
コレクションとインタラクションしたユーザーのSegmentを作成します。セグメントエクステンションを使用して、コレクションメンバーシップに基づいてSegmentを構築します。例えば、過去1年間に特定のコレクションの商品を購入したユーザーを見つけるには、次のクエリを使用します。
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)));
値下げ通知や再入荷通知も設定できます!
各ユースケースでは、ユーザーのサブスクリプションステータスをカタログにキャプチャするカスタムイベントを作成する必要があります。カスタムイベントには、Shopify商品同期の一部として選択したSKUまたはShopifyバリアントIDのいずれかにマップされるイベントプロパティが必要です。
商品同期を非アクティブにする
Shopify商品同期機能を非アクティブにすると、カタログと商品がすべて削除されます。この操作は、このカタログの商品データをアクティブに使用しているメッセージにも影響する可能性があります。商品詳細のないメッセージが送信される可能性があるため、非アクティブ化する前にCampaignsまたはCanvasesを更新または一時停止していることを確認してください。カタログページでShopifyカタログを直接削除しないでください。
トラブルシューティング
Shopify商品同期でエラーが発生した場合は、次のいずれかのエラーが原因である可能性があります。問題を修正し、同期を解決する方法については、以下の手順に従ってください。
| エラー | 理由 | ソリューション |
|---|---|---|
| サーバーエラー | 商品を同期しようとしたときに、Shopify側でサーバーエラーが発生した場合に起こります。 | 同期を非アクティブにし、商品の在庫全体を再同期します。 |
| 重複するSKU | カタログアイテムIDとしてSKUを使用している場合に、複数の商品に同じSKUが設定されていると発生します。カタログアイテムIDは一意である必要があるため、すべての商品に一意のSKUが必要です。 | Shopifyで商品とバリアントの一覧をすべて監査して、重複するSKUがないことを確認します。SKUが重複している場合は、Shopifyストアアカウントで一意のSKUに更新します。修正後、同期を非アクティブにし、商品の在庫全体を再同期します。 |
| カタログ制限の超過 | カタログ制限を超えた場合に発生します。Brazeは、利用可能なストレージがないため、同期を完了することや、同期をアクティブな状態で維持することができなくなります。 | この問題には2つのソリューションがあります。 1. アカウントマネージャーに連絡してティアをアップグレードし、カタログ制限を増やします。 2. 次のいずれかを削除して、ストレージ領域を解放します。 - 他のカタログからのカタログアイテム - 他のカタログ - 作成されたセレクション いずれのソリューションを取った場合でも、同期を非アクティブにしてから再同期を実行する必要があります。 |