> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 数据仓库、DMP 和 CRM 集成

> 将您的 CRM、数据库或 DMP 与 OneSignal 集成，以触发个性化的实时通知并大规模同步用户消息数据。

将 OneSignal 连接到您的内部系统（如数据仓库、CRM 或数据管理平台 (DMP)）可解锁实时、个性化和可扩展消息传递的强大功能。无论您使用的是 Salesforce、自定义用户系统还是其他平台，集成都能让您：

* 使用实时数据发送个性化、时间敏感的消息
* 在系统之间同步用户属性和消息数据
* 从您系统中的用户操作触发自动化 [Journeys](./journeys-overview)
* 使用您的内部系统作为真实来源，同时利用 OneSignal 的消息传递基础设施

<Frame caption="数据库集成">
  <img src="https://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/3a0f52f88c855832e2f2185aa456925c300ed7c2d13446f52802cbda474c3570-Screenshot_2024-10-08_at_15.27.28.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=4887fb763f121365fbdf803e3b298d3b" alt="显示数据库与 OneSignal 之间数据流的图表" width="747" height="537" data-path="images/docs/3a0f52f88c855832e2f2185aa456925c300ed7c2d13446f52802cbda474c3570-Screenshot_2024-10-08_at_15.27.28.png" />
</Frame>

***

## 集成指南

OneSignal 与许多热门平台具有直接集成。请查看集成页面，了解您的平台是否受支持——如果支持，请按照该设置指南进行操作。

<Card title="集成" icon="plug" href="./integrations">
  浏览 OneSignal 与 CRM、数据仓库、分析工具等的所有可用集成。
</Card>

如果您的平台未列出，请按照以下步骤通过 OneSignal REST API 进行集成。

### 第一步：使用 External ID 识别用户

OneSignal 的 [`external_id`](./users) 是 OneSignal 与您的数据库之间的关键链接。在 OneSignal 中为每个用户设置 `external_id`，使其与您数据库中的用户 ID 匹配。这使您能够使用已有的标识符来定位用户、同步数据和触发消息。

如果您使用多个 OneSignal 应用（例如，iOS、Android 和 Web 的独立应用），在所有应用中设置相同的 `external_id` 可在各平台上识别同一用户。

如果您有匿名用户或没有用于跨系统追踪用户的稳定用户 ID，您可以使用 OneSignal 的 `onesignal_id` 或 `subscription_id`。但是，我们建议在用户稳定且可识别时设置 `external_id`。

`onesignal_id` 和/或 `subscription_id` 可通过 Create user API 响应以及使用 [Observer 方法](./mobile-sdk-reference#addobserver-push-subscription-changes)的移动和 Web SDK 获取。

#### 纯 API 设置

如果您仅将 OneSignal 用于电子邮件和短信/RCS（没有移动应用或网站），您可以完全通过 REST API 管理用户：

* [Create user](/reference/create-user) — 使用 `external_id`、电子邮件地址和/或电话号码创建用户
* [Update user](/reference/update-user) — 更新用户属性和订阅

无需安装 SDK。您的后端直接将用户数据发送到 OneSignal。

**SDK 设置**

如果您有移动应用或网站，请使用 OneSignal 的前端 SDK 来捕获推送通知令牌并设置 `external_id`：

1. 为您的平台安装 [OneSignal SDK](./mobile-sdk-setup)。
2. 在用户于您的应用中进行身份验证后，使用用户的 `external_id` 调用 `login`。
3. SDK 自动捕获推送令牌并将其与用户关联。

***

### 第二步：同步用户数据和事件

用户身份设置完成后，您可以从您的系统向 OneSignal 同步两种类型的数据：

**标签** — 持久用户属性

[标签](./add-user-data-tags)在 OneSignal 中存储用户属性，用于细分和[消息个性化](./message-personalization)。将其用于描述用户身份的数据，例如计划类型、首选语言或注册日期。

* 通过 [Update user](/reference/update-user) API 或前端 SDK 设置标签
* 标签在用户上持续存在，直到您更新或删除它们
* 使用标签构建[细分](./segmentation)并[个性化消息内容](./message-personalization)

**自定义事件** — 用户操作

[自定义事件](./custom-events)代表用户执行的操作，例如 `completed_purchase`、`viewed_page` 或 `subscription_expired`。使用它们触发自动化 [Journeys](./journeys-overview)。

* 通过我们的 API 或前端 SDK 发送自定义事件
* 自定义事件不像标签那样持久保存，但可用于触发 Journeys 和消息个性化

### 第三步：导出消息和参与数据

要将投递和参与数据同步回您的系统：

* **[Event Streams](./event-streams)** — （推荐）消息事件（已发送、已投递、已点击等）的实时 Webhook 投递。最适合在事件发生时保持数据库同步。
* **[Export subscriptions CSV](/reference/csv-export)** — 批量导出订阅数据，用于定期同步或迁移。
* **[View messages API](/reference/view-messages)** — 以编程方式查询消息历史记录和投递统计数据。

***

## 架构建议

* **将您的数据库作为真实来源。** 将 OneSignal 视为消息传递层——将用户数据和事件推送到 OneSignal，并提取投递/参与数据。
* **使用 API 进行实时更新。** 当用户执行某项操作（例如，完成购买）时，立即调用 OneSignal API 以更新标签或发送自定义事件。
* **使用 CSV 导入进行批量操作。** 对于初始入驻或大型迁移，使用 [CSV 导入](./import)而不是进行数千次单独的 API 调用。
* **遵守[速率限制](/reference/rate-limits)。** 对于高量更新，尽可能批量处理请求，并实现带指数退避的重试逻辑。
* **使用 Event Streams 作为返回路径。** 不要轮询 OneSignal API 获取投递数据，而是设置 [Event Streams](./event-streams) 接收消息事件的实时 Webhook。

***

## 从您的数据库触发消息

您可以使用两种方法触发消息——根据您的用例选择一种或两种。

<Tabs>
  <Tab title="API">
    使用 [Create message](/reference/create-message) API 进行即时的事务性消息传递。

    通过以下方式定位用户：

    * `external_id`
    * 别名（例如，`crm_id`）
    * 电子邮件或电话号码

    最适合：

    * [事务性消息](./transactional-messages)（例如，收据、警报）
    * 时间敏感或个性化通知
    * 定位个人或群体（每次调用最多 20,000 个用户）

    您还可以使用 `send_after` 参数安排消息。
  </Tab>

  <Tab title="标签和 Journeys">
    使用[标签](./add-user-data-tags)构建动态用户细分。

    通过以下方式发送消息：

    * 通过 API 定位细分或过滤器
    * 通过控制台手动发送
    * 使用 [Journeys](./journeys-overview) 进行自动化消息传递

    最适合：

    * 营销活动（促销、重新参与）
    * 计划或生命周期消息
    * 赋能非技术团队运行活动
  </Tab>

  <Tab title="自定义事件和 Journeys">
    使用[自定义事件](./custom-events)根据用户操作触发 [Journeys](./journeys-overview)，可通过 API 发送或从[支持的数据仓库集成](./integrations)同步。

    有关更多信息，请参阅[自定义事件](./custom-events)。
  </Tab>
</Tabs>

***

## 常见问题

### 我应该使用 API 还是 Journeys 从数据库发送消息？

对于收据或警报等即时事务性消息，使用 [Create message](/reference/create-message) API。对于受益于可视化工作流构建的自动化生命周期和营销消息，请使用带有[标签](./add-user-data-tags)或[自定义事件](./custom-events)的 [Journeys](./journeys-overview)。

### 我应该在 OneSignal 和自己的系统中分别存储哪些数据？

根据数据的用途决定：

**在 OneSignal 中存储什么**

* 存储直接用于消息传递的数据：
  * `external_id` 和别名
  * 电子邮件（用于电子邮件消息传递）
  * 电话号码（用于短信）
  * 轻量级用户属性作为[标签](./add-user-data-tags)
  * 您希望发送消息的关键事件作为[自定义事件](./custom-events)

<Note>
  OneSignal 支持[消息个性化](./message-personalization)中详述的多种消息个性化方式。
</Note>

**在自己的系统中保留什么**

* 在自己的系统中保留与消息传递无关的数据（例如，完整的用户档案、交易日志），以获得性能、隐私和控制。从 OneSignal 归档消息历史记录以进行长期分析或合规。

### 我可以向没有 External ID 的用户发送消息吗？

可以，但需要额外处理。您可以使用 OneSignal 的 `onesignal_id` 或 `subscription_id`，但在链接到 `external_id` 之前这些是匿名的。我们建议为每个用户设置 `external_id` 以简化跨系统识别。

### 标签和自定义事件的区别是什么？

[标签](./add-user-data-tags)是用于细分和个性化的持久用户属性（例如，计划类型、语言偏好）。[自定义事件](./custom-events)代表用于触发 [Journeys](./journeys-overview) 的一次性用户操作（例如，`completed_purchase`）。标签描述用户是谁；自定义事件描述用户做了什么。

***

<Columns cols={2}>
  <Card title="用户" icon="user" href="./users">
    了解 OneSignal 用户模型以及身份的结构方式。
  </Card>

  <Card title="自定义事件" icon="bolt" href="./custom-events">
    从您的系统发送事件以触发 Journeys 并追踪用户行为。
  </Card>

  <Card title="消息个性化" icon="wand-magic-sparkles" href="./message-personalization">
    使用标签、自定义数据和动态内容个性化消息。
  </Card>

  <Card title="Journeys" icon="route" href="./journeys-overview">
    构建由用户行为和数据触发的自动化消息传递工作流。
  </Card>
</Columns>
