跳转到主要内容
使用属性(例如用户 Tags 和 External ID 等标识符)通过 Liquid 语法 个性化消息和投递载荷。 OneSignal 在发送时渲染 Liquid 占位符,使用已存储在用户、订阅、Journey、消息、模板、应用或组织上的数据。您可以使用这些数据来个性化消息、Journey WebhookEvent Streams

何时使用属性个性化

使用属性个性化可在发送时使用 OneSignal 中已有的数据渲染内容——最常见的是用户 Tags、External ID 和订阅字段(如电子邮件或电话号码)。 适用场景:
  • 数据已存储在 OneSignal 中
  • 您希望在消息发送时自动替换 Liquid 占位符
  • 您不需要在投递时获取或计算新数据
如果值必须在发送时获取或计算(例如实时价格或库存),请使用 Data Feeds 或我们的 API 与 custom_data如果值来自导致用户进入或推进 Journey 的事件,请使用 Custom Event 个性化

渠道支持

每个渠道支持特定的属性类型和字段。
在以下字段中支持用户和订阅属性
  • 主题、回复地址和预标题
  • 消息正文
  • HTML 属性(例如:<img src="{{ image_url }}" />
  • 按钮操作(URL、mailto 等)

属性个性化的工作原理

OneSignal 将 Liquid 占位符替换为被发送消息的用户和订阅对应的属性值。
Liquid
Hi {{ first_name | default: "friend" }}!
Congrats on reaching level {{ level | default: "1" }}!
如果用户的 Tags 为 first_name: Jonlevel: 5,他们会看到:
Text
Hi Jon!
Congrats on reaching level 5!

如果用户没有设置 Tags,则会显示默认值。

属性 Liquid 对象参考

使用本节查找 Liquid 中可用的确切对象和字段名称。

用户和订阅属性

使用 user 获取用户级数据。当您需要渠道特定的值(如电子邮件地址或电话号码)时,请使用 subscription
user.tags
用户的 Tags。您可以通过以下几种方式引用 Tags:
  • 直接使用 key,或将 key 放在 tags 之后
  • 示例 Tags 设置:first_name: Jon, level: 5
Liquid
Your first name is {{ first_name }}.
Your first name is {{ user.tags.first_name }}.
Your level is {{ level }}.
Your level is {{ user.tags.level }}.
  • 使用 for 循环语法遍历 Tags。此示例输出以逗号分隔的 key:value 对。
Liquid
{% for tag in user.tags %}
{{ tag[0] }}: {{ tag[1] }}
{% unless forloop.last %},
{% endunless %}{% endfor %}
user.external_id
用户的 External ID
Liquid
Your user ID is {{ user.external_id }}.
Your user ID is {{ subscription.external_id }}.
user.onesignal_id
用户的 OneSignal ID
Liquid
Your OneSignal user ID is {{ user.onesignal_id }}.
subscription.email
接收消息的电子邮件 Subscription 的电子邮件地址。
Liquid
Thanks for subscribing with email {{ subscription.email }}.
subscription.phone_number
接收消息的短信 Subscription 的电话号码。
Liquid
Thanks for subscribing with phone number {{ subscription.phone_number }}.
user.language
用户的语言代码。
Liquid
Preferred language: {{ user.language }}
Preferred language: {{ subscription.language }}
user.subscriptions
用户的 Subscriptions
  • 使用 for 循环语法遍历 Subscriptions。
  • 此示例输出每个订阅的 token 和 ID(以逗号分隔)。
JSON
{
  "subscriptions": "{% for subscription in user.subscriptions %}{% if subscription.subscription_token %}{{ subscription.subscription_token }}: {{ subscription.id }}{% unless forloop.last %}, {% endunless %}{% endif %}{% endfor %}"
}
subscription.unsubscribe_token
用于使用 Token 取消订阅邮件 API 的 token。
Unsubscribe: https://your-domain.com/unsubscribe?token={{ subscription.unsubscribe_token }}

Journey 属性

journey 对象允许您引用 Journey 名称或访问 Journey 的 Custom Event 个性化
journey.name
Journey 的名称。
JSON
{
  "journey_name": "{{ journey.name }}"
}

消息属性

message 对象提供对消息 ID、名称和模板 ID 的访问,这对 Event Streams 很有用,同时还可以访问 custom_data 以个性化从后端发送的消息。
message.id
由 OneSignal 设置的消息 ID。
{
  "message_id": "{{ message.id }}"
}
message.name
由发送者设置的消息名称。
{
  "message_name": "{{ message.name }}"
}
message.template_id
由 OneSignal 设置的模板 ID。
{
  "template_id": "{{ message.template_id }}"
}

模板属性

template 对象提供对用于发送消息的 Template 的模板 ID 和名称的访问。这对 Event Streams 很有用。
template.id
由 OneSignal 设置的模板 ID。
{
  "template_id": "{{ template.id }}"
}
template.name
由发送者设置的模板名称。
{
  "template_name": "{{ template.name }}"
}

应用和组织属性

apporg 对象提供发送消息的应用和组织的详细信息。这对 Event Streams 很有用。
app.id
由 OneSignal 设置的应用 ID。
{
  "app_id": "{{ app.id }}"
}
app.name
由应用所有者设置的应用名称。
{
  "app_name": "{{ app.name }}"
}
org.id
由 OneSignal 设置的组织 ID。
{
  "org_id": "{{ org.id }}"
}
org.name
由组织所有者设置的组织名称。
{
  "org_name": "{{ org.name }}"
}

示例:使用 Tags 实现购物车遗弃提醒

本示例展示如何使用用户 Tags 个性化购物车遗弃消息。它基于购物车遗弃教程 示例 Tags 设置:
JSON
{
  "cart_updated": "unix_timestamp_seconds",
  "product_image": "https://i.imgur.com/ssPCfbC.png",
  "product_name": "24 Pack of Acorns",
  "product_quantity": "1",
  "product_price": "$12.99",
  "cart_items_count": "4",
  "cart_url": "https://yourdomain.com/cart"
}

电子邮件模板

1

创建新的电子邮件模板

导航到 Messages > Templates > New Email Template 并打开拖放编辑器。
2

添加布局结构

创建五行:
  • 第 1、2、4 行:一列包含一个 Paragraph
  • 第 3 行:四列包含 HTML | Paragraph | Paragraph | Paragraph
  • 第 5 行:一列包含一个 Button
3

向段落块添加 Liquid

在第 1 行中添加:
Liquid
We're holding onto {{cart_items_count}} items in your cart, but don't wait too long, other squirrels are getting ahead!
在第 2 行中添加用户正在查看内容的描述:
Text
Currently in your cart:
在第 4 行中添加另一个行动号召:
Text
Checkout now while supplies last!
4

显示最近添加的商品

在第 3 行中配置四列:第 1 列(HTML 块):
HTML
<img src="{{product_image}}" alt="Image" style="max-width:100%;" />
第 2–4 列(文本块):
  • 第 2 列:{{product_name}}
  • 第 3 列:{{product_quantity}}
  • 第 4 列:{{product_price}}
5

将购物车 URL 添加到按钮

在第 5 行的 Button 块中,将操作 URL 设置为:
{{cart_url}}
6

测试和预览模板

使用 Test & preview 按钮向自己发送测试邮件。
  • 确保 Tags 已设置在您的电子邮件 Subscription 上。
7

设置模板样式

成功!现在您可以为模板应用自己的样式。请参阅使用拖放设计电子邮件

推送模板

推送通知的空间有限,因此显示一个商品并提及总数量。 消息字段: 使用条件语句显示商品和数量,并确保语法正确。
Liquid
{% assign item_count = cart_items_count | plus: 0 %}
{% if item_count == 1 %}
You left {{product_name}} in your cart.
{% endif %}
{% if item_count == 2 %}
You left {{product_name}} and {{item_count | minus: 1}} more item in your cart.
{% endif %}
{% if item_count > 2 %}
You left {{product_name}} and {{item_count | minus: 1}} more items in your cart.
{% endif %}
图片字段:
Liquid
{{product_image | default: "https://i.imgur.com/ssPCfbC.png"}}
启动 URL 字段:
{{cart_url | default: "https://yourdomain.com/cart"}}
成功!您现在可以创建更多模板并在购物车遗弃 Journey 中使用它们。

相关页面

需要帮助?与我们的支持团队聊天或发送邮件至 support@onesignal.com请包含以下信息:
  • 您遇到的问题详情以及复现步骤(如有)
  • 您的 OneSignal 应用 ID
  • 外部 ID 或订阅 ID(如适用)
  • 您在 OneSignal 控制台中测试的消息 URL(如适用)
  • 任何相关的日志或错误信息
我们很乐意为您提供帮助!