自定义商店前端触发器
内置的网店触发器涵盖了Shopify报告中的事件。自定义网店触发器则涵盖了网店中发生的其他所有情况:您只需在主题中通过一行JavaScript代码发布一个事件,该事件就会成为您可以在Shopify Flow中使用的触发器。
最明显的例子就是购物车抽屉。Shopify 的购物车视图事件会在 /cart 页面上触发,而大多数现代主题根本不会跳转到该页面 - - 它们而是通过滑动打开抽屉。Shopify 不会报告任何信息,因此没有任何应用能检测到它。在抽屉打开时发布你自己的事件,就能弥补这一缺口。
商家还将其用于以下其他用途:
- 无论是将商品加入愿望清单,还是点击**“提醒我**”,Shopify 均不会对此进行记录。
- 打开尺寸指南或退货政策,以此作为该产品的相关信息提示。
- Picker 中的一个变体更改,这并非新的页面视图(参见 Storefront 触发器)。
- 任何您的主题或第三方应用已经知道、而Shopify尚未掌握的信息。
工作原理
- 在应用中创建触发器,并为其指定一个事件名称,例如
cart_drawer_opened。与所有前端触发器一样,它需要**“前端行为访问”权限**,该权限可在“权限”页面上授予一次。 - 复制应用中显示的那行代码片段,将其粘贴到主题中发生该情况的位置。如果您不确定该粘贴什么内容或粘贴到哪里,使用人工智能生成触发代码 会根据您用通俗易懂的英语描述的内容,为您生成适用于该主题的代码片段。
- 如果需要过滤或调整要发送的内容,请编写一个转换函数;若要转发所有内容,则留空即可。
- 将其开启,然后在“流程”中添加**“自定义商店前端触发器**”,并根据事件名称进行分支。
该代码片段就是主题端完整的集成代码:

Shopify.analytics.publish("cart_drawer_opened", {
// anything you want the Flow to receive
itemCount: 3,
total: "129.90"
});为活动命名
事件名称是 Flow 工作流进行分支的依据,因此请选择一个易于理解的名称,并且一旦工作流开始使用该名称后,就不要再修改它。
名称可以包含字母、数字、下划线和连字符,必须以字母或数字开头,且长度最多为 64 个字符。该应用会将您输入的内容转换为短链接,因此 Cart drawer opened 将变为 cart_drawer_opened。
该名称在内部属于命名空间,因此绝不会与Shopify事件或同名的webhook自定义触发器发生冲突。
滤波与重塑
您作为第二个参数传递的数据将作为触发器的output传入 Flow。如果仅需此操作,则至此完成。
当您只想在某些情况下触发事件,或者希望发送与主题发布时不同的字段时,请编写一个转换函数 - - 这与 自定义触发器 中使用的 JavaScript 模块相同。返回一个对象以触发事件,返回 null 以跳过:
export async function transform(payload, topic, shop, ctx) {
// Anything you published is on `payload`.
if ((payload.itemCount || 0) < 2) return null;
return {
itemCount: payload.itemCount,
total: payload.total,
// Present only when the shopper is signed in.
customerId: payload.customerId,
};
}在 Shopify Flow 中使用它
每个“自定义商店前端触发器”在 Flow 中显示为相同的触发器:“自定义商店前端触发器”。将其添加到工作流中,然后添加一个条件,使 eventName 等于您选择的名称。
正是这一点,使得一个 Flow 触发器能够触发您所有的前端事件。该触发器还会携带您在应用中为其命名的名称,以及您的转换的输出结果。
它特意与**“自定义触发器**”区分开来,后者支持基于 Webhook 的自定义触发器。这两者之间存在一个值得注意的区别:基于 Webhook 的自定义触发器在我们的服务器上运行,因此非常可靠;而“Storefront Event”则取决于购物者的浏览器能否成功连接到我们的服务器,以及其是否同意分析数据。
不要发送什么
publish 的第二个参数完全由您控制,这意味着您有责任确保其中不包含个人数据。
请发送标识符和相关信息:产品和变体 ID、数量、价格以及事件名称。如果有已登录的客户,其 ID 会自动添加,因此您无需自行传递该信息。
请勿发送姓名、电子邮件地址、电话号码或邮政地址。您的工作流可以通过 Flow 中的客户 ID 查询到这些信息,因此将它们放入前端事件中没有任何意义,而且这样做会将一个分析事件转变为个人数据事件。
这会占用我的套餐流量吗?▾
是的。所有传送到我们这里的事件都会被计数,包括那些因您的转换函数返回null而被跳过的事件 - - 这与自定义触发器遵循相同的规则。因未获得同意而在浏览器中被丢弃的事件永远不会传送到我们这里,因此也不会被计数。
由于由您决定代码片段的放置位置,因此您可以直接控制其显示频率。抽屉打开事件的触发频率远低于产品查看事件。
我可以在多个地方发布同一个活动吗?▾
是的。关键在于名称,而不是发布来源。如果你希望工作流能够区分它们,那么在有效载荷中传递一些信息来标明来源是个好主意。
打开两个抽屉算作一次操作吗?▾
不。故意触发的事件会被单独区分,因为两次发布通常意味着该事件确实发生了两次。这与内置触发器不同,后者会合并同一页面浏览的重复记录。
我以后可以更改活动名称吗?▾
可以,但你的 Flow 工作流会根据该名称进行筛选,因此更改名称会导致该工作流停止运行,直到你更新条件为止 - - 而且你还必须相应地更新主题中的代码片段。一旦工作流使用了某个名称,就应将其视为固定值。
在商品上架到我的网店之前,我该如何进行测试?▾
应用中的“触发器”页面提供了一个测试功能,该功能会运行您的转换并触发您的 Flow 工作流,因此您无需修改主题即可全程观察其运行过程。测试不会占用您的配额。
将代码片段添加到主题后,“事件历史记录”页面会实时显示新发生的事件。
在结账页面上能用吗?▾
通过您自己的主题代码发布的内容仅适用于您的商店前端。结账页面由 Shopify 渲染,您无法在此处添加主题代码,因此请改用内置的“显示结账错误”和“结账优惠码被拒”触发器。
下一步
- Storefront 触发器 - 内置网店触发器以及像素的工作原理。
- 使用人工智能生成触发代码 - 让 AI 为您编写主题代码片段或转换规则。
- 自定义触发器 - 对于 Shopify 的 webhook 事件,采用相同的思路,并具备服务器端的可靠性。
- 套餐与使用情况 - 什么算作一项活动。

