АPI МТС Маркетолога позволяет:
- отправлять SMS
- запрашивать статусы SMS
- получать коллбэки по статусу отправленных SMS
- получать входящие SMS
Ниже отвечаем на часто задаваемые вопросы и рассказываем, как настроить интеграцию двумя способами — по логину и паролю или по токену.
Часто задаваемые вопросы
Почему SMS не отправляются
- Не куплен тариф. Если у вас тестовый пакет SMS, его нужно подключать каждый день. Посмотреть тариф можно в личном кабинете, в разделе Тарифы
- Не подключено имя отправителя. Проверить статус имени можно в личном кабинете, в разделе Имена отправителя
- Имя отправителя подключено не на всех операторов — SMS отправляются только на подключённых операторов
- Из личного кабинета удалили пользователя, который создавал подключение. Если удалить пользователя, все созданные подключения удалятся вместе с ним — рассылка через них невозможна
Куда можно обратиться за помощью по интеграции
Если возникнут проблемы с интеграцией, напишите на supmarketolog@mts.ru. Чтобы мы могли помочь быстрее, добавьте в письмо подробности:
- название компании
- логин подключения
- описание проблемы
- пример сообщения: дата, время, system_id, имя отправителя, номер получателя, message_id, коды ошибок
- tcpdump, логи с ошибкой, статистика по ошибке
Какие есть технические ограничения
- До 5 тысяч запросов в минуту в совокупности — на отправку SMS и получение статусов
- До 10 тысяч сообщений в одном запросе
- Пропускная способность подключения — 10 SMS в секунду. Если отправляете больше 10 SMS в секунду, используйте запрос на отправку в буфер, чтобы сообщения попадали в очередь
https://omnichannel.mts.ru/http-api/v1/b/messages/- Максимальные размеры сообщений для каналов: 10 сегментов — 670 символов на кириллице и 1530 на латинице. Кодировка текста сообщения — UTF-8. Можно отправить и больше сегментов, но чем больше сегментов — тем выше вероятность некорректной доставки
Что нужно, чтобы подключить интеграцию
- Получите данные для авторизации: Личный кабинет МТС Маркетолога > Рассылки по своей базе PRO > Интеграции > API > Создать подключение
- Подключите имя отправителя
- Подключите тариф
Чтобы бесплатно протестировать отправки, можно использовать тестовое имя и пакет SMS
Способ 1. Авторизация по логину и паролю
Ниже описаны методы, которые можно использовать, если авторизуетесь по логину и паролю:
| Метод | 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
https://omnichannel.mts.ru/http-api/v1/messagesОписание объектов запроса
Запрос состоит из двух объектов
| Параметр | Тип данных | Описание |
|---|---|---|
| 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 | Да |
| 5 | ttl_sec | integer | Время жизни SMS в секундах, возможные значения: от 0 до 259200. Можно передавать как для каждого сообщения в массиве messages, так и общее для всех сообщений — в массиве options | Нет |
Пример запроса JSON
POST /messages
Content-type: application/json
Пример с использованием одного имени отправителя: два сообщения отправляются от имени SMS Naming. В этом случае объект "from" и, при необходимости, поле "class", прописываются один раз в объекте "options":
{
"messages": [
{
"ttl_sec":5,
"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"
}
]
}
]
}
Пример запроса из 1С
Текст = СтрЗаменить(ТекстСообщения, Символы.ПС, " ");
СтруктураОтправки = Новый Структура;
МассивСообщений = Новый Массив;
Для каждого Адресат Из Адресаты Цикл
ОчередноеСообщение = Новый Структура;
ОчередноеСообщение.Вставить("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С с помощью специального расширения или обработки
Пример запроса на Python
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
<?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
https://api-adapter.marketolog.mts.ru/get/send-smsЧтобы использовать GET-запросы, напишите нам supmarketolog@mts.ru. Мы откроем сетевые доступы до вашего IP-адреса. Темой письма укажите «Доступ для 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
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"
}
]
}- Ответ c ошибкой
| Параметр | Тип данных | Описание |
|---|---|---|
| code | integer | Код ошибки — перечислили их ниже |
| message | string | Описание ошибки — перечислили их ниже |
Код http-ответа 200 возвращается, когда общая структура запроса и авторизация корректны. Если при обработке сообщения из списка возникла ошибка — она будет описана в полях code и message.
Если получите код http-ответа, которого нет в списке — напишите нам supmarketolog@mts.ru
| Код 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
https://omnichannel.mts.ru/http-api/v1/messages/infoПараметры запроса
| Параметр | Тип | Описание | Обязательность |
|---|---|---|---|
| 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": "MTS_A2P_PRO",
"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": "MTS_A2P_PRO",
"received_at": "2021-05-18T13:45:00.000+03:00",
"status": 300,
"total_parts": 1
}
],
"key": "c128187b-145f-4b86-b47f-8e99cf513a59"
}
]
}
Получение статусов сообщений методом GET
https://api-adapter.marketolog.mts.ru/get/sms-infoПараметры запроса
| 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 — недоступность сервисов
Способ 2. Авторизация по токену
Ниже описаны методы, которые можно использовать, если авторизуетесь по токену.
Параметры аутентификации
Получите токен в личном кабинете МТС Маркетолога: Рассылки по своей базе PRO > Интеграции > API > Создать подключение > Создать токен.
Чтобы авторизоваться, передавайте токен в заголовках запроса (Authorization: Bearer token). Полученный токен действует год, после этого автоматически обновляется.
Отправка сообщений методом POST
https://api.mts.ru/client-omni-adapter_production/1.0.2/mcom/messageManagement/messagesЗапрос состоит из массива сообщений submits и обязательного параметра naming.
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| submits | array | Да | Данные для отправки сообщений. Максимальное количество элементов — 1 000 |
| naming | string | Да | Имя отправителя |
Структура сообщения: элемент массива submits.
| Параметр | Тип данных | Обязательность | Описание |
| msid | string | Да | Номер получателя |
| message | string | Да | Текст сообщения. Максимальная поддерживаемая длина — 2 000 символов |
Пример запроса
{
"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 | Да | Идентификаторы сообщений. Максимальное количество записей — 1 000. Передаём через запятую: 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": "2025-03-15T14:30:22Z",
"userDeliveryDate": "2025-03-15T14:30:25Z",
"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 | Да | Массив идентификаторов отправленных сообщений |
Ограничение: не более 1 000 параметров.
Пример запроса
{
"messageIds": [
"171e0ccf-afa3-4a8c-bf2d-474ae3b5133c",
"671e0fcf-aca3-3a8c-ba3d-474ae3b5267d"
]
}Параметры ответа
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| messageId | string | Да | Идентификатор отправленного сообщения |
| trafficPatternType | string | Да | Тип сообщения:
|
| 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 на операторов РФ |
| packetSizeAllNonTemplateNoBeelineNoMegafon | integer | Нет | Размер пакета обычных SMS на операторов РФ, кроме билайна и МегаФона |
| packetSizeTemplateMts | integer | Нет | Размер пакета шаблонированных SMS на МТС |
| packetSizeNonTemplateAll | integer | Нет | Размер пакета шаблонированных SMS на всех операторов РФ |
| packetSizeAuthMts | integer | Нет | Размер авторизационного пакета SMS на МТС |
| packetNonTemplateMtsRemainder | integer | Нет | Остаток пакета обычных SMS МТС |
| packetNonTemplateAllRemainder | integer | Нет | Остаток пакета обычных SMS на операторов РФ |
| packetSizeAllNonTemplateNoBeelineNoMegafonRemainder | integer | Нет | Остаток пакета обычных SMS на операторов РФ, кроме билайна и МегаФона |
| packetTemplateMtsRemainder | integer | Нет | Остаток пакета шаблонированных SMS на МТС |
| packetTemplateAllRemainder | integer | Нет | Остаток пакета шаблонированных SMS на всех операторов РФ |
| packetAuthMtsRemainder | integer | Нет | Остаток авторизационного пакета на МТС |
| quantityNonTemplateSmsOverPacketMts | integer | Нет | Количество SMS сверх обычного пакета на МТС |
| quantityNonTemplateSmsOverPacketAll | integer | Нет | Количество SMS сверх обычного пакета на операторов РФ |
| quantityAllNonTemplateNoBeelineNoMegafon | integer | Нет | Количество SMS сверх обычного пакета на операторов РФ, кроме билайна и МегаФона |
| quantityNonTemplateMegafon | integer | Нет | Количество SMS сверх обычного пакета на МегаФон |
| quantityNonTemplateBeeline | 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"
]
}Коллбэки
Платформа может возвращать статусы отправленных сообщений в порты 80 и 443. Чтобы получать коллбэки, добавьте адрес в личном кабинете при создании API подключения

Параметры коллбэков
| Название | Тип | Описание |
|---|---|---|
| message_id | string | Идентификатор сообщения клиента |
| destination | string | Номер отправителя. Если в клиентском URL используется протокол HTTPS (не HTTP), данное поле не передаётся |
| naming | string | Имя отправителя, которое использовали в сообщении |
| status | uint32 | Код события. Cмотрите Список статусов |
| channel | uint32 | Идентификатор исходящего канала. Всегда 1 — SMS |
| 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 | В сообщении, которое состоит из нескольких сегментов, была успешно отправлена лишь их часть. Например, два из трёх сегментов | Нет |
| 300 | Delivered | Сообщение было доставлено | Да |
| 301 | NotDelivered | Сообщение не было доставлено | Да |
| 302 | Delivered | Пользователь получил только часть сообщения. Например, два из трёх сегментов | Да |
В течение трёх дней после отправки SMS продолжаются попытки доставить его. После трёх дней статус сообщения будет окончательным.
Описание ошибок
| Внешний код | Внутренний код | Описание |
|---|---|---|
| 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 |
| 669 | 669 | Получатель не подтвердил свой номер телефона у оператора |
| 688 | 688 | Троттлинг |
| 698 | 698 | Истёк период валидности сообщения |
| 700 | 700 | Код временной ошибки приложения ESME |
| 701 | 701 | Код ошибки постоянного приложения приемника ESME |
| 857 | 857 | ESME Запрещено использовать указанную операцию |
| 950 | 950 | Приостанавливается доставка SMS от банковских номеров на 24 часа |
| 1058 | 1058 | Слишком длинное SMS |
| 1078 | 1078 | На SMSC UMS Huawei ошибка означает, что не был найден маршрут для отправки SMS на указанный номер получателя, или формат номера «Б» неправильно задан |
| 1279 | 1279 | Чтобы уточнить причину, напишите в техподдержку |
| 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 |
| - | 10301 | Не было соединения с SMS-центром. Техническая ошибка |
| 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 | 11307 | Невалидный формат url для proxy |
| 905 | 11310 | Необработанная ошибка |
| 905 | 11311 | Не смогли преобразовать данные к типу AuthData |
| 905 | 11312 | Не найден билдер |
| 905 | 11313 | Не найден yaml-файл |
| 905 | 11314 | Не смогли распарсить yaml-файл |
| 905 | 11315 | В yaml-файле нет нужной информации |
| 905 | 11340 | Ошибка преобразования proto сообщения |
| 905 | 11341 | В сообщении отсутствует поле MessageParams |
| 905 | 11342 | В сообщении отсутствуют данные необходимые для сервиса |
| 905 | 11350 | Неизвестная ошибка при отправке |
| 905 | 11351 | Достигнут предел переповторов отправки |
| 905 | 11352 | Неподдерживаемая ChannelGroupID |
| 905 | 11380 | Неизвестная ошибка при коллбэке |
| 905 | 11381 | Клиент не подписан на канал |
| 905 | 11383 | Неверные настройки аккаунта |
| 905 | 11384 | Ошибочный формат сообщения |
| 905 | 11387 | Платёжные ошибки |
| 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 | Не подключён тариф |
| 901 | 11901 | Пакет SMS закончился |
| 901 | 11902 | Пакет закончился. По всем сообщениям получено подтверждение корректной отправки |
| 901 | 11903 | Нет подходящего тарифа |