OneSignal 提供多种方式来大规模个性化消息内容。本指南重点介绍在 OneSignal 控制面板中使用动态内容与 CSV 上传功能,适用于推送、邮件和短信。
主要优势:
- 使用 CSV 大规模个性化 – 一条消息,为每个人提供定制体验
- 多语言支持 – 根据用户自动切换语言
- 动态分段 – 内容根据用户属性(语言、地区、营销活动 ID)进行调整
- 团队协作 – 非技术用户在 CSV 文件中编辑内容
- 跨渠道兼容性 – 跨渠道重用 CSV 逻辑
常见用例:
- 多语言引导或营销
- 特定地区的促销活动
- 按位置发布活动通知
- 基于营销活动的个性化
使用 CSV 的动态内容设置步骤
快速参考:
- 创建包含内容变化的 CSV 文件。
- 使用 Liquid 语法中的
dynamic_content 属性将 CSV 数据映射到消息。
- 从 OneSignal 控制面板创建新消息或模板。
- 选择动态内容或个性化按钮。
- 上传 CSV 文件并发送消息。
CSV 要求和设置
- 文件大小: 小于 200 KB
- 列标题:
- 为标签键保留第一列标题,或留空以引用部分
- 仅限字母数字字符和下划线
- 使用下划线(
_)代替空格
- 编码: UTF-8
从空白 CSV 开始或使用提供的模板。在消息和模板编辑器中选择动态内容或个性化按钮时会提供模板。
可用模板:
- 多语言 – 按语言本地化内容
- 内容个性化 – 按数据标签自定义内容
CSV 示例
本指南将使用以下示例 CSV 数据。
- 将列标题映射到您的支持的语言代码。
- 为每种语言代码在每行中添加您的翻译。
- 如果您有多个部分(如在邮件中),请将第一列指定为部分名称。
在此示例中:
- 我们有 3 种语言:英语、西班牙语和法语。
- 我们有 2 个部分:“section_1” 和 “section_2”。
- 将第一列标题映射到标签键,将基础行映射到您想要引用的值。有关向用户添加标签的更多信息,请参阅标签。
- 将其余列标题映射到您想要个性化的部分或组件。
在此示例中:
- 我们有一个标签键:
campaign_id,可能的值为 A 和 B。
- 我们有 2 个部分或组件:“title”、“message” 和 “url”。
重要: 从 CSV 标题中删除空格和非字母数字字符
或在 Liquid 中使用哈希记法。
将 CSV 数据映射到消息内容
使用 Liquid 语法,在消息中使用 dynamic_content 属性引用 CSV 数据:
{{dynamic_content.file_name.message_component[user_property]}}
或
{{dynamic_content.file_name[user_property].message_component}}
参数:
dynamic_content – 用于引用 CSV 数据的属性名称
file_name – CSV 文件名(不含 .csv 扩展名)
message_component – 您想要个性化的特定消息组件。这是 CSV 列标题或第一行中的静态文本。
user_property – 您想要引用的用户属性。
后备内容:
始终使用硬编码字符串 default 后备内容,以确保如果 CSV 查找或动态内容失败时消息能够呈现。
{{ dynamic_content.my_template.header[user.language] | default: "欢迎查看我们的最新更新" }}
这意味着如果 CSV 查找或动态内容失败,消息将呈现后备文本 "欢迎查看我们的最新更新"。
这确保:
- 可用时使用动态内容
- 如果动态内容失败,显示硬编码消息
- 用户永远不会收到空白内容
,en,es,fr
section_1,Hello,Hola,Bonjour
section_2,Thanks for shopping with us...,Gracias por comprar con nosotros...,Merci pour votre achat avec nous...
file_name 是 translations.csv。
message_component 位于第一列的行中 section_1 和 section_2。
user_property 是与语言代码匹配的列标题。我们可以使用 user.language 属性在用户上引用它。
{{dynamic_content.translations.section_1[user.language]}}
{{dynamic_content.translations.section_2[user.language]}}
(推荐)带默认后备的多语言消息 Liquid 语法
{% assign supported_langs = "en,es,fr,de" | split: "," %}
{% assign lang = user.language | default: "en" %}
{% unless supported_langs contains lang %}
{% assign lang = "en" %}
{% endunless %}
{{ dynamic_content.translations.section_1[lang] | default: "Hello" }}
{{ dynamic_content.translations.section_2[lang] | default: "Thanks for shopping with us..." }}
content_personalization_template.csv
campaign_id,title,message,url
campaign_123,Flash deal for you,Tap to claim,https://example.com/flash
campaign_456,Weekend picks are here,See what's trending,https://example.com/weekend
default,Our latest offers,See what's new,https://example.com
file_name 是 content_personalization_template.csv。
user_property 映射到标签键:campaign_id。
message_component 是映射到您想要个性化的消息部分的列标题(title、message 或 url)。
{{ dynamic_content.content_personalization_template[campaign_id].title }}
{{ dynamic_content.content_personalization_template[campaign_id].message }}
{{ dynamic_content.content_personalization_template[campaign_id].url }}
(推荐)带默认后备的内容个性化消息 Liquid 语法
{% assign cid = campaign_id | default: "default" %}
{% unless dynamic_content.content_personalization_template[cid] %}
{% assign cid = "default" %}
{% endunless %}
{{ dynamic_content.content_personalization_template[cid].title | default: "我们的最新优惠" }}
{{ dynamic_content.content_personalization_template[cid].message | default: "查看新内容" }}
{{ dynamic_content.content_personalization_template[cid].url | default: "https://example.com" }}
使用带有 default 后备的 Liquid 来更新主题行、预标题、按钮
标签和 URL。
使用注意事项
如何测试使用 CSV 的动态内容?
我们建议使用邮件来测试消息的多个变体。
- 您可以在邮件中使用
+ 地址来测试多个变体:username+test@example.com
- 按照上述多语言和内容个性化示例设置标签。
- 有关上传多个用户和数据标签的更多信息,请参阅导入。
何时使用动态内容与 CSV vs. 其他个性化选项
- 如果您从控制面板发送消息并可以使用 CSV 文件访问用户数据,请使用使用 CSV 的动态内容。
- 有关向消息添加动态内容的其他选项,请参阅**消息个性化**或多语言消息选项。
更新模板
通过控制面板重新上传 CSV 或使用更新模板 API dynamic_content 属性。
键中的特殊字符
哈希记法(用于非字母数字键):
{{ dynamic_content.file_name["!the_row!"]["&the_column&"] }}
点记法(用于标准键):
{{ dynamic_content.file_name.the_row.the_column }}
相关文章