カタログアイテムをカスタム属性配列にマッチさせる
各ユーザーがプロファイルに保存した商品名のリストを持っている場合、カタログセレクションとLiquidを使用して、そのリストに含まれるカタログ行のみを表示できます(例:ウィッシュリストメール)。
この例について
Flash & Threadは、各顧客の保存済み商品名を文字列配列カスタム属性(saved_product_names)に格納しています。カタログには商品の完全な詳細情報(カテゴリ、価格、画像URL、在庫)が保持されています。
カタログセレクションは、カタログの列を静的な値やLiquidの値(カタログ行の配列フィールドを含む)に対してフィルタリングできます。ただし、ユーザープロファイルの配列に格納された値に対してカタログ行をフィルタリングすることはできません。ユーザーのリストからパーソナライズするには、セレクションで広範なカタログアイテムのセットを返し、Liquidを使用してプロファイル配列に一致する行のみを保持します。
このパターンでは以下を行います。
- ユーザーの配列カスタム属性をLiquid変数に割り当てます。
- 事前にフィルタリングされたカタログセレクション(最大50アイテム)に対して
catalog_selection_itemsを呼び出します。 itemsをループし、containsを使用して各カタログフィールド(例:nameやid)を配列と照合します。

このパターンは、セレクションの結果セット(最大50カタログ行)が各ユーザーの保存済みアイテムを含む可能性がある場合にのみ機能します。例えば、小規模なカタログや、フィルターによってセレクションが十分に絞り込まれ、一般的なリストをカバーできる場合です。ユーザーの保存済みアイテムが返される50行の範囲外にある場合、ループでは一致が見つからず、メッセージはそれらのアイテムについて何も表示しません。セレクションはユーザーのプロファイル配列と照合できないため、一般的なケースではこれを解決するフィルターはありません。
考慮事項
- 顧客に送信する前に、ステージングワークスペースでLiquidとカタログデータをテストしてください。
- セレクションが返すカタログ行は最大50件のため、各ユーザーの保存済みアイテムがその結果セット内に収まるようなフィルター(例: 在庫あり、アクティブなカテゴリ、価格帯)を追加してください。
- この例では、ユーザープロファイル上の文字列配列を使用しています。
- オブジェクトの配列の場合は、各オブジェクト内のプロパティ(例:
product_id)でマッチさせ、containsチェックを調整するか、オブジェクトに対してforループを使用してください。オブジェクトの配列を参照してください。 containsの動作は属性タイプによって異なります。配列の場合は==ではなくcontainsを使用してください。条件付きロジックを参照してください。- 商品名が変更されたり重複したりする可能性がある場合は、安定した識別子(例: カタログの
id)でマッチさせてください。 - この記事のLiquidスニペットは例です。チャネル(メールHTML、プッシュなど)でレンダリングを検証してください。
設定
この例では、以下を前提としています:
| アセット | 詳細 |
|---|---|
| カスタム属性 | saved_product_names — 文字列配列(例:["linen_shirt", "trail_jacket", "canvas_tote"]) |
| カタログ | apparel_products(id、category、name、price、inventory、image_url の列を含む) |
| セレクション | apparel_products 上の in_stock_apparel、結果の上限50件、関連性のない行を除外するフィルター付き(例:inventory が 0 より大きい) |
ステップ1:カタログとセレクションを作成する
apparel_productsという名前のカタログに商品行をインポートまたは同期します。- 必要な数の関連行を返すセレクション(例:
in_stock_apparel)を作成します。上限は50アイテムです。 - メッセージに含めたくない行(在庫切れ、対象外のカテゴリーなど)を除外するセレクションフィルターを追加します。
セレクションの設定については、セレクションを参照してください。
ステップ2:メッセージにLiquidを追加する
プロファイル配列を割り当て、セレクションを読み込み、contains でループ処理します:
{% assign saved_product_names = custom_attribute.${saved_product_names} %}
{% catalog_selection_items apparel_products in_stock_apparel %}
{% for item in items %}
{% if saved_product_names contains item.name %}
Product: {{ item.name }}
Category: {{ item.category }}
Price: ${{ item.price }}
Image: {{ item.image_url }}
{% endif %}
{% endfor %}
配列にディスプレイ名ではなくIDを格納している場合は、item.name を item.id(または別の列)に置き換えてください。チャネルに合わせて、フィールド間にスペースやHTMLを追加してください。${{ item.price }} の $ は、Liquidの出力の前に表示されるリテラルの通貨記号であり、Brazeの ${} パーソナライゼーション構文の一部ではありません。
このLiquidを自動生成するには、パーソナライゼーションを追加モーダル(カタログアイテム > セレクションを使用)を開きます。カタログの使用を参照してください。
ステップ3:プレビューとテスト
異なる saved_product_names の値を持つプロファイルにテストメッセージを送信します。一致するカタログ行のみが表示されること、および配列が空の場合に商品行が表示されないことを確認します。