Каскадная отправка#

Каскадной отправкой называется технология переотправки сообщения по различным каналам. Последовательность каналов задается последовательностью объектов сообщений в массиве 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 символов.

В случае успешного запроса возвращается ответ, в котором перечислены идентификаторы сообщений (в том числе ваши, если были переданы) и коды результата. При значении 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
    }
  ]
}

Использование невалидного токена / отсутствие заголовка авторизации.

{
    "error": {
        "code": 4010,
        "msg": "Not Authenticated"
    }
}

=============================================
{
    "error": {
        "code": 4012,
        "msg": "Bad credentials"
    }
}

Недостаточно средств на балансе.

{
    "error": {
        "code": 402,
        "msg": "Insufficient funds"
    }
}

Использование неподходящего токена.

{
    "error": {
        "code": 4030,
        "msg": "Access Denied"
    }
}

Невалидные параметры в теле запроса или превышение максимального количества объектов.

// Превышение количества сообщений
{
    "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}"
    }
}

Совет

Рекомендуемое время ожидания ответа: 70 секунд.
Как правило, ответ на запрос возвращается не более чем за несколько секунд, но таймаут величиной в 70 секунд позволяет гарантированно получить ответ на запрос, в том числе в ситуациях повышенной нагрузки.

Совет

Для использования личного домена в сокращенных ссылках необходимо обратиться в поддержку

Возможные варианты перечислений:

Параметр

Варианты

callbackEvents

События для отправки callback

cascade.channelType

  • SMS
  • PUSH
  • VIBER
  • WHATSAPP
  • WEASY
  • VK
  • TELEGRAM
  • TELEGRAM GATEWAY
  • TEXT_TO_SPEECH (по умолчанию статус всегда delivered)
  • VOICECODE
  • MMS

cascade.condition

Условия формирования каскадных сообщений

Совет

Параметры, переданные в корневом объекте, применяются к каждому сообщению каскада:

  • destination

  • tags

  • useLocalTime

  • localSendTime

  • localCompletionTime

  • hours

  • days

  • shortUrl

  • callbackUrl

  • callbackEvents

Совет

В объектах callback, отправляемых по каскадным сообщениям, присутствует идентификатор первого сообщения каскада и порядковый номер данного сообщения – cascade_message_uuid и cascade_step соответственно (описано в разделе Получение callback)

Содержимое 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

Содержимое VIBER-сообщения #

Для канала VIBER формат и валидация объекта content описаны в разделе Отправка VIBER

Содержимое WHATSAPP-сообщения #

Для канала WHATSAPP формат и валидация объекта content описаны в разделе Отправка WHATSAPP

Совет

Для канала WHATSAPP значение ttl следует устанавливать не менее 24 часов, так как сервис доставит сообщение абоненту даже спустя 24 часа неактивноси (например, выключенный телефон)

Содержимое WEASY-сообщения #

Для канала WEASY формат и валидация объекта content описаны в разделе Отправка WEASY

Содержимое TEXT_TO_SPEECH-сообщения #

Для канала TEXT_TO_SPEECH формат и валидация объекта content описаны в разделе Отправка TEXT_TO_SPEECH

Содержимое VOICECODE-сообщения #

Для канала VOICECODE формат и валидация объекта content, а также допустимое значение senderName описаны в разделе Отправка VOICECODE

Содержимое TELEGRAM-сообщения#

Для канала TELEGRAM формат и валидация объекта content, а также допустимое значение senderName описаны в разделе Отправка TELEGRAM

Содержимое TELEGRAM GATEWAY-сообщения#

Для канала TELEGRAM GATEWAY формат и валидация объекта content, а также допустимое значение senderName описаны в разделе Отправка TELEGRAM GATEWAY

Для канала TELEGRAM GATEWAY передается объект content следующего вида:

"content": {
 "contentType": "text", "text": "текст сообщения" 
 }

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

Каскадная отправка по трем каналам следующего вида:

  1. VK-сообщение отправляется первым в соответствии с переданными временны́ми параметрами

  2. при отсутствии статуса «Прочитано» через 14400 секунд после отправки формируется VIBER-сообщение

  3. VIBER-сообщение отправляется в соответствии с переданными временны́ми параметрами

  4. при отсутствии статуса «Прочитано» через 10800 секунд после отправки формируется TELEGRAM-сообщение

  5. при отсутствии статуса «Доставлено» через 600 секунд после отправки формируется SMS-сообщение

  6. SMS-сообщение отправляется в соответствии с переданными временны́ми параметрами

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": "текст сообщения"
        }
      }
    ]
  }
]
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":"текст сообщения"}}]}]'
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)

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));
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();
<?php
$client = new Client();
$headers = [
  'Content-Type' => '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();

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-сообщение

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"
        }
      }
    ]
  }
]
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"}}]}]'
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)

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));
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();
<?php
$client = new Client();
$headers = [
  'Content-Type' => '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();

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))
}