变量与液体

该应用中所有动态内容均采用 Liquid 实现 - - 这正是 Shopify 主题所使用的模板语言。您只需编写占位符,应用便会在发送时自动填充内容。

命名空间

命名空间 价值从何而来 提供以下语言版本:
{{ variables.key }} Shopify Flow操作中的**“变量(JSON)**”字段 电子邮件主题和正文、HTTP URL、头部和正文
{{ secrets.key }} “秘密”页面 同上,另需提供 SMTP 用户名和密码
{{ shop.name }}, {{ shop.domain }}, {{ shop.email }} 您的商店 电子邮件和 HTTP 操作
{{ language }} Shopify Flow步骤发送的语言,否则为布局的主语言简体中文(大陆) 电子邮件主题、预览文本和正文 - - 请参见 用客户的语言发送电子邮件
{{ unsubscribe_link }}, {{ unsubscribe_url }} 收件人的退订链接(仅限营销版面) 邮件正文;在事务性布局中为空 - - 详见下文
{{ flow.key }} Shopify Flow的原始负载 仅限 HTTP 请求

编辑器中的**“系统变量**”卡片列出了商店的各项数值及其当前内容,点击其中一项即可将其复制。

从Shopify Flow传递变量

在 Shopify Flow 操作中,将一个 JSON 对象放入**“变量(JSON)**”字段中:

{
  "firstName": "{{ customer.firstName }}",
  "orderNumber": "{{ order.name }}",
  "total": "{{ order.totalPriceSet.shopMoney.amount }}"
}

然后在布局的任意位置引用它们:

Hi {{ variables.firstName }}, your order {{ variables.orderNumber }} is on its way.

密钥由您自行选择。您在左侧填写的名称,就是variables.之后要使用的名称,拼写和大小写必须完全一致。

您无需手动编写此 JSON。每个布局在“Shopify Flow”卡片中都有一个**“使用**”选项,其中已准备好正确的 JSON 内容,可供直接复制 - - 请参见 从Shopify Flow传递数据。

筛选条件

标准液体过滤器是有效的。其中最实用的一个是default,它能防止出现空值:

Hi {{ variables.firstName | default: "there" }}

其他情况则如你所料:

{{ variables.productTitle | upcase }}
{{ variables.total | round: 2 }}
{{ variables.note | truncate: 100 }}

当变量显示为空白时

如果某个实时发送操作将任何被引用的变量渲染为 nothing,则在**“历史记录**”中会显示**“空变量**”标记。打开该条目会为其命名,并区分两个不同的问题:

  • 由 Shopify Flow 发送,但内容为空 - - 该键在您的 JSON 中存在,但 Shopify Flow 未生成任何值。通常是属性路径错误,或者该记录中的字段确实为空(例如,访客结账时没有客户名字)。
  • 这完全不是由 Shopify Flow 发送的 - - 你的 JSON 中完全缺少该密钥。

添加一个 | default: 备用链接,即可将该空白标记为有意为之,应用程序便不会再对此发出警告。

条件语句和循环

请使用 HTML / 代码块来编写条件语句:

{% if variables.isVip %}
  <p>As a VIP you get free shipping on this order.</p>
{% else %}
  <p>Spend a little more to unlock free shipping.</p>
{% endif %}

使用“循环”积木对数组进行循环处理,例如订单项:

{% for item in variables.items %}
  <tr>
    <td>{{ item.title }}</td>
    <td>{{ item.quantity }}</td>
    <td>{{ item.price }}</td>
  </tr>
{% endfor %}

将 Shopify Flow 中的数组作为 JSON 传递:

{
  "items": [
    { "title": "Classic White T-Shirt", "quantity": 2, "price": "29.00" },
    { "title": "Eco Water Bottle", "quantity": 1, "price": "19.00" }
  ]
}

要在构建器中预览循环,请在**“测试变量**”选项卡中输入与该值相同的 JSON 数组。

对象在电子邮件和HTTP中的行为有所不同

这是唯一一个值得了解的尖锐之处。

  • 在 HTTP 请求中,对对象或数组进行插值会自动将其序列化为 JSON。{{ variables.records }} 会在请求正文中变成一个标准的 JSON 数组。如果你想明确指定,还可以使用 json 过滤器。
  • 在电子邮件中,并不存在此类转换。对整个对象进行插值后,会将字面文本渲染为 [object Object]。

因此,在电子邮件中,请始终直接从“主题”字段中提取内容,而不是将其打印出来:

Wrong:  {{ variables.customer }}
Right:  {{ variables.customer.firstName }} {{ variables.customer.lastName }}

或者,可以对数组进行循环处理,而不是直接将其全部打印出来。

模板中的秘密

以同样的方式引用存储的密钥:

Authorization: Bearer {{ secrets.airtableAccessToken }}

请使用完全正确的语法:{{ secrets.keyName }}。以下写法均无效:

  • {{ secret.keyName }} - 单数
  • {{ secrets['keyName'] }} - 括号语法

键名区分大小写。请参阅 秘密。

HTTP 请求的正文覆盖

HTTP 操作的“变量”字段还有第二种模式。传递一个名为body的键,它将完全替换已保存的请求正文:

{
  "body": { "anything": "you like", "shaped": ["however"] }
}

当负载的形状由之前的 Shopify Flow 步骤决定时,此功能非常有用。唯一例外的情况是:如果保存的正文本身引用了 {{ variables.body }},则它会被视为一个普通变量。

测试你写的内容

页面预览不会解析 Liquid - - 它仅显示标签的原始内容。要查看解析后的值:

  • 对于电子邮件,请在布局编辑器中使用**“发送测试邮件”功能**。
  • 对于 HTTP 请求,请使用“测试”按钮,该按钮会在显示响应的同时,一并显示**“解析后的 URL”和“解析后的正文**”。

营销版面中的退订链接

“邮件类型”为**“营销**”的版式会额外获得两个变量。每封营销邮件的收件人都有各自的退订链接,这些变量用于放置该链接:

  • {{ unsubscribe_link }} 渲染一个链接,其文本为**“取消订阅**”(来自“设置”中的文本,或布局自身的文本)。
  • {{ unsubscribe_url }} 返回原始地址,适用于您自行设置样式的按钮或超链接。
<p>No longer interested? <a href="{{ unsubscribe_url }}">Unsubscribe here</a>.</p>

您无需使用它们:每封营销邮件的页脚中本就会自动包含退订链接。当渲染后的正文已包含该链接时,页脚会省略退订提示语,仅附上公司信息。在邮件主题和预览文本中,这两个变量均显示为空;而在交易类邮件的布局中,它们始终为空。参见 营销邮件与退订。

相关