变量与液体
该应用中所有动态内容均采用 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>
您无需使用它们:每封营销邮件的页脚中本就会自动包含退订链接。当渲染后的正文已包含该链接时,页脚会省略退订提示语,仅附上公司信息。在邮件主题和预览文本中,这两个变量均显示为空;而在交易类邮件的布局中,它们始终为空。参见 营销邮件与退订。
相关
- 从Shopify Flow传递数据 - 详细介绍“变量(JSON)”字段。
- 设计电子邮件版面 - 这些变量该放在哪里。
- 营销邮件与退订 - 营销版式、退订页脚和退订列表。
- 秘密 - 安全地存储凭据。
- 通过 Shopify Flow 发起一个 HTTP 请求 - 实际请求中的变量。

