概述
POST 到 /api/public/strategy/evaluate,然后渲染响应。
本页介绍两种实现模式:
- PDP 上下文——在商品页面放置一个 section,以当前浏览的商品调用 API,并以轮播形式渲染返回的推荐商品。
- 购物车上下文——在自定义购物车内渲染一个追加销售区块,以当前购物车的所有行项目调用 API,并渲染返回的商品。
前置条件
- **你的 Strategy API 密钥。**在 Aftersell 中,前往 Settings → Product Strategy,在 Security Token 卡片中复制你的令牌(这就是你的 Strategy API 密钥)。
- **Strategy ID。**在 Aftersell Strategy 编辑器中打开你要运行的 Strategy 并复制其 ID。
- **主题代码访问权限。**你将向 Shopify 主题中添加一个 Liquid section(PDP)或 block(自定义购物车)——Online Store → Themes → … → Edit code。
PDP 上下文:Section 代码片段
安装
- 在 Shopify 后台,前往 Online Store → Themes,点击主题上的 …,选择 Edit code。
- 在 Sections 文件夹下,创建一个名为
aftersell-upsell-carousel.liquid的新文件。 - 将下面的代码片段粘贴到新文件中,并将
YOUR_STRATEGY_API_KEY替换为来自 Aftersell 的 API 密钥。 - 保存。
- 打开你的商品模板(通常是
templates/product.json或sections/main-product.liquid),在你希望轮播出现的位置添加 Aftersell Carousel section。你也可以在主题编辑器中直接将它拖到商品页面上。 - 在该 section 的设置中,粘贴你的 Strategy ID。
该 section 发送的内容
- products——一个只含一个元素的数组,包含当前浏览的商品(productId、variantId、quantity、price、handle、title、vendor、productType、tags、collections、sellingPlan)。
- cart——顾客当前购物车的小计、商品件数、行数(购物车为空时省略)。
- cartToken——使 API 能将此次评估拼接到同一会话中。
- customer——标签、国家、省份、语言区域、订单数、总消费额和接受营销标记,但仅当顾客已登录时。
- session——来自
shop.currency的货币代码。
session 对象中。
代码片段

自定义
{% schema %} 块中添加或移除设置,即可向主题编辑器暴露更多选项。
CSS 限定在 .aftersell-* 类名下,包含一个由 Splide 驱动的 4 列轮播,在 768px 时降为 2 列,在 480px 时降为 1 列。你可以随意编辑以匹配你的主题——这些样式都不是 API 调用正常工作的必要条件。
购物车上下文:自定义购物车追加销售区块
cart.liquid 之类的主题模板。API 调用的形式和响应处理与 PDP 示例完全相同——只有 products 数组不同。
结构如下:
/api/public/strategy/evaluate 的 fetch 调用与上文的 PDP 模式相同——只有 products 数组从 [productContext] 换成了由购物车派生的数组。
Strategy 返回后会发生什么
evaluationId 是本次评估的唯一 ID。如果你捕获它并将其附加到所渲染的商品上,就可以将最终产生的订单归因到产生它的确切推荐——见下文的归因。
如何渲染 products 数组完全取决于你的主题代码。上面的 PDP 代码片段将它们渲染为带有变体选择器和加购按钮的卡片轮播;自定义购物车区块可以在抽屉内将它们渲染为垂直列表。
完整的请求和响应 schema 参见 Evaluate Strategy API 参考。
未返回商品时
products: []),如何处理由你的代码决定。上面的 PDP 代码片段会完全隐藏轮播。自定义购物车区块可以回退到购物车的默认追加销售列表,或者干脆什么都不渲染。
为避免空响应,请在 Strategy 中配置 Catch all,这样始终会有一个可返回的兜底商品。有关如何设置 Catch all,请参见构建 Strategies 页面。
自定义集成小贴士
- **用 Liquid 构建上下文。**Liquid 在渲染时运行,可以访问完整的 Shopify 对象图——product、cart、customer、shop、request。用它在服务端填充负载,而不是依赖客户端调用。
- **不要把 API 密钥放进公开仓库。**它最终会出现在你的主题代码中并被发送到浏览器——这没有问题。但不要把同一份主题粘贴到公开仓库或在外部分享打包文件。
- **使用 Catch all。**当某个位置消失时,店面体验会显得残缺。配置少量安全默认商品的 Catch all 可以保持 UI 一致。
- **在合适的地方缓存。**Strategies API 在服务端有轻量缓存(
meta.servedFromCache),但对于高流量的 PDP,你可能还希望在客户端对调用进行防抖或记忆化(例如,同一商品在一个会话中被渲染两次时不要重复调用)。
归因
/cart/add.js 调用会向购物车条目附加行项目属性:
归因回具体评估
evaluationId,并在 __as_offer_id 属性下将其附加到行项目。AfterSell 会读取这个键,因此带有该标记的订单会在报告中归因到具体的评估。
在 evaluate() 处理函数中,保存响应中的 ID:
__as_offer_id 中的双下划线——这是 AfterSell 查找的键,且下划线前缀可使其对顾客隐藏。如果 evaluationId 不存在(例如未返回任何商品),请跳过该属性,而不要发送空值。