产品触发机制,分步指南
Shopify Flow 可以告知您产品已更新,但无法告知您具体发生了哪些变化,也无法告知您之前的数值是多少。这十一个触发器则能同时做到这两点:每个触发器都会针对某一种变化触发,并将变化前后的数值传递给您的工作流。
下面的每个部分都是一篇简短的教程:介绍触发器何时触发、哪些数据会进入 Flow,以及一个你可以在几分钟内重建的工作流。
本页内容:产品更新, 产品状态变更, 产品标题变更, 产品标识符变更, 产品描述变更, 产品供应商变更, 产品类型变更, 添加产品标签, 移除产品标签, 产品发布至渠道, 产品从渠道下架

产品更新
每次保存产品时都会触发,无论发生了什么更改。自 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,以查看具体发送了什么内容。 |
示例:记录每个被跟踪的产品变更,并附上其旧值和新值
- 在Shopify Flow中,选择**“Select a trigger**”,打开“Workflow Trigger Extensions”,然后选择**“Product Update**”。
- 添加条件:
changes.fields不为空且存在。对受监控字段以外的字段(如价格编辑、图片)所做的更新会携带一个空列表,并在此处停止。 - 添加**“发送内部邮件**”(或“向 Slack **发送 HTTP **请求”)。Flow 的文本字段支持 Liquid 语法,因此通过
for循环遍历changes.items,可以针对每次变更打印一行:先显示条目的field,接着是oldValue和newValue,最后是{{product.title}}。 - 开启工作流。这样也会在应用中启用该触发器。


产品状态已更改
当产品状态在**“活跃”、“草稿”、“已归档**”和**“未列出**”之间切换时触发。若保存操作未更改状态,则不会触发该事件。
| 火灾源于 | Shopify Webhook 结合变更检测 |
| 权限 | 产品、变体和系列数据的访问 |
| 已开启 | 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上 |
用于
- 产品一上线,就立即通知市场部。
- 当产品被归档时,将其从产品源或捆绑包中移除。
- 捕获那些被误设为“待处理”状态的产品。
“产品状态变更”会向您的工作流发送什么
| 流中的变量 | 类型 | 内容简介 |
|---|---|---|
product |
产品(Shopify) | 状态发生变化的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。 |
oldStatus |
文本 | 产品的先前状态(有效、草稿、已归档或未列出) |
newStatus |
文本 | 新产品的状态(已发布、草稿、已归档或未列出) |
eventId |
文本 | 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。 |
示例:发布一款刚刚上线的产品
- 选择**“产品状态发生变化**”作为触发条件。
- 添加一个条件:
newStatus等于active,以及第二个条件oldStatus等于draft。 - 在下方添加**“发送内部邮件**”:主题为
Now live: {{product.title}},正文内容为{{product.onlineStoreUrl}}。 - 可选:使用
new-arrival添加产品标签,以便系列能收录该产品。 - 启用该工作流。
产品名称已更改
当产品标题发生变化时触发。除产品标题变化外,其他情况均不会触发该事件。
| 火灾源于 | Shopify Webhook 结合变更检测 |
| 权限 | 产品、变体和系列数据的访问 |
| 已开启 | 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上 |
用于
- 确保外部产品目录、PIM 或翻译工具与更名后的产品保持同步。
- 每当畅销书的书名发生变更时,请申请进行SEO审核。
- 在批量编辑中发现意外重命名的情况。
“产品标题已更改”会向您的工作流发送什么
| 流中的变量 | 类型 | 内容简介 |
|---|---|---|
product |
产品(Shopify) | 标题发生变更的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。 |
oldTitle |
文本 | 该产品的原名称 |
newTitle |
文本 | 该产品的新名称 |
eventId |
文本 | 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。 |
示例:向团队发送包含两个标题的更名请求
- 选择**“产品标题已更改**”作为触发条件。
- 添加**“发送内部邮件”,**主题为
Product renamed,正文为"{{oldTitle}}" is now "{{newTitle}}" - {{product.onlineStoreUrl}}。 - 如果只想筛选部分产品,请在前面添加一个条件:
product.vendor等于您的品牌,或者product.tags包含hero。 - 启用该工作流。
产品名称已更改
当产品的 URL 句柄发生变化时触发,即地址中 /products/ 之后的部分。
| 火灾源于 | Shopify Webhook 结合变更检测 |
| 权限 | 产品、变体和系列数据的访问 |
| 已开启 | 启用使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上。 |
用于
- 自动从旧网址创建重定向,以确保链接和搜索结果能够正常显示。
- 请告知负责管理广告或电子邮件营销活动的人员,着陆页已迁移。
“产品处理变更”会向您的工作流发送什么内容
| 流量中的变量 | 类型 | 内容简介 |
|---|---|---|
product |
产品(Shopify) | 该产品的handle已发生变化。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的產品操作均可使用。 |
oldHandle |
文本 | 该产品的先前 URL 标识符 |
newHandle |
文本 | 该产品的新 URL 标识符 |
eventId |
文本 | 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。 |
示例:从旧的处理程序创建一个 URL 重定向
- 选择**“产品手柄已更改**”作为触发条件。
- 添加**“创建 URL 重定向**”操作。
- 将**“路径**”设置为
/products/{{oldHandle}},将**“目标**”设置为/products/{{newHandle}}。 - 启用该工作流,然后更改测试产品的标识符,并打开旧的URL。
产品描述已更改
当产品的描述(HTML 正文)发生变化时触发。
| 火灾源于 | Shopify Webhook 结合变更检测 |
| 权限 | 产品、变体和系列数据的访问 |
| 已开启 | 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上。 |
用于
- 只有当源文本确实发生了变化时,才应重新运行翻译或AI摘要。
- 在编辑后,请法律或合规部门对受监管的产品进行复核。
- 刷新包含该描述的产品数据源。
“产品描述已更改”会向您的工作流发送什么
| 流中的变量 | 类型 | 内容简介 |
|---|---|---|
product |
产品(Shopify) | 描述发生变更的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。 |
oldDescription |
文本 | 上述描述(已截断至4000个字符;如有需要,可通过产品编号获取完整描述) |
newDescription |
文本 | 新描述(已截断至4000个字符;如有需要,可通过产品编号获取完整描述) |
eventId |
文本 | 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。 |
示例:将已编辑的描述标记为待审核
- 将**“产品描述已更改**”设为触发条件。
- 使用
needs-copy-review添加产品标签。 - 在管理后台添加“向审阅者发送内部邮件,内容包含
{{product.title}}以及该产品的链接”这一功能。 - 审核完成后,审核员将移除该标签。如果此时需要采取相应措施,请将其与**“产品标签已移除”**功能配合使用。
产品供应商变更
当产品的供应商发生变更时,会触发此事件。
| 火灾源于 | Shopify Webhook 结合变更检测 |
| 权限 | 产品、变体和系列数据的访问 |
| 已开启 | 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上。 |
用于
- 在基于供应商的系列或价格表之间移动产品。
- 当产品被重新分配给另一家供应商时,请通知采购部门。
“产品供应商变更”会向您的工作流发送什么
| 流中的变量 | 类型 | 内容简介 |
|---|---|---|
product |
产品(Shopify) | 供应商发生变更的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。 |
oldVendor |
文本 | 前一家供应商 |
newVendor |
文本 | 新供应商 |
eventId |
文本 | 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。 |
示例:当供应商发生变更时,更换供应商标签
- 选择**“产品供应商变更**”作为触发条件。
- 使用
vendor:{{oldVendor}}添加或移除产品标签。 - 使用
vendor:{{newVendor}}添加产品标签。 - 启用该工作流。
产品类型已更改
当产品类型发生变化时触发。此处指的是自由文本类型的“类型”字段,而非Shopify的标准产品类别。
| 火灾源于 | Shopify Webhook 结合变更检测 |
| 权限 | 产品、变体和系列数据的访问 |
| 已开启 | 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的专用开关位于应用的**“触发器**”页面上。 |
用于
- 将商品重新分类到基于类别的自动化商品集合或发货配置中。
- 在外部系统中保持税务或海关映射的最新状态。
“产品类型变更”会将哪些内容发送至您的工作流
| 流中的变量 | 类型 | 内容简介 |
|---|---|---|
product |
产品(Shopify) | 类型发生变化的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。 |
oldType |
文本 | 上一款产品类型 |
newType |
文本 | 新产品类型 |
eventId |
文本 | 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。 |
示例:当产品类型发生变化时通知运维团队
- 将“选择产品类型已更改”设为触发条件。
- 如果只有某些类型重要,请添加一个条件:
newType等于Hazardous。 - 添加**“发送内部邮件”选项**:
{{product.title}} moved from type "{{oldType}}" to "{{newType}}"。 - 启用该工作流。
已添加产品标签
当产品中至少添加了一个标签时触发。addedTags 仅包含新添加的标签,因此您无需自行比较列表。
| 火灾源于 | Shopify Webhook 与变更检测 |
| 权限 | 产品、变体和系列数据的访问 |
| 已开启 | 启用一个使用该功能的 Flow 工作流即可将其打开。其专属开关位于应用的**“触发器**”页面上。 |
用于
- 从标签启动进程:
photo-ready、approved、clearance。 - 允许员工直接在产品页面触发自动化流程,而无需打开 Flow。
“已添加的产品标签”会向您的工作流发送什么内容
| 流中的变量 | 类型 | 内容简介 |
|---|---|---|
product |
产品(Shopify) | 标签发生变化的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。 |
addedTags |
文本 | 以逗号分隔的、已添加到该产品的标签列表 |
removedTags |
文本 | 在同一更新中从该产品中移除的标签的逗号分隔列表(可能为空) |
currentTags |
文本 | 该商品当前所有标签的逗号分隔列表 |
previousTags |
文本 | 本次更新前该商品所含的所有标签的逗号分隔列表 |
eventId |
文本 | 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。 |
示例:当产品标签获得批准后发布该产品
- 选择**“添加产品标签**”作为触发条件。
- 添加条件:
addedTags包含approved。 - 在**“然后**”下方,选择“使用
Active更新产品状态”(或**“将产品发布**到渠道”)。 - 如果标签仅为信号,请使用
approved添加或移除产品标签。 - 启用该工作流。
已删除产品标签
当产品上至少有一个标签被移除时触发。removedTags 中恰好包含那些已被移除的标签。
| 火灾源于 | Shopify Webhook 结合变更检测 |
| 权限 | 产品、变体和系列数据的访问 |
| 已开启 | 启用一个使用该功能的 Flow 工作流即可将其开启。该功能的独立开关位于应用的**“触发器**”页面上 |
用于
- 在状态标签被移除时结束流程:当移除
clearance时,销售即告结束。 - 撤销**“已添加的匹配标签**”工作流所执行的操作。
“已移除的产品标签”会将什么内容发送至您的工作流
| 流中的变量 | 类型 | 内容简介 |
|---|---|---|
product |
产品(Shopify) | 标签发生变化的产品。这是一个完整的Shopify产品,因此其所有字段以及Flow自身的产品操作均可使用。 |
addedTags |
文本 | 在同一轮更新中添加到该产品的标签列表(以逗号分隔,该列表可以为空) |
removedTags |
文本 | 从产品中移除的标签的逗号分隔列表 |
currentTags |
文本 | 该商品当前所有标签的以逗号分隔的列表 |
previousTags |
文本 | 本次更新前该产品上所有先前标签的逗号分隔列表 |
eventId |
文本 | 此事件的 ID。请在应用的“事件历史记录”中搜索该 ID,以查看具体发送了什么内容。 |
示例:当清仓标签被取下时,结束促销活动
- 选择**“产品标签已删除**”作为触发条件。
- 添加条件:
removedTags包含clearance。 - 添加用于撤销销售的操作,例如“移除商品标签”
sale-badge和“向商品管理团队发送内部邮件”。 - 启用该工作流。
产品已发布到渠道
当产品发布到一个或多个销售渠道、市场或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,以查看具体发送了什么内容。 |
示例:当产品到达销售点时,向零售团队发出提醒
- 选择**“产品发布到渠道**”作为触发器。
- 添加一个条件:
channels.added中至少有一个满足name等于Point of Sale。 - 添加**“发送内部邮件”选项**:
{{product.title}} is now available on POS。 - 启用该工作流。
从渠道中撤下该产品
当产品从一个或多个销售渠道下架时触发。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,以查看具体发送了什么内容。 |
示例:当产品从在线商店下架时发出提醒
- 选择**“渠道中未发布的产品**”作为触发条件。
- 添加一个条件:
channels.removed中至少有一项满足name等于Online Store。 - 添加**“发送内部邮件**”或通过
{{product.title}}发送Slack请求,并附上管理员链接。 - 启用该工作流。
下一步
- 触发器完整参考指南 - 所有触发器都集中在一页上。
- 选择合适的扳机 - 哪一个适合您的情况。
- 自定义触发器 - 如果没有合适的内置触发器,请自行编写一个。
- 事件历史记录和故障排除 - 看看它发射了什么,又携带了什么。
- 在记录的管理页面上触发事件 - 某条记录的最新动态,显示在Shopify管理后台的独立页面上。

