产品触发机制,分步指南

Shopify Flow 可以告知您产品已更新,但无法告知您具体发生了哪些变化,也无法告知您之前的数值是多少。这十一个触发器则能同时做到这两点:每个触发器都会针对某一种变化触发,并将变化前后的数值传递给您的工作流。

下面的每个部分都是一篇简短的教程:介绍触发器何时触发、哪些数据会进入 Flow,以及一个你可以在几分钟内重建的工作流。

本页内容:产品更新, 产品状态变更, 产品标题变更, 产品标识符变更, 产品描述变更, 产品供应商变更, 产品类型变更, 添加产品标签, 移除产品标签, 产品发布至渠道, 产品从渠道下架

Shopify Flow
查找位置:在Shopify Flow中选择“Select a trigger”,打开Workflow Trigger Extensions,然后搜索“Product”。

产品更新

每次保存产品时都会触发,无论发生了什么更改。自 2.10.0 版本起,它还会携带 changes:其中记录了发生更改的字段(标题、标识符、描述、状态、供应商、类型、标签)及其更改前后的值。

火灾源于 Shopify Webhook 结合变更检测
权限 产品、变体和系列数据的访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上。

用于

  • 一个工作流,用于响应多种类型的产品编辑,并在 changes.fields 上进行分支。
  • 审计日志:将所有被跟踪的更改(包括旧的和新的)记录到电子表格或 Slack 频道中。
  • 在您确定自己真正需要哪种更具体的触发条件之前,这是一个通用的解决方案。

“产品更新”会向您的工作流发送什么内容

流中的变量 类型 内容简介
product 产品(Shopify) 已更新的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
payload 文本 包含已更新产品 GID 的 JSON 对象(例如:{"id":"gid://shopify/Product/123"})
changes 对象 哪些跟踪字段发生了变化(标题、标识符、描述、状态、供应商、类型、标签),以及每个字段的旧值和新值
changes.fields 文本列表 已发生变化的受监控字段的名称
changes.items 对象列表 每个已修改字段的旧值和新值
changes.items (each).field 文本 发生变化的字段:标题、标识符、描述、状态、供应商、产品类型或标签
changes.items (each).oldValue 文本 更新前的值。长数值会被截短。
changes.items (each).newValue 文本 更新后的值。长数值将被截短。
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:记录每个被跟踪的产品变更,并附上其旧值和新值

  1. 在Shopify Flow中,选择**“Select a trigger**”,打开“Workflow Trigger Extensions”,然后选择**“Product Update**”。
  2. 添加条件changes.fields不为空且存在。对受监控字段以外的字段(如价格编辑、图片)所做的更新会携带一个空列表,并在此处停止。
  3. 添加**“发送内部邮件**”(或“向 Slack **发送 HTTP **请求”)。Flow 的文本字段支持 Liquid 语法,因此通过 for 循环遍历 changes.items,可以针对每次变更打印一行:先显示条目的 field,接着是 oldValuenewValue,最后是 {{product.title}}
  4. 开启工作流。这样也会在应用中启用该触发器。
“产品更新”中的“更改/项目”内嵌的 Flow 可变值选择器,显示字段、旧值和新值
Flow 中的产品更新:每个 changes.items 条目都会指定字段名称,并包含该字段在更新前后的值。
产品更新时的流程条件:在“更改”或“项目”中,至少有一个字段的值等于“状态”
一个条件是:只有当状态属于已更改的字段之一时,才继续执行。

产品状态已更改

当产品状态在**“活跃”“草稿”“已归档**”和**“未列出**”之间切换时触发。若保存操作未更改状态,则不会触发该事件。

火灾源于 Shopify Webhook 结合变更检测
权限 产品、变体和系列数据的访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上

用于

  • 产品一上线,就立即通知市场部。
  • 当产品被归档时,将其从产品源或捆绑包中移除。
  • 捕获那些被误设为“待处理”状态的产品。

“产品状态变更”会向您的工作流发送什么

流中的变量 类型 内容简介
product 产品(Shopify) 状态发生变化的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
oldStatus 文本 产品的先前状态(有效、草稿、已归档或未列出)
newStatus 文本 新产品的状态(已发布、草稿、已归档或未列出)
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:发布一款刚刚上线的产品

  1. 选择**“产品状态发生变化**”作为触发条件。
  2. 添加一个条件newStatus 等于 active,以及第二个条件 oldStatus 等于 draft
  3. 下方添加**“发送内部邮件**”:主题为Now live: {{product.title}},正文内容为{{product.onlineStoreUrl}}
  4. 可选:使用new-arrival添加产品标签,以便系列能收录该产品。
  5. 启用该工作流。

产品名称已更改

当产品标题发生变化时触发。除产品标题变化外,其他情况均不会触发该事件。

火灾源于 Shopify Webhook 结合变更检测
权限 产品、变体和系列数据的访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上

用于

  • 确保外部产品目录、PIM 或翻译工具与更名后的产品保持同步。
  • 每当畅销书的书名发生变更时,请申请进行SEO审核。
  • 在批量编辑中发现意外重命名的情况。

“产品标题已更改”会向您的工作流发送什么

流中的变量 类型 内容简介
product 产品(Shopify) 标题发生变更的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
oldTitle 文本 该产品的原名称
newTitle 文本 该产品的新名称
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:向团队发送包含两个标题的更名请求

  1. 选择**“产品标题已更改**”作为触发条件。
  2. 添加**“发送内部邮件”,**主题为Product renamed,正文为"{{oldTitle}}" is now "{{newTitle}}" - {{product.onlineStoreUrl}}
  3. 如果只想筛选部分产品,请在前面添加一个条件product.vendor 等于您的品牌,或者 product.tags 包含 hero
  4. 启用该工作流。

产品名称已更改

当产品的 URL 句柄发生变化时触发,即地址中 /products/ 之后的部分。

火灾源于 Shopify Webhook 结合变更检测
权限 产品、变体和系列数据的访问
已开启 启用使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上。

用于

  • 自动从旧网址创建重定向,以确保链接和搜索结果能够正常显示。
  • 请告知负责管理广告或电子邮件营销活动的人员,着陆页已迁移。

“产品处理变更”会向您的工作流发送什么内容

流量中的变量 类型 内容简介
product 产品(Shopify) 该产品的handle已发生变化。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的產品操作均可使用。
oldHandle 文本 该产品的先前 URL 标识符
newHandle 文本 该产品的新 URL 标识符
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:从旧的处理程序创建一个 URL 重定向

  1. 选择**“产品手柄已更改**”作为触发条件。
  2. 添加**“创建 URL 重定向**”操作。
  3. 将**“路径**”设置为 /products/{{oldHandle}},将**“目标**”设置为 /products/{{newHandle}}
  4. 启用该工作流,然后更改测试产品的标识符,并打开旧的URL。

产品描述已更改

当产品的描述(HTML 正文)发生变化时触发。

火灾源于 Shopify Webhook 结合变更检测
权限 产品、变体和系列数据的访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上。

用于

  • 只有当源文本确实发生了变化时,才应重新运行翻译或AI摘要。
  • 在编辑后,请法律或合规部门对受监管的产品进行复核。
  • 刷新包含该描述的产品数据源。

“产品描述已更改”会向您的工作流发送什么

流中的变量 类型 内容简介
product 产品(Shopify) 描述发生变更的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
oldDescription 文本 上述描述(已截断至4000个字符;如有需要,可通过产品编号获取完整描述)
newDescription 文本 新描述(已截断至4000个字符;如有需要,可通过产品编号获取完整描述)
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:将已编辑的描述标记为待审核

  1. 将**“产品描述已更改**”设为触发条件。
  2. 使用 needs-copy-review 添加产品标签
  3. 在管理后台添加“向审阅者发送内部邮件,内容包含 {{product.title}} 以及该产品的链接”这一功能。
  4. 审核完成后,审核员将移除该标签。如果此时需要采取相应措施,请将其与**“产品标签已移除”**功能配合使用。

产品供应商变更

当产品的供应商发生变更时,会触发此事件。

火灾源于 Shopify Webhook 结合变更检测
权限 产品、变体和系列数据的访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上。

用于

  • 在基于供应商的系列或价格表之间移动产品。
  • 当产品被重新分配给另一家供应商时,请通知采购部门。

“产品供应商变更”会向您的工作流发送什么

流中的变量 类型 内容简介
product 产品(Shopify) 供应商发生变更的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
oldVendor 文本 前一家供应商
newVendor 文本 新供应商
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:当供应商发生变更时,更换供应商标签

  1. 选择**“产品供应商变更**”作为触发条件。
  2. 使用vendor:{{oldVendor}}添加或移除产品标签
  3. 使用 vendor:{{newVendor}} 添加产品标签
  4. 启用该工作流。

产品类型已更改

当产品类型发生变化时触发。此处指的是自由文本类型的“类型”字段,而非Shopify的标准产品类别。

火灾源于 Shopify Webhook 结合变更检测
权限 产品、变体和系列数据的访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的专用开关位于应用的**“触发器**”页面上。

用于

  • 将商品重新分类到基于类别的自动化商品集合或发货配置中。
  • 在外部系统中保持税务或海关映射的最新状态。

“产品类型变更”会将哪些内容发送至您的工作流

流中的变量 类型 内容简介
product 产品(Shopify) 类型发生变化的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
oldType 文本 上一款产品类型
newType 文本 新产品类型
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:当产品类型发生变化时通知运维团队

  1. 将“选择产品类型已更改”设为触发条件。
  2. 如果只有某些类型重要,请添加一个条件newType 等于 Hazardous
  3. 添加**“发送内部邮件”选项**:{{product.title}} moved from type "{{oldType}}" to "{{newType}}"
  4. 启用该工作流。

已添加产品标签

当产品中至少添加了一个标签时触发。addedTags 仅包含新添加的标签,因此您无需自行比较列表。

火灾源于 Shopify Webhook 与变更检测
权限 产品、变体和系列数据的访问
已开启 启用一个使用该功能的 Flow 工作流即可将其打开。其专属开关位于应用的**“触发器**”页面上。

用于

  • 从标签启动进程:photo-readyapprovedclearance
  • 允许员工直接在产品页面触发自动化流程,而无需打开 Flow。

“已添加的产品标签”会向您的工作流发送什么内容

流中的变量 类型 内容简介
product 产品(Shopify) 标签发生变化的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
addedTags 文本 以逗号分隔的、已添加到该产品的标签列表
removedTags 文本 在同一更新中从该产品中移除的标签的逗号分隔列表(可能为空)
currentTags 文本 该商品当前所有标签的逗号分隔列表
previousTags 文本 本次更新前该商品所含的所有标签的逗号分隔列表
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:当产品标签获得批准后发布该产品

  1. 选择**“添加产品标签**”作为触发条件。
  2. 添加条件addedTags 包含 approved
  3. 在**“然后**”下方,选择“使用Active更新产品状态”(或**“将产品发布**到渠道”)。
  4. 如果标签仅为信号,请使用approved添加或移除产品标签
  5. 启用该工作流。

已删除产品标签

当产品上至少有一个标签被移除时触发。removedTags 中恰好包含那些已被移除的标签。

火灾源于 Shopify Webhook 结合变更检测
权限 产品、变体和系列数据的访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上

用于

  • 在状态标签被移除时结束流程:当移除clearance时,销售即告结束。
  • 撤销**“已添加的匹配标签**”工作流所执行的操作。

“已移除的产品标签”会将什么内容发送至您的工作流

流中的变量 类型 内容简介
product 产品(Shopify) 标签发生变化的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
addedTags 文本 在同一轮更新中添加到该产品的标签列表(以逗号分隔,该列表可以为空)
removedTags 文本 从产品中移除的标签的逗号分隔列表
currentTags 文本 该商品当前所有标签的以逗号分隔的列表
previousTags 文本 本次更新前该产品上所有先前标签的逗号分隔列表
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:当清仓标签被取下时,结束促销活动

  1. 选择**“产品标签已删除**”作为触发条件。
  2. 添加条件removedTags 包含 clearance
  3. 添加用于撤销销售的操作,例如“移除商品标签sale-badge 和“向商品管理团队发送内部邮件”。
  4. 启用该工作流。

产品已发布到渠道

当产品发布到一个或多个销售渠道、市场或B2B产品目录时触发。channels.added 列出了该产品刚刚出现的位置,channels.current 列出了该产品当前出现的所有位置。

火灾源于 Shopify Webhook 结合变更检测
权限 出版物数据访问 + 产品、变体及系列数据访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。其专属开关位于应用的**“触发器**”页面上。

用于

  • 当产品上架至在线商店时,请启动发布检查清单。
  • 只有在产品已发布到该渠道后,才将其推送至市场数据源。
  • 当某件商品在销售终端(POS)有货时,请通知零售团队。

“发布到渠道”功能会将哪些产品数据发送至您的工作流

流量中的变量 类型 内容简介
product 产品(Shopify) 已发布的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
channels 对象 已添加/已删除/当前已发布的频道,每个频道都是一条发布信息(id、名称、类型、catalogId)
channels.added 对象列表 在此事件中,该产品刚刚发布到的渠道。chinese
channels.added (each).id ID 该发布内容 GID(gid://shopify/Publication/...)
channels.added (each).name 文本 渠道/场景名称(例如:在线商店、销售点、Google 和 YouTube、市场名称或 B2B 地点名称)
channels.added (each).type 文本 销售场景类型:销售渠道、市场或B2B地点
channels.added (each).catalogId ID 支持本出版物的目录 GID(AppCatalog、MarketCatalog 或 CompanyLocationCatalog)
channels.removed 对象列表 在此事件中,该产品刚刚从哪些渠道下架。
channels.removed (each).id ID 该发布物 GID (gid://shopify/Publication/...)
channels.removed (each).name 文本 渠道/场景名称(例如:在线商店、销售点、Google 和 YouTube、市场名称或 B2B 地点名称)
channels.removed (each).type 文本 销售场景类型:销售渠道、市场或B2B地点
channels.removed (each).catalogId ID 支持本出版物的目录 GID(AppCatalog、MarketCatalog 或 CompanyLocationCatalog)
channels.current 对象列表 该产品目前发布的所有渠道(此变更后)。
channels.current (each).id ID 该发布内容 GID (gid://shopify/Publication/...)
channels.current (each).name 文本 渠道/场景名称(例如:在线商店、销售点、Google 和 YouTube、市场名称或 B2B 地点名称)
channels.current (each).type 文本 销售场景类型:销售渠道、市场或B2B地点
channels.current (each).catalogId ID 支持本出版物的目录 GID(AppCatalog、MarketCatalog 或 CompanyLocationCatalog)
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:当产品到达销售点时,向零售团队发出提醒

  1. 选择**“产品发布到渠道**”作为触发器。
  2. 添加一个条件channels.added中至少有一个满足name等于Point of Sale
  3. 添加**“发送内部邮件”选项**:{{product.title}} is now available on POS
  4. 启用该工作流。

从渠道中撤下该产品

当产品从一个或多个销售渠道下架时触发。channels.removed 会列出该产品从哪些渠道下架。

火灾源自 Shopify Webhook 结合变更检测
权限 出版物数据访问 + 产品、变体及系列数据访问
已开启 启用一个使用该功能的 Flow 工作流即可将其开启。其独立开关位于应用的**“触发器**”页面上。

用于

  • 发现那些悄然从在线商店下架的产品。
  • 当产品离开广告所指向的渠道时,立即暂停该产品的广告。

“Channel”中未发布的产品会发送哪些内容到您的工作流

流中的变量 类型 内容简介
product 产品(Shopify) 该产品处于未发布状态。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。
channels 对象 已添加/已删除/当前已发布的频道,每个频道都是一条发布信息 (id, name, type, catalogId)
channels.added 对象列表 在此事件中,该产品刚刚发布到的频道。chinese
channels.added (each).id ID 该发布内容 GID(gid://shopify/Publication/...)
channels.added (each).name 文本 渠道/上下文名称(例如:在线商店、销售点、Google 和 YouTube、市场名称或 B2B 地点名称)
channels.added (each).type 文本 销售场景类型:销售渠道、市场或B2B地点
channels.added (each).catalogId ID 支持本出版物的目录 GID(AppCatalog、MarketCatalog 或 CompanyLocationCatalog)
channels.removed 对象列表 在此事件中,该产品刚刚从哪些频道下架。
channels.removed (each).id ID 该发布内容 GID (gid://shopify/Publication/...)
channels.removed (each).name 文本 渠道/场景名称(例如:在线商店、销售点、Google 和 YouTube、市场名称或 B2B 地点名称)
channels.removed (each).type 文本 销售场景类型:销售渠道、市场或B2B地点
channels.removed (each).catalogId ID 支持本出版物的目录 GID(AppCatalog、MarketCatalog 或 CompanyLocationCatalog)
channels.current 对象列表 该产品目前发布的所有渠道(此变更后)。
channels.current (each).id ID 该发布物 GID (gid://shopify/Publication/...)
channels.current (each).name 文本 渠道/场景名称(例如:在线商店、销售点、Google 和 YouTube、市场名称或 B2B 地点名称)
channels.current (each).type 文本 销售场景类型:销售渠道、市场或B2B地点
channels.current (each).catalogId ID 支持本出版物的目录 GID(AppCatalog、MarketCatalog 或 CompanyLocationCatalog)
eventId 文本 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。

示例:当产品从在线商店下架时发出提醒

  1. 选择**“渠道中未发布的产品**”作为触发条件。
  2. 添加一个条件channels.removed中至少有一项满足name等于Online Store
  3. 添加**“发送内部邮件**”或通过{{product.title}}发送Slack请求,并附上管理员链接。
  4. 启用该工作流。

下一步