自定义商店前端触发器

内置的网店触发器涵盖了Shopify报告中的事件。自定义网店触发器则涵盖了网店中发生的其他所有情况:您只需在主题中通过一行JavaScript代码发布一个事件,该事件就会成为您可以在Shopify Flow中使用的触发器。

最明显的例子就是购物车抽屉。Shopify 的购物车视图事件会在 /cart 页面上触发,而大多数现代主题根本不会跳转到该页面 - - 它们而是通过滑动打开抽屉。Shopify 不会报告任何信息,因此没有任何应用能检测到它。在抽屉打开时发布你自己的事件,就能弥补这一缺口。

商家还将其用于以下其他用途:

  • 无论是将商品加入愿望清单,还是点击**“提醒我**”,Shopify 均不会对此进行记录。
  • 打开尺寸指南退货政策,以此作为该产品的相关信息提示。
  • Picker 中的一个变体更改,这并非新的页面视图(参见 Storefront 触发器)。
  • 任何您的主题或第三方应用已经知道、而Shopify尚未掌握的信息。

工作原理

  1. 在应用中创建触发器,并为其指定一个事件名称,例如cart_drawer_opened。与所有前端触发器一样,它需要**“前端行为访问”权限**,该权限可在“权限”页面上授予一次。
  2. 复制应用中显示的那行代码片段,将其粘贴到主题中发生该情况的位置。如果您不确定该粘贴什么内容或粘贴到哪里,使用人工智能生成触发代码 会根据您用通俗易懂的英语描述的内容,为您生成适用于该主题的代码片段。
  3. 如果需要过滤或调整要发送的内容,请编写一个转换函数;若要转发所有内容,则留空即可。
  4. 将其开启,然后在“流程”中添加**“自定义商店前端触发器**”,并根据事件名称进行分支。

该代码片段就是主题端完整的集成代码:

自定义商店页面触发器编辑器,其中包含名称、事件名称以及要添加到主题中的代码片段
自定义商店前端触发器:事件名称即为您的主题发布的事件,编辑器会提供可供复制的代码片段。
Publish the event from your themejavascript
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 以跳过:

Only fire for drawers worth acting onjavascript
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 渲染,您无法在此处添加主题代码,因此请改用内置的“显示结账错误”和“结账优惠码被拒”触发器。

下一步