# Каскадная отправка сообщений

Каскадной отправкой называется технология переотправки сообщения по различным каналам.

Последовательность каналов настраивается по согласованию с клиентом. При поступлении сообщение будет направлено в канал с наивысшим приоритетом; в случае недоставки оно будет переотправлено в следующий канал. Переотправка продолжится до тех пор, пока не будет получен статус “Доставлено” или пока не будут использованы все возможные каналы. Например, если push-сообщение по той или иной причине не поступает на мобильное устройство пользователя, его содержание может быть переотправлено в виде SMS.

{% hint style="info" %}
По умолчанию функция каскадной отправки не активирована для клиентов. Для активации обратитесь к персональному менеджеру.
{% endhint %}

## Каскадная отправка сообщений

<mark style="color:green;">`POST`</mark> `https://external-api.i-dgtl.ru/message`

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

#### Headers

| Name          | Type   | Description                 |
| ------------- | ------ | --------------------------- |
| Content-Type  | string | application/json            |
| Authorization | string | 'nodeID:password' \| base64 |

#### Request Body

| Name            | Type    | Description                                                                                                                                                                                                                     |
| --------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| @type           | string  | Тип сообщения, имеет постоянное значение оutbound (исходящее).                                                                                                                                                                  |
| addresses       | object  | Объект, содержащий адреса отправителя и получателя.                                                                                                                                                                             |
| source          | string  | Имя или номер отправителя.                                                                                                                                                                                                      |
| destination     | string  | Номер телефона получателя. Указывается в международном формате MSISDN, состоящем из кода страны, DEF-кода оператора и номера абонента. Например, российский номер выглядит так: 79001234567, где 7 - код страны (Россия).       |
| body            | object  | Объект, в котором передаётся содержимое сообщения.                                                                                                                                                                              |
| bodyType        | string  | Тип сообщения `(generic)`.                                                                                                                                                                                                      |
| content         | string  | Объект, содержащий параметры сообщения.                                                                                                                                                                                         |
| bodyType        | string  | <p>Канал отправки сообщений: <br>- <code>sms</code><br>- <code>viber</code><br>- <code>e-mail</code><br>- <code>vk</code><br>- <code>push</code><br>- <code>whatsapp</code></p>                                                 |
| content         | string  | Текст сообщения.                                                                                                                                                                                                                |
| nodeId          | integer | Номер ноды                                                                                                                                                                                                                      |
| requestDelivery | boolean | Указывает, cледует ли предоставлять отчёт о доставке после отправки сообщения (true\|false).                                                                                                                                    |
| expirationDate  | integer | <p>Время, до которого будет ожидаться получение статуса от оператора.<br>Тип значения - <strong>timestamp</strong> в миллисекундах или в формате ISO 8601.<br>По умолчанию составляет 24 часа с момента отправки сообщения.</p> |

::::{tab-set}

:::{tab-item} 200 В случае успешного запроса возвращается ответ, в котором указан идентификатор сообщения и время отправки сообщения в формате Unix Timestamp.

```
{
    "timestamp": 1632214355104,
    "code": 200,
    "responses": [
        {
            "id": "41937aa1-6322-1435-5090-aa0003442762",
            "timestamp": 1632214355110,
            "code": 200
        }
    ]
}
```
:::


:::{tab-item} 400 Некорректный синтаксис запроса

```
{
    "timestamp": 1632214510174,
    "code": 400,
    "description": "incorrect request body"
}
```
:::

::::


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

```
POST https://external-api.i-dgtl.ru/message
Authorization: Basic Mzk5OTk6MTIzNjU0
Content-Type: application/json

[
    {
        "@type": "outbound",
        "addresses": {
            "source": "Testing",
            "destination": "79500197493"
        },
        "body": {
            "bodyType": "generic",
            "content": [
                {
                    "bodyType": "viber",
                    "content": "Have a nice day!"
                },
                {
                    "bodyType": "text",
                    "content": "Have a great day."
                }
            ]
        },
        "nodeId": 31937,
        "requestDelivery": true
    }
]
```
