# Настройка высокоскоростной доставки

## Обзор

В Pushwoosh сегменты аудитории определяются с помощью **Segments**.

Для стандартных push-кампаний сегмент компилируется **после** отправки запроса [`/createMessage`](/ru/developer/api-reference/messages-api/#createmessage). Это означает, что может возникнуть небольшая задержка перед отправкой сообщения, особенно если сегмент сложный.

При высокоскоростной доставке сегменты предварительно компилируются каждые 10 минут. Это поддерживает их актуальность и готовность к использованию, поэтому сообщения могут отправляться мгновенно — без ожидания компиляции сегмента.

Высокоскоростная доставка особенно полезна, когда время имеет решающее значение. Например, спортивные организации, такие как УЕФА и ФИБА, могут использовать ее для доставки обновлений в реальном времени, где важна каждая секунда.

В этом руководстве объясняется, как настроить высокоскоростную доставку на примере спортивного приложения. Вы узнаете, как создавать сегменты аудитории для уведомления пользователей о предстоящих матчах и событиях в прямом эфире.

## Зачем нужна высокоскоростная доставка

Предпосылки для использования высокоскоростной доставки спортивными организациями следующие:

* Все матчи запланированы заранее, поэтому вы знаете, когда создавать соответствующие Segments, и можете предварительно скомпилировать сегменты аудитории.
* Каждый матч связан с уникальным ID. Например, ID матча финала Лиги чемпионов — 0123.
* Каждая команда связана с уникальным ID. Например, ID Ювентуса — 111, ID Реал Мадрида — 222 и т.д.
* Существует набор событий в прямом эфире, о которых вы хотели бы уведомить пользователей (голы, составы команд, начало матча и т.д.).

## Настройка

<Aside type="caution" icon="setting" title="Требуется помощь разработчика">
****
Настройка высокоскоростной доставки требует помощи разработчика. Пожалуйста, поделитесь с ним этим руководством для правильной реализации.
</Aside>

Все сегменты для высокоскоростной доставки должны быть созданы заранее — в идеале до начала матча в рассматриваемом примере. Pushwoosh применяет условия сегмента к базе пользователей приложения и **предварительно компилирует сегменты каждые 10 минут** (этот интервал можно настроить).

Когда вы отправляете API-запрос [`/createMessage`](/ru/developer/api-reference/messages-api/#createmessage) с контентом push-уведомления и именем сегмента, у Pushwoosh уже есть предварительно скомпилированный список получателей, что позволяет отправить push-уведомление мгновенно.

<Aside type="caution" title="Важно">
****
Компиляция сегментов ресурсоемка, и ее скорость зависит от:
- сложности условий Segment (количество используемых Tags, высокая кардинальность значений Tag);
- количества уникальных Segments, предварительно компилируемых одновременно;
- количества пользователей, подписанных на приложение.

Поэтому **все Segments для игры должны быть созданы через API до начала игры и удалены после нее**, чтобы свести количество активных предварительно скомпилированных Segments к минимуму и сэкономить вычислительные ресурсы.

</Aside>

### Создание Tags

Сначала создайте набор Tags для применения и установите значения Tag для устройств пользователей.
[Создайте Tags](/ru/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">
Чтобы создать Tags через API, вызовите [`/addTag`](/ru/developer/api-reference/tags/#addtag).
</Aside>

Подписавшись на эти Tags, пользователи приложения могут выбрать, какие уведомления они хотят получать:

- уведомления о конкретном матче (например, матч Ювентус - Реал Мадрид);
- уведомления о матчах любимой команды (например, только матчи Ювентуса);
- уведомления о событиях, происходящих во время матча (например, голы только в матче Ювентус - Реал Мадрид);
- уведомления о конкретных событиях от любимой команды (например, голы и составы матчей Ювентуса).

### Установка Tags

Теперь вы можете заполнить ранее указанные значения Tag через API-запрос [`setTags`](/ru/developer/api-reference/device-api/#settags) и подписать пользователей на определенные категории push-уведомлений.

Например:
Когда пользователь подписывается на получение обновлений о начале матча и голах финала Лиги чемпионов, вызовите [`/setTags`](/ru/developer/api-reference/device-api/#settags) с указанием ID матча:

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

Пользователь будет получать уведомления о начале матча и забитых голах в финале Лиги чемпионов.
Когда пользователь подписывается на получение обновлений о голах и красных карточках матчей Реал Мадрида, вызовите [`/setTags`](/ru/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

Теперь вы можете создать Segments для событий матча на основе Tags и их значений (ID матчей и ID команд). Segments должны быть созданы через API-запрос [`/createFilter`](/ru/developer/api-reference/segmentation-filters-api/#createfilter) за 30 минут до начала матча.

Чтобы уведомить пользователей о голах, забитых в финале Лиги чемпионов из приведенного выше примера, вызовите [`/createFilter`](/ru/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) ИЛИ пользователей, которые следят за Ювентусом или Реал Мадридом (ID команды=111, 222).

Чтобы настроить High-Speed Delivery в вашей панели управления Pushwoosh, [создайте новый Segment](/ru/product/audience-data-and-segmentation/segmentation/create-segments) с соответствующими значениями Tag и свяжите его с приложением, в которое вы собираетесь отправлять push-уведомления. Специфичные для приложения Segments предварительно компилируются каждые 10 минут, чтобы сегменты аудитории всегда были актуальными.

![создайте новый Segment](/push-notifications-high-speed-delivery-1.webp)

Когда происходит событие матча (забит гол, начало матча, красная карточка и т.д.), вызовите [`/createMessage`](/ru/developer/api-reference/messages-api/#createmessage) с контентом push-уведомления и именем Segment:

```json
{
  "request": {
    "application": "AAAAA_00000",
    "auth": "auth_token",
    "notifications": [
      {
        "content": "12’ Juventus goal! Juventus 1 – 0 Real Madrid",
        "filter": "0123_GOAL",
        "send_date": "now"
      }
    ]
  }
}
```

Как только мы получим вызов [`/createMessage`](/ru/developer/api-reference/messages-api/#createmessage), у нас уже будет предварительно скомпилированный список устройств, соответствующих критериям Segment, и мы немедленно отправим уведомление на шлюзы APNs и FCM.

<Aside type="caution" title="Важно">
*****
High-Speed Delivery Segments не поддерживают использование оператора **daysago**. Если вы попытаетесь создать Segment с этим оператором, вы получите сообщение об ошибке.

Это ограничение существует потому, что для правильной работы High-Speed Delivery Segments полагаются на изменения, произошедшие в приложении на устройствах пользователей (например, подписка на push-уведомления или установка определенного значения Tag). Оператор **daysago** не предполагает таких изменений, поэтому Segment не будет работать так, как задумано.
Также обратите внимание, что High-Speed Delivery Segments нельзя использовать с запланированными сообщениями.
</Aside>

## Удаление Segments

После окончания матча все соответствующие Segments должны быть удалены, чтобы вычислительные ресурсы не тратились на дальнейшую перекомпиляцию Segments, которые больше не актуальны, особенно за счет Segments для матчей, запланированных следующими. Удаляйте Segments с помощью API-запроса [`/deleteFilter`](/ru/developer/api-reference/segmentation-filters-api/#deletefilter), например:

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

Чтобы избежать ручного удаления Segments, установите дату истечения срока действия Segment через запрос [`/createFilter`](/ru/developer/api-reference/segmentation-filters-api/#createfilter), чтобы 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
  }
}
```