# API & Webhooks

## Рассылки по аудитории: описание API & Webhooks

***

* [Работа с API](#rabota-s-api)
  * [OAuth-авторизация](#oauth-avtorizaciya)
  * [Формат запросов](#format-zaprosov)
* [Методы API](#metody-api)
  * [Метод для создания рассылки](#sozdanie-rassylki)
  * [Метод для получения списка рассылок](#spisok-rassylok)
  * [Метод для получения информации о рассылке](#informaciya-o-rassylke)
  * [Метод подсчета статистики для рассылки (Устаревший)](#podschet-statistiki)
  * [Метод для остановки запущенной рассылки](#ostanovka-rassylki)
* [Вебхуки](#vebkhuki)
  * [Инструкция по настройке уведомлений](#nastroika-uvedomlenii)
  * [Описание события MAILING\_STATE](#mailing_state)
  * [Описание события MAILING\_REACTION ](#mailing_reaction)

***

## Работа с API

### OAuth-авторизация

Для работы с Fasttrack API вам понадобится уникальный `access_token`, которым необходимо передавать в заголовке для каждого запроса. Следуйте инструкции ниже, чтобы получить ключ доступа для вашего проекта:

{% hint style="info" %}
**Важно!** Временно, приложения клиентов для использования API Fasttrack, регистрируются вручную, через менеджеров проекта.
{% endhint %}

**Шаг 1: Подготовить `redirect_uri`**

`redirect_uri` — это URL, на который сервер перенаправит вас после успешной авторизации, передавая временный код (`code`). Этот код затем используется приложением для обмена на ключ доступа (`access_token`).

**Шаг 2: Зарегистрировать приложение**&#x20;

Сообщите менеджеру о том, что планируете использовать Fasttrack API и предоставьте `redirect_uri` для регистрации вашего приложения.

Данные о приложении, которые вы получите:

| `client_id`     | Идентификатор вашего приложения.  |
| --------------- | --------------------------------- |
| `client_secret` | Защищённый ключ вашего приложения |

{% hint style="danger" %}
**Внимание!** Параметр `client_secret` используется для идентификации и подтверждения подлинности вашего приложения в процессе OAuth-авторизации. Этот параметр является конфиденциальным и должен защищаться так же строго, как и пароли.
{% endhint %}

**Шаг 3: Получить временый код авторизации**

Сформируйте URL следующего вида:

```
https://dashboard.fstrk.io/integrations/oauth/?{параметры}
```

После знака `?` в URL укажите следующие параметры:

* **`client_id`** <mark style="color:red;">\*</mark> – Идентификатор вашего приложения;
* **`redirect_uri`** <mark style="color:red;">\*</mark> – URL для получения временного кода авторизации
* **`state`** – Произвольная строка, которая будет передана вместе с кодом.

Пример URL:

{% code overflow="wrap" %}

```
https://dashboard.fstrk.io/integrations/oauth/?client_id=1&redirect_uri=https://example.com/oauth/&state=dummy
```

{% endcode %}

Перейдите по ссылке. Вы попадете на страницу со списком доступных проеков (их может быть несколько). Выберите проект для которого планируете получить `access_token`.

Браузер переадресует вас обратно на URL, указанный в параметре `redirect_uri` с добавлением параметров `state` и временного кода авторизации (`code`).

**Шаг 5: Получить** **`access_token`**

<mark style="color:green;">`POST`</mark> `/oauth/`

Метод для получения `access_token` в рамках OAuth-авторизации.

Пример запроса:

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/oauth/ \
--header 'Content-Type: application/json' \
--data '{
  "client_id": "<CLIENT_ID>",
  "client_secret": "<CLIENT_SECRET>",
  "grant_type": "code",
  "code": "<CODE>"
}'
```

При успешном выполнении запроса API возвращает код ответа `200` и JSON-объект с параметром `access_token`.

<details>

<summary><mark style="color:green;">200</mark></summary>

```json
{
  "access_token": "string"
}
```

</details>

### Формат запросов

API работает по протоколу HTTP(S) и поддерживает методы REST (Representational State Transfer), такие как `GET`, `POST`, `PUT`, `PATCH` и `DELETE`. Каждый запрос имеет стандартный формат и требует обязательного использования корректных заголовков и параметров.

**Базовый URL**

```http
 https://dashboard.fstrk.io/api/partners/
```

**Заголовки**

Каждый запрос к API Fasttrack требует заголовок `Authorization` для подтверждения прав доступа. Без этого заголовка сервер не обработает запрос и вернет ошибку.

```http
Authorization: Bearer { access_token }
```

Для корректной работы с API Fasttrack запросы, которые передают данные, должны содержать заголовок Content-Type. Он указывает, что данные в запросе отправляются в формате JSON.

```http
Content-Type: application/json
```

Также рекомендуется указывать заголовок Accept, чтобы явно запросить от сервера ответы в формате JSON. Это обеспечивает корректное восприятие данных на стороне клиента.

```http
Accept: application/json
```

## Методы API

Список методов:

* <mark style="color:blue;">`GET`</mark> `/mailings/` – список рассылок
* <mark style="color:green;">`POST`</mark> `/mailings/` – создание рассылки
* <mark style="color:blue;">`GET`</mark> `/mailings/{ uuid }/` – информация о рассылке
* <mark style="color:green;">`POST`</mark> `/mailings/{ uuid }/calculate/` – подсчет статистики
* <mark style="color:green;">`POST`</mark> `/mailings/{ uuid }/stop/` – остановка рассылки

Протестировать API можно через Swagger по ссылке:\
[https://dashboard.fstrk.io/api/partners/docs/](https://dashboard.fstrk.io/api/partners/docs/#/4.%20%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0%20%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9)

Для тестирования, необходимо авторизоваться в Fasttrack.

### Создание рассылки

```
POST /mailings/
```

Универсальный метод для создания новой рассылки.

**Заголовки**

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Content-Type</td><td><code>application/json</code></td></tr><tr><td>Authorization</td><td><code>Bearer { access_token }</code></td></tr></tbody></table>

**Тело запроса** `application/json`

***

**`name`** *(string)* <mark style="color:red;">**\***</mark> – название рассылки.

Пример: `"Моя первая рассылка"`

***

**`filter_chats`** *(object)* – фильтр пользователей. Укажите условия и критерии, которым должны соответствовать пользователи, чтобы получить рассылку.

{% code title="Пример" %}

```json
{
  // ...
  "filter_chats": {
    "all": [
      {
        "platform": "Telegram",
        "type": "attribute"
      },
      {
        "timezone": "Europe/Moscow",
        "type": "profile_attribute"
      },
      {
        "pda_agreed__isnull": false,
        "type": "profile_tag"
      }
    ]
  },
  // ...
}
```

{% endcode %}

***

**`content_type`** *(string)* – тип контента.

Значения: `"NODE"` `"TEXT"`

> <mark style="color:orange;">Заметка:</mark> используйте значение `NODE` для запуска сценария, настроенного на платформе Fasttrack и `TEXT` для отправки обычного текстового сообщения.

***

**`text`** *(string)* – содержание текстового сообщения.

{% code title="Пример" %}

```json
{
  // ...
  "content_type": "TEXT",
  "text": "Привет, мир!"
  // ...
}
```

{% endcode %}

***

**`node_name`** *(string)* – название сценария на платформе Fasttrack.

{% code title="Пример" %}

```json
{
  ...
  "content_type": "NODE",
  "node_name": "Сценарий для демо рассылки"
  ...
}
```

{% endcode %}

> <mark style="color:orange;">Заметка:</mark> можно использовать параметр `node`, если нужно указать ID сценария, а не его название. Название может измениться, а идентификатор постоянный.

***

**`node`** *(integer)* – ID сценария на платформе Fasttrack.

{% code title="Пример" %}

```json
{
  // ...
  "content_type": "NODE",
  "node": 73787
  // ...
}
```

{% endcode %}

Заполняется для рассылок с типом контента `NODE`.

> <mark style="color:orange;">Заметка:</mark> если передать в запросе одновременно параметры `node` и `node_name`, то приоритет будет у параметра `node`.

***

**`node_get_params`** *(array)* – список параметров для сценария.&#x20;

Каждый объект в массиве содержит следующие поля:

* **`name`** *(string)*: название параметра
* **`value`** *(string)*: значение параметра

```json
{
  // ...
  "content_type": "NODE",
  "node_name": "Сценарий для демо рассылки",
  "node_get_params": [
      {
        "name": "discount_code",
        "value": "WELCOME10"
      },
      {
        "name": "campaign_id",
        "value": "spring_sale_2024"
      }
    ]
  // ...
}
```

Указанные параметры и их значения будут доступны и могут быть обработаны в контексте выбранного сценария.

***

**`customer_filter_field`** *(string)* – идентификатор профиля для рассылок по готовому списку клиентов.

* Значения: `"UUID"` `"EXTERNAL_ID"` `"PHONE_NUMBER"`

Список идентификаторов может быть передан через файл (см. `customer_filter_file`) или сразу в теле запроса (см. `customer_filter_array`)

***

**`customer_filter_file`** *(string)* – ссылка на файл со списком идентификаторов для рассылок по готовому списку клиентов.

* Расширение файла `.CSV`
* Файл должен быть загружен на `S3`
* Название колонки соответствует значению `customer_filter_field` (в нижнем регистре)

{% code title="Пример" %}

```json
{
  // ...
  "customer_filter_field": "UUID",
  "customer_filter_file": "https://example.com/file.csv"
  // ...
}
```

{% endcode %}

***

**`customer_filter_array`** *(array)* – список идентификаторов для рассылок по готовому списку клиентов.

{% code title="Пример" %}

```json
{
  // ...
  "customer_filter_field": "UUID",
  "customer_filter_array": [
    "f108a674-1160-4049-8a37-eaab83bd9cd4",
    "7a0b517c-2f0b-407f-87e6-13eb651c32e1"
  ]
  // ...
}
```

{% endcode %}

***

**`planned_at`** *(string)* – дата и время запуска для отложенных рассылок.

* Формат: `ISO 8601`
* Пример: `"2024-09-16T19:41:02.768Z"`

***

**`regular_cron`** *(string)* – расписание для регулярных рассылок.

* Формат: `CRON`
* Пример: `"00 12 * * *"` (рассылка в 12:00 каждый день).

***

**`origin`** *(string)* – признак источника рассылки.

* Значения: `"chat_center"` `"system"`
* По умолчанию: `"system"`

Если указать `chat_center`, то рассылка будет отправлена всем пользователям, в том числе тем, у кого в момент рассылки открыта сессия с оператором.

***

**Примеры запросов**

Ниже приведены примеры запросов, оформленные в формате `cURL`. Они демонстрируют различные сценарии использования и настройки параметров для создания рассылок.

<details>

<summary>1. Рассылки по аудитории: Запуск сценария для пользователей </summary>

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
  "name": "Название рассылки",
  "content_type": "NODE",
  "node_name": "Название сценария",
  "node_get_params": [
    {
      "name": "foo",
      "type": "string",
      "value": "bar"
    },
    {
      "name": "foo1",
      "type": "string",
      "value": "bar1"
    }
  ]
}'
```

</details>

<details>

<summary>2. Рассылки по аудитории: Использование фильтра</summary>

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
  "name": "Название рассылки",
  "filter_chats": {
    "all": [
      {
        "platform": "Telegram",
        "type": "attribute"
      },
      {
        "timezone": "Europe/Moscow",
        "type": "profile_attribute"
      },
      {
        "pda_agreed__isnull": false,
        "type": "profile_tag"
      }
    ]
  },
  "content_type": "TEXT",
  "text": "Привет, мир!"
}'
```

</details>

<details>

<summary>3. Рассылки по аудитории: Отложенная рассылка</summary>

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
  "name": "Название рассылки",
  "content_type": "NODE",
  "node_name": "Название сценария",
  "planned_at": "2024-09-16T19:41:02.768Z"
}'
```

</details>

<details>

<summary>4. Рассылки по аудитории: Регулярная рассылка</summary>

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
  "name": "Название рассылки",
  "content_type": "NODE",
  "node_name": "Название сценария",
  "regular_cron": "00 12 * * *"
}'
```

</details>

<details>

<summary>5. Рассылки по аудитории: Готовый список клиентов (список в файле)</summary>

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
    "name": "Название рассылки",
    "content_type": "NODE",
    "node_name": "Название сценария",
    "node_get_params": [
      {
        "name": "foo",
        "type": "string",
        "value": "bar"
      }
    ],
    "customer_filter_field": "UUID",
    "customer_filter_file": "https://example.com/file.csv"
  }'
```

</details>

<details>

<summary>6. Рассылки по аудитории: Готовый список клиентов (список в теле запроса)</summary>

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
  "name": "Название рассылки",
  "content_type": "NODE",
  "node_name": "Название сценария",
  "node_get_params": [
    {
      "name": "foo",
      "type": "string",
      "value": "bar"
    }
  ],
  "customer_filter_field": "PHONE_NUMBER",
  "customer_filter_array": [
    "+79999999998",
    "+79999999999"
  ]
}'
```

</details>

<details>

<summary>7. Рассылки по аудитории: Доставка сообщений, если открыт чат с оператором</summary>

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
  "name": "Название рассылки",
  "content_type": "NODE",
  "node_name": "Название сценария",
  "origin": "chat_center"
}'
```

</details>

**Результат запроса**

При успешном выполнении запроса API возвращает код ответа `201` и JSON-объект с информацией о рассылке, включая полный набор параметров.

Пример ответа:

<details>

<summary><mark style="color:green;">201</mark></summary>

```json
{
  "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "state": "string",
  "filter_chats": "string",
  "content_type": "TEXT",
  "source_type": "PLATFORM",
  "text": "string",
  "node": 0,
  "node_name": "string",
  "node_get_params": [
    {
      "name": "string",
      "value": "string",
      "type": "string",
      "is_edit": false,
      "param_type": "GLOBAL"
    }
  ],
  "origin": "system",
  "statistics": {
    "count_planned": 0,
    "count_sent": 0,
    "count_delivered": 0,
    "count_undelivered": 0,
    "count_read": 0,
    "count_clicked": 0,
    "count_jumped_url": 0,
    "count_replied": 0,
    "count_platforms": "string"
  },
  "regular_cron": "string",
  "created_at": "2024-11-13T05:22:03.354Z",
  "planned_at": "2024-11-13T05:22:03.354Z",
  "completed_at": "2024-11-13T05:22:03.354Z",
  "duration": "string",
  "template_whatsapp": "string",
  "template_variables": "string",
  "phone_numbers_file": "string",
  "customer_filter_file": "string",
  "customer_filter_field": "UUID"
}
```

</details>

### Список рассылок

```
GET /mailings/
```

Метод для получения списка всех созданных рассылок.

**Заголовки**

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Authorization</td><td><code>Bearer { access_token }</code></td></tr></tbody></table>

**Query-параметры**

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>limit</code></td><td>Кол-во записей, которое вернется в результате запроса. Максимум 100.</td></tr><tr><td><code>offset</code></td><td>Смещение от начала выборки.</td></tr></tbody></table>

Параметры `limit` и `offset` позволяют контролировать объем возвращаемых данных и навигацию по страницам при выполнении запросов к API.

**Пример запроса**

<pre class="language-sh"><code class="lang-sh"><strong>curl -X GET \
</strong>--location https://dashboard.fstrk.io/api/partners/mailings/?offset=20&#x26;limit=20 \
--header 'Authorization: Bearer { access_token }'
</code></pre>

**Результат запроса**

При успешном выполнении запроса API возвращает код ответа `200` и JSON-объект с информацией о рассылке, включая полный набор параметров.

<details>

<summary><mark style="color:green;">200</mark></summary>

```json
{
  "count": 1,
  "next": "http://api.example.org/accounts/?offset=300&limit=100",
  "previous": "http://api.example.org/accounts/?offset=100&limit=100",
  "results": [
    {
      "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "name": "string",
      "state": "string",
      "filter_chats": "string",
      "content_type": "TEXT",
      "source_type": "PLATFORM",
      "text": "string",
      "node": 0,
      "node_name": "string",
      "node_get_params": [
        {
          "name": "string",
          "value": "string",
          "type": "string",
          "is_edit": false,
          "param_type": "GLOBAL"
        }
      ],
      "origin": "system",
      "statistics": {
        "count_planned": 0,
        "count_sent": 0,
        "count_delivered": 0,
        "count_undelivered": 0,
        "count_read": 0,
        "count_clicked": 0,
        "count_jumped_url": 0,
        "count_replied": 0,
        "count_platforms": "string"
      },
      "regular_cron": "string",
      "created_at": "2024-11-13T05:30:47.345Z",
      "planned_at": "2024-11-13T05:30:47.345Z",
      "completed_at": "2024-11-13T05:30:47.345Z",
      "duration": "string",
      "template_whatsapp": "string",
      "template_variables": "string",
      "phone_numbers_file": "string",
      "customer_filter_file": "string",
      "customer_filter_field": "UUID"
    }
  ]
}
```

</details>

### Информация о рассылке

```
GET /mailings/{ uuid }/
```

Метод  для получения информации о рассылке по ее идентификатору (UUID).

**Заголовки**

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Authorization</td><td><code>Bearer { access_token }</code></td></tr></tbody></table>

#### **Path-параметры**

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>uuid</code> <mark style="color:red;"><strong>*</strong></mark></td><td>Идентификатор рассылки</td></tr></tbody></table>

Пример запроса

```sh
curl -X GET \
--location https://dashboard.fstrk.io/api/partners/mailings/{ uuid } \
--header 'Authorization: Bearer { access_token }'
```

**Результат запроса**

При успешном выполнении запроса API возвращает код ответа `200` и JSON-объект с информацией о рассылке, включая полный набор параметров.

<details>

<summary><mark style="color:green;">200</mark></summary>

```json
{
  "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "state": "string",
  "filter_chats": "string",
  "content_type": "TEXT",
  "source_type": "PLATFORM",
  "text": "string",
  "node": 0,
  "node_name": "string",
  "node_get_params": [
    {
      "name": "string",
      "value": "string",
      "type": "string",
      "is_edit": false,
      "param_type": "GLOBAL"
    }
  ],
  "origin": "system",
  "statistics": {
    "count_planned": 0,
    "count_sent": 0,
    "count_delivered": 0,
    "count_undelivered": 0,
    "count_read": 0,
    "count_clicked": 0,
    "count_jumped_url": 0,
    "count_replied": 0,
    "count_platforms": "string"
  },
  "regular_cron": "string",
  "created_at": "2024-11-13T07:28:50.931Z",
  "planned_at": "2024-11-13T07:28:50.931Z",
  "completed_at": "2024-11-13T07:28:50.931Z",
  "duration": "string",
  "template_whatsapp": "string",
  "template_variables": "string",
  "phone_numbers_file": "string",
  "customer_filter_file": "string",
  "customer_filter_field": "UUID"
}
```

</details>

### Подсчет статистики

```
POST /mailings/{ uuid }/calculate/
```

Метод для подсчета статистики для рассылки по ее идентификатору (UUID).

{% hint style="warning" %}
**Устаревший метод.** Статистика в рассылках по аудиториии проекта обновляется автоматически, поэтому данный метод на сегодняшний день не актуален.
{% endhint %}

**Заголовки**

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Authorization</td><td><code>Bearer { access_token }</code></td></tr></tbody></table>

#### Path-параметры

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>uuid</code> <mark style="color:red;"><strong>*</strong></mark></td><td>Идентификатор рассылки</td></tr></tbody></table>

**Пример запроса**

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/{ uuid }/calculate/ \
--header 'Authorization: Bearer { access_token }'
```

**Результат запроса**

При успешном выполнении запроса API возвращает код ответа `200` и JSON-объект с информацией о рассылке, включая полный набор параметров.

<details>

<summary><mark style="color:green;">200</mark></summary>

```json
{
  "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "state": "string",
  "filter_chats": "string",
  "content_type": "TEXT",
  "source_type": "PLATFORM",
  "text": "string",
  "node": 0,
  "node_name": "string",
  "node_get_params": [
    {
      "name": "string",
      "value": "string",
      "type": "string",
      "is_edit": false,
      "param_type": "GLOBAL"
    }
  ],
  "origin": "system",
  "statistics": {
    "count_planned": 0,
    "count_sent": 0,
    "count_delivered": 0,
    "count_undelivered": 0,
    "count_read": 0,
    "count_clicked": 0,
    "count_jumped_url": 0,
    "count_replied": 0,
    "count_platforms": "string"
  },
  "regular_cron": "string",
  "created_at": "2024-11-13T11:13:39.975Z",
  "planned_at": "2024-11-13T11:13:39.975Z",
  "completed_at": "2024-11-13T11:13:39.975Z",
  "duration": "string",
  "template_whatsapp": "string",
  "template_variables": "string",
  "phone_numbers_file": "string",
  "customer_filter_file": "string",
  "customer_filter_field": "UUID"
}
```

</details>

### Остановка рассылки

```
POST /mailings/{ uuid }/stop/
```

Метод, который используется, чтобы остановить рассылку, которая уже началась.

**Заголовки**

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Authorization</td><td><code>Bearer { access_token }</code></td></tr></tbody></table>

**Path-параметры**

<table data-header-hidden data-full-width="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><code>uuid</code> <mark style="color:red;"><strong>*</strong></mark></td><td>Идентификатор рассылки</td></tr></tbody></table>

**Пример запроса**

```sh
curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/{ uuid }/stop/ \
--header 'Authorization: Bearer { access_token }'
```

**Результат запроса**

При успешном выполнении запроса API возвращает код ответа `200` и JSON-объект с информацией о рассылке, включая полный набор параметров.

<details>

<summary><mark style="color:green;">200</mark></summary>

```json5
{
  "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "state": "string",
  "filter_chats": "string",
  "content_type": "TEXT",
  "source_type": "PLATFORM",
  "text": "string",
  "node": 0,
  "node_name": "string",
  "node_get_params": [
    {
      "name": "string",
      "value": "string",
      "type": "string",
      "is_edit": false,
      "param_type": "GLOBAL"
    }
  ],
  "origin": "system",
  "statistics": {
    "count_planned": 0,
    "count_sent": 0,
    "count_delivered": 0,
    "count_undelivered": 0,
    "count_read": 0,
    "count_clicked": 0,
    "count_jumped_url": 0,
    "count_replied": 0,
    "count_platforms": "string"
  },
  "regular_cron": "string",
  "created_at": "2024-11-13T11:24:25.229Z",
  "planned_at": "2024-11-13T11:24:25.229Z",
  "completed_at": "2024-11-13T11:24:25.229Z",
  "duration": "string",
  "template_whatsapp": "string",
  "template_variables": "string",
  "phone_numbers_file": "string",
  "customer_filter_file": "string",
  "customer_filter_field": "UUID"
}
```

</details>

## Вебхуки

API Fasttrack предоставляет возможность подписаться на уведомления о событиях, которые связаны с отправленными рассылками по аудитории проекта.

Типы событий, связанных с рассылками по аудитории:

| `MAILING_STATE`    | Статусы сообщений в рассылке    |
| ------------------ | ------------------------------- |
| `MAILING_REACTION` | Реакции на сообщения в рассылке |

### Настройка уведомлений

* Откройте настройки проекта → Раздел "Вебхуки"
* Заполните поле \[ Endpoint URL ]
* Активируйте события `MAILING_REACTION` и `MAILING_STATE`

### `MAILING_STATE`

Cмена статуса отправленного сообщения в рассылке.

{% tabs %}
{% tab title="Пример события" %}

```json
{
 "event_type": "mailing.state",
 "payload": {
  "profile": {
    "uuid": "dae05733-3026-4eca-abcf-ed366fc3372b"
   },
  "chat": {
    "uuid": "dfed60eb-08f2-4672-af6a-d859a350c435"
  },
  "mailing": {
    "uuid": "a353f441-9f67-42e7-bb28-be3c3fc817b5"
  },
  "message": {
    "state": "delivered"
  }
 },
 "timestamp": 1651776060.8439758
}
```

{% endtab %}

{% tab title="Параметры события" %}

|                            |                                   |
| -------------------------- | --------------------------------- |
| `event_type`               | Тип события                       |
| `payload`                  | Информация о событии              |
| > `payload.profile`        | Информация о клиенте              |
| >> `payload.profile.uuid`  | Уникальный идентификатор профиля  |
| > `payload.chat`           | Информация о пользователе         |
| >> `payload.chat.uuid`     | Уникальный идентификатор чата     |
| > `payload.mailing`        | Информация о рассылке             |
| >> `payload.mailing.uuid`  | Уникальный идентификатор рассылки |
| > `payload.message`        | Информация о сообщении            |
| >> `payload.message.state` | Текущее состояние сообщения       |
| `timestamp`                | Временная метка                   |
| {% endtab %}               |                                   |
| {% endtabs %}              |                                   |

**Статусы сообщений**

| `sent`        | Сообщение отправлено    |
| ------------- | ----------------------- |
| `undelivered` | Сообщение не доставлено |
| `delivered`   | Сообщени доставлено     |
| `read`        | Сообщение прочитано     |

### `MAILING_REACTION`

Реакция на отправленной сообщение в рассылке.

{% tabs %}
{% tab title="Пример события" %}

```json
{
 "event_type": "mailing.reaction",
 "payload": {
  "uuid": "04191c1d-e7dd-4572-a544-6eb9c2855a5e",
  "chat": {
   "uuid": "a5f14878-bfdc-4af4-8b3c-249f6998f6f4",
   "platform": "Telegram"
  },
  "type": "URL"
 },
 "timestamp": 1651776060.8439758
}
```

{% endtab %}

{% tab title="Параметры события" %}

|                            |                                  |
| -------------------------- | -------------------------------- |
| `event_type`               | Тип события                      |
| `payload`                  | Информация о событии             |
| > `payload.uuid`           | Уникальный идентификатор события |
| > `payload.chat`           | Информация о пользователе        |
| >> `payload.chat.uuid`     | Уникальный идентификатор чата    |
| >> `payload.chat.platform` | Название канала                  |
| > `payload.type`           | Тип реакции                      |
| `timestamp`                | Временная метка                  |
| {% endtab %}               |                                  |
| {% endtabs %}              |                                  |

**Список реакций**

| `URL`   | Переход по ссылке   |
| ------- | ------------------- |
| `CLICK` | Нажатие на кнопку   |
| `REPLY` | Ответное сообщение  |
| `READ`  | Сообщение прочитано |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fstrk.io/knowledge_base/outbound-campaigns/mailings-audience/api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
