Skip to main content
数据源让您在发送时直接从您的 API 拉取实时数据到消息中。这让您可以提供高度个性化的内容,而无需预先将数据加载到 OneSignal 中。 当您的数据经常变化时,请使用数据源,例如:
  • 用户当前的奖励余额
  • 最新订单状态
  • 个性化产品推荐
其他个性化方法(如标签动态内容)适用于静态数据。数据源最适合实时、快速变化的值
数据源目前仅适用于通过 Journeys 发送的电子邮件消息。 需要其他渠道?填写这份简短调查

数据源的工作原理

  1. 创建数据源 – 配置 OneSignal 如何连接到您的 API。
  2. 将数据源附加到消息模板。
  3. 使用 Liquid 语法在消息中插入响应字段
  4. 在发送时,OneSignal 为每个收件人进行 API 调用,解析响应,并将数据注入到您的消息中。

示例:显示奖励积分

假设您想向每个客户显示他们的奖励余额:
当 Sarah 收到这封电子邮件时,Liquid 变量将被替换为她实际的积分余额和会员状态。以下各节将逐步介绍如何设置此示例。

创建和使用数据源

1. 设置您的数据源配置

在侧边栏中导航至数据 > 数据源,查看现有数据源列表并创建新的数据源。 每个数据源必须具有:
  • 名称:描述性名称,如”客户奖励 API”,帮助您区分数据源。建议使用唯一名称,但不是必需的。
  • 别名:像 rewards 这样的简短标识符,用于 Liquid 语法(例如 {{ data_feed.rewards.points }})。必须唯一,小写字母数字字符,不含空格或特殊字符。
  • 方法:OneSignal 联系您的 API 所使用的 HTTP 方法。通常为 GET,但也支持 POST
  • URL:您的 API 端点。支持 Liquid 语法,使 OneSignal 能够获取特定用户的数据。
例如,您的奖励端点可能接受用户的 external_id(存储在 OneSignal 中)作为 URL 参数:
  • 标头:您的 API 所需的键值对(例如身份验证令牌)。支持 Liquid 语法。
  • 请求体:可选的 JSON 请求体。支持 Liquid 语法,与 Journey Webhooks 相同。
例如,您的 API 可能要求在请求体中传入用户 ID,而不是在 URL 中:
完整的数据源配置如下所示:
Data Feed configuration showing name, alias, method, URL, and headers

数据源配置示例

在投入生产之前测试您的数据源。数据源测试针对您的测试订阅运行,因此请确认这些订阅具有能从您的 API 返回真实结果的属性。
最后,激活您的新数据源,使其准备好使用。

2. 将数据源附加到您的消息模板

将您的数据源附加到消息模板,让 OneSignal 知道要使用它。
  1. 导航至消息 > 模板
  2. 在消息部分,选择个性化按钮
Personalization button in the message template editor

个性化按钮选项

  1. 打开数据源并选择您的数据源
Data Feeds toggle and feed selector in the message composer

消息编辑器中的数据源部分

  1. 保存您的模板

3. 在消息中使用数据

使用 Liquid 语法在消息中的任何地方插入响应数据。继续奖励示例,对于 Sarah(其 external_ida1-b2c3)的 API 响应可能如下所示:
要插入积分数量和状态级别,使用点表示法引用数据源别名和响应字段:
这告诉 OneSignal:
  • 使用数据源
  • 使用 rewards 数据源
    • 请记住:rewards 数据源知道用收件人的 external_id 调用 API
  • 从响应中,插入 points 项的值(193)和 status_level 项的值(Gold)

要求和限制

您的 API 需要:
  • 接受单步身份验证,在标头中使用身份验证令牌
  • 快速响应。 推荐在 250 毫秒以内(这直接影响发送速度)
  • 返回 JSON。 目前不支持其他格式。
  • 处理您的发送量。 如果您的 API 速率限制较低,会减慢消息投递速度。
  • 返回合理大小的负载。 建议保持响应在 50 KB 以下以获得最佳性能。
当前限制:
  • 每个模板一个数据源。 在单次 API 响应中获取您需要的所有数据。
  • 每个数据源每条消息一次 API 调用。
  • 仅限 Journeys。 尚未适用于其他发送方法。
  • 没有链式调用。 一个数据源的负载不能用于调用另一个数据源。
需要每个模板支持多个数据源或其他渠道的支持?分享您的用例以帮助确定这些功能的优先级。

设置您的 API

在创建数据源之前,确保您的 API 能够处理以下要求:

身份验证

您的 API 应通过标头接受身份验证:

JSON 请求体

如果您需要在请求中包含请求体,您的 API 应接受 JSON。这可能意味着您的标头需要包含 Content-Type: application/json

JSON 响应

您的 API 应返回 JSON 对象。通常这意味着您的标头将包含 Accept: application/json

个性化参数

您通常会在 URL 中传递用户标识符,如下所示:
和/或在请求体中:
确保这些数据在 OneSignal 中存在(通常作为标签,但也有其他选项,如自定义事件属性)。

速率限制

考虑您的 API 速率限制。向 10,000 个用户发送意味着快速连续进行 10,000 次 API 调用。确保您的 API 能够处理此数量。

错误处理

如果您的 API 返回错误或没有用户数据,消息不会发送给该收件人。确保您的 API 为所有预期用户返回数据。

入门清单

在实施数据源之前,请回答以下问题:
  • 我想在消息中显示什么数据?从包含要从 API 填充的项目的简单大纲开始,有助于整理思路。
  • 这些数据是否可以通过单个 API 端点获得?
  • 我将如何验证 API 请求?
  • 我将使用什么标识符或其他数据项来获取个性化数据?
  • 该标识符是否已经存储在 OneSignal 中?如果没有,将如何填充?
  • 我的 API 能否处理我将产生的请求量?
  • 如果我的 API 没有用户数据会怎样?

示例和高级用例

数据源可以与 Liquid 语法结合使用,或与其他功能创造性地结合使用,以产生更复杂的个性化效果。
假设您有一个数据源 cart,它返回用户购物车中的商品数组,以及购物车的总金额:
如果您想显示购物车中的每个商品以及购物车总额,您可以在 Liquid 中使用 for 循环:
这将产生:
如果您使用电子邮件块编辑器,当插入这种复杂的 Liquid 语法时,特别是如果您需要包含图像或链接,最好使用自定义 HTML 块元素以获得最佳结果。
想了解如何使用自定义事件触发此废弃购物车邮件?请查看自定义事件属性标签页了解完整工作流程。

常见问题

我的数据源值未出现在消息中,应检查什么?

按顺序检查以下内容:
  1. 数据源已附加到模板(在个性化 > 数据源下)。
  2. 您的 Liquid 语法与 JSON 响应结构完全匹配——{{ data_feed.<alias>.<field> }}
  3. 使用相同标识符手动调用 API 端点时返回有效 JSON。
  4. 收件人在 OneSignal 中存储了所需的标识符(例如 external_id)。

为什么消息发送缓慢?

数据源 API 调用在发送时对每个收件人运行。如果您的 API 响应缓慢或无法处理并发请求,消息投递速度会成比例降低。目标响应时间在 250 毫秒以内,并确保您的基础设施能够处理您的发送量。

为什么某些收件人没有收到消息?

如果某个收件人的数据源 API 调用失败——由于 404、超时或数据缺失——OneSignal 将完全跳过该收件人。请检查数据源配置中的错误日志以及您自己的 API 日志中的失败情况。验证这些用户在 OneSignal 中是否具有所需的标识符。

我能在一个模板中使用多个数据源吗?

目前不支持。每个模板支持一个数据源。在单次 API 响应中获取您需要的所有数据。如果您需要多个数据源,请分享您的用例

数据源是否适用于推送通知或短信?

否。数据源目前仅适用于通过 Journeys 发送的电子邮件消息。计划支持其他渠道——分享您的用例以帮助确定优先级。

如果我的 API 在消息发送时宕机会怎样?

OneSignal 将跳过任何数据源调用失败的收件人。消息不会发送给该收件人,也不会插入任何回退值。请在计划发送期间监控您的 API 正常运行时间和错误率。

相关页面

Liquid 语法

OneSignal 消息中 Liquid 模板的完整参考。

Journeys

构建触发数据源电子邮件的自动化消息工作流程。

自定义事件

触发 Journeys 并传递事件属性以用于数据源 URL。

消息个性化

所有个性化方法的概述——标签、Liquid、动态内容和数据源。