OneSignal 提供多种方式来大规模个性化消息内容 。本指南重点介绍在 OneSignal 控制面板中使用动态内容与 CSV 上传功能,适用于推送、邮件和短信。
主要优势:
使用 CSV 大规模个性化 – 一条消息,为每个人提供定制体验
多语言支持 – 根据用户自动切换语言
动态个性化 – 内容根据用户属性(语言、地区、营销活动 ID)进行调整
团队协作 – 非技术用户在 CSV 文件中编辑内容
HTML 注入(邮件) – 在 CSV 单元格中包含 HTML 标记,以动态构建丰富的邮件内容
跨渠道兼容性 – 跨渠道重用 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。
有 3 个组件:“title”、“message” 和 “url”。
重要: 从 CSV 标题中删除空格和非字母数字字符
或在 Liquid 中使用哈希记法。
将 CSV 数据映射到消息内容
使用 Liquid 语法 ,在消息中使用 dynamic_content 属性引用 CSV 数据:
<!-- 选项 1:先按组件访问 -->
{{ dynamic_content . file_name . message_component [user_property] }}
<!-- 选项 2:先按用户属性访问 -->
{{ 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 单元格中使用 HTML(仅限邮件)
您可以在 CSV 单元格中直接包含 HTML 标记,将富内容注入邮件。这对于根据用户属性替换邮件整个部分(如横幅、CTA 或样式块)非常有用。
campaign_id, banner_html
spring_sale, <div style="background:#4CAF50;padding:16px;text-align:center;"><a href="https://example.com/spring" style="color:#fff;font-size:18px;">Shop the Spring Sale</a></div>
default, <div style="background:#333;padding:16px;text-align:center;"><a href="https://example.com" style="color:#fff;font-size:18px;">See What's New</a></div>
在您的邮件模板中引用 HTML 单元格:
{{ dynamic_content . promo_banners [campaign_id]. banner_html | default: "<p>Check out our latest offers</p>" }}
HTML 直接在邮件正文中渲染,因此您可以使用邮件客户端支持的任何内联样式和标记。
CSV 单元格中的 HTML 仅在邮件中受支持。推送和短信渠道将内容渲染为纯文本,不解析 HTML 标记。
更新模板
通过控制面板重新上传 CSV 或使用更新模板 API dynamic_content 属性。
键中的特殊字符
哈希记法 (用于非字母数字键):
{{ dynamic_content . file_name [ "!the_row!" ][ "&the_column&" ] }}
点记法 (用于标准键):
{{ dynamic_content . file_name . the_row . the_column }}
常见问题
如何测试使用 CSV 的动态内容?
使用邮件来测试消息的多个变体。
在邮件中使用 + 地址来测试多个变体:username+test@example.com。
按照上述多语言和内容个性化示例设置标签。
有关上传多个用户和数据标签的更多信息,请参阅导入 。
何时使用动态内容与 CSV vs. 其他个性化选项?
从控制面板发送消息且 CSV 文件中有用户数据时,使用动态内容与 CSV 。有关向消息添加动态内容的其他方法,请参阅消息个性化 或多语言消息 。
相关文章
消息个性化 OneSignal 中所有个性化选项的概述。
使用 Liquid 语法 OneSignal 消息的完整 Liquid 语法参考。