> ## 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.

# Справочник по правилам стратегий

> Полный каталог триггеров, операторов, действий, фильтров и механики оценки стратегий, лежащих в основе встроенного редактора стратегий.

Эта страница — полный каталог редактора стратегий: все триггеры и принимаемые ими операторы, все действия, глобальные фильтры и то, как оценивается стратегия. Она дополняет пошаговое руководство [Создание стратегий](/ru/aftersell/strategies_building_in_app) — обращайтесь к ней, когда вам нужны исчерпывающие сведения о конкретном параметре.

**Правило** объединяет **триггеры** (*когда*) с **действиями** (*тогда*), и вы можете объединить до пяти триггеров под одним переключателем **AND** / **OR**: при **AND** должен совпасть каждый триггер, при **OR** достаточно любого одного. Разделы ниже следуют этой структуре — сначала [Триггеры](#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)** — совпадает с конкретными товарами Shopify по ID
* **Collection** — совпадает с товарами, входящими в определенные коллекции
* **Tag(s)** — совпадает с товарами с определенными тегами (например, «sale», «summer»)
* **Title** — совпадает с названием товара
* **Vendor** — совпадает с именем поставщика/бренда
* **Type** — совпадает с полем типа товара (например, «Apparel», «Electronics»)
* **Handle** — совпадает с URL-слагом товара
* **Metafield** — совпадает с парами namespace/key/value пользовательских метаполей
* **Selling plan** — совпадает с товарами «subscription» или «one-time». Оценивается, только если контекст запроса передает план продаж для товара — поверхности апселлов Aftersell в checkout и post-purchase его не передают, поэтому там триггер не совпадет, если только пользовательская интеграция явно не передает его

<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** — пользовательские атрибуты корзины, заданные через cart API Shopify
* **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>
  Не каждый триггер заполняется на каждой поверхности. Например, checkout передает только контекст товаров и корзины — триггеры по клиентам, местоположению и маркетинговые триггеры там не совпадут. Что передает каждая поверхность, см. в руководствах [Внедрение стратегий](/ru/aftersell/implementing_strategies_post_purchase_upsells).
</Note>

<div id="operators">
  ### Операторы
</div>

Каждый триггер использует **оператор**, определяющий, как сопоставляется значение. Доступные операторы зависят от типа триггера.

| Оператор | Описание |
| - | - |
| **Equals** | Совпадает, когда поле точно равно указанному значению — например, vendor equals «Nike». |
| **Does not equal** | Совпадает, когда поле имеет любое значение, кроме указанного, — полезно для исключения определенного типа товара или поставщика. |
| **Contains any** | Совпадает, когда многозначное поле содержит хотя бы одно значение из вашего списка — например, товар входит в любую из нескольких коллекций. |
| **Does not contain any** | Совпадает, когда многозначное поле не содержит ни одного значения из вашего списка — например, исключить товары с тегом «final-sale». |
| **Contains all** | Совпадает, когда многозначное поле содержит все значения из вашего списка — например, у товара должны быть оба тега: «sale» и «summer». |
| **Does not contain all** | Совпадает, когда в многозначном поле отсутствует хотя бы одно из значений вашего списка. |
| **Contains** | Совпадает, когда текстовое поле содержит ваше значение как подстроку — например, title contains «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** и их отрицания) применяются к однозначным текстовым полям, таким как title, vendor, handle, locale, country и URL.
* **Числовые операторы** применяются к таким полям, как промежуточный итог корзины, количество товаров, количество позиций, количество заказов, сумма покупок и час дня. У числовых операторов нет вариантов с отрицанием.
* Некоторые поля поддерживают только **Equals** и **Does not equal** — selling plan, day of week и accepts marketing.

<div id="actions">
  ## Действия
</div>

Действия создают опыт, который вы хотите предоставить клиенту. Здесь вы решаете, какие товары показывать, как их показывать и какие дополнительные данные передавать вместе с ними. Для одного правила можно настроить несколько действий, чтобы выстроить полноценный опыт.

В пределах правила все настроенные действия формируют один общий пул. Например, правило с действием по конкретному товару, действием по коллекции и действием по тегу вернет товары из всех трех источников вместе. Если товар совпадает с несколькими источниками, дубликаты удаляются.

<div id="product-actions">
  ### Действия с товарами
</div>

Те же атрибуты товаров, что доступны для триггеров, доступны и при определении действий. Вы можете возвращать товары на основе:

* **Specific products** — вручную выберите отдельные товары из каталога Shopify.
* **Collection** — вернуть все товары, входящие в определенную коллекцию.
* **Product attributes** — вернуть товары, соответствующие таким критериям, как теги, поставщик, тип товара или метаполя, — те же типы атрибутов, что используются в триггерах.

<div id="dynamic-actions">
  ### Динамические действия
</div>

Динамические действия меняют возвращаемый результат на основе сигналов в реальном времени, а не фиксированного списка товаров. Доступные типы динамических действий:

* **Most popular** — самые продаваемые товары вашего магазина по объему продаж, по всему магазину или в пределах коллекции.
* **Recently purchased** — товары, недавно купленные в магазине.
* **Inherit from when** — повторно использует собственные триггеры правила («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>

При необходимости можно прикрепить к правилу пары ключ-значение. Когда правило совпадает, они возвращаются в `meta.data` в ответе API вместе с результатами по товарам. Типичные варианты использования:

* Текст рекламного баннера
* Метки кампаний для аналитики

<Note>
  Если совпадает несколько правил, передающих один и тот же ключ, используется значение из первого совпавшего правила — последующие правила не могут его переопределить.
</Note>

<div id="rule-priority-and-evaluation-order">
  ## Приоритет правил и порядок оценки
</div>

Правила внутри стратегии оцениваются по порядку, по одному шагу за раз. Сначала оценивается шаг 1, затем следующий и так далее. Вы можете менять порядок правил, перетаскивая их в редакторе стратегий. Движок оценки:

1. Оценивает триггеры каждого правила относительно переданного контекста.
2. Собирает товары из всех совпавших правил.
3. Удаляет дубликаты и ограничивает результат настроенным максимумом (по умолчанию: 20 товаров).

<div id="global-filters">
  ## Глобальные фильтры
</div>

Глобальные фильтры исключают товары из выбора во всех правилах стратегии. Открыть их можно через **значок фильтра** рядом с именем стратегии в левом верхнем углу редактора стратегий.

Доступные глобальные фильтры:

* **Exclude out of stock** — автоматически исключает любой товар, который сейчас недоступен для покупки.
* **Exclude input products** — исключает товар(ы), вызвавшие срабатывание правила (например, товар, который покупатель сейчас просматривает на странице товара), чтобы вы никогда не рекомендовали тот же товар, который покупатель уже смотрит.
* **Exclude by product tag** — исключает товары с определенными тегами.
* **Exclude by metafield** — исключает товары, соответствующие определенным namespace/key/value метаполя.
* **Exclude by product ID** — исключает конкретные товары по ID.
* **Require stock at location** — оставляет только товары, имеющиеся в наличии в выбранной локации (требуются разрешения на чтение запасов и локаций).

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

Catch all — это специальное правило, которое выступает последним шагом каждой оценки стратегии. У него нет триггера; оно срабатывает автоматически, если ни одно другое правило стратегии не совпало с текущим запросом.

Когда Catch all включен, он гарантирует, что ваш слот рекомендаций никогда не будет пустым. Его действие можно настроить с помощью любого из типов действий, доступных обычным правилам, — конкретных товаров, коллекций, динамических действий и т. д.

* **Enable/disable** — включает или выключает правило Catch all для стратегии. Когда оно выключено, запросы, не совпавшие ни с одним правилом, возвращают пустой результат.
* **Configure actions** — определяет, что возвращать, с помощью любой комбинации доступных типов действий, так же как для любого другого правила.

Когда срабатывает Catch all, ответ API содержит `resolution.fallbackUsed: true`.
