Каскадная отправка#
Каскадной отправкой называется технология переотправки сообщения по различным каналам. Последовательность каналов задается последовательностью объектов сообщений в массиве cascade– первое сообщение формируется сразу, следующие сообщения последовательно формируются и отправляются в случае неполучения статуса «Доставлено» или «Прочитано» предыдущим сообщением в течение его времени жизни.
Отправка каскадных сообщений#
POST https://direct.i-dgtl.ru/api/v1/message/cascade
Метод позволяет отправить массив каскадных сообщений (от 1 до 1000)
Headers#
Name |
Type |
Description |
|---|---|---|
Authorization* |
string |
|
Content-Type* |
string |
|
Request Body#
Name |
Type |
Description |
|---|---|---|
destination* |
string |
Номер абонента |
tags |
array |
Теги сообщения (массив строк). |
useLocalTime |
boolean |
Флаг, отвечающий за таймзону, в которой будет отправлено сообщение: |
localSendTime |
string |
Желаемое время отправки первого сообщения каскада (с учетом значения |
localCompletionTime |
string |
Верхняя граница допустимого времени отправки сообщения (с учетом |
hours |
array |
Допустимые часы отправки (массив чисел). В массиве могут быть переданы целые числа от 0 до 23, каждое из которых соответствует разрешенному для отправки часовому интервалу с учетом |
days |
array |
Допустимые дни отправки (массив чисел). В массиве могут быть переданы целые числа от 1 (пн) до 7 (вс), каждое из которых соответствует разрешенному для отправки дню недели с учетом |
shortUrl |
boolean |
Флаг, отвечающий за сокращение ссылок в сообщении: |
callbackUrl |
string |
Адрес для отправки callback |
callbackEvents |
array |
События, по которым будет отправлен callback (массив строк). При наличии |
cascade* |
array |
Массив с объектами сообщений; может содержать от 2 до 11 объектов включительно. |
cascade.channelType* |
string |
Канал трафика сообщения |
cascade.senderName* |
string |
Имя отправителя; допустимые значения зависят от канала: |
cascade.content* |
object |
Содержимое сообщения; допустимые значения зависят от канала и описаны ниже |
cascade.condition |
string |
Условие отправки следующего сообщения |
cascade.ttl |
string |
Время жизни сообщения в секундах. По истечении ttl: данному сообщению будет присвоен финальный статус, а также при выполнении cascade.condition будет создано следующее сообщение. |
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 |
|
cascade.channelType |
|
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
|
Содержимое 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 #
Каскадная отправка по трем каналам следующего вида:
VK-сообщение отправляется первым в соответствии с переданными временны́ми параметрами
при отсутствии статуса «Прочитано» через 14400 секунд после отправки формируется VIBER-сообщение
VIBER-сообщение отправляется в соответствии с переданными временны́ми параметрами
при отсутствии статуса «Прочитано» через 10800 секунд после отправки формируется TELEGRAM-сообщение
при отсутствии статуса «Доставлено» через 600 секунд после отправки формируется SMS-сообщение
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#
Каскадная отправка кода подтверждения следующего вида:
TELEGRAM-сообщение отправляется моментально
При отсутствии статуса «Доставлено» через 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))
}