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

# 替换型 upsell 参考

> 替换型 Upsell 背后的机制：退款并替换的 changeset 如何运作、哪些场景受支持或被阻止、支付网关和折扣规则、Beta 保护机制，以及问题排查。

本页完整介绍替换型 Upsell 背后的机制：替换如何处理、哪些场景受支持或会被静默阻止、付款和折扣规则、Beta 保护机制（failsafe），以及完整的问题排查目录。关于如何创建替换型 Upsell，请参阅[替换型 upsell](/zh/aftersell/replacement_upsells) 指南。

<div id="how-a-replacement-is-processed">
  ## 替换如何处理
</div>

当顾客接受替换型 Upsell 时：

1. 原一次性行项目会在 Shopify 中被**退款**。
2. 替换行项目会被**添加**到同一订单中，以一次性购买或订阅的形式（取决于你的配置）。
3. 顾客在同一订单上为替换商品付款。
4. 顾客的账单会显示两笔交易：原商品的退款，以及替换商品的扣款。显示的 Accept Offer 按钮反映的是两者价格之间的**净差额**。

这是通过 Shopify 的购后 API 实现的：

* 对于一次性替换（不同款式、数量或商品），Aftersell 会发送 `add_variant` changeset。
* 对于订阅替换，Aftersell 会发送 `add_subscription` changeset。
* 原行项目通过 Shopify 的退款 API 移除。

对于订阅替换，Aftersell 不会直接调用你的订阅应用的 API。订阅由 Shopify 原生的 Subscription API 创建，你的订阅应用会通过其自身的 Shopify 集成获取该订阅。

<div id="supported-scenarios">
  ## 受支持的场景
</div>

替换型 Upsell 支持四种场景。在每种场景中，**原行项目都必须是一次性购买**。替换商品可以是一次性购买，也可以是订阅。

* **一次性到一次性，同一商品，不同款式。** 例如，将 Twin 尺寸替换为 Queen 尺寸。
* **一次性到一次性，同一商品，不同数量。** 例如，将单瓶替换为同款商品的 3 瓶装。在替换商品上启用 **Override quantity** 以设置实际发货的数量。
* **一次性到一次性，完全不同的商品。** 例如，将入门装替换为另一个 SKU 的正装版本。
* **一次性到订阅。** 例如，将一次性购买的单瓶替换为同款商品的月度订阅，或替换为另一商品的订阅版本。这是最常见的用例。

<div id="blocked-scenarios">
  ## 被阻止的场景
</div>

这些场景**在 offer 展示时就会被 Aftersell 阻止**。如果顾客的订单匹配其中任何一种，offer 会被静默跳过。

* **订阅到一次性。** 移除订阅行项目并不会取消 Recharge、Skio 或 Loop 中的订阅合约。顾客仍会被扣费，同时还会收到替换商品。
* **订阅到另一个订阅。** 根本原因同上，此外 Shopify 的"每笔订单一个订阅"规则也会阻止向已包含订阅的订单添加新订阅。
* **订阅到订阅的款式或频率替换。** 根本原因相同。

如果你需要更改顾客现有的订阅，请改用[订阅升级](/zh/aftersell/subscription-upgrades)。订阅升级会直接修改 Recharge、Skio 或 Loop 中的现有合约，而不会尝试移除并重新添加订阅行。

<Tip>
  每当替换型 Upsell 被跳过时（上述被阻止的场景、不受支持的支付网关，或触发行带有折扣），Aftersell 会自动尝试改为展示同一漏斗中的 **downsell** offer。使用替换型 Upsell 时，请始终设置一个 downsell 作为后备，让顾客仍能看到一个 offer。
</Tip>

<div id="what-the-customer-sees">
  ## 顾客看到的内容
</div>

了解顾客看到的内容，可以避免最常见的支持工单："为什么我被重复扣款了？"

<div id="in-the-post-purchase-offer">
  ### 在购后 offer 中
</div>

Accept Offer 按钮显示原商品与替换商品之间的**净差额**。例如，如果顾客购买了一瓶 \$30 的商品，而你提供一个 \$45 的 3 瓶装，接受按钮会显示"Add \$15.00 to your order."。如果替换商品比原商品便宜，按钮会显示为一笔抵扣。

offer 卡片会显示替换商品的图片、标题和价格。如果 Shopify 中的款式标记了专属图片，offer 卡片会使用该款式的图片。如果款式没有标记图片，offer 卡片会回退为父商品的第一张图片。这意味着在同一商品的两个款式之间替换时，图片可能会变化也可能不会，这取决于每个款式是否在 Shopify 中设置了自己的图片。

<div id="on-the-shopify-order-after-acceptance">
  ### 接受后的 Shopify 订单
</div>

订单最终会同时显示：

* 已应用**退款**的原行项目。
* 替换商品的新行项目，按全价扣款。

订单总额反映的是净结果，但顾客的银行账单会显示两笔交易：一笔是替换商品的扣款，一笔是原商品的退款。这是 Aftersell 在付款层面处理替换型 Upsell 接受操作的方式。净金额与显示的 Accept Offer 按钮一致。

为减少困惑：

* 在 offer 文案中加入一句明确说明退款并替换机制的话。例如："接受后，我们会退还原商品款项并对替换商品扣款。你的账单上会显示两条记录，净额即为此按钮上显示的升级价格。"
* 为替换型 upsell 启用 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>

当替换商品为订阅时，替换型 Upsell 可与任何使用 Shopify 原生 Subscription API 的订阅应用配合使用。在此流程中，Aftersell 不会直接调用服务商的 API；订阅由 Shopify 创建，你的订阅应用会通过其自身的 Shopify 集成获取该订阅。

兼容的服务商包括 Recharge、Skio、Loop、Stay.ai、Appstle、Smartrr、Bold Subscriptions（在 Shopify 原生订阅 API 上运行时），以及 Shopify 原生的销售计划。

如果你的替换目标配置了预付订阅计划（例如每 3 个月预先扣款一次），请与你的订阅服务商确认是否支持将预付计划作为替换目标。不同服务商对预付的处理方式各不相同。

<div id="payment-method-requirements">
  ## 付款方式要求
</div>

Aftersell 会在某些支付网关上明确阻止替换型 Upsell，因为它们无法在购后时间窗口内可靠地支持退款再扣款的模式：

* **Authorize.net**（`authorize_net`）。Authorize.net 要求交易结算后才能发起退款，而结算存在延迟，因此 Aftersell 无法可靠地在同一 Shopify 订单上退还原商品款项并添加替换商品。如果 Authorize.net 是你的支付处理商，请将这些顾客引导至感谢页面 offer。
* **手动支付网关**（`manual`）。包括货到付款、自定义付款方式、草稿订单结账，以及任何不会保存授权的其他手动支付处理商。替换型 Upsell 需要一个有效的已保存付款方式才能发起后续扣款，而手动网关无法提供。

当订单的支付网关属于上述之一时，替换型 Upsell 会静默跳过该 offer。跳过原因会在 Aftersell 订单浏览器中显示为 **"Payment gateway does not support replacement upsells."**

关于影响所有 Aftersell 购后 offer（不仅仅是替换型 Upsell）的更广泛付款方式列表，请参阅[付款方式](/zh/aftersell/payment_methods)。

<div id="discount-handling">
  ## 折扣处理
</div>

替换型 Upsell 在折扣方面有一些特定行为，常常让合作伙伴措手不及。

<div id="discounts-on-the-original-line-do-not-carry-to-the-replacement">
  ### 原行项目上的折扣不会转移到替换商品
</div>

当 Aftersell 对原行项目退款时，应用于其上的任何折扣也会随之退回。替换行按全价扣款（如果你配置了替换 offer 折扣，则按该折扣扣款），但顾客原有的折扣不会转移。

如果你希望顾客保留同等折扣，请直接在替换 offer 上配置。

<div id="allow-replacement-when-target-has-a-discount">
  ### 目标商品有折扣时允许替换
</div>

默认情况下，如果触发行带有订单级折扣，替换型 Upsell 会**跳过**该 offer。这是一项保护性默认设置，用于避免退款金额不匹配。

若要在触发行有折扣时仍允许 offer 触发，请在 offer 的高级设置中启用 **Allow replacement when target has a discount** 开关。启用后，退款金额为折后价格（而非全价），替换商品则按你的 offer 配置扣款。

<div id="first-cycle-discount-on-subscription-replacements">
  ### 订阅替换的首期折扣
</div>

当替换商品为订阅时，你在 offer 上配置的折扣**仅适用于第一个计费周期**。之后的周期性订单按常规订阅价格扣款。顾客可以在 offer 的 **Recurring subtotal** 下看到周期性价格。

<div id="per-variant-funnels">
  ## 按款式设置漏斗
</div>

单个替换型 Upsell offer 在每一侧都只针对一个特定的商品和款式。如果你的订阅计划因款式而异（不同尺寸、口味或价格），你无法配置一个"将顾客购买的任一款式替换为其对应订阅款式"的 offer。每一组款式配对都需要单独的漏斗。

例如，如果你销售三种规格的精华液（Small / Medium / Large），并希望每种都替换为对应的订阅版本，你需要创建三个漏斗：

* 漏斗 1：触发条件 = Small 一次性购买，替换商品 = Small 订阅。
* 漏斗 2：触发条件 = Medium 一次性购买，替换商品 = Medium 订阅。
* 漏斗 3：触发条件 = Large 一次性购买，替换商品 = Large 订阅。

Aftersell 目前没有内置的款式配对功能，因此每组款式配对都需要单独的漏斗。

<div id="analytics-and-reporting">
  ## 分析与报告
</div>

替换型 Upsell 产生的退款在 Shopify 中带有备注 **"AfterSell Post-Purchase Replacement Upsell"**，便于识别与替换相关的退款。

Aftersell 分析**不会**从 upsell 价值中扣除退款金额。将 \$100 的商品替换为 \$200 的商品，会被记录为 \$200 的 upsell，而不是净额 \$100。

<div id="the-beta-failsafe">
  ## Beta 保护机制
</div>

在替换型 Upsell 处于 Beta 阶段期间，Aftersell 会追踪每个 offer 的错误，一旦错误数超过阈值，就会停止向新顾客展示该 offer。这可以防止大范围的错误配置在不知不觉中影响大量顾客。

<Frame>
  <img src="https://mintcdn.com/aftersell/SnVX3h-PpMMxQMDU/images/aftersell/replacement-upsells-order-browser-failsafe.gif?s=0ec4f5a58191b9323de015eae3793c07" alt="订单浏览器中的替换型 Upsell Beta 保护机制" 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 天窗口**内统计替换错误，并在该窗口内达到你选择的阈值时暂停替换型 upsell。你可以选择：

* **Stop on any issue in the past 7 days**（推荐，也是默认值）。滚动窗口内第一次替换失败时，offer 就会停止。
* **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** 之间的任意整数。如果你的商店订单量很大、预设值触发得太快，请使用此选项。

如果你对 offer 的配置有信心，并希望在不禁用 offer 的情况下容忍少量暂时性的 Shopify 或订阅服务商错误，请选择较高的阈值。如果面向顾客的失败对你的商店代价很高，请选择较低的阈值。

<div id="what-trips-the-failsafe">
  ### 哪些情况会触发保护机制
</div>

替换流程中的任何异常都会在滚动 7 天窗口内计为一次错误。最常见的原因：

* Shopify 因结账已完成而拒绝 changeset。
* 替换商品在 offer 设置后到顾客接受前被删除或取消发布。
* 订阅替换上的销售计划被停用。
* Shopify API 或订阅服务商出现暂时性故障。

<div id="when-the-failsafe-trips">
  ### 保护机制触发时
</div>

当滚动 7 天窗口内的错误数达到你的阈值时，该 offer 会**停止向新顾客展示**。你会在两个地方看到提示：

* **主页横幅。** 你的 Aftersell 主页上会出现一条标题为 **"Replacement upsells are paused"** 的警告横幅，并带有一个链接到 **Settings → Replacement Upsells** 的 **Review failsafe** 按钮。
* **保护机制状态卡片**（Settings → Replacement Upsells）。状态卡片会显示 **Failsafe tripped**（琥珀色）或 **Not tripped**（绿色）徽章，以及你当前的滚动计数和阈值，例如"4 of 5 errors in the past 7 days"。

由于保护机制使用滚动 7 天窗口，它可以**自我恢复**：一旦错误数降至阈值以下，替换型 upsell 就会自动恢复，无需任何操作。

<div id="how-to-reset">
  ### 如何重置
</div>

你可以在 **Settings → Replacement Upsells** 中自行重置保护机制。解决根本问题后，点击 **Reset failsafe** 并在弹窗中确认。滚动错误计数会立即清零，替换型 upsell 会对新订单恢复。（当你当前的错误计数已经为零时，该按钮处于禁用状态。）

只有在修复根本原因后才应重置，否则一旦再次达到阈值，保护机制会再次触发。如果你不确定错误的原因，请在重置前通过应用内聊天联系支持团队。

<div id="troubleshooting">
  ## 问题排查
</div>

<AccordionGroup>
  <Accordion title="替换型 Upsell offer 类型没有出现在我的漏斗编辑器中">
    替换型 Upsell 是一项 Beta 功能，需要由 Aftersell 支持团队手动启用。请通过应用内聊天联系支持团队申请访问权限。启用后，**Replace item in original order with upsell** 开关会出现在 offer 的高级设置中。
  </Accordion>

  <Accordion title="offer 没有在测试订单上显示">
    有三个原因：

    * **漏斗触发条件不匹配。** 确认触发商品与测试订单购物车中的商品相同。
    * **订单已包含订阅。** 替换型 Upsell 会跳过触发行为订阅的任何订单。这种情况下请改用订阅升级。
    * **原行项目有折扣。** 默认情况下，替换型 Upsell 会跳过带有订单级折扣的行。请在 offer 的高级设置中启用 **Allow replacement when target has a discount**。
  </Accordion>

  <Accordion title="offer 显示了，但替换实际上没有发生（或者顾客收到的是原商品）">
    替换型 Upsell offer 在编辑器中有三个独立的商品选择项，必须保持一致的配置，替换才会触发：

    1. **漏斗触发条件。** 在漏斗级别设置。决定哪些订单会看到该 offer。
    2. **Upsell 商品。** 在 offer 的 Upsell Products 部分设置。顾客接受时被添加到订单中的商品。
    3. **Edit product to replace。** 在 **Replace item in original order with upsell** 部分中，点击 **Edit product to replace** 按钮进行设置。这是顾客购物车中将被退款并移除的确切商品和款式。

    最常见的配置错误：**要替换的商品**与顾客购物车中实际的款式不匹配。发生这种情况时，Aftersell 找不到可移除的匹配行项目，替换就会静默地不触发。

    修复方法：

    * 打开替换型 Upsell offer。
    * 点击 **Edit product to replace**，确认所选商品和款式与顾客应已购买的商品+款式（根据漏斗触发条件）**完全一致**。
    * 如果你是在同一商品的不同款式之间替换（Small → Large），"要替换的商品"必须明确指向 Small 款式。如果你将其指向 Large 或顾客未购买的任何款式，offer 会被跳过。
    * 保存，并用一笔包含你想要替换的确切款式的真实低价订单进行测试。
  </Accordion>

  <Accordion title="我的顾客认为自己被重复扣款了">
    这是预期行为。原行项目被退款，替换商品被扣款，因此即使净金额等于显示的 offer 价格，顾客的银行账单仍会显示两笔交易。为减少困惑：

    * 在 offer 文案中加入一句解释退款并替换机制的话。
    * 为替换型 upsell 启用 Aftersell 的自动退款通知邮件。
    * 培训你的支持团队，在顾客咨询时解释这种两条记录的模式。
  </Accordion>

  <Accordion title="我看到 &#x22;Partial refunds are not allowed until the transaction is settled&#x22;">
    某些支付网关（包括 Authorize.net 以及其他延迟批量结算交易的网关）在原交易结算之前不允许退款。由于替换型 Upsell 会在结账后立即对替换商品扣款并退还原商品款项，退款步骤可能会失败，并显示错误"Partial refunds are not allowed until the transaction is settled. Please try again later."。Aftersell 不会在结算后自动重试退款，因此你需要在原交易结算后（通常在 24 小时内，取决于你的网关结算时间表）从 Shopify 订单中手动发起退款。为避免这种情况，替换型 Upsell 会对已知不受支持的网关完全跳过。如果你在受支持的网关上仍反复看到此错误，请联系支持团队以便我们调查。
  </Accordion>

  <Accordion title="替换后原订单的折扣消失了">
    当 Aftersell 对原行项目退款时，应用于其上的任何折扣都会随退款一起退回。替换行单独扣款。如果你希望顾客保留折扣，请使用 offer 的折扣字段直接在替换 offer 上配置。
  </Accordion>

  <Accordion title="替换型 Upsell 能否将一个订阅替换为另一个订阅？">
    不能。如果订单中的原行项目已经是订阅，替换型 Upsell 不会触发。这是因为移除订阅行项目并不会取消你的订阅应用中的订阅合约；顾客仍会被扣费，同时还会收到替换商品。要修改现有订阅（更改频率、替换商品或两者兼有），请改用[订阅升级](/zh/aftersell/subscription-upgrades)。
  </Accordion>

  <Accordion title="我的替换型 Upsell offer 突然停止触发了">
    替换型 Upsell 会在滚动 7 天窗口内追踪每个 offer 的错误，一旦错误数超过你在 **Settings → Replacement Upsells** 中配置的阈值（默认：过去 7 天内出现任何问题即停止），就会停止展示该 offer。保护机制触发时，你的 Aftersell 主页上会出现 **"Replacement upsells are paused"** 横幅，并带有一个链接到 **Settings → Replacement Upsells** 的 **Review failsafe** 链接，那里的状态卡片会显示你当前的错误计数以及保护机制是否已触发。

    如果错误不再发生，一旦滚动 7 天计数降至阈值以下，offer 会自动恢复。若要在修复问题后立即恢复，请在该设置页面点击 **Reset failsafe**。如果你不确定根本原因，请通过应用内聊天联系支持团队。
  </Accordion>

  <Accordion title="替换商品的图片不正确或是通用图片">
    如果 Shopify 中的款式标记了专属图片，offer 卡片会使用该款式的图片。如果款式没有标记图片，offer 卡片会回退为父商品的第一张图片。如果你在同一商品的不同款式之间替换而图片没有变化，请确认每个款式都在 Shopify 中设置了自己的图片。
  </Accordion>

  <Accordion title="我想为大量商品款式配置替换型 Upsell">
    为每个款式创建一个漏斗。每个漏斗都有一个商品+款式触发条件，以及对应的替换商品+款式。Aftersell 目前没有内置的款式配对功能。
  </Accordion>

  <Accordion title="顾客已接受，但新订阅没有出现在我的订阅应用中">
    与订阅 Upsell 的失败模式相同：最常见的原因是销售计划在 offer 渲染后到顾客接受前被停用。Shopify 接受了 changeset，但下游没有登记任何订阅。请确认该销售计划在 Shopify 中仍处于启用状态，并已分配给替换商品。检查你的订阅应用中受影响订单的订单导入或 webhook 日志。如果订阅缺失，你的订阅应用的支持团队通常可以手动为顾客登记。
  </Accordion>

  <Accordion title="我想在顾客接受后取消新订阅">
    Aftersell 不管理订阅取消。后续周期的取消在你的订阅服务商的客户门户中进行，或由顾客自行操作。第一个周期的 Shopify 退款机制与任何其他行项目相同。
  </Accordion>

  <Accordion title="我的 Authorize.net 顾客从未看到替换型 Upsell offer">
    这是预期行为。Authorize.net 在 Aftersell 的代码中被明确禁止使用替换型 Upsell，因为它要求交易结算后才能发起退款，而结算延迟会破坏替换型 Upsell 所依赖的退款再扣款模式。作为替代方案，请为 Authorize.net 顾客运行感谢页面 offer。你可以在 Aftersell 订单浏览器中打开该订单来确认原因；跳过原因会显示为"Payment gateway does not support replacement upsells."。
  </Accordion>

  <Accordion title="我的货到付款或草稿订单顾客看不到该 offer">
    手动支付网关（货到付款、自定义付款方式、草稿订单结账）被明确禁止使用替换型 Upsell，因为它们不会保存卡片用于后续扣款。订单浏览器会将跳过原因显示为"Payment gateway does not support replacement upsells"。关于购后 offer 更广泛的付款方式限制，请参阅[付款方式](/zh/aftersell/payment_methods)。
  </Accordion>
</AccordionGroup>
