Skip to main content
Liquid 是 OneSignal 支持的模板语言,用于跨渠道个性化消息,包括邮件、推送、短信、应用内和 Live Activities。它使用标签、过滤器和条件语句来动态自定义消息内容。 要了解更多 Liquid 语法信息,请参阅官方 Liquid 文档

基本语法

Liquid 使用两种主要的语法结构:
  1. 输出标签{{ ... }} — 显示变量或对象中的数据。
  2. 逻辑标签{% ... %} — 执行条件语句或循环。

条件语句

运算符

  • ==, !=, >, <, >=, <=
  • and, or
  • contains (string or array)
liquid

ifelsifelse

liquid

unless

liquid

过滤器

使用 {{ variable | filter }} 应用过滤器来调整数据显示方式。

default

如果属性为空或不存在,则分配默认值。
liquid

date

date 过滤器将时间戳转换为另一种日期格式。此语法的格式与 strftime 相同。输入使用与 Ruby 的 Time.parse 相同的格式。 使用标签将日期设置为以秒为单位的 unix 时间戳。这允许同时使用 liquid 语法个性化和时间运算符进行细分。例如,标签可能是:bill_due : 1687968776
liquid
Result
liquid
Result
如果字符串包含格式良好的日期,日期格式化可以处理字符串。
liquid
Result
要获取当前时间,请将特殊单词 now(或 today)与日期过滤器一起传递。
liquid
Result
当前时间将根据消息发送给接收者的时间在消息中呈现。如果您正在测试消息, 您将看到当前时间为测试消息发送的时间。

capitalize

此过滤器将字符串的第一个字符大写,并将其余字符转换为小写。
liquid
Result

round

此过滤器将数字四舍五入到最接近的整数,或者如果传递了一个数字作为参数,则四舍五入到指定的小数位数。
liquid
Result

pluralize

此过滤器根据给定的数字返回字符串的单数或复数形式。数字必须是整数,可以作为字符串提供。必须同时提供字符串的单数和复数形式。
liquid
Result

迭代

for 循环

重复执行代码块。有关 for 循环中可用属性的完整列表,请参阅 Liquid for 循环文档
liquid
Request Body
Result
虽然功能强大且灵活,但在某些罕见情况下,在 Liquid 语法中使用 for 循环可能 导致通知传递性能不佳。请注意您对 for 循环的使用。另请注意,我们禁止在 几个推送频道字段中使用 for 循环:contentsheadingssubtitleapns_alerturl

limitoffset

将循环限制为指定的迭代次数。例如,如果您只想在消息中显示 4 个产品,您可以使用限制和偏移量来指定显示的产品数量。
Data
liquid
Result
要在指定索引开始循环,请添加偏移值:
Data
liquid
Result

where

创建一个数组,仅包含具有给定属性值的对象,或默认情况下任何真值。 在此示例中,假设您有一个产品列表,并且想要单独显示您的厨房产品。使用 where,您可以创建一个仅包含 typekitchen 的产品的数组。
Data
liquid
Result

字符串操作

使用字符串过滤器调整标签值或内联字符串在消息中的显示方式。

常见问题

为什么替换不起作用?

  • 应用内消息不支持属性替换。
  • 使用”发送测试消息”时标签替换不起作用。
  • 标签键必须是字母数字,或使用 _ 和 -(不能有句点或空格)。
  • 替换不会在预览模式中显示 — 发送真实消息进行测试。

何时应该使用 default 而不是 if/else

当只有变量值需要回退而周围文本保持不变时,使用 default 过滤器
liquid
Result (name = "Jon")
Result (name 为空)
当周围文本、标点符号或句子结构也需要根据变量是否存在而改变时,使用 if/else 条件逻辑
liquid
Result (name = "Jon")
Result (name 为空)
当句子结构改变时,不要使用 default。例如,{{ name | default: "Shop your favorites" }}, shop your favorites 在 name 为空时会渲染为”Shop your favorites, shop your favorites”。如果回退改变的不仅仅是变量,请使用 if/else

如何控制空白和换行?

使用连字符:{{- ... -}}{%- ... -%} 来修剪周围的空白。 更多详情请参阅空白控制

如何处理用户生成的内容?

将用户生成的文本包装在 {% raw %}{% endraw %} 中以防止 Liquid 解析。参见 “raw” 语法

相关页面

消息个性化

所有个性化选项的概述,包括 Liquid、Data Feeds 和自定义事件。

Data Feeds

在发送时从您的 API 将实时数据拉入消息中。

标签

在用户上存储键值对,用于分段和 Liquid 个性化。

模板

创建内置 Liquid 个性化的可重用消息模板。