> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 戦略ルールリファレンス

> アプリ内の戦略エディターを支える、戦略のトリガー、演算子、アクション、フィルター、評価の仕組みの完全なカタログ。

このページは、戦略エディターを支える完全なカタログです。すべてのトリガーとそれぞれで使用できる演算子、すべてのアクション、グローバルフィルター、戦略の評価方法を掲載しています。[戦略の作成](/ja/aftersell/strategies_building_in_app)のウォークスルーと対になるページで、特定のオプションについて網羅的な詳細が必要なときに参照してください。

**ルール**は、**トリガー**（*いつ*）と**アクション**（*何を*）を組み合わせたものです。1つの **AND** / **OR** トグルの下に最大5つのトリガーを組み合わせることができ、**AND** ではすべてのトリガーが一致する必要があり、**OR** ではいずれか1つが一致すれば十分です。以下のセクションもこの構成に沿っています。まず[トリガー](#triggers)と[アクション](#actions)、次にすべてのルールに適用される戦略レベルのコントロールとして、[ルールの順序](#rule-priority-and-evaluation-order)、[グローバルフィルター](#global-filters)、[Catch all](#catch-all) を説明します。

<div id="triggers">
  ## トリガー
</div>

トリガーは、ルールがいつ発火するかを決めます。利用可能なトリガータイプは次のとおりです。

<div id="product-triggers">
  ### 商品トリガー
</div>

コンテキスト内の商品（ショッパーのカート、完了したばかりの注文、または閲覧中の商品）に基づいてターゲティングします。

* **Specific product(s)** - ID で特定の Shopify 商品に一致します
* **Collection** - 特定のコレクションに属する商品に一致します
* **Tag(s)** - 特定のタグ（例：「sale」、「summer」）を持つ商品に一致します
* **Title** - 商品タイトルに一致します
* **Vendor** - ベンダー／ブランド名に一致します
* **Type** - 商品タイプのフィールド（例：「Apparel」、「Electronics」）に一致します
* **Handle** - 商品 URL のスラッグに一致します
* **Metafield** - カスタムメタフィールドのネームスペース／キー／値の組み合わせに一致します
* **Selling plan** - 「subscription」または「one-time」の商品に一致します。リクエストのコンテキストに商品の販売プランが含まれている場合にのみ評価されます。Aftersell のチェックアウトと購入後アップセルのサーフェスはこれを送信しないため、カスタム連携で明示的に指定しない限り、これらのサーフェスではこのトリガーは一致しません

<div id="customer-triggers">
  ### 顧客トリガー
</div>

ショッパーが誰であるかに基づいてターゲティングします。

* **Customer tag** - 例：「VIP」、「loyalty-gold」
* **Country code** - 請求先の国
* **Province code** - 請求先の州／都道府県
* **Locale** - 顧客のロケール（例：「en-US」）
* **Accepts marketing** - マーケティングのオプトイン状況
* **Order count** - 過去の注文数
* **Total spent** - 累計購入金額

<div id="cart-triggers">
  ### カートトリガー
</div>

カート全体の状態に基づいてターゲティングします。

* **Cart subtotal** - 例：小計が \$50 を超える
* **Item count** - カート内のアイテムの合計数量
* **Line count** - 個別のラインアイテムの数
* **Cart attribute** - Shopify のカート API で設定されたカスタムのカート属性
* **Cart note** - カートのメモフィールド

<div id="location-triggers">
  ### ロケーショントリガー
</div>

ショッパーの配送先とストアの通貨に基づいてターゲティングします。

* **Shipping country** - 配送先の国
* **Shipping province** - 配送先の州／都道府県
* **Shipping method** - 選択された配送方法
* **Store currency** - 有効なストア通貨のコード

<div id="marketing-triggers">
  ### マーケティングトリガー
</div>

ショッパーが訪れたページの URL に基づいてターゲティングします。

* **URL** - ランディング URL の部分文字列に一致します。URL に埋め込まれたパラメーター（例：`utm_source=newsletter`）に一致させることで、特定のキャンペーンやチャネルをターゲティングできます

<div id="time-triggers">
  ### 時間トリガー
</div>

リクエストが評価された時刻（ストアの時間）に基づいてターゲティングします。

* **Day of week** - 現在の曜日
* **Hour of day** - 現在の時間

<div id="dynamic-triggers">
  ### 動的トリガー
</div>

* **Always match** - 条件がなく常に発火するトリガー。すべてのリクエストでルールを実行させたい場合に使用します（これは、他のどのルールも一致しない場合にのみ発火する戦略レベルの [Catch all](#catch-all) とは異なります）。

<Note>
  すべてのトリガーがすべてのサーフェスで値を持つわけではありません。たとえばチェックアウトは商品とカートのコンテキストのみを送信するため、顧客、ロケーション、マーケティングのトリガーは一致しません。各サーフェスが送信する内容については、[戦略の実装](/ja/aftersell/implementing_strategies_post_purchase_upsells)ガイドを参照してください。
</Note>

<div id="operators">
  ### 演算子
</div>

各トリガーは、値の一致方法を定義する**演算子**を使用します。利用可能な演算子はトリガータイプによって異なります。

| 演算子 | 説明 |
| - | - |
| **Equals** | フィールドが指定した値と完全に一致する場合に一致します。例：vendor が「Nike」と等しい。 |
| **Does not equal** | フィールドが指定した値以外の場合に一致します。特定の商品タイプやベンダーを除外するのに便利です。 |
| **Contains any** | 複数値のフィールドにリスト内の値が少なくとも1つ含まれる場合に一致します。例：商品が複数のコレクションのいずれかに属している。 |
| **Does not contain any** | 複数値のフィールドにリスト内の値が1つも含まれない場合に一致します。例：「final-sale」タグの付いた商品を除外する。 |
| **Contains all** | 複数値のフィールドにリスト内のすべての値が含まれる場合に一致します。例：商品に「sale」と「summer」の両方のタグが必要。 |
| **Does not contain all** | 複数値のフィールドにリスト内の値が少なくとも1つ欠けている場合に一致します。 |
| **Contains** | テキストフィールドに指定した値が部分文字列として含まれる場合に一致します。例：title に「Gift」が含まれる。 |
| **Does not contain** | テキストフィールドに指定した値が含まれない場合に一致します。 |
| **Greater than** | 数値フィールドが指定した値を超える場合に一致します。例：カートの小計が \$75 を超える。 |
| **Less than** | 数値フィールドが指定した値を下回る場合に一致します。例：注文数が2未満（初回購入者）。 |
| **Greater than or equal to** | 数値フィールドが指定した値以上の場合に一致します。例：累計購入金額が \$500 以上。 |
| **Less than or equal to** | 数値フィールドが指定した値以下の場合に一致します。例：カートのアイテム数が3以下。 |

すべての演算子がすべてのトリガーで使用できるわけではありません。

* **リスト演算子**（**Contains any / all** とその否定）は、タグ、コレクション、顧客タグ、特定の商品などの複数値フィールドに適用されます。
* **テキスト演算子**（**Equals**、**Contains** とその否定）は、タイトル、ベンダー、ハンドル、ロケール、国、URL などの単一値のテキストフィールドに適用されます。
* **数値演算子**は、カートの小計、アイテム数、ライン数、注文数、累計購入金額、時間などのフィールドに適用されます。数値演算子には「does not」の否定形はありません。
* いくつかのフィールドは **Equals** と **Does not equal** のみをサポートします：販売プラン、曜日、マーケティングの受け入れ。

<div id="actions">
  ## アクション
</div>

アクションは、顧客に届けたい体験を作り出します。ここで、どの商品を表示するか、どのように表示するか、商品と一緒に渡す追加データを決めます。1つのルールに複数のアクションを組み合わせて設定し、完全な体験を構築できます。

ルールごとに、設定されたすべてのアクションが1つの統合されたプールに商品を提供します。たとえば、特定の商品アクション、コレクションアクション、タグベースのアクションを持つルールは、3つのソースすべての商品をまとめて返します。商品が複数のソースに一致する場合は、重複が除去されます。

<div id="product-actions">
  ### 商品アクション
</div>

トリガー側で使用できるのと同じ商品属性を、アクションの定義でも使用できます。次の条件に基づいて商品を返すことができます。

* **Specific products** - Shopify カタログから個々の商品を手動で選びます。
* **Collection** - 特定のコレクションに属するすべての商品を返します。
* **Product attributes** - タグ、ベンダー、商品タイプ、メタフィールドなどの条件（トリガーで使用するのと同じ属性タイプ）に一致する商品を返します。

<div id="dynamic-actions">
  ### 動的アクション
</div>

動的アクションは、固定の商品リストではなく、リアルタイムのシグナルに基づいて返す内容を変えます。利用可能な動的アクションのタイプは次のとおりです。

* **Most popular** - 販売数量に基づくストアで最もパフォーマンスの高い商品。ストア全体またはコレクションに絞って指定できます。
* **Recently purchased** - ストア全体で最近購入された商品。
* **Inherit from when** - ルール自身のトリガー（「いつ」）を商品セレクターとして再利用し、ルールが発火したのと同じ条件に一致する商品を返します。
* **AI Recommendations** - Aftersell のレコメンデーションモデルが生成するパーソナライズされた提案。

<div id="filtering-actions">
  ### フィルタリングアクション
</div>

商品プールが組み立てられた後、返される商品の数と順序を設定できます。

* **Sort** - どの商品を選択するかを制御します。
  * **Random** - ランダムに選択します。
  * **Price: high → low** - 最も高価な商品から返します。
  * **Price: low → high** - 最も安価な商品から返します。
* **Amount/Limit** - 返す商品の最大数を設定します。
* **Type** - 組み立てられた商品プールを単一の Shopify 商品タイプに絞り込みます。完全一致には **Equals**、部分一致には **Contains** を選択します（どちらも大文字と小文字を区別しません）。入力した値に商品タイプが一致する商品のみが残り、それ以外は Amount/Limit が適用される前に除外されます。

<Info>
  **Type** フィルターは、商品アクションによって組み立てられた商品プールを絞り込むものです。指定したタイプの商品を*返す* **Product type** 商品アクションとは異なります。より広範なアクション（コレクションや動的アクションなど）が返せる内容を制限したい場合にフィルターを使用してください。
</Info>

<Info>
  Sort が最初に適用され、次に Amount/Limit が適用されます。たとえば、ソートを **Random** に設定している場合、上限が適用される前に商品プール全体がランダム化されます。そのため、同じ商品がランダムな順序で返されるのではなく、常にランダムに抽出された一部が返されます。
</Info>

<div id="key-value-actions">
  ### キーバリューアクション
</div>

必要に応じて、ルールにキーと値のペアを添付できます。ルールが一致すると、これらは API レスポンスの `meta.data` で商品の結果と一緒に返されます。一般的な用途は次のとおりです。

* プロモーションバナーのテキスト
* 分析用のキャンペーンラベル

<Note>
  複数のルールが一致して同じキーを出力する場合、最初に一致したルールの値が優先され、後続のルールで上書きすることはできません。
</Note>

<div id="rule-priority-and-evaluation-order">
  ## ルールの優先度と評価順序
</div>

戦略内のルールは、1ステップずつ順番に評価されます。ステップ1が最初に評価され、以降も同様です。戦略エディターでルールをドラッグ＆ドロップして並べ替えることができます。評価エンジンは次のように動作します。

1. 提供されたコンテキストに対して各ルールのトリガーを評価します。
2. 一致したすべてのルールから商品を収集します。
3. 重複を除去し、結果を設定された最大数（デフォルト：20商品）に制限します。

<div id="global-filters">
  ## グローバルフィルター
</div>

グローバルフィルターは、戦略内のすべてのルールにわたって、商品を選択の対象から除外します。戦略エディターの左上にある戦略名の横の**フィルターアイコン**からアクセスできます。

利用可能なグローバルフィルター：

* **Exclude out of stock** - 現在購入できない商品を自動的に除外します。
* **Exclude input products** - ルールをトリガーした商品（例：ショッパーが PDP で現在閲覧している商品）を除外し、ショッパーがすでに見ている商品を推薦しないようにします。
* **Exclude by product tag** - 特定のタグが付いた商品を除外します。
* **Exclude by metafield** - 特定のメタフィールドのネームスペース／キー／値に一致する商品を除外します。
* **Exclude by product ID** - ID で特定の商品を除外します。
* **Require stock at location** - 選択したロケーションに在庫がある商品のみを残します（在庫とロケーションの読み取り権限が必要です）。

<div id="catch-all">
  ## Catch all
</div>

Catch all は、すべての戦略評価の最終ステップとして機能する特別なルールです。トリガーはなく、戦略内の他のどのルールも現在のリクエストに一致しない場合に自動的に発火します。

有効にすると、Catch all によってレコメンデーション枠が空になることはありません。そのアクションは、通常のルールで使用できるのと同じアクションタイプ（特定の商品、コレクション、動的アクションなど）を使って設定できます。

* **有効化／無効化** - 戦略の Catch all ルールのオン／オフを切り替えます。無効にすると、どのルールにも一致しないリクエストは空の結果を返します。
* **アクションの設定** - 他のルールと同様に、利用可能なアクションタイプを自由に組み合わせて返す内容を定義します。

Catch all が発火すると、API レスポンスに `resolution.fallbackUsed: true` が示されます。
