仅仅知道发生了变化通常是不够的。工作流程通常需要了解之前的状态:价格是上涨还是下跌,涨幅是多少,添加了哪个标签,以及元字段昨天显示的内容。本次更新使新旧值在整个应用中均可获取,并允许自定义触发器在没有任何变化发生时启动工作流程。
新旧价值观,无处不在
- **元字段触发器现在会携带上一个值。**每个元字段触发器(通用、产品、变体、订单、客户)都会在
Metafield.value旁边向Shopify Flow传递Metafield.previousValue。当元字段刚创建时,该字段为空。参见 元字段触发器。
- 价格、单价和成本的变化会随数值变化而变化。由于Shopify Flow无法进行算术运算,因此“变体价格变更”、“变体单价变更”和**“产品变体成本变更**”现在也会返回
delta(新值减旧值)、percentChange以及direction(增加、减少、不变)。 “价格下跌超过 10%”现已成为一个独立条件,无需编写代码。
- **“产品更新”、“订单更新”和“客户更新”会告知您发生了哪些变化。**以前,它们只会提示记录已被更新。现在,它们会提供
changes:即发生变化的字段列表,以及每个字段的旧值和新值。 受追踪的字段包括:产品的标题、描述、状态、标签、供应商、类型和处理标识符;订单的支付状态、发货状态、订单项、标签、备注和附加详情;以及客户的标签、备注和账户状态。长字符串会被截断。若更新涉及上述字段以外的内容(例如库存变动),则该列表为空。
- “订单草稿已更改”现在会提供与订单触发器相同的逐行差异对比:显示了哪些内容被添加、删除,以及数量、价格或变体方面的变更。
- 您自己的自定义触发器代码也能检测到旧值和新值。
payload._changes:所有发生变化的受追踪字段,每个字段都包含oldValue和newValue。因此,您的代码可以在状态转换时触发,而非仅在特定状态下触发 - - 例如“状态从草稿变为活跃”、“订单已付款” - - 而基于当前值的条件无法表达这些转换。 您在编辑器中捕获的示例事件中显示了该字段。
所有内容都是累加的。您已构建的工作流程将继续照常运行,不会发生任何变化。每个触发器的完整字段列表请参见触发器参考文档:。
选择哪些更改会触发“更新”触发器
“产品更新”、“订单更新”和“客户更新”新增了一项设置,位于 的“触发器”页面 上,其开关旁边的齿轮图标后:该设置会触发此操作。
- **未勾选任何选项:**触发器会在每次更新时触发,与以往完全一样。
- 已选中的字段:只有当其中一个字段发生变化时,系统才会触发操作。其他所有更新都会被跳过,且不计入您的套餐配额。
这也是防止工作流程自行触发的干净方法。例如,某个工作流程在“产品更新”时启动,随后写入一个用于再次触发自身的产品元字段。只需将触发器限定在您关心的字段上,第二次更新就不会再被触发。
此选择不会影响您的其他触发器。将“订单更新”限定为“付款状态”不会改变“添加订单标签”触发的时间点。
按计划运行的自定义触发器
Shopify Flow 当发生某些事情时才会触发。如果没有发生任何事情,它就无法触发,也无法感知商店外部的任何情况。现在,的自定义触发器 可以做到这一点了。编辑器会询问**“触发条件**:一个 Shopify 事件,还是按计划****执行”。 选择“按计划执行”时,您的代码每 30 秒运行一次,每天最多运行一次。它会记住上次运行时检测到的内容,能够读取您的商店数据并调用公共互联网上的任何服务,并自主判断哪些情况属于变更。
从模板开始,然后编辑顶部的数字:
- 产品、订单或客户已 N 天未更新 - - 过期的产品评论、滞留订单、客户回流。每个记录在每个“静默期”触发一次;启用该功能时,已逾期的记录不会一次性全部触发。
- Shopify 之外的某个值发生了变化 - - 例如供应商库存数据、汇率或价格表。输出该值在变化前后的数值,以及数值之间的差值和百分比。
- RSS 或 Atom 源中的新项目 - - 供应商新闻、列表源、状态页面。
- N小时内无订单 - - 您的商店的“心跳”监测。当订单停止时触发一次,当订单恢复时再触发一次。
计划触发器的首次运行只会记录其检测到的内容,因此启用该触发器绝不会导致工作流程被淹没。它会在Shopify Flow中以**“自定义触发器**”的形式显示,可通过其标识符进行筛选,且记录会作为其 ID 一并显示。无论是否触发,每次运行都会计入您的套餐配额 - - 编辑器会显示该时间间隔累计的运行次数。 **“测试”**模式会执行您的代码一次,但不会触发任何操作。
基于事件的自定义触发器的模板
监听Shopify事件的自定义触发器现在也提供了模板。在“从模板开始”下选择一个模板,系统就会自动选中该事件并填入代码。每个模板都会读取变化前后的值:
- 某个产品、订单或客户字段的值发生了变化 - - 例如,状态从“草稿”变为“有效”,或者订单状态变为“已付款”。
- 价格下降了超过N个百分点 - - 这才是真正的降价,并非每次价格调整都是如此。
- 库存跌破阈值 - - 触发一次,即在库存刚越过该线时触发,而非在库存已处于低位时每次销售都触发。
- 产品元字段数值超过了阈值 - - 评分低于3,毛利率高于40。
- “高价值客户已支付订单” - - 通过
ctx.shopify()读取客户在您商店的累计消费金额,并仅在金额超过您设定的阈值时触发。
记录在其自身管理页面上的触发器
新的管理模块会在Shopify管理界面中,直接在您正在查看的记录页面上显示该记录的最新触发器事件,每个事件都配有一行简短的“旧版 → 新版”说明,例如price: 100.00 -> 85.00。您可以在该处打开该事件,或查看该记录的“事件历史记录”。
适用于产品、变体、订单、订单草稿、客户、产品系列、公司及公司地点。只需通过页面“自定义”菜单添加该模块一次即可。 处理个人数据的触发器在列表中不显示其具体值。如何添加这些触发器,以下分别以产品、订单和客户页面为例:记录管理页面上的触发事件。
“Generate with AI”的更多人工智能服务提供商
使用 AI 生成 现已支持 Google Gemini 和 OpenRouter,此外还支持 Anthropic 和 OpenAI。OpenRouter 允许您使用一个密钥访问多家公司的模型,包括您输入的任何模型 ID。 在**“开发者”→“连接**”中绑定密钥:获取 Gemini API 密钥, 或 获取 OpenRouter API 密钥,。与之前一样,生成操作将在您自己的服务商账户上运行,且密钥经过加密处理,不会再次显示。
基于Shopify Web组件构建的更快速的界面
该应用的每一页均基于Shopify的新版管理Web组件重新构建,这些组件正是Shopify管理后台本身所使用的构建模块。
- **加载更快。**该应用不再自带界面库的副本。组件来自 Shopify,与管理后台的其他部分共享,并且通常已经存在于浏览器的缓存中,因此每个页面在显示之前需要下载的内容要少得多。
- **感觉就像是管理后台。**按钮、表格、开关、对话框和表单的外观和行为与Shopify中其他地方完全一致,包括键盘导航和屏幕阅读器支持。
- **保持最新。**当Shopify对其组件进行改进时,该应用会自动采用这些改进,无需我们进行更新。
一切都没有变化:每页、每个设置和每个链接都保持原样。
本版本还包含以下内容
- 在“权限”页面上,有“授予全部”和“撤销全部”两个选项。“授予全部”会通过一个Shopify对话框一次性请求所有缺失的权限,而不是为每张卡片分别请求。“撤销全部”会先要求您确认,并说明其含义:您的触发器仍保持启用状态,只是在您再次授予访问权限之前无法触发。
- 自定义触发器可以使用
ctx.fetch() 访问公共互联网,而不仅仅是使用 ctx.shopify() 访问您的商店。内部地址将被拒绝。
- **您的自定义触发器和店面触发器现在行为一致:**点击行进行编辑,状态显示在右侧。
- “触发器”页面在其标题旁边显示了当前启用的触发器数量,而且列表中现在为四个类型化的元字段触发器分别设置了独立的开关。
- 必填字段在自定义触发器、店面触发器和连接表单上均有标注。
- **已修复:事件历史记录中的日期筛选器无法清除。此前,**移除日期标签或选择“清除全部”后,已应用的日期仍会保留。现在,这两种操作均可清除这些日期。
- “事件历史”行显示为纯文本,而非蓝色链接。整行仍然可以点击。