В письмо добавьте подробности — так поможем быстрее
- название компании
- логин подключения
- описание проблемы
- пример сообщения: дата, время, system_id, имя отправителя, номер получателя, message_id, коды ошибок
- tcpdump, логи с ошибкой, статистика по ошибке
Почему SMS могут не отправляться
- Не куплен пакет SMS. Если у вас тестовый период — пакет нужно подключать каждый день. Посмотреть пакеты можно в личном кабинете иконка кошелька → пакеты SMS
- Не подключено имя отправителя. Проверить статус имени можно в личном кабинете: Аккаунт → Имена отправителя
- Имя отправителя подключено не на всех операторов. Тогда SMS будут уходить только на подключённых операторов
API МТС Маркетолога позволяет
- отправлять SMS
- запрашивать статусы SMS
- получать коллбэки по статусу отправленных SMS
- получать входящие SMS
Содержание документации
⚫️ Базовая авторизация: по логину и паролю
Примеры запросов: JSON, 1С, Python, PHP
Получение статусов методом POST
Получение статусов методом GET
⚫️ Авторизация по токену
Получение баланса и кредитного лимита
Получение статистики по пакетам за текущий месяц
⚫️ Коллбэки
⚫️ Коды и ошибки
Лимиты платформы
— до 5 тысяч запросов в минуту в совокупности на отправку SMS и получение статусов
— до 10 тысяч сообщений в одном запросе
— пропускная способность подключения — 10 SMS в секунду. Если отправляете больше 10 SMS в секунду, используйте запрос на отправку в буфер, чтобы сообщения попадали в очередь.
— максимальные размеры сообщений* для каналов: 10 сегментов (670 символов на кириллице и 1530 на латинице)**
* Кодировка текста сообщения — UTF-8
** Можно отправить и больше сегментов, но чем больше сегментов — тем выше вероятность некорректной доставки.
Подготовка к интеграции
- Получите данные для авторизации: личный кабинет МТС Маркетолога → Рассылки по своей базе PRO → Интеграции → API → Создать подключение.
2. Подключите имя отправителя.
3. Подключите пакет SMS.
Чтобы протестировать отправки, можно использовать бесплатное тестовое имя и пакет SMS
⚫️ Базовая авторизация: по логину и паролю
Ниже описаны методы, которые можно использовать, если авторизуетесь по логину и паролю
Метод | URL | Что делает |
POST | https://omnichannel.mts.ru/http-api/v1/messages | Отправка сообщений |
POST | https://omnichannel.mts.ru/http-api/v1/b/messages/ | Отправка сообщений в буфер. Используйте этот URL, если отправляете более 10 SMS в одном запросе |
POST | https://omnichannel.mts.ru/http-api/v1/messages/info | Запрос статусов сообщений |
GET | https://api-adapter.marketolog.mts.ru/get/send-sms | Отправка сообщения |
GET | https://api-adapter.marketolog.mts.ru/get/sms-info | Запрос статуса сообщения |
Параметры аутентификации
Чтобы пройти аутентификацию, при каждом запросе передавайте логин и пароль по схеме Basic Authentication. Логин и пароль можно получить в личном кабинете МТС Маркетолога: Рассылки по своей базе PRO → Интеграции → API → создать подключение.
Параметр | Тип данных | Описание |
Login | string | Логин |
Password | string | Пароль |
📌Отправка сообщений методом POST
Запрос состоит из двух объектов
Параметр | Тип данных | Описание |
messages | array of objects | Массив сообщений с детализацией. Описание структуры сообщения представлено ниже. |
options | object | Включает в себя параметры, которые также могут присутствовать в каждом отдельном сообщении: "class" и объект "from". ⚠️ Если в объекте messages все сообщения относятся к одному имени отправителя, рекомендуем передавать вышеуказанные параметры один раз в общем для всех сообщений объекте "options". В этом случае для каждого сообщения в массиве messages эти параметры можно не передавать. Ниже есть примеры запросов для обоих случаев. |
Структура сообщения: элемент массива "messages"
Параметр | Тип данных | Описание | Обязательность поля | |
1 | class | integer | Пользовательский класс сообщения. Используется опционально для управления маршрутизацией сообщений. Связь между параметром class и маршрутом настраивают администраторы по запросу Клиента. Пример: class: 1 — отправить в канал SMS | Нет |
2 | from | object | Объект с именем отправителя/чата/приложения | Да, если данные не указаны в "options" |
2.1 | from => sms_address | string | Имя отправителя SMS (нейминг), которое видит получатель | Да, если данные не указаны в "options" |
3 | to | object | Массив объектов с информацией о получателе | Да |
3.1 | to => message_id | string | Идентификатор сообщения клиента | Нет |
3.2 | to => msisdn | string | Номер телефона адресата. Формат: 79161234567 | Да |
4 | content | object | Объект с информацией о сообщении. | Да |
4.1 | content => short_text string | string | Текст сообщения. Рекомендуем отправлять до 8 сегментов в одном SMS: 536 символов на кириллице и 1224 на латинице. Кодировка — UTF-8. | Да |
POST /messages
Content-type: application/json
Пример с использованием одного имени отправителя: 2 сообщения отправляются от имени SMS Naming. В этом случае объект "from" (и, при необходимости, поле "class") прописываются один раз в объекте "options"
{
"messages": [
{
"content": {
"short_text": "sms text #1"
},
"to": [
{
"msisdn": "79836362346",
"message_id": "10345678-f123-4694-91d7-233df79f65445"
}
]
},
{
"content": {
"short_text": "sms text #2"
},
"to": [
{
"msisdn": "79836362347",
"message_id": "10345678-f123-4694-91d7-233df79f65446"
}
]
}
],
"options": {
"class": 22,
"from": {
"sms_address": "SMS Naming"
}
}
}
Пример с использованием разных имён. В этом случае объект "from" (и, при необходимости, поле "class") присутствуют в каждом элементе массива "messages".
{
"messages": [
{
"content": {
"short_text": "sms text #1"
},
"from": {
"sms_address": "SMS Naming #1"
},
"to": [
{
"msisdn": "79836362346",
"message_id": "10345678-f123-4694-91d7-233df79f65445"
}
]
},
{
"content": {
"short_text": "sms text #2"
},
"from": {
"sms_address": "SMS Naming #2"
},
"to": [
{
"msisdn": "79836362347",
"message_id": "10345678-f123-4694-91d7-233df79f65446"
}
]
}
]
}
Текст = СтрЗаменить(ТекстСообщения, Символы.ПС, " ");
СтруктураОтправки = Новый Структура;
МассивСообщений = Новый Массив;
Для каждого Адресат Из Адресаты Цикл
ОчередноеСообщение = Новый Структура;
ОчередноеСообщение.Вставить("content", Новый Структура("short_text", Текст));
Если НЕ ИспользоватьПользовательскийКласс Тогда
ОчередноеСообщение.Вставить("from",Новый Структура("sms_address", Отправитель));
КонецЕсли;
МассивАдресата = Новый Массив;
Идентификатор1С = Строка(Новый УникальныйИдентификатор);
МассивАдресата.Добавить(Новый Структура("msisdn, message_id", Адресат.Значение, Идентификатор1С));
ОчередноеСообщение.Вставить("to", МассивАдресата);
МассивСообщений.Добавить(ОчередноеСообщение);
СохранитьСообщениеВОтправленных(Новый Структура("Адресат, ТекстСообщения, Идентификатор1С", Адресат.Значение, Текст, Идентификатор1С));
КонецЦикла;
СтруктураОтправки.Вставить("messages", МассивСообщений);
Если ИспользоватьПользовательскийКласс Тогда
СтруктураОтправки.Вставить("options", Новый Структура("class, from", Класс, Новый Структура("sms_address", Отправитель)));
КонецЕсли;
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
СтрокаJSON = Запись.Закрыть();
Соединение = Новый HTTPСоединение(Сервер, 443, Логин, Пароль,,, Новый ЗащищенноеСоединениеOpenSSL());
ЗапросHTTP = Новый HTTPЗапрос;
ЗапросHTTP.Заголовки.Вставить("Content-type", "application/json");
ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаJSON);
ЗапросHTTP.АдресРесурса = АдресЗапроса;
Ответ = Соединение.ВызватьHTTPМетод("POST",ЗапросHTTP);
Текст полученного JSON-файла
{
"messages": [
{
"content": {
"short_text": "SMS text"
}
,
"from": {
"sms_address": "SMS Naming"
}
,
"to": [
{
"msisdn": "msisdn here",
"message_id": "UUID here"
}
]
}
]
}
Ошибка кодировки
Если в ответ на SMS приходит ответ
{"code":400,"message":"parsing body body from \"\" failed, because invalid character 'ï' looking for beginning of value"}
измените кодировку: в 1С вместо «UTF-8» установите «CESU-8».
Это исправление нужно внести в строчке «ЗапросHTTP.УстановитьТелоИзСтроки (Строка JSON)»
Также вы можете интегрироваться с 1С с помощью специального расширения или обработки
import requests
from requests.auth import HTTPBasicAuth
def sent_message(login, password, naming, to, text_message):
url = 'https://omnichannel.mts.ru/http-api/v1/messages'
body = {
"messages": [
{
"content": {
"short_text": text_message
},
"from": {
"sms_address": naming
},
"to": [
{
"msisdn": to
}
]
}]
}
resp = requests.post(url , json=body, auth = HTTPBasicAuth(login, password))
return resp
def check_message(login, password, message_id):
url = 'https://omnichannel.mts.ru/http-api/v1/messages/info'
body = {"int_ids": [message_id]}
resp_info = requests.post(url , json=body, auth = HTTPBasicAuth(login, password))
return resp_info
# Параметры отправки
login = 'ЛОГИН_из_личного_кабинета_раздел_интеграции'
password = 'ПАРОЛЬ_из_личного_кабинета_раздел_интеграции'
naming = 'НЕЙМИНГ_согласованное_имя_отправителя_из_ЛК_Маркетолога'
text_message = 'Текст сообщения'
to = '79001111111'
# Отправка сообщения
sent_message(login, password, naming, to, text_message)
# Проверка статуса
if resp.status_code == 200:
message_id = resp.json()['messages'][0]["internal_id"]
print("Запрос отработал успешно message_id = " + message_id)
resp_info = check_message(login, password, message_id)
if resp_info.status_code == 200:
event_code = resp_info.json()["events_info"][0]["events_info"][0]["status"]
if event_code == 200:
print("SMS отправлено получателю " + to + ". message_id = " + message_id)
elif event_code == 201:
print("SMS НЕ отправлено message_id = " + message_id + " Детали см по кодам ошибок в документации " + str(resp_info.content))
else:
print("Запрос не отработал. Детали: " + str(resp.content))
Скачать файлом
<?php
class Client
{
/**
* @var string
*/
var $host;
/**
* @var string
*/
var $auth;
var $timeout;
/**
* @param $host string
* @param $login string
* @param $password string
*/
function __construct($host, $login, $password, $timeout = 60)
{
$this->host = $host;
$this->auth = "Basic " . base64_encode($login . ":" . $password);
$this->timeout = $timeout;
}
/**
* @param $naming string
* @param $text string
* @param $phone string
* @return $id string
*/
function sendSms($naming, $text, $phone)
{
$req = [
"messages" => [
[
"content" => [
"short_text" => $text
],
"to" => [
[
"msisdn" => $phone
]
],
]
],
"options" => [
"class" => 1,
"from" => [
"sms_address" => $naming,
],
]
];
$respStr = $this->curlRequest("messages", json_encode($req), [], "POST");
$resp = json_decode($respStr, true);
if (isset($resp["code"])) {
var_dump($respStr);
return "0";
}
if (!isset($resp["messages"][0]["internal_id"])) {
var_dump($respStr);
return "0";
}
var_dump("successes response:", $respStr);
return $resp["messages"][0]["internal_id"];
}
/**
* @param $ids []string
* @return array []
*/
function getSmsInfo($ids)
{
$respStr = $this->curlRequest("messages/info", json_encode(["int_ids" => $ids]), [], "POST");
$resp = json_decode($respStr, true);
if (isset($resp["code"])) {
var_dump($respStr);
return [];
}
var_dump("successes response:", $respStr);
return $resp;
}
/**
* @param $url
* @param $data
* @param $headers
* @return bool|string
*/
function curlRequest($url, $data = NULL, $headers = NULL, $method = "GET")
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->host . $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
if (!empty($data)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$headers = array_merge($headers, ["Authorization: " . $this->auth, "Content-Type: application/json; charset=utf-8"]);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
$response = curl_exec($ch);
if (curl_error($ch)) {
trigger_error('Curl Error:' . curl_error($ch));
}
curl_close($ch);
return $response;
}
}
$client = new Client("https://omnichannel.mts.ru/http-api/v1/", "ЛОГИН", "ПАРОЛЬ");
// отправка сообщения
$id = $client->sendSms("НЕЙМИНГ", "ТЕКСТ СООБЩЕНИЯ", "79999999999"); // отправка смс
// если $id == 0, то была ошибка запроса
if ($id != "0") {
// получение статуса по id сообщения
$status = $client->getSmsInfo([$id]);
var_dump($status);
}
📌Отправка сообщений методом GET
Тема письма
Доступ для GET запроса [ИНН организации]
Текст
Название организации, ИНН, логин от подключения, IP-адрес, до которого нужно открыть доступ
Логин от подключения указан в личном кабинете: Рассылки по своей базе PRO → Интеграции → API
Параметры запроса
Query Parametrs | Тип данных | Комментарий |
---|---|---|
login | string | Логин |
password | string | Пароль |
msisdn | string | Номер телефона адресата. Формат: 79161234567 |
from | string | Имя отправителя, которое видит получатель |
message | string | Текст сообщения. Рекомендуем отправлять до 8 сегментов в одном SMS: 536 символов на кириллице и 1224 на латинице. Кодировка — UTF-8. |
Пример запроса
GET /get/send-sms
Content-type: application/json
https://api-adapter.marketolog.mts.ru/get/send-sms?login=g_tRW134CVLgdPe4&password=ERGfdg4WK&msisdn=79161234567&from=test_naming&message=test
Примеры ответов
Код https-ответа — 200
⚠️Успешный ответ означает, что сообщение принято платформой для обработки. HTTPS-код ответа 200 не связан со статусом сообщения 200 и не означает, что сообщение отправлено.
Параметр | Тип данных | Описание |
msisdn | string | Номер телефона адресата |
string | Email адресата — для сообщений на email | |
message_id | string | Идентификатор сообщения клиента |
internal_id | string | Внутренний идентификатор сообщения |
{
"messages": [
{
"msisdn": "79117903795",
"email": "example@mail.ru",
"message_id": "uuid",
"internal_id": "uuid2"
}
]
}
Параметры
Параметр | Тип данных | Описание |
code | integer | Код ошибки — смотрите коды ошибок в ответе на запрос отправки сообщения — ниже |
message | string | Описание ошибки — смотрите коды ошибок в ответе на запрос отправки сообщения ниже |
Код http-ответа — 400
{ "code": 802, "message": "Bad credentials" }
Код http-ответа 200 возвращается, когда общая структура запроса и авторизация корректны. Если при обработке сообщения из списка возникла ошибка — она будет описана в полях «code» и «message».
Если получите код http-ответа, которого нет в списке — напишите в техподдержку
Код http-ответа | Код ошибки | Наименование ошибки | Описание |
200 | 806 | recipient is required | Не указан получатель сообщения в соответствующем параметре msisdn/email, либо пустое поле "to" |
200 | 807 | msisdn validation failed | Введен некорректный номер получателя (например, начинается с символа "+") |
400 | 802 | bad credentials | Неверный логин или пароль. |
400 | 803 | MessageLimit has been expired | Превышен лимит на отправку сообщений. Максимальная пропускная способность подключения — 10 SMS в секунду |
400 | 804 | content is required | Отсутствует текст сообщения в соответствующем параметре short_text / rich_text / email_template_id / vk_template_name / ok_template_name |
400 | 805 | Template info unavailable | Недоступен сервис макетов |
400 | 808 | Template info not found | Шаблон с указанным email_template_id не найден |
401 | 401 | unauthenticated for invalid credentials | Заголовок авторизации отсутствует, либо нет токена/не валидный формат токена |
422 | 602 | {param_name} in body is required | Отсутствует обязательный параметр {param_name} |
📌Получение статусов сообщений методом POST
Запрос
POST /messages/info
Content-type: application/json
Параметр | Тип | Описание | Обязательность |
msg_ids array of | strings | Внешний (клиентский) идентификатор сообщения ⚠️ До 500 элементов в массиве | Должно присутствовать хотя бы одно из полей |
int_ids array of | strings | Внутренний идентификатор сообщения платформы. Рекомендуется делать запросы по статусам сообщений с использованием данного поля ⚠️ До 500 элементов в массиве |
Ответ
Ответ представляет из себя массив "events_info", внутри которого будут объекты со списком событий по каждому сообщению (отправка, доставка и т.д.). Структура элемента массива "events_info":
Параметр | Тип | Описание |
events_info | array of objects | Массив объектов с информацией по каждому событию сообщения |
key | string | Внутренний идентификатор сообщения (такой же как в поле "internal_id" в объекте события) |
error | bool | Необязательное поле. Приходит значение true если во время обработки событий по сообщениям возникли ошибки. |
error_description | string | Необязательное поле. Текстовое описание ошибки, возникшей во время обработки событий по сообщениям. |
Структура объекта события
Параметр | Тип | Описание |
message_id | string | Идентификатор сообщения клиента |
naming | string | Нейминг сообщения |
destination | string | Номер отправителя |
status | uint32 | Код события. Смотрит список статусов |
channel | uint32 | Идентификатор исходящего канала. Cм. Справочник каналов |
total_parts | uint32 | Кол-во сегментов сообщения |
received_at | string | Дата и время, когда сообщение было принято http-шлюзом |
event_at | string | Дата и время события (отправки, доставки и т.д.) |
internal_errors | array(dtype=uint32) | Массив внутренних кодов ошибок. Null, если ошибок нет |
internal_id | string | Внутренний идентификатор сообщения |
{
"msg_ids": [
"string"
],
"int_ids": [
"string"
]
}
{
"int_ids": [
"88b1-4622-9308", "88b1-4646-9109"
]
}
{
"events_info": [
{
"events_info": [
{
"channel": 4,
"destination": "79870061042",
"event_at": "2021-05-18T13:45:01.000+03:00",
"internal_errors": null,
"internal_id": "c128187b-145f-4b86-b47f-8e99cf513a59",
"message_id": "10345678-f123-4694-91d7-233df79f65445",
"naming": "viber_naming",
"received_at": "2021-05-18T13:45:00.000+03:00",
"status": 200,
"total_parts": 1
},
{
"channel": 4,
"destination": "79870061042",
"event_at": "2021-05-18T13:45:05.000+03:00",
"internal_errors": null,
"internal_id": "c128187b-145f-4b86-b47f-8e99cf513a59",
"message_id": "10345678-f123-4694-91d7-233df79f65445",
"naming": "viber_naming",
"received_at": "2021-05-18T13:45:00.000+03:00",
"status": 300,
"total_parts": 1
}
],
"key": "c128187b-145f-4b86-b47f-8e99cf513a59"
}
]
}
📌Получение статусов методом GET
Параметры запроса
Query Parametrs | Тип данных | Комментарий |
---|---|---|
login | string | Логин |
password | string | Пароль |
msg_ids | string | Внешний (клиентский) идентификатор сообщения |
from | string | Имя отправителя SMS (нейминг), которое видит получатель |
Пример запроса получения статусов сообщений
GET /get/sms-info Content-type: application/json
https://api-adapter.marketolog.mts.ru/get/sms-info?&login=g_tRWasertVLgdPe4&password=sd3RVaOyWK&msg_ids=6eca893e2f-19e2-4118-b706-7168e75cd57f&from=test_naming
Пример успешного ответа
{
"events_info": [
{
"key": "b9b9d951-ccb4-4bc8-8aba-c50bfdada6be",
"events_info": [
{
"message_id": "b9b9d951-ccb4-4bc8-8aba-c50bfdada6be",
"naming": "mtscom_t",
"destination": "79870061042",
"status": 200,
"channel": 1,
"total_parts": 1,
"received_at": "2022-07-26T10:43:39+03:00",
"event_at": "2022-07-26T10:43:39+03:00",
"internal_errors": null,
"internal_id": "7bbbe11e-13f0-40cc-a166-7192bf2d7199"
},
{
"message_id": "b9b9d951-ccb4-4bc8-8aba-c50bfdada6be",
"naming": "mtscom_t",
"destination": "79870061042",
"status": 300,
"channel": 1,
"total_parts": 1,
"received_at": "2022-07-26T10:43:39+03:00",
"event_at": "2022-07-26T10:43:41+03:00",
"internal_errors": null,
"internal_id": "7bbbe11e-13f0-40cc-a166-7192bf2d7199"
}
]
}
]
}
Приём входящих SMS
Платформа может принимать входящие SMS и отправлять их в вашу систему.
⚠️ Чтобы получать входящие отправьте запрос на templates@mts.ru
Структура входящего сообщения
№ | Параметр | Тип данных | Описание |
---|---|---|---|
1 | from | object | Объект, содержащий имя отправителя |
2 | from.received_at | datetime | Время, когда пришло сообщение от пользователя в платформу |
3 | from.user_contact | string | Номер телефона отправителя |
4 | from.naming | string | Номер для входящих SMS (ваше имя отправителя) |
5 | content | object | Объект, содержащий контент |
6 | content.content_type | string | Тип контента |
7 | content.text | string | Текст сообщения |
8 | file_url | string | URL картинки/файла. Не используется в SMS |
9 | file_name | string | Наименование файла. Не используется в SMS |
10 | channel_id | int | Канал, из которого пришло сообщение. Для SMS = 1 |
11 | internal_id | string | id сообщения |
{
"messages": [
{
"content": {
"text": "some message"
},
"from": {
"naming": "4444",
"user_contact": "79117903795",
"received_at": "2022-02-04T00:00:00Z"
},
"channel_id": 1,
"internal_id": "10345678-f123-4694-91d7-233df79f65445"
}
]
}
Код HTTP-ответа должен быть:
- 200 OK,
- 400 — ошибки обработки параметров,
- 500 — недоступность сервисов.
⚫️ Авторизация по токену
Ниже описаны методы, которые можно использовать, если авторизуетесь по токену
Параметры аутентификации
Получите токен в личном кабинете МТС Маркетолога: Рассылки по своей базе PRO → Интеграции → API → Создать подключение → Создать токен. Чтобы авторизоваться, передавайте токен в заголовках запроса (Authorization: Bearer token). Полученный токен действует год, после этого автоматически обновляется.
📌Отправка сообщений методом POST
POST https://api.mts.ru/client-omni-adapter_production/1.0.2/mcom/messageManagement/messages
Тело запроса
Запрос состоит из массива сообщений submits и обязательного параметра naming.
Параметр | Тип данных | Обязательность | Описание |
---|---|---|---|
submits | array | Да | Данные для отправки сообщений. Максимальное количество элементов: 1000 |
naming | string | Да | Имя отправителя |
Структура сообщения: элемент массива "submits"
Параметр | Тип данных | Обязательность | Описание |
---|---|---|---|
msid | string | Да | Номер получателя |
message | string | Да | Текст сообщения. Максимальная поддерживаемая длина: 2000 символов |
Пример тела запроса
{
"submits": [
{
"msid": "79042807645",
"message": "Текст сообщения"
}
],
"naming": "Taxi"
}
Пример ответа
{
"code": 2147483647,
"description": "string",
"data": {
"submitResults": [
{
"msid": "string",
"messageID": 99999999999,
"code": "OK"
}
]
}
}
Пример ответа с ошибкой
{
"status": 1000,
"code": 2147483647,
"description": "string",
"validationErrors": [
"string"
]
}
📌Получение конкретного сообщения методом GET
Пример запроса
https://api.mts.ru/client-omni-adapter_production/1.0.2/mcom/messageManagement/messages/13
Пример ответа
{
"code": 2147483647,
"description": "string",
"data": [
{
"messageID": 99999999999,
"creationDate": "string",
"Type": "MO",
"text": "string",
"senderMsid": "string",
"senderName": "string",
"targetMsid": "string",
"targetName": "string"
}
]
}
Пример ответа с ошибкой
{
"status": 1000,
"code": 2147483647,
"description": "string",
"validationErrors": [
"string"
]
}
📌Получение статусов сообщений методом GET
GET/mcom/messageManagement/messages/status
Входные параметры
Query Parametrs | Тип данных | Обязательность | Описание |
---|---|---|---|
messageIDs | string | Да | Идентификаторы сообщений. Максимальное количество записей: 1000. Передаем через запятую: 1,2,3 |
Пример запроса
https://api.mts.ru/client-omni-adapter_production/1.0.2/mcom/messageManagement/messages/status?messageIDs=1
Пример ответа
{
"code": 2147483647,
"description": "string",
"data": [
{
"messageID": 999999999999999,
"statuses": [
{
"msid": "string",
"status": "Pending",
"date": "2132-16-36T85:91:71",
"userDeliveryDate": "6179-74-91T24:00:70u44",
"partCount": 2147483647
}
]
}
]
}
Пример ответа с ошибкой
{
"status": 1000,
"code": 2147483647,
"description": "string",
"validationErrors": [
"string"
]
}
📌Получение статуса сообщения методом GET
GET/mcom/messageManagement/messages/{messageID}/status
Пример запроса
https://api.mts.ru/client-omni-adapter_production/1.0.2/mcom/messageManagement/messages/13/status
Входные параметры
Query Parametrs | Тип данных | Обязательность | Описание |
---|---|---|---|
messageID | integer | Да | Идентификатор сообщения |
Пример ответа
{
"code": 2147483647,
"description": "string",
"data": [
{
"messageID": 999999999999999,
"statuses": [
{
"msid": "string",
"status": "Pending",
"date": "6679-27-05T20:27:60K96",
"userDeliveryDate": "0648-01-13T55:38:73",
"partCount": 2147483647
}
]
}
]
}
Пример ответа с ошибкой
{
"status": 1000,
"code": 2147483647,
"description": "string",
"validationErrors": [
"string"
]
}
📌Получение баланса и кредитного лимита методом GET
GET balanceManagement/balance/full
Пример запроса
https://api.mts.ru/client-omni-adapter_production/1.0.2/balanceManagement/balance/full
Пример ответа
{
"balance": 4972.85,
"creditLimit": 100.85
}
Пример ответа с ошибкой
{
"status": 1000,
"code": 2147483647,
"description": "string",
"validationErrors": [
"string"
]
}
📌Получение стоимости SMS методом POST
POST /mcom/messageManagement/info
Параметры запроса
Параметр | Тип данных | Обязательность | Описание |
---|---|---|---|
messageIds | array | Да | Массив идентификаторов отправленных сообщений |
⚠️Ограничение: не более 1000 параметров.
Пример запроса
{
"messageIds": [
"171e0ccf-afa3-4a8c-bf2d-474ae3b5133c",
"671e0fcf-aca3-3a8c-ba3d-474ae3b5267d"
]
}
Параметры ответа
Параметр | Тип данных | Обязательность | Описание |
---|---|---|---|
messageId | string | Да | Идентификатор отправленного сообщения |
trafficPatternType | string | Да | Тип сообщения: A - авторизационное; T - шаблонированное; R - рекламное; |
cost | string | Да | Стоимость |
Пример ответа
[
{
"messageId": "171e0ccf-afa3-4a8c-bf2d-474ae3b5133c",
"cost": "1.75",
"trafficPatternType": "A"
}
]
Пример ответа с ошибкой
{
"status": 1000,
"code": 2147483647,
"description": "string",
"validationErrors": [
"string"
]
}
📌Получение статистики по пакетам за текущий месяц методом GET
GET mcom/messageManagement/statistics
Входные параметры
Query Parametrs | Тип данных | Обязательность | Описание |
---|---|---|---|
year | integer | Нет | Год |
month | month | Нет | Месяц |
⚠️Если query params не переданы метод вернет статистику за текущий период
Пример запроса
https://api.mts.ru/client-omni-adapter_production/1.0.2/mcom/messageManagement/statistics?year=2023&month=06
Параметры ответа
Параметр | Тип данных | Обязательность | Описание |
---|---|---|---|
year | integer | Да | Год |
month | integer | Да | Месяц |
packetSizeNonTemplateMts | integer | Нет | Размер пакета обычных SMS МТС |
packetSizeNonTemplateAll | integer | Нет | Размер пакета обычных SMS на операторов РФ |
packetSizeTemplateMts | integer | Нет | Размер пакета шаблонированных SMS на МТС |
packetSizeNonTemplateAll | integer | Нет | Размер пакета шаблонированных SMS на всех операторов РФ |
packetSizeAuthMts | integer | Нет | Размер авторизационного пакета SMS на МТС |
packetNonTemplateMtsRemainder | integer | Нет | Остаток пакета обычных SMS МТС |
packetNonTemplateAllRemainder | integer | Нет | Остаток пакета обычных SMS на всех операторов РФ |
packetTemplateMtsRemainder | integer | Нет | Остаток пакета шаблонированных SMS на МТС |
packetTemplateAllRemainder | integer | Нет | Остаток пакета шаблонированных SMS на всех операторов РФ |
packetAuthMtsRemainder | integer | Нет | Остаток авторизационного пакета на МТС |
quantityNonTemplateSmsOverPacketMts | integer | Нет | Количество SMS сверх обычного пакета на МТС |
quantityNonTemplateSmsOverPacketAll | integer | Нет | Количество SMS сверх обычного пакета на операторов РФ |
quantityServeceSmsOverPacketAll | integer | Нет | Количество сервисных SMS сверх пакета на МТС |
quantityAuthSmsOverPacketAll | integer | Нет | Количество авторизационных SMS сверх пакета на МТС |
quantityTemplateSmsOverPacketAll | integer | Нет | Количество SMS сверх шаблонированного пакета на операторов РФ |
quantityIncoming | integer | Нет | Количество входящих SMS |
quantityInternational | integer | Нет | Количество SMS на международных операторов |
totallyQuantitySms | integer | Нет | Суммарное количество SMS в месяц |
Пример ответа
{
"year": 2023,
"month": 6,
"packetSizeNonTemplateMts": 4,
"packetSizeNonTemplateAll": 4,
"packetSizeTemplateMts": 2,
"packetSizeTemplateAll": 2,
"packetSizeAuthMts": 2,
"packetNonTemplateMtsRemainder": 2,
"packetNonTemplateAllRemainder": 2,
"packetTemplateMtsRemainder": 0,
"packetTemplateAllRemainder": 0,
"packetAuthMtsRemainder": 0,
"quantityNonTemplateSmsOverPacketMts": 2,
"quantityNonTemplateSmsOverPacketAll":2,
"quantityServiceSmsOverPacketAll": 3,
"quantityAuthSmsOverPacketAll": 3,
"quantityTemplateSmsOverPacketAll": 3,
"quantityIncoming": 3,
"quantityInternational": 5,
"totallyQuantitySms": 32
}
Пример ответа с ошибкой
{
"status": 1000,
"code": 2147483647,
"description": "string",
"validationErrors": [
"string"
]
}
⚫️Callback
Платформа может возвращать статусы отправленных сообщений в порты 80 и 443.
Тема письма
[ИНН организации]. Одобрить адрес для коллбэков, Маркетолог
Текст
Здравствуйте!
Название организации, ИНН
Добавьте наш адрес для колбеков в одобренные: [адрес]
Параметры callback
Название | Тип | Описание |
message_id | string | Идентификатор сообщения клиента |
destination | string | Номер отправителя. ⚠️Если в клиентском URL используется протокол HTTPS (не HTTPS), данное поле не передается |
naming | string | Нейминг, использованный в сообщении |
status | uint32 | Код события. Cм. Список статусов |
channel | uint32 | Идентификатор исходящего канала. Cм. Справочник каналов |
total_parts | uint32 | Кол-во сегментов сообщения |
received_at | string | Дата и время, когда сообщение было принято http-шлюзом |
event_at | string | Дата и время последнего события. |
internal_errors | array(dtype=uint32) | Массив внутренних кодов ошибок. Null, если ошибок нет |
internal_id | string | Внутренний идентификатор сообщения |
{
"items": [
{
"message_id": "uuid",
"internal_id": "76305352-7994-4f2e-984a-95a39432d777",
"naming": "string",
"destination": "79117903795",
"status": 300,
"channel": 1,
"total_parts": 1,
"received_at": "2020-02-04T00:00:00Z",
"event_at": "2020-02-04T00:00:00Z",
"internal_errors": [
10100,
10801
]
}
]
}
Код HTTPS-ответа должен быть 204 (No Content)
⚫️ Коды событий и ошибок
Коды событий Status
Код статуса (для интеграции с basic authorization) | Название статуса (для интеграции с авторизацией по ткену) | Описание | Конечный статус? |
---|---|---|---|
— | Pending | Сообщение ожидает отправки | Нет |
200 | Sending | Сообщение успешно отправлено, но еще не доставлено | Нет |
201 | NotSent | Сообщение не отправлено | Да |
202 | Sending | В сообщении, состоящем из нескольких сегментов, была успешно отправлена лишь их часть. Например, 2 из 3 сегментов | Нет |
300 | Delivered | Сообщение было доставлено | Да |
301 | NotDelivered | Сообщение не было доставлено | Да |
302 | Delivered | Пользователь получил только часть сообщения. Например, 2 из 3 сегментов | Да |
В течение 3 дней после отправки SMS продолжаются попытки доставить его. После 3 дней статус сообщения будет окончательным.
Описание ошибок
Внешний код | Внутренний код | Описание |
0 | 0 | Сигнальная сеть оператора не вернула расширенный статус. |
1 | 1 | Получатель был не в сети или в момент отправки SMS номер никому не принадлежал |
2 | 2 | Получатель был не в сети всё время, пока мы пытались доставить SMS |
3 | 3 | Абонент заблокирован, поставил блокировку на прием SMS, либо находится в роуминге и не может получить SMS |
4 | 4 | Ошибка в процессе доставки, попробуйте ещё раз |
5 | 5 | Неизвестный абонент, проверьте номер получателя |
6 | 6 | У получателя не подключена услуга приема SMS |
7 | 7 | Коммутационное оборудование, на котором зарегистрирован абонент не отвечает |
8 | 8 | Номер указан некорректно либо телефон получателя выключен уже очень давно. Правильный формат для номеров РФ: 70000000000 |
9 | 9 | Запрещенный абонент |
10 | 10 | Имя отправителя не согласовано у оператора получателя |
11 | 11 | У получателя не подключен приём SMS |
12 | 12 | Ошибка на уровне мобильного устройства абонента. |
13 | 13 | У получателя ограничены услуги связи |
14 | 14 | Указанное имя отправителя не согласовано или не подключено |
15 | 15 | CUG reject |
21 | 21 | Not Supported facility |
22 | 22 | Not Supported roaming |
31 | 31 | Busy subscriber |
32 | 32 | Busy subscriber over GPRS |
34 | 34 | Ошибка в SMS-центре |
35 | 35 | Data Missing |
36 | 36 | Unexpected Data Value |
40 | 40 | Скорее всего у получателя нет памяти в телефоне, чтобы принять сообщение |
41 | 41 | Ошибка в SMS-центре |
42 | 42 | Not Supported by equipment |
43 | 43 | Not Supported by equipment |
44 | 44 | Message Raplace Failure |
45 | 45 | Unspecific PID Error |
46 | 46 | Message Class Not Supported |
47 | 47 | DCS Error |
48 | 48 | TPDU Not Supported |
49 | 49 | SIM Full |
50 | 50 | No SMS Storage in SIM |
53 | 53 | Busy SIM Application Toolkit |
54 | 54 | Data Download Error |
60 | 60 | Absent subscriber |
61 | 61 | Absent subscriber Detached |
62 | 62 | Оператор получателя не нашёл абонента в своей базе. Скорее всего получатель в процессе смены оператора. Отправьте SMS ещё раз |
63 | 63 | У получателя временно ограничен приём SMS. Попробуйте ещё раз |
64 | 64 | Absent subscriber Deregistered |
65 | 65 | Absent subscriber Purged |
66 | 66 | Absent subscriber over GPRS Page Fail |
67 | 67 | Absent subscriber over GPRS Detached |
68 | 68 | Absent subscriber over GPRS Deregistered |
69 | 69 | Absent subscriber over GPRS Purged |
70 | 70 | Absent subscriber unidentified over MSC |
71 | 71 | Absent subscriber unidentified over GPRS |
128 | 128 | Абонент не существует или у него не подключена функция приема SMS |
148 | 148 | Получатель был недоступен |
170 | 170 | Внутренняя ошибка сервера. Обратиться в службу поддержки |
171 | 171 | Запрещена отправка дубликатов. Не повторяйте отправку сообщений на которые возвращается данная ошибка |
172 | 172 | Некорректная кодировка для многосоставного сообщения. Необходимо передавать все части многосоставного сообщения в едином data_coding |
245 | 245 | Время ожидания от SMS-центра оператора истекло |
252 | 252 | Запрещена отправка сообщений на данному абоненту. |
253 | 253 | Текст сообщения содержит запрещенные слова. |
254 | 254 | Запрещена отправка сообщений с данного имени отправителя. |
255 | 255 | Внутренняя ошибка оператора получателя |
601 | 601 | Недопустимая Длина Сообщения. |
608 | 608 | Системная ошибка в SMS-центре, отправьте SMS ещё раз |
610 | 610 | Имя отправителя не согласовано у этого оператора |
611 | 611 | Номер телефона указан некорректно. Правильный формат для номеров РФ: 70000000000 |
688 | 688 | Троттлинг |
698 | 698 | Истек период валидности сообщения. |
700 | 700 | Код временной ошибки приложения ESME |
701 | 701 | Код ошибки постоянного приложения приемника ESME |
857 | 857 | ESME Запрещено использовать указанную операцию |
950 | 950 | Приостанавливается доставка смс сообщений от банковских номеров на 24 ч |
1058 | 1058 | Слишком длинное SMS |
1078 | 1078 | На SMSC UMS Huawei ошибка означает, что не был найден маршрут для отправки смс на указанный номер получателя, или формат номера «Б» неправильно задан |
1281 | 1281 | PDU запрещена по правилам роутинга (invalid sender). С этой ошибкой лучше обратиться в поддержку: supmarketolog@mts.ru. |
1283 | 1283 | Шаблон сообщения не соответствует согласованным |
1284 | 1284 | В тексте сообщения найдены запрещенные слова или части слов. |
1299 | 1299 | Ошибка отправки многосоставного сообщения |
1301 | 1301 | Оператор получателя определил SMS как спам |
1537 | 1537 | Заданное имя отправителя у получателя находится в черных списках. |
10 | 10100 | Указанное имя отправителя не согласовано или не подключено |
10 | 10110 | Имя отправителя содержит некорректные символы |
10 | 10111 | Нет данных в OmniMessage о client_connection_id |
10 | 10112 | Имя отправителя не согласовано у оператора получателя |
10 | 10113 | Неизвестный CallDirection |
10 | 10114 | Нет данных в OmniRoute о ChannelTypeId |
901 | 10600 | В подключении не указан маршрут, обратитесь в техподдержку |
901 | 10601 | Ошибка в настройке маршрута |
901 | 10602 | Не найдено подходящее правило в маршруте |
901 | 10603 | Имя отправителя не согласовано у оператора получателя |
901 | 10604 | Шаблон не согласован с оператором получателя |
901 | 10605 | Запрет отправки пользователем. |
901 | 10606 | Превышен лимит ожидания от одного из сервисов платформы, попробуйте отправить SMS ещё раз |
901 | 10607 | gRPC запрос на отправку сообщения закрыт со стороны клиентского шлюза. |
901 | 10608 | Превышен лимит сообщений в месяц, установленный в настройках подключения (month_message_limit) |
901 | 10609 | Не найдена резервная группа. |
900 | 10700 | Превышен лимит ожидания от одного из сервисов платформы, отправьте SMS ещё раз |
900 | 10701 | Ошибка транслитерации. |
11 | 10800 | Не указан номер телефона получателя |
11 | 10801 | Пустой параметр dst_naming в OmniRoute |
11 | 10802 | Номер телефона указан некорректно. Правильный формат для номеров РФ: 70000000000 |
11 | 10803 | Не определился оператор и регион получателя. Проверьте номер — вероятно, он некорректный |
11 | 10900 | Блокировка по услуге 'Оптимизация трафика'. |
10 | 10901 | Блокировка по услуге 'Мониторинг клиента'. |
11 | 10902 | Блокировка по услуге 'Мониторинг абонента'. |
11 | 10903 | Блокировка по услуге 'Мониторинг всех абонентов'. |
11 | 10904 | Абонент в глобальном стоп-листе (BlockBlacklistGlobal). |
11 | 10905 | Получатель у вас в черном списке |
11 | 10906 | Абонент не в белом списке (BlockWhitelistPersonal). |
11 | 10908 | Изменен владелец номера лицевого счета |
11 | 10909 | Смена владельца номера |
11 | 10910 | Финансовая блокировка клиента |
125 | 125 | Номер получателя не существует |
904 | 11000 | Не удалось создать Firebase приложение на основе авторизационных данных |
904 | 11001 | Не удалось создать приложение для отправки сообщений через Firebase |
904 | 11002 | Возникли проблемы при установке прокси для Firebase |
904 | 11003 | Сообщение не отправлено получателю через Firebase |
904 | 11010 | Сертификат p12 для APNs не расшифрован |
904 | 11011 | Сертификат p8 для APNs не расшифрован |
904 | 11012 | Возникли проблемы с использованием прокси-сервера для APNs |
904 | 11013 | Сообщение не отправлено получателю |
904 | 11021 | Возникли ошибки при запросе к БД |
904 | 11022 | Возникли ошибки при запросе к БД |
904 | 11023 | Указан некорректный тип платформы клиента |
904 | 11024 | Сертификат не обработан/не сохранен |
904 | 11025 | Отсутствуют данные для типа платформы |
904 | 11040 | Неизвестный тип платформы (aPNS/Firebase/HMS) |
904 | 11050 | По указанному номеру телефона пользователя не найдены активные подписчики |
904 | 11051 | Возникли ошибки при запросе к базе данных |
904 | 11052 | Указан неверный тип платформы в базе данных |
904 | 11060 | Ошибка преобразования сообщения |
904 | 11061 | Отсутствуют данные о сообщении |
904 | 11062 | Не указан текст сообщения для отправки |
910 | 11100 | Не получено уведомление о доставке. |
910 | 11110 | Ошибка преобразования proto сообщения. |
910 | 11120 | Ошибка загрузки данных из БД при старте сервиса. |
910 | 11121 | Ошибка загрузки данных в БД при остановке сервиса. |
910 | 11130 | Неизвестный тип события |
910 | 11131 | Ошибка обработки Submit_ok |
910 | 11132 | Ошибка обработки Delivery_ok |
903 | 11200 | Причина неизвестна, истёк срок доставки SMS |
903 | 11201 | Сегмент не отправлен |
903 | 11203 | Один из сегментов SMS не отправлен — клиент получил не полное сообщение |
905 | 11300 | Не удалось отправить сообщение через sms-t |
905 | 11301 | Невалидный формат url для sms-t |
905 | 11302 | Невалидный формат url для proxy |
905 | 11303 | Невалидный ответ от sms-t |
905 | 11304 | Ошибки от сервиса sms-t |
905 | 11305 | Не удалось отправить сообщение в прямой Viber |
905 | 11306 | Невалидный формат url для Direct Viber |
905 | 11307 | Невалидный формат url для proxy |
905 | 11308 | Невалидный ответ от Direct Viber |
905 | 11310 | Необработанная ошибка |
905 | 11311 | Не смогли преобразовать данные к типу AuthData |
905 | 11312 | Не найден билдер |
905 | 11313 | Не найден yaml-файл |
905 | 11314 | Не смогли распарсить yaml-файл |
905 | 11315 | В yaml-файле нет нужной информации |
905 | 11316 | Невалидные данные для Divect Viber |
905 | 11317 | Не удалось определить тип сообщения для Direct Viber |
905 | 11340 | Ошибка преобразования proto сообщения |
905 | 11341 | В сообщении отсутствует поле MessageParams |
905 | 11342 | В сообщении отсутствуют данные необходимые для сервиса |
905 | 11350 | Неизвестная ошибка при отправке |
905 | 11351 | Достигнут предел переповторов отправки |
905 | 11352 | Неподдерживаемая ChannelGroupID |
905 | 11380 | Неизвестная ошибка при колбеке |
905 | 11381 | Клиент не подписан на канал |
905 | 11382 | Ошибка на стороне Viber-провайдера |
905 | 11383 | Неверные настройки аккаунта |
905 | 11384 | Ошибочный формат сообщения |
905 | 11385 | У пользователя не установлен Viber |
905 | 11386 | Устройство не поддерживает Viber |
905 | 11387 | Платежные ошибки |
905 | 11388 | Время жизни сообщения истекло (на стороне Viber). |
905 | 11389 | Ожидается ответ пользователя |
905 | 11390 | Не смогли определить нейминг для sms-t чата (МО трафик). |
906 | 11400 | Ошибка чтения сообщения из очереди обмена |
906 | 11401 | Ошибка преобразования внутреннего формата сообщения |
906 | 11410 | Ошибка парсинга URL прокси-сервера |
906 | 11411 | Ошибка аутентификации на стороне email-провайдера |
906 | 11412 | Ошибка отправки запроса в сторону email-провайдера |
906 | 11413 | Ошибки валидации сообщения |
906 | 11420 | Ответ от email-провайдера содержит ошибки |
906 | 11430 | Ошибка при записи события во внутреннюю очередь |
901 | 11700 | Дубликат сообщения (услуга дедубликации) |
901 | 11900 | Не подключен пакет SMS |
901 | 11901 | Пакет SMS закончился |
901 | 11902 | Пакет закончился. По всем сообщениям получено подтверждение корректной отправки |
901 | 11903 | Нет подходящего пакета SMS |