# Каскадная отправка
Каскадной отправкой называется технология переотправки сообщения по различным каналам. Последовательность каналов задается последовательностью объектов сообщений в массиве `cascade`– первое сообщение формируется сразу, следующие сообщения последовательно формируются и отправляются в случае неполучения статуса "Доставлено" или "Прочитано" предыдущим сообщением в течение его времени жизни.
## Отправка каскадных сообщений
`POST` `https://direct.i-dgtl.ru/api/v1/message/cascade`
Метод позволяет отправить массив каскадных сообщений **(от 1 до 1000)**
#### Headers
| Name | Type | Description |
| ----------------------------------------------- | ------ | ------------------ |
| Authorization\* | string | `Basic {TOKEN_1}` |
| Content-Type\* | string | `application/json` |
#### Request Body
| Name | Type | Description |
| ----------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| destination\* | string | Номер абонента |
| tags | array |
Теги сообщения (массив строк).
Каждый тег должен соответствовать выражению ^\w+$ (допускаются буквы в любом регистре, цифры и нижнее подчеркивание "_")
|
| useLocalTime | boolean | Флаг, отвечающий за таймзону, в которой будет отправлено сообщение:
true – отправка в таймзоне абонента
false – отправка по МСК
По умолчанию true
|
| localSendTime | string | Желаемое время отправки первого сообщения каскада (с учетом значения useLocalTime)
Дата в формате YYYY-MM-DD hh:mm:ss в диапазоне от (текущее время в UTC - 12 часов) до (текущее время в UTC + 7 дней)
По умолчанию сообщение будет отправлено сразу
|
| localCompletionTime | string | Верхняя граница допустимого времени отправки сообщения (с учетом `useLocalTime`) в диапазоне от `localSendTime` до (текущее время в UTC + 70 дней) |
| hours | array | Допустимые часы отправки (массив чисел). В массиве могут быть переданы целые числа от 0 до 23, каждое из которых соответствует разрешенному для отправки часовому интервалу с учетом `useLocalTime` |
| days | array | Допустимые дни отправки (массив чисел). В массиве могут быть переданы целые числа от 1 (пн) до 7 (вс), каждое из которых соответствует разрешенному для отправки дню недели с учетом `useLocalTime` |
| shortUrl | boolean | Флаг, отвечающий за сокращение ссылок в сообщении:
true- ссылки в текстах сообщений будут сокращены
По умолчанию false
|
| callbackUrl | string | Адрес для отправки callback |
| callbackEvents | array | События, по которым будет отправлен callback (массив строк). При наличии `callbackUrl` и отсутствии `callbackEvents` в запросе, будет отправлен callback по событию `delivered` |
| cascade\* | array | Массив с объектами сообщений; может содержать от 2 до 11 объектов включительно. |
| cascade.channelType\* | string | Канал трафика сообщения |
| cascade.senderName\* | string | Имя отправителя; допустимые значения зависят от канала:
SMS: допускаются sms-отправители в статусе "Одобрено" с датой начала действия не позднее, чем время отправки запроса
VIBER: допускаются viber-отправители в статусе "Одобрено" с датой начала действия не позднее, чем время отправки запроса
VK, TEXT_TO_SPEECH: допускается любая строка
VOICECODE: необходимо отправлять значение voicecode
|
| cascade.content\* | object | Содержимое сообщения; допустимые значения зависят от канала и описаны ниже |
| cascade.condition | string | Условие отправки следующего сообщения
По умолчанию – not_delivered
|
| cascade.ttl | string | Время жизни сообщения в секундах. По истечении ttl: данному сообщению будет присвоен финальный статус, а также при выполнении cascade.condition будет создано следующее сообщение.
30 ≤ ttl ≤ 86400
По умолчанию время жизни сообщения составляет 25 часов
|
| externalMessageId | string | Внутренний id сообщения в вашей системе. До 100 символов. |
::::{tab-set}
:::{tab-item} 200
В случае успешного запроса возвращается ответ, в котором перечислены идентификаторы сообщений (в том числе ваши, если были переданы) и коды результата. При значении errors = false гарантируется, что все переданные сообщения успешно созданы.
```
{
"errors": false,
"items": [
{
"messageUuid": "063474ec-a34f-4558-90c5-984395000004",
"externalMessageId": "id123",
"code": 201
},
{
"messageUuid": "063564ec-a34f-4558-90c5-984395000005",
"externalMessageId": "id124",
"code": 201
}
]
}
```
:::
:::{tab-item} 401
Использование невалидного токена / отсутствие заголовка авторизации.
```
{
"error": {
"code": 4010,
"msg": "Not Authenticated"
}
}
=============================================
{
"error": {
"code": 4012,
"msg": "Bad credentials"
}
}
```
:::
:::{tab-item} 402
Недостаточно средств на балансе.
```
{
"error": {
"code": 402,
"msg": "Insufficient funds"
}
}
```
:::
:::{tab-item} 403
Использование неподходящего токена.
```
{
"error": {
"code": 4030,
"msg": "Access Denied"
}
}
```
:::
:::{tab-item} 422
Невалидные параметры в теле запроса или превышение максимального количества объектов.
// Превышение количества сообщений
{
"error": {
"code": 4220,
"msg": "Max count of messages is 1000"
}
}
-----------------------------------------------------------------------------
// Некорректное значение localSendTime
{
"error": {
"code": 4220,
"msg": "Local send time is less than minimal {minLocalSendTime}"
}
}
-----------------------------------------------------------------------------
// Некорректное значение localSendTime
{
"error": {
"code": 4220,
"msg": "Local send time is greater than minimal {maxLocalSendTime}"
}
}
-----------------------------------------------------------------------------
// Некорректное значение localCompletionTime
{
"error": {
"code": 4220,
"msg": "Local completion time is less than minimal {minLocalCompletionTime}"
}
}
-----------------------------------------------------------------------------
// Некорректное значение localCompletionTime
{
"error": {
"code": 4220,
"msg": "Local completion time is greater than maximal {maxLocalCompletionTime}"
}
}
-----------------------------------------------------------------------------
// Некорректное значение senderName
{
"error": {
"code": 4220,
"msg": "No active sender name: ({channelType}, {senderName})"
}
}
-----------------------------------------------------------------------------
// Некорректное значение destination
{
"error": {
"code": 4220,
"msg": "Invalid msisdn"
}
}
-----------------------------------------------------------------------------
// Некорректное значение content
{
"error": {
"code": 4220,
"msg": "Blank content"
}
}
-----------------------------------------------------------------------------
// Некорректное значение tags
{
"error": {
"code": 4220,
"msg": "Invalid tags: {tags}"
}
}
-----------------------------------------------------------------------------
// Некорректное значение ttl
{
"error": {
"code": 4220,
"msg": "Invalid TTL {ttl}"
}
}
-----------------------------------------------------------------------------
// Некорректное значение hours
{
"error": {
"code": 4222,
"msg": "Invalid hours: {hours}"
}
}
-----------------------------------------------------------------------------
// Некорректное значение days
{
"error": {
"code": 4223,
"msg": "Invalid days: {days}"
}
}
:::
::::
::::::{tip}
Рекомендуемое время ожидания ответа: 70 секунд.\
Как правило, ответ на запрос возвращается не более чем за несколько секунд, но таймаут величиной в 70 секунд позволяет гарантированно получить ответ на запрос, в том числе в ситуациях повышенной нагрузки.
::::::
::::::{tip}
Для использования личного домена в сокращенных ссылках необходимо обратиться в поддержку
::::::
Возможные варианты перечислений:
| Параметр | Варианты |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| callbackEvents | [События для отправки callback](../extra/references/#callback-events) |
| cascade.channelType | - SMS
- PUSH
- VIBER
- WHATSAPP
- WEASY
- VK
- TELEGRAM
- TELEGRAM GATEWAY
- TEXT_TO_SPEECH (по умолчанию статус всегда delivered)
- VOICECODE
- MMS
|
| cascade.condition | [Условия формирования каскадных сообщений](../extra/references/#cascade-conditions) |
::::::{tip}
Параметры, переданные в корневом объекте, применяются к каждому сообщению каскада:
* destination
* tags
* useLocalTime
* localSendTime
* localCompletionTime
* hours
* days
* shortUrl
* callbackUrl
* callbackEvents
::::::
::::::{tip}
В объектах callback, отправляемых по каскадным сообщениям, присутствует идентификатор первого сообщения каскада и порядковый номер данного сообщения – `cascade_message_uuid` и `cascade_step` соответственно (описано в разделе [Получение callback](callback.md))
::::::
## Содержимое SMS и VK-сообщений
Для каналов SMS и VK передается объект `content` следующего вида:
```
"content": {
"text": "текст сообщения"
}
```
| Параметр | Тип | Описание |
| ------------ | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| content.text | string
required
| Текст сообщения; строка в кодировке UTF-8 без Byte Order Mark
SMS:
- строка от 1 до 5000 символов
VK:
- строка от 1 до 2048 символов
|
## Содержимое PUSH-сообщения
Для канала PUSH формат и валидация объекта `content` описаны в разделе [Отправка PUSH](push-sending.md)
## Содержимое VIBER-сообщения
Для канала VIBER формат и валидация объекта `content` описаны в разделе [Отправка VIBER](viber-sending.md)
## Содержимое WHATSAPP-сообщения
Для канала WHATSAPP формат и валидация объекта content описаны в разделе [Отправка WHATSAPP](whatsapp-sending.md)
::::::{tip}
Для канала WHATSAPP значение ttl следует устанавливать не менее 24 часов, так как сервис доставит сообщение абоненту даже спустя 24 часа неактивноси (например, выключенный телефон)
::::::
## Содержимое WEASY-сообщения
Для канала WEASY формат и валидация объекта content описаны в разделе [Отправка WEASY](weasy-sending.md)
## Содержимое TEXT\_TO\_SPEECH-сообщения
Для канала TEXT\_TO\_SPEECH формат и валидация объекта content описаны в разделе [Отправка TEXT\_TO\_SPEECH](text-to-speech-sending.md)
## Содержимое VOICECODE-сообщения
Для канала VOICECODE формат и валидация объекта content, а также допустимое значение senderName описаны в разделе [Отправка VOICECODE](voicecode-sending.md)
## Содержимое TELEGRAM-сообщения
Для канала TELEGRAM формат и валидация объекта content, а также допустимое значение senderName описаны в разделе [Отправка TELEGRAM](telegram-sending.md)
## Содержимое TELEGRAM GATEWAY-сообщения
Для канала TELEGRAM GATEWAY формат и валидация объекта content, а также допустимое значение senderName описаны в разделе [Отправка TELEGRAM GATEWAY](otpravka-telegram-gateway.md)
Для канала TELEGRAM GATEWAY передается объект `content` следующего вида:
```
"content": {
"contentType": "text", "text": "текст сообщения"
}
```
## Пример запроса 1
Каскадная отправка по трем каналам следующего вида:
1. VK-сообщение отправляется первым в соответствии с переданными временны́ми параметрами
2. при отсутствии статуса "Прочитано" через 14400 секунд после отправки формируется VIBER-сообщение
3. VIBER-сообщение отправляется в соответствии с переданными временны́ми параметрами
4. при отсутствии статуса "Прочитано" через 10800 секунд после отправки формируется TELEGRAM-сообщение
5. при отсутствии статуса "Доставлено" через 600 секунд после отправки формируется SMS-сообщение
6. SMS-сообщение отправляется в соответствии с переданными временны́ми параметрами
::::{tab-set}
:::{tab-item} JSON
```
POST https://direct.i-dgtl.ru/api/v1/message/cascade
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Content-Type: application/json
[
{
"destination": "79999999999",
"localSendTime": "2021-01-01 18:00:00",
"localCompletionTime": "2021-01-05 18:00:00",
"useLocalTime": true,
"hours": [
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
],
"days": [
6,
7
],
"shortUrl": true,
"callbackUrl": "https://domain.com/callback",
"callbackEvents": [
"delivered",
"price",
"click"
],
"cascade": [
{
"channelType": "VK",
"senderName": "vk-sender",
"content": {
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 14400
},
{
"channelType": "VIBER",
"senderName": "viber-sender",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 10800
},
{
"channelType": "TELEGRAM",
"senderName": "i-digital_bot",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_delivered",
"ttl": 600
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "текст сообщения"
}
}
]
}
]
```
:::
:::{tab-item} cURL
```
curl -X POST 'https://direct.i-dgtl.ru/api/v1/message/cascade' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==' \
-d '[{"destination":"79999999999","localSendTime":"2021-01-01 18:00:00","localCompletionTime":"2021-01-05 18:00:00","useLocalTime":true,"hours":[10,11,12,13,14,15,16,17,18,19,20],"days":[6,7],"shortUrl":true,"callbackUrl":"https://domain.com/callback","callbackEvents":["delivered","price","click"],"cascade":[{"channelType":"VK","senderName":"vk-sender","content":{"text":"текст сообщения"},"condition":"not_read","ttl":14400},{"channelType":"VIBER","senderName":"viber-sender","content":{"contentType":"text","text":"текст сообщения"},"condition":"not_read","ttl":10800},{"channelType":"TELEGRAM","senderName":"i-digital_bot","content":{"contentType":"text","text":"текст сообщения"},"condition":"not_delivered","ttl":600},{"channelType":"SMS","senderName":"sms-sender","content":{"text":"текст сообщения"}}]}]'
```
:::
:::{tab-item} Python
```
import requests
import json
url = "https://direct.i-dgtl.ru/api/v1/message/cascade"
payload = json.dumps([
{
"destination": "79999999999",
"localSendTime": "2021-01-01 18:00:00",
"localCompletionTime": "2021-01-05 18:00:00",
"useLocalTime": True,
"hours": [
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
],
"days": [
6,
7
],
"shortUrl": True,
"callbackUrl": "https://domain.com/callback",
"callbackEvents": [
"delivered",
"price",
"click"
],
"cascade": [
{
"channelType": "VK",
"senderName": "vk-sender",
"content": {
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 14400
},
{
"channelType": "VIBER",
"senderName": "viber-sender",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 10800
},
{
"channelType": "TELEGRAM",
"senderName": "i-digital_bot",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_delivered",
"ttl": 600
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "текст сообщения"
}
}
]
}
])
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
```
:::
:::{tab-item} JavaScript
```
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
const raw = JSON.stringify([
{
"destination": "79999999999",
"localSendTime": "2021-01-01 18:00:00",
"localCompletionTime": "2021-01-05 18:00:00",
"useLocalTime": true,
"hours": [
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
],
"days": [
6,
7
],
"shortUrl": true,
"callbackUrl": "https://domain.com/callback",
"callbackEvents": [
"delivered",
"price",
"click"
],
"cascade": [
{
"channelType": "VK",
"senderName": "vk-sender",
"content": {
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 14400
},
{
"channelType": "VIBER",
"senderName": "viber-sender",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 10800
},
{
"channelType": "TELEGRAM",
"senderName": "i-digital_bot",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_delivered",
"ttl": 600
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "текст сообщения"
}
}
]
}
]);
const requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow"
};
fetch("https://direct.i-dgtl.ru/api/v1/message/cascade", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
```
:::
:::{tab-item} Java
```
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "[\n {\n \"destination\": \"79999999999\",\n \"localSendTime\": \"2021-01-01 18:00:00\",\n \"localCompletionTime\": \"2021-01-05 18:00:00\",\n \"useLocalTime\": true,\n \"hours\": [\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"days\": [\n 6,\n 7\n ],\n \"shortUrl\": true,\n \"callbackUrl\": \"https://domain.com/callback\",\n \"callbackEvents\": [\n \"delivered\",\n \"price\",\n \"click\"\n ],\n \"cascade\": [\n {\n \"channelType\": \"VK\",\n \"senderName\": \"vk-sender\",\n \"content\": {\n \"text\": \"текст сообщения\"\n },\n \"condition\": \"not_read\",\n \"ttl\": 14400\n },\n {\n \"channelType\": \"VIBER\",\n \"senderName\": \"viber-sender\",\n \"content\": {\n \"contentType\": \"text\",\n \"text\": \"текст сообщения\"\n },\n \"condition\": \"not_read\",\n \"ttl\": 10800\n },\n {\n \"channelType\": \"TELEGRAM\",\n \"senderName\": \"i-digital_bot\",\n \"content\": {\n \"contentType\": \"text\",\n \"text\": \"текст сообщения\"\n },\n \"condition\": \"not_delivered\",\n \"ttl\": 600\n },\n {\n \"channelType\": \"SMS\",\n \"senderName\": \"sms-sender\",\n \"content\": {\n \"text\": \"текст сообщения\"\n }\n }\n ]\n }\n]");
Request request = new Request.Builder()
.url("https://direct.i-dgtl.ru/api/v1/message/cascade")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
```
:::
:::{tab-item} PHP
```
'application/json'
];
$body = '[
{
"destination": "79999999999",
"localSendTime": "2021-01-01 18:00:00",
"localCompletionTime": "2021-01-05 18:00:00",
"useLocalTime": true,
"hours": [
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
],
"days": [
6,
7
],
"shortUrl": true,
"callbackUrl": "https://domain.com/callback",
"callbackEvents": [
"delivered",
"price",
"click"
],
"cascade": [
{
"channelType": "VK",
"senderName": "vk-sender",
"content": {
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 14400
},
{
"channelType": "VIBER",
"senderName": "viber-sender",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 10800
},
{
"channelType": "TELEGRAM",
"senderName": "i-digital_bot",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_delivered",
"ttl": 600
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "текст сообщения"
}
}
]
}
]';
$request = new Request('POST', 'https://direct.i-dgtl.ru/api/v1/message/cascade', $headers, $body);
$res = $client->sendAsync($request)->wait();
echo $res->getBody();
```
:::
:::{tab-item} Go
```
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://direct.i-dgtl.ru/api/v1/message/cascade"
method := "POST"
payload := strings.NewReader(`[
{
"destination": "79999999999",
"localSendTime": "2021-01-01 18:00:00",
"localCompletionTime": "2021-01-05 18:00:00",
"useLocalTime": true,
"hours": [
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
],
"days": [
6,
7
],
"shortUrl": true,
"callbackUrl": "https://domain.com/callback",
"callbackEvents": [
"delivered",
"price",
"click"
],
"cascade": [
{
"channelType": "VK",
"senderName": "vk-sender",
"content": {
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 14400
},
{
"channelType": "VIBER",
"senderName": "viber-sender",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_read",
"ttl": 10800
},
{
"channelType": "TELEGRAM",
"senderName": "i-digital_bot",
"content": {
"contentType": "text",
"text": "текст сообщения"
},
"condition": "not_delivered",
"ttl": 600
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "текст сообщения"
}
}
]
}
]`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
```
:::
::::
## Пример запроса 2
Каскадная отправка кода подтверждения следующего вида:
1. TELEGRAM-сообщение отправляется моментально
2. При отсутствии статуса "Доставлено" через 60 секунд после отправки, либо при получении статуса "Не доставлено" формируется и отправляется SMS-сообщение
::::{tab-set}
:::{tab-item} JSON
```
POST https://direct.i-dgtl.ru/api/v1/message/cascade
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Content-Type: application/json
[
{
"destination": "<номер абонента>",
"cascade": [
{
"channelType": "TELEGRAM",
"senderName": "telegram_bot",
"content": {
"contentType": "text",
"text": "Код авторизации от i-digital: 3 2 6 1"
},
"condition": "not_delivered",
"ttl": 60
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "Ваш код для авторизации: 3261"
}
}
]
}
]
```
:::
:::{tab-item} cURL
```
curl -X POST 'https://direct.i-dgtl.ru/api/v1/message/cascade' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==' \
-d '[{"destination":"<номер абонента>","cascade":[{"channelType":"TELEGRAM","senderName":"telegram_bot","content":{"contentType":"text","text":"Ваш код: 3-2-6-1"},"condition":"not_delivered","ttl":60},{"channelType":"SMS","senderName":"sms-sender","content":{"text":"Ваш код для авторизации: 3261"}}]}]'
```
:::
:::{tab-item} Python
```
import requests
import json
url = "https://direct.i-dgtl.ru/api/v1/message/cascade"
payload = json.dumps([
{
"destination": "<номер абонента>",
"cascade": [
{
"channelType": "TELEGRAM",
"senderName": "telegram_bot",
"content": {
"contentType": "text",
"text": "Код авторизации от i-digital: 3 2 6 1"
},
"condition": "not_delivered",
"ttl": 60
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "Ваш код для авторизации: 3261"
}
}
]
}
])
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer MTY3MDQ6c1FOa3BmOTYxdkdJeW9QRHJ6U0Rhaw=='
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
```
:::
:::{tab-item} JavaScript
```
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer MTY3MDQ6c1FOa3BmOTYxdkdJeW9QRHJ6U0Rhaw==");
const raw = JSON.stringify([
{
"destination": "<номер абонента>",
"cascade": [
{
"channelType": "TELEGRAM",
"senderName": "telegram_bot",
"content": {
"contentType": "text",
"text": "Код авторизации от i-digital: 3 2 6 1"
},
"condition": "not_delivered",
"ttl": 60
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "Ваш код для авторизации: 3261"
}
}
]
}
]);
const requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow"
};
fetch("https://direct.i-dgtl.ru/api/v1/message/cascade", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
```
:::
:::{tab-item} Java
```
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "[\n {\n \"destination\": \"<номер абонента>\",\n \"cascade\": [\n {\n \"channelType\": \"TELEGRAM\",\n \"senderName\": \"telegram_bot\",\n \"content\": {\n \"contentType\": \"text\",\n \"text\": \"Код авторизации от i-digital: 3 2 6 1\"\n },\n \"condition\": \"not_delivered\",\n \"ttl\": 60\n },\n {\n \"channelType\": \"SMS\",\n \"senderName\": \"sms-sender\",\n \"content\": {\n \"text\": \"Ваш код для авторизации: 3261\"\n }\n }\n ]\n }\n]");
Request request = new Request.Builder()
.url("https://direct.i-dgtl.ru/api/v1/message/cascade")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer MTY3MDQ6c1FOa3BmOTYxdkdJeW9QRHJ6U0Rhaw==")
.build();
Response response = client.newCall(request).execute();
```
:::
:::{tab-item} PHP
```
'application/json',
'Authorization' => 'Bearer MTY3MDQ6c1FOa3BmOTYxdkdJeW9QRHJ6U0Rhaw=='
];
$body = '[
{
"destination": "<номер абонента>",
"cascade": [
{
"channelType": "TELEGRAM",
"senderName": "telegram_bot",
"content": {
"contentType": "text",
"text": "Код авторизации от i-digital: 3 2 6 1"
},
"condition": "not_delivered",
"ttl": 60
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "Ваш код для авторизации: 3261"
}
}
]
}
]';
$request = new Request('POST', 'https://direct.i-dgtl.ru/api/v1/message/cascade', $headers, $body);
$res = $client->sendAsync($request)->wait();
echo $res->getBody();
```
:::
:::{tab-item} Go
```
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://direct.i-dgtl.ru/api/v1/message/cascade"
method := "POST"
payload := strings.NewReader(`[
{
"destination": "<номер абонента>",
"cascade": [
{
"channelType": "TELEGRAM",
"senderName": "telegram_bot",
"content": {
"contentType": "text",
"text": "Код авторизации от i-digital: 3 2 6 1"
},
"condition": "not_delivered",
"ttl": 60
},
{
"channelType": "SMS",
"senderName": "sms-sender",
"content": {
"text": "Ваш код для авторизации: 3261"
}
}
]
}
]`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer MTY3MDQ6c1FOa3BmOTYxdkdJeW9QRHJ6U0Rhaw==")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
```
:::
::::