# High-speed delivery 设置

## 概览

在 Pushwoosh 中，受众细分是通过 **Segments** 定义的。

对于标准推送活动，Segment 是在发送 [`/createMessage`](/zh/developer/api-reference/messages-api/#createmessage) 请求**之后**编译的。这意味着在消息发出之前可能会有短暂的延迟，特别是当 Segment 很复杂时。

使用 High-speed delivery，Segments 每 10 分钟预编译一次。这使得它们保持最新并随时可用，因此可以立即发送消息——无需等待 Segment 编译。

High-speed delivery 在时间至关重要时特别有用。例如，像 UEFA 和 FIBA 这样的体育组织可以使用它来发送每一秒都很重要的实时更新。

本指南以体育应用为例，说明如何设置 High-speed delivery。您将学习如何创建受众 Segment，以通知用户即将到来的比赛和现场事件。

## 为什么要使用 High-speed delivery

体育组织使用 High-speed delivery 的先决条件如下：

*   所有比赛都已提前安排好，因此您知道何时创建相应的 Segments，并可以预编译受众 Segments。
*   每场比赛都关联一个唯一的 ID。例如，冠军联赛决赛的比赛 ID 是 0123。
*   每个球队都关联一个唯一的 ID。例如，尤文图斯 ID 是 111，皇家马德里 ID 是 222 等。
*   有一组您希望通知用户的现场事件（进球、阵容、开球等）。

## 设置

<Aside type="caution" icon="setting" title="需要开发人员协助">
**** 
设置 High-speed delivery 需要开发人员的协助。请与他们分享本指南以进行正确的实施。
</Aside>

所有用于 High-speed delivery 的 Segments 应提前创建——在示例用例中，最好在比赛开始前创建。Pushwoosh 将 Segment 条件应用于应用的用户群，并**每 10 分钟预编译一次 Segments**（此间隔可调整）。

当您发送包含推送内容和 Segment 名称的 [`/createMessage`](/zh/developer/api-reference/messages-api/#createmessage) API 请求时，Pushwoosh 已经拥有预编译的接收者列表，允许立即发送推送通知。
<Aside type="caution" title="重要">
****
Segment 编译非常消耗资源，其速度取决于：
- Segment 条件的复杂性（使用的 Tags 数量，Tag 值的高基数）；
- 同时预编译的唯一 Segments 数量；
- 订阅应用的用户数量。

因此，**一场比赛的所有 Segments 必须在比赛开始前通过 API 创建，并在比赛结束后删除**，以将活跃的预编译 Segments 数量保持在最低水平并节省计算资源。

</Aside>

### 创建 Tags

首先，创建一组要应用的 Tags，并设置用户设备的 Tag 值。
[创建 Tags](/zh/product/audience-data-and-segmentation/user-data-tags/tags/)（LIST 类型），对应现场比赛事件，如 **kickoff（开球）、goal（进球）、red card（红牌）** 等。

例如：
**MATCH-KICKOFF, MATCH-GOAL, MATCH-RED\_CARD**
![创建 Tags](/push-notifications-high-speed-delivery-2.webp)

创建描述球队现场比赛事件的同一组 Tags。
例如：
**TEAM-KICKOFF, TEAM-GOAL, TEAM-RED\_CARD**

<Aside type="tip">
要通过 API 创建 Tags，请调用 [`/addTag`](/zh/developer/api-reference/tags/#addtag)。
</Aside> 
 
通过订阅这些 Tags，应用用户可以选择他们希望接收的通知：

- 关于特定比赛的通知（例如，尤文图斯 - 皇家马德里比赛）；
- 关于喜爱球队比赛的通知（例如，仅尤文图斯比赛）；
- 关于比赛期间发生的事件的通知（例如，仅尤文图斯 - 皇家马德里比赛中的进球）；
- 关于喜爱球队特定事件的通知（例如，尤文图斯比赛的进球和阵容）。

### 设置 Tags

现在，您可以通过 [`setTags`](/zh/developer/api-reference/device-api/#settags) API 请求填充先前指定的 Tag 值，并订阅用户到特定类别的推送通知。

例如：
当用户订阅接收冠军联赛决赛开球和进球更新时，调用包含比赛 ID 的 [`/setTags`](/zh/developer/api-reference/device-api/#settags)：

```javascript
{
  "request": {
    "application": "app_code",
    "hwid": "device_hardware_id",
    "tags": {
      "MATCH_KICKOFF": "0123", // match ID
      "MATCH_GOAL": "0123"     // match ID
    }
  }
}
```

用户将收到关于冠军联赛决赛开球和进球的通知。
当用户订阅接收皇家马德里比赛的进球和红牌更新时，按如下方式调用 [`/setTags`](/zh/developer/api-reference/device-api/#settags)：

```javascript 
{
  "request": {
    "application": "app_code",
    "hwid": "device_hardware_id",
    "tags": {
      "TEAM_KICKOFF": "222", // team ID
      "TEAM_GOAL": "222"     // team ID
    }
  }
}

```
只要皇家马德里在比赛，该用户就会收到关于开球和进球的通知。

### 创建 Segments

现在，您可以根据 Tags 及其值（比赛 ID 和球队 ID）为比赛事件创建 Segments。Segments 应在比赛开始前 30 分钟通过 [`/createFilter`](/zh/developer/api-reference/segmentation-filters-api/#createfilter) API 请求创建。

要通知用户上述示例中冠军联赛决赛的进球，请使用以下参数调用 [`/createFilter`](/zh/developer/api-reference/segmentation-filters-api/#createfilter)：
**Segment 名称**：0123_GOAL
**Segment 条件**：`#TEAM-GOAL(111, 222) OR #MATCH-GOAL(0123)`

```javascript
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL",
    "conditions": [
      ["TEAM-GOAL", "IN", ["111", "222"]],
      ["MATCH-GOAL", "IN", ["0123"]]
    ],
    "operator": "OR", // optional. Operator values: 'AND', 'OR'
    "application" : "AAAAA-00000"
  }
}
```
此请求将编译订阅了冠军联赛决赛（比赛 ID=0123）进球更新的用户 Segment，或者关注尤文图斯或皇家马德里（球队 ID=111, 222）的用户 Segment。

要在 Pushwoosh 控制面板中设置 High-Speed Delivery，请[创建一个新 Segment](/zh/product/audience-data-and-segmentation/segmentation/create-segments)，使用相应的 Tag 值，并将其关联到您要发送推送的应用。特定于应用的 Segments 每 10 分钟预编译一次，以保持受众 Segments 始终更新。

![创建一个新 Segment](/push-notifications-high-speed-delivery-1.webp)

当比赛事件发生时（进球、比赛开球、红牌等），调用包含推送通知内容和 Segment 名称的 [`/createMessage`](/zh/developer/api-reference/messages-api/#createmessage)：

```javascript 
{
  "request": {
    "application": "AAAAA_00000",
    "auth": "auth_token",
    "notifications": [
      {
        "content": "12’ Juventus goal! Juventus 1 – 0 Real Madrid",
        "filter": "0123_GOAL",
        "send_date": "now"
      }
    ]
  }
}
```
一旦我们收到 [`/createMessage`](/zh/developer/api-reference/messages-api/#createmessage) 调用，我们就已经拥有符合 Segment 标准的预编译设备列表，并立即向 APNs 和 FCM 网关发送通知。
<Aside type="caution" title="重要">
*****
High-Speed Delivery Segments 不支持使用 **daysago** 运算符。如果您尝试使用此运算符创建 Segment，将会收到错误消息。

存在此限制是因为，为了正常运行，High-Speed Delivery Segments 依赖于用户设备上应用中发生的更改（例如订阅推送通知或设置特定 Tag 值）。**daysago** 运算符不涉及此类更改，因此 Segment 将无法按预期工作。
另外，请注意 High-Speed Delivery Segments 不能用于定时消息。
</Aside>

## 删除 Segments 
比赛结束后，应删除所有相应的 Segments，以免计算资源浪费在重新编译不再相关的 Segments 上，特别是以牺牲接下来安排的比赛的 Segments 为代价。通过 [`/deleteFilter`](/zh/developer/api-reference/segmentation-filters-api/#deletefilter) API 请求删除 Segments，例如：

```javascript
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL"
  }
}

```
为避免手动删除 Segments，请通过 [`/createFilter`](/zh/developer/api-reference/segmentation-filters-api/#createfilter) 请求设置 Segment 过期日期，以便 Segment 在指定日期自动删除：

```javascript
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL",
    "conditions": [
      ["TEAM-GOAL", "IN", ["111", "222"]],
      ["MATCH-GOAL", "IN", ["0123"]]
    ],
    "operator": "OR",  // optional. Values: 'AND', 'OR'
    "application": "AAAAA-00000",
    "expiration_date": "YYYY-MM-DD"  // optional. Segment (Filter) expiry
  }
}
```