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

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

> Механика Replacement Upsells: как работает changeset возврата и замены, какие сценарии поддерживаются или блокируются, правила для платежных шлюзов и скидок, предохранитель бета-версии и устранение неполадок.

Эта страница описывает полную механику Replacement Upsell: как обрабатывается замена, какие сценарии поддерживаются или незаметно блокируются, правила оплаты и скидок, предохранитель бета-версии и полный каталог по устранению неполадок. О том, как создать такое предложение, см. руководство [Апселлы с заменой](/ru/aftersell/replacement_upsells).

<div id="how-a-replacement-is-processed">
  ## Как обрабатывается замена
</div>

Когда клиент принимает Replacement Upsell:

1. За исходную разовую позицию в Shopify оформляется **возврат**.
2. Позиция-замена **добавляется** в тот же заказ — как разовая покупка или как подписка (в зависимости от вашей настройки).
3. Клиент оплачивает замену в том же заказе.
4. В его выписке отображаются две транзакции: возврат за исходный товар и списание за замену. Отображаемая кнопка Accept Offer показывает **чистую разницу** между двумя ценами.

Это реализовано с помощью post-purchase API Shopify:

* Для разовой замены (другой вариант, количество или товар) Aftersell отправляет changeset `add_variant`.
* Для замены на подписку Aftersell отправляет changeset `add_subscription`.
* Исходная позиция удаляется через API возвратов Shopify.

При замене на подписку Aftersell не вызывает API вашего приложения подписок напрямую. Подписка создается нативным Subscription API Shopify, а ваше приложение подписок подхватывает ее через собственную интеграцию с Shopify.

<div id="supported-scenarios">
  ## Поддерживаемые сценарии
</div>

Replacement Upsell поддерживает четыре сценария. В каждом из них **исходная позиция должна быть разовой покупкой**. Замена может быть разовой покупкой или подпиской.

* **Разовая покупка на разовую покупку, тот же товар, другой вариант.** Например, замена размера Twin на размер Queen.
* **Разовая покупка на разовую покупку, тот же товар, другое количество.** Например, замена одной бутылки на упаковку из 3 таких же. Включите **Override quantity** для замены, чтобы задать отгружаемое количество.
* **Разовая покупка на разовую покупку, совершенно другой товар.** Например, замена пробной бутылки на полноразмерную версию другого SKU.
* **Разовая покупка на подписку.** Например, замена разовой бутылки на ежемесячную подписку на ту же бутылку или на подписочную версию другого товара. Это самый распространенный сценарий.

<div id="blocked-scenarios">
  ## Заблокированные сценарии
</div>

Эти сценарии **блокируются Aftersell в момент показа предложения**. Если заказ клиента соответствует любому из них, предложение незаметно пропускается.

* **Подписка на разовую покупку.** Удаление подписочной позиции не отменяет договор подписки в Recharge, Skio или Loop. С клиента по-прежнему списывали бы деньги, и он также получил бы замену.
* **Подписка на другую подписку.** Та же первопричина, плюс правило Shopify «одна подписка на заказ» блокирует добавление новой подписки в заказ, который уже ее содержит.
* **Замена варианта или частоты подписки на подписку.** Та же первопричина.

Если вам нужно изменить существующую подписку клиента, используйте вместо этого [Subscription Upgrade](/ru/aftersell/subscription-upgrades). Subscription Upgrade напрямую изменяет существующий договор в Recharge, Skio или Loop, не пытаясь удалить и повторно добавить подписочную позицию.

<Tip>
  Всякий раз, когда Replacement Upsell пропускается (заблокированный сценарий выше, неподдерживаемый платежный шлюз или позиция-триггер со скидкой), Aftersell автоматически пытается показать вместо него предложение **downsell** из той же воронки. Настраивайте даунселл как запасной вариант при каждом использовании Replacement Upsell, чтобы покупатель все равно увидел предложение.
</Tip>

<div id="what-the-customer-sees">
  ## Что видит клиент
</div>

Понимание того, что видит клиент, предотвращает самый частый запрос в поддержку: «Почему с меня списали дважды?»

<div id="in-the-post-purchase-offer">
  ### В post-purchase предложении
</div>

Кнопка Accept Offer показывает **чистую разницу** между исходным товаром и заменой. Например, если клиент купил бутылку за \$30, а вы предлагаете упаковку из 3 штук за \$45, на кнопке Accept будет написано «Add \$15.00 to your order». Если замена дешевле исходного товара, кнопка отображается как зачисление.

Карточка предложения показывает изображение, название и цену товара-замены. Карточка использует изображение конкретного варианта, если оно привязано к варианту в Shopify. Если у варианта нет привязанного изображения, карточка использует первое изображение родительского товара. Поэтому замена между двумя вариантами одного товара может менять изображение, а может и не менять — в зависимости от того, настроено ли в Shopify собственное изображение для каждого варианта.

<div id="on-the-shopify-order-after-acceptance">
  ### В заказе Shopify после принятия
</div>

В итоге заказ показывает обе позиции:

* Исходную позицию с примененным к ней **возвратом**.
* Новую позицию замены, оплаченную по полной цене.

Итог заказа отражает чистый результат, но в банковской выписке клиента будут две транзакции: одно списание за замену и один возврат за исходный товар. Именно так Aftersell обрабатывает принятие Replacement Upsell на уровне платежей. Чистая сумма совпадает с суммой на кнопке Accept Offer.

Чтобы уменьшить путаницу:

* Добавьте в текст предложения строку, явно описывающую механику возврата и замены. Например: «При принятии мы вернем деньги за исходный товар и спишем оплату за замену. В выписке вы увидите две записи, итоговая сумма — это цена обновления, указанная на этой кнопке».
* Включите в Aftersell автоматическое письмо с уведомлением о возврате для апселлов с заменой, которое отправляет клиенту подтверждение с объяснением возврата.

<div id="in-the-subscription-provider-portal-when-replacement-is-a-subscription">
  ### В портале провайдера подписок (когда замена — подписка)
</div>

Если замена является подпиской, клиент увидит новую подписку в клиентском портале вашего провайдера подписок (Recharge, Skio, Loop, Appstle, Smartrr, Stay.ai). Портал принадлежит вашему провайдеру подписок, а не Aftersell. Убедитесь, что приветственное письмо вашего провайдера подписок настроено на отправку в течение нескольких минут после принятия.

<div id="compatible-subscription-platforms">
  ## Совместимые платформы подписок
</div>

Когда замена является подпиской, Replacement Upsell работает с любым приложением подписок, использующим нативный Subscription API Shopify. В этом сценарии Aftersell не вызывает API провайдеров напрямую; подписку создает Shopify, а ваше приложение подписок подхватывает ее через собственную интеграцию с Shopify.

Совместимые провайдеры включают Recharge, Skio, Loop, Stay.ai, Appstle, Smartrr, Bold Subscriptions (при работе на нативном API подписок Shopify) и нативные планы продаж Shopify.

Если для целевого товара замены настроен предоплаченный план подписки (например, раз в 3 месяца с оплатой вперед), уточните у вашего провайдера подписок, поддерживается ли предоплата в качестве цели замены. Обработка предоплаты зависит от провайдера.

<div id="payment-method-requirements">
  ## Требования к способам оплаты
</div>

Aftersell явно блокирует Replacement Upsell для некоторых платежных шлюзов, поскольку они не могут надежно поддерживать схему «возврат и повторное списание» в окне post-purchase:

* **Authorize.net** (`authorize_net`). Authorize.net требует, чтобы транзакции прошли расчет до оформления возвратов, а расчет происходит с задержкой, поэтому Aftersell не может надежно вернуть деньги за исходный товар и добавить замену в том же заказе Shopify. Если Authorize.net — ваш платежный процессор, направляйте таких клиентов на предложения страницы Thank You.
* **Ручные платежные шлюзы** (`manual`). Сюда относятся наложенный платеж, пользовательские способы оплаты, оформление через черновики заказов и любые другие ручные платежные процессоры, которые не сохраняют авторизацию. Replacement Upsell требуется активный сохраненный платеж для последующего списания, а ручные шлюзы его не предоставляют.

Если платежный шлюз заказа относится к одному из перечисленных, Replacement Upsell незаметно пропускает предложение. Причина пропуска отображается в Order Browser Aftersell как **«Payment gateway does not support replacement upsells.»**

Более широкий список способов оплаты, влияющих на все post-purchase предложения Aftersell (а не только на Replacement Upsell), см. в статье [Способы оплаты](/ru/aftersell/payment_methods).

<div id="discount-handling">
  ## Обработка скидок
</div>

У Replacement Upsell есть особенности поведения со скидками, которые часто застают партнеров врасплох.

<div id="discounts-on-the-original-line-do-not-carry-to-the-replacement">
  ### Скидки на исходную позицию не переносятся на замену
</div>

Когда Aftersell оформляет возврат за исходную позицию, любая примененная к ней скидка уходит вместе с ней. Позиция замены оплачивается по полной цене (или со скидкой предложения замены, если вы ее настроили), но исходная скидка клиента не переносится.

Если вы хотите, чтобы клиент сохранил эквивалентную скидку, настройте ее непосредственно в предложении замены.

<div id="allow-replacement-when-target-has-a-discount">
  ### Разрешение замены, когда на целевой позиции есть скидка
</div>

По умолчанию Replacement Upsell **пропускает** предложение, если на позиции-триггере есть скидка на уровне заказа. Это защитное значение по умолчанию, позволяющее избежать несоответствия сумм возврата.

Чтобы предложение срабатывало даже при наличии скидки на триггере, включите переключатель **Allow replacement when target has a discount** в расширенных настройках предложения. Когда он включен, возврат покрывает цену со скидкой (а не полную цену), а замена оплачивается в соответствии с конфигурацией вашего предложения.

<div id="first-cycle-discount-on-subscription-replacements">
  ### Скидка на первый цикл при замене на подписку
</div>

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

<div id="per-variant-funnels">
  ## Воронки для каждого варианта
</div>

Одно предложение Replacement Upsell нацелено на один конкретный товар и вариант с каждой стороны. Если ваши планы подписки различаются по вариантам (разные размеры, вкусы или цены), нельзя настроить одно предложение вида «заменить любой купленный клиентом вариант на соответствующий подписочный вариант». Для каждой пары вариантов нужна своя воронка.

Например, если вы продаете сыворотку в трех размерах (Small / Medium / Large) и хотите, чтобы каждый заменялся на свой подписочный аналог, нужно создать три воронки:

* Воронка 1: триггер = Small разовая покупка, замена = Small подписка.
* Воронка 2: триггер = Medium разовая покупка, замена = Medium подписка.
* Воронка 3: триггер = Large разовая покупка, замена = Large подписка.

Сейчас в Aftersell нет встроенной функции сопоставления вариантов, поэтому для каждой пары вариантов нужна своя воронка.

<div id="analytics-and-reporting">
  ## Аналитика и отчетность
</div>

Возвраты, созданные Replacement Upsell, содержат в Shopify примечание **«AfterSell Post-Purchase Replacement Upsell»**, что упрощает поиск возвратов, связанных с заменой.

Аналитика Aftersell **не** вычитает сумму возврата из стоимости апселла. Замена товара за \$100 на товар за \$200 учитывается как апселл на \$200, а не как чистые \$100.

<div id="the-beta-failsafe">
  ## Предохранитель бета-версии
</div>

Пока Replacement Upsell находится в бета-версии, Aftersell отслеживает ошибки по каждому предложению и прекращает показывать предложение новым клиентам, когда количество ошибок превышает порог. Это защищает вас от того, чтобы массовая ошибка конфигурации незаметно затронула многих клиентов.

<Frame>
  <img src="https://mintcdn.com/aftersell/SnVX3h-PpMMxQMDU/images/aftersell/replacement-upsells-order-browser-failsafe.gif?s=0ec4f5a58191b9323de015eae3793c07" alt="Предохранитель бета-версии Replacement Upsell в Order Browser" width="2196" height="1080" data-path="images/aftersell/replacement-upsells-order-browser-failsafe.gif" />
</Frame>

<div id="configuring-the-failsafe-threshold">
  ### Настройка порога предохранителя
</div>

Порог предохранителя настраивается в **Settings → Replacement Upsells**. Он считает ошибки замены в **скользящем 7-дневном окне** и приостанавливает апселлы с заменой, как только в этом окне достигается выбранный вами порог. Можно выбрать:

* **Stop on any issue in the past 7 days** (рекомендуется, значение по умолчанию). Предложение останавливается сразу после первой неудачной замены в скользящем окне.
* **Stop after 3 issues in the past 7 days**.
* **Stop after 5 issues in the past 7 days**.
* **Stop after 7 issues in the past 7 days** (наиболее мягкий вариант).
* **Custom** открывает числовое поле, в которое можно ввести любое целое число от **1 до 100**. Используйте этот вариант, если ваш магазин обрабатывает большие объемы заказов и предустановки срабатывают слишком быстро.

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

<div id="what-trips-the-failsafe">
  ### Что вызывает срабатывание предохранителя
</div>

Любое исключение в процессе замены считается ошибкой в скользящем 7-дневном окне. Самые частые причины:

* Shopify отклоняет changeset, потому что оформление заказа уже завершено.
* Товар-замена был удален или снят с публикации в период между настройкой предложения и принятием клиентом.
* План продаж для замены на подписку был деактивирован.
* Временный сбой API Shopify или провайдера подписок.

<div id="when-the-failsafe-trips">
  ### Когда срабатывает предохранитель
</div>

Когда количество ошибок в скользящем 7-дневном окне достигает вашего порога, предложение **перестает показываться** новым клиентам. Об этом вы узнаете в двух местах:

* **Баннер на главной странице.** На главной странице Aftersell появляется предупреждающий баннер **«Replacement upsells are paused»** с кнопкой **Review failsafe**, ведущей в **Settings → Replacement Upsells**.
* **Карточка статуса предохранителя** (Settings → Replacement Upsells). Карточка статуса показывает бейдж **Failsafe tripped** (желтый) или **Not tripped** (зеленый), а также текущий скользящий счетчик и порог, например «4 of 5 errors in the past 7 days».

Поскольку предохранитель использует скользящее 7-дневное окно, он **восстанавливается сам**: как только количество ошибок опускается ниже порога, апселлы с заменой автоматически возобновляются, никаких действий не требуется.

<div id="how-to-reset">
  ### Как выполнить сброс
</div>

Вы можете сбросить предохранитель самостоятельно в **Settings → Replacement Upsells**. Устранив исходную проблему, нажмите **Reset failsafe** и подтвердите действие в модальном окне. Скользящий счетчик ошибок сразу обнуляется, и апселлы с заменой возобновляются для новых заказов. (Кнопка недоступна, если текущий счетчик ошибок уже равен нулю.)

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

<div id="troubleshooting">
  ## Устранение неполадок
</div>

<AccordionGroup>
  <Accordion title="Тип предложения Replacement Upsell не отображается в редакторе воронки">
    Replacement Upsell — бета-функция, которую поддержка Aftersell включает вручную. Обратитесь в поддержку через чат в приложении, чтобы запросить доступ. После включения в расширенных настройках предложения появится переключатель **Replace item in original order with upsell**.
  </Accordion>

  <Accordion title="Предложение не показывается в тестовых заказах">
    Три причины:

    * **Несоответствие триггера воронки.** Убедитесь, что товар-триггер — тот же товар, который находится в корзине тестового заказа.
    * **Заказ уже содержит подписку.** Replacement Upsell пропускает любой заказ, в котором позиция-триггер является подпиской. В этом случае используйте Subscription Upgrade.
    * **На исходной позиции есть скидка.** По умолчанию Replacement Upsell пропускает позиции со скидкой на уровне заказа. Включите **Allow replacement when target has a discount** в расширенных настройках предложения.
  </Accordion>

  <Accordion title="Предложение показывается, но замена фактически не происходит (или клиент получил исходный товар)">
    В редакторе у предложения Replacement Upsell есть три отдельных выбора товаров, и для срабатывания замены они должны быть настроены согласованно:

    1. **Триггер воронки.** Задается на уровне воронки. Определяет, какие заказы видят предложение.
    2. **Товар апселла.** Задается в разделе Upsell Products предложения. Это товар, который добавляется в заказ, когда клиент принимает предложение.
    3. **Edit product to replace.** Задается в разделе **Replace item in original order with upsell** нажатием кнопки **Edit product to replace**. Это конкретный товар и вариант в корзине клиента, за который будет оформлен возврат и который будет удален.

    Самая частая ошибка конфигурации: **товар для замены** не совпадает с вариантом, который фактически находится в корзине клиента. В этом случае Aftersell не может найти соответствующую позицию для удаления, и замена незаметно не срабатывает.

    Чтобы исправить:

    * Откройте предложение Replacement Upsell.
    * Нажмите **Edit product to replace** и убедитесь, что выбранный товар и вариант **точно совпадают** с товаром и вариантом, которые клиент должен был купить (согласно триггеру воронки).
    * Если вы заменяете один вариант товара на другой (Small → Large), «товар для замены» должен указывать именно на вариант Small. Если вы укажете Large или любой вариант, который клиент не покупал, предложение будет пропущено.
    * Сохраните и протестируйте на реальном недорогом заказе, включающем именно тот вариант, который вы хотите заменить.
  </Accordion>

  <Accordion title="Мой клиент считает, что с него списали дважды">
    Это ожидаемое поведение. За исходную позицию оформляется возврат, а за замену выполняется списание, поэтому в банковской выписке клиента отображаются две транзакции, хотя чистая сумма равна отображаемой цене предложения. Чтобы уменьшить путаницу:

    * Добавьте в текст предложения предложение, объясняющее механику возврата и замены.
    * Включите в Aftersell автоматическое письмо с уведомлением о возврате для апселлов с заменой.
    * Научите команду поддержки объяснять схему с двумя записями, когда клиент обращается с вопросом.
  </Accordion>

  <Accordion title="Я вижу ошибку «Partial refunds are not allowed until the transaction is settled»">
    Некоторые платежные шлюзы (включая Authorize.net и другие, которые проводят расчет транзакций пакетами с задержкой) не разрешают возвраты, пока исходная транзакция не пройдет расчет. Поскольку Replacement Upsell списывает оплату за замену и возвращает деньги за исходный товар сразу после оформления заказа, шаг возврата может завершиться ошибкой «Partial refunds are not allowed until the transaction is settled. Please try again later.» Aftersell не повторяет возврат автоматически после расчета, поэтому вам нужно будет оформить возврат вручную из заказа Shopify после расчета исходной транзакции (обычно в течение 24 часов, в зависимости от графика расчетов вашего шлюза). Чтобы избежать этого сценария, Replacement Upsell полностью пропускается для известных неподдерживаемых шлюзов. Если вы продолжаете видеть эту ошибку на поддерживаемом шлюзе, обратитесь в поддержку, чтобы мы могли разобраться.
  </Accordion>

  <Accordion title="Скидка исходного заказа исчезла после замены">
    Когда Aftersell оформляет возврат за исходную позицию, любая примененная к ней скидка уходит вместе с возвратом. Позиция замены оплачивается отдельно. Если вы хотите, чтобы клиент сохранил скидку, настройте ее непосредственно в предложении замены с помощью поля скидки предложения.
  </Accordion>

  <Accordion title="Может ли Replacement Upsell заменить одну подписку на другую?">
    Нет. Если исходная позиция в заказе уже является подпиской, Replacement Upsell не сработает. Это связано с тем, что удаление подписочной позиции не отменяет договор подписки в вашем приложении подписок; с клиента по-прежнему списывали бы деньги, и он также получил бы замену. Чтобы изменить существующую подписку (изменить частоту, заменить товар или и то и другое), используйте вместо этого [Subscription Upgrade](/ru/aftersell/subscription-upgrades).
  </Accordion>

  <Accordion title="Мое предложение Replacement Upsell внезапно перестало срабатывать">
    Replacement Upsell отслеживает ошибки по каждому предложению в скользящем 7-дневном окне и прекращает показывать предложение, когда количество ошибок превышает порог, настроенный в **Settings → Replacement Upsells** (по умолчанию: остановка при любой проблеме за последние 7 дней). Когда предохранитель срабатывает, на главной странице Aftersell появляется баннер **«Replacement upsells are paused»** со ссылкой **Review failsafe** на **Settings → Replacement Upsells**, где карточка статуса показывает текущий счетчик ошибок и сработал ли предохранитель.

    Если ошибки больше не возникают, предложение автоматически возобновится, когда скользящий 7-дневный счетчик опустится ниже порога. Чтобы возобновить его сразу после устранения проблемы, нажмите **Reset failsafe** на этой странице настроек. Если вы не уверены в первопричине, обратитесь в поддержку через чат в приложении.
  </Accordion>

  <Accordion title="Изображение товара-замены неверное или общее">
    Карточка предложения использует изображение конкретного варианта, если оно привязано к варианту в Shopify. Если у варианта нет привязанного изображения, карточка использует первое изображение родительского товара. Если вы заменяете один вариант товара на другой, а изображение не меняется, убедитесь, что для каждого варианта в Shopify настроено собственное изображение.
  </Accordion>

  <Accordion title="Я хочу настроить Replacement Upsell для множества вариантов товара">
    Создайте по одной воронке на каждый вариант. У каждой воронки есть триггер по товару и варианту и соответствующий товар и вариант замены. Сейчас в Aftersell нет встроенной функции сопоставления вариантов.
  </Accordion>

  <Accordion title="Клиент принял предложение, но новой подписки нет в моем приложении подписок">
    Тот же сценарий сбоя, что и у Subscription Upsell: чаще всего план продаж был деактивирован между отображением предложения и принятием клиентом. Shopify принимает changeset, но подписка дальше не оформляется. Убедитесь, что план продаж все еще активен в Shopify и назначен товару-замене. Проверьте логи импорта заказов или вебхуков вашего приложения подписок по затронутому заказу. Если подписка отсутствует, команда поддержки вашего приложения подписок обычно может вручную оформить клиента.
  </Accordion>

  <Accordion title="Я хочу отменить новую подписку после того, как клиент ее принял">
    Aftersell не управляет отменой подписок. Отмена будущих циклов выполняется в клиентском портале вашего провайдера подписок или самим клиентом. Механизм возврата Shopify для первого цикла работает так же, как для любой другой позиции.
  </Accordion>

  <Accordion title="Мои клиенты с Authorize.net никогда не видят предложение Replacement Upsell">
    Это ожидаемо. Authorize.net явно заблокирован для Replacement Upsell в коде Aftersell, поскольку он требует, чтобы транзакции прошли расчет до оформления возвратов, а задержка расчета нарушает схему «возврат и повторное списание», на которую опирается Replacement Upsell. В качестве альтернативы показывайте клиентам с Authorize.net предложения на странице Thank You. Убедиться, что причина именно в этом, можно, открыв заказ в Order Browser Aftersell; причина пропуска будет «Payment gateway does not support replacement upsells.»
  </Accordion>

  <Accordion title="Мои клиенты с наложенным платежом или черновиками заказов не видят предложение">
    Ручные платежные шлюзы (наложенный платеж, пользовательские способы оплаты, оформление через черновики заказов) явно заблокированы для Replacement Upsell, поскольку они не сохраняют карту для последующих списаний. Order Browser покажет причину пропуска «Payment gateway does not support replacement upsells». Более широкие ограничения способов оплаты для post-purchase предложений см. в статье [Способы оплаты](/ru/aftersell/payment_methods).
  </Accordion>
</AccordionGroup>
