# PUSH-рассылки через API

## Документация в Swagger

Описание методов 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.

## OAuth-авторизация <a href="#authentication" id="authentication"></a>

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

Сообщите менеджеру Fasttrack о том, что планируете использовать Fasttrack API и вам необходимо получить access\_token для вашего проекта.

После этого проекту присваивается уникальный идентификатор `client_id` и секретный ключ `client_secret`, которые нужны для аутентификации при запросе `access_token`.

Для получения `access_token` используйте метод:

```
POST /api/partners/oauth/
```

Ознакомьтесь c докуметацией данного метода в Swagger по ссылке:\
<https://dashboard.fstrk.io/api/partners/docs/>

В ответе вам вернется access\_token, который вы можете использовать для подписи запросов к методам Fasttrack API.

## Отправить рассылку

API-метод для запуска персональной рассылки.

<mark style="color:green;">`POST`</mark> `/api/partners/push-messages/`

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

<table data-header-hidden><thead><tr><th width="205">Key</th><th>Descr</th></tr></thead><tbody><tr><td>Content-Type</td><td><code>application/json</code></td></tr><tr><td>Authorization</td><td><code>Bearer &#x3C;token></code></td></tr></tbody></table>

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

<details>

<summary>Отправить текстовое сообщение пользователю по UUID</summary>

```bash
curl -X POST \
  https://dashboard.fstrk.io/api/partners/push-message/ \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <КЛЮЧ_ДОСТУПА>' \
  -d '{
    "chat": {
      "uuid": "00000000-0000-0000-0000-000000000000"
    },
    "content": {
      "type": "TEXT",
      "text": "Тест сообщения"
    }
}'
```

Структура JSON:

* `chat` – Информация о пользователе
  * `chat.uuid` – Идентификатор пользователя (UUID чата)
* `content` – Содержание рассылки
  * `content.type` – Тип контента (в данном случае TEXT)
  * `content.text` – Текст сообщения

</details>

<details>

<summary>Запустить узел (сценарий чат-бота) для пользователя по UUID</summary>

```bash
curl -X POST \
  https://dashboard.fstrk.io/api/partners/push-message/ \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <КЛЮЧ_ДОСТУПА>' \
  -d '{
    "chat": {
      "uuid": "00000000-0000-0000-0000-000000000000"
    },
    "content": {
      "type": "NODE",
      "node": {
        "name": "Название узла"
      },
      "get_params": {
        "foo": "bar"
      }
    }
}'
```

Структура JSON:

* `chat` – Информация о пользователе
  * `chat.uuid` – Идентификатор пользователя (UUID чата)
* `content` – Содержание рассылки
  * `content.type` – Тип контента (в данном случае NODE)
  * `content.node` – Информация об узле
    * `content.node.name` – Название узла
  * `content.get_params` – список get-параметров для узла

</details>

<details>

<summary>Отправить текстовое сообщение клиенту по UUID</summary>

```bash
curl -X POST \
  https://dashboard.fstrk.io/api/partners/push-message/ \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <КЛЮЧ_ДОСТУПА>' \
  -d '{
    "profile": {
      "uuid": "00000000-0000-0000-0000-000000000000"
    },
    "content": {
      "type": "TEXT",
      "text": "Тест сообщения"
    }
}'
```

Структура JSON:

* `profile` – Информация о клиенте
  * `uuid` – Идентификатор клиента (UUID профиля)
* `content` – Содержание рассылки
  * `content.type` – Тип контента (в данном случае TEXT)
  * `content.text` – Текст сообщения

</details>

<details>

<summary>Отправить текстовое сообщение клиенту по номеру телефона</summary>

```bash
curl -X POST \
  https://dashboard.fstrk.io/api/partners/push-message/ \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <КЛЮЧ_ДОСТУПА>' \
  -d '{
    "profile": {
      "phone_number": "+79999999999"
    },
    "content": {
      "type": "TEXT",
      "text": "Тест сообщения"
    }
}'
```

Структура JSON:

* `profile` – Информация о клиенте
  * `profile.phone_number` – Номер телефона клиента
* `content` – Содержание рассылки
  * `content.type` – Тип контента (в данном случае TEXT)
  * `content.text` – Текст сообщения

</details>

<details>

<summary>Отправить WhatsApp-шаблон клиенту по номеру телефона</summary>

```bash
curl -X POST \
  https://dashboard.fstrk.io/api/partners/push-message/ \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <КЛЮЧ_ДОСТУПА>' \
  -d '{
    "profile": {
      "phone_number": "+79999999999",
      "tags": [
        "some_tag",
        "another_tag"
      ],
      "attrs": {
        "profile_key": "some data",
        "profile_another": "some another data"
      }
    },
    "content": {
      "type": "WHATSAPP_TEMPLATE",
      "whatsapp_template": {
        "pid": "test"
      },
      "whatsapp_template_variables": {
        "v1": "Иван",
        "v2": "Иванов"
      }
    }
}'
```

Структура JSON:

* `profile` – Информация о клиенте
  * `profile.phone_number` – Номер телефона клиента
  * `profile.tags` – Список тегов, которые нужно добавить клиенту
  * `profile.attrs` – Список атрибутов, которые нужно добавить клиенту
* `content` – Содержание рассылки
  * `content.type` – Тип контента (в данном случае WHATSAPP\_TEMPLATE)
  * `content.whatsapp_template` – Информация о WhatsApp-шаблоне
    * `content.whatsapp_template.pid` – Идентификатор шаблона
  * `content.whatsapp_template_variables` – Переменные для шаблона

</details>

<details>

<summary>Отправить WhatsApp-шаблон клиенту по номеру телефона (используя узел)</summary>

```bash
curl -X POST \
  https://dashboard.fstrk.io/api/partners/push-message/ \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <КЛЮЧ_ДОСТУПА>' \
  -d '{
    "profile": {
      "phone_number": "+79999999999"
    },
    "content": {
      "type": "WHATSAPP_TEMPLATE",
      "node": {
        "name": "Название узла"
      },
      "get_params": {
        "v1": "foo",
        "v2": "bar"
      }
    }
}'
```

Структура JSON:

* `profile` – Информация о клиенте
  * `profile.phone_number` – Номер телефона клиента
* `content` – Содержание рассылки
  * `content.type` – Тип контента (в данном случае WHATSAPP\_TEMPLATE)
  * `content.node` – Информация об узле
    * `content.node.name` – Название узла
  * `content.get_params` – список get-параметров для узла

</details>

## Отменить рассылку

API-метод для отмены запуска рассылки по UUID.

<mark style="color:green;">`POST`</mark> `/api/partners/push-messages/{ uuid }/cancel/`

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

<table data-header-hidden><thead><tr><th width="205">Key</th><th>Descr</th></tr></thead><tbody><tr><td>Authorization</td><td><code>Bearer &#x3C;token></code></td></tr></tbody></table>

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

<table data-header-hidden><thead><tr><th width="129">Key</th><th>Descr</th></tr></thead><tbody><tr><td>uuid</td><td>Идентификатор рассылки (UUID рассылки)</td></tr></tbody></table>

{% hint style="danger" %}
Отменить можно только сообщение, которое еще небыло запущено.
{% endhint %}

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

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

<mark style="color:blue;">`GET`</mark> `/api/partners/push-messages/{ uuid }/`

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

<table data-header-hidden><thead><tr><th width="205">Key</th><th>Descr</th></tr></thead><tbody><tr><td>Authorization</td><td><code>Bearer &#x3C;token></code></td></tr></tbody></table>

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

<table data-header-hidden><thead><tr><th width="129">Key</th><th>Descr</th></tr></thead><tbody><tr><td>uuid</td><td>Идентификатор рассылки (UUID рассылки)</td></tr></tbody></table>

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

API-метод для получения списка рассылок.

<mark style="color:blue;">`GET`</mark> `/api/partners/push-messages/`

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

<table data-header-hidden><thead><tr><th width="205">Key</th><th>Descr</th></tr></thead><tbody><tr><td>Authorization</td><td><code>Bearer &#x3C;token></code></td></tr></tbody></table>
