Функционал доступен при наличии лицензии SMG-API. |
В данном приложении описывается REST API шлюза SMG, предназначенное для управления конфигурацией и получения информации о состоянии устройства.
API предоставляет возможность выполнять CRUD-операции (Create, Read, Update, Delete) над объектами конфигурации посредством HTTP(S)-запросов.
Также API позволяет:
Перед началом работы с API необходимо:
1. Настроить API сервер шлюза
API → Сервер

2. Создать пользователя
Пользователю должны быть выданы права на управление конфигурацией.
API → Аккаунты

В веб-интерфейсе шлюза доступна страница Swagger, предназначенная для:
Тестирования API-запросов;
Просмотра структуры эндпоинтов;
Анализа форматов запросов и ответов.
API → Swagger
Формат данных:
Запросы и ответы: application/json
Аутентификация: Bearer Token
Для выполнения запросов через Swagger необходимо:
![]()
Для получения доступа к Swagger через HTTPS должны быть выполнены следующие условия:
При использовании встроенного в прошивку ECC-сертификата необходимо добавить исключение безопасности в браузере, поскольку данный сертификат не является доверенным сертификатом удостоверяющего центра. |
Для начала работы с API выполните следующие шаги:
curl -X POST http://<IP>:<PORT>/api/v1/login \
-H "Content-Type: application/json" \
-d '{"login":"<login>","password":"<password>"}'
|
curl -X GET http://<IP>:<PORT>/api/v1/config/interfaces \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <token>" |
Типовой сценарий взаимодействия с API:
Поддерживаются следующие HTTP(S)-методы:
GET-запросы поддерживают два режима работы:
1. Получение одного объекта:
GET /endpoint?id=<id> |
2. Получение списка объектов:
GET /endpoint |
В ответе возвращается соответствующий объект или массив объектов.
POST применяется для создания нового объекта и требует передачи всех обязательных параметров.
PATCH применяется для частичного обновления существующего объекта и допускает передачу только изменяемых параметров. Обновляет только переданные поля, остальные параметры остаются без изменений.
Методы POST и PATCH используют одинаковую структуру тела запроса. |
Клиентские эндпоинты (SMG Client):
Конфигурация (SMG Config):
Мониторинг (SMG Monitoring):
Все запросы выполняются относительно базового URL: http://<SMG_IP>:<PORT>/api/v1/<endpoint>
Успешный ответ:
{
"status": "ok",
"version": "v1",
"payload": {}
} |
Ошибка:
{
"status": "error",
"payload": {
"code": 400,
"message": "Описание ошибки"
}
} |
Коды ошибок HTTP:
| HTTP-статус | Наименование | Описание |
|---|---|---|
400 | Bad Request | Неверный запрос |
401 | Unauthorized | Пользователь не авторизован |
403 | Forbidden | Доступ запрещён |
404 | Not Found | Запрашиваемый ресурс не найден |
405 | Method Not Allowed | HTTP-метод не поддерживается для данного ресурса |
500 | Internal Server Error | Внутренняя ошибка сервера |
Коды ошибок API:
| Код | Описание |
|---|---|
400 | Не удалось сформировать JSON-ответ |
401 | Метод не поддерживается |
402 | Идентификатор объекта конфигурации не определён |
403 | Запрос не содержит данных об изменении конфигурации |
404 | Пользователь не авторизован |
405 | Ошибка выделения памяти |
406 | Ошибка получения списка объектов |
407 | Неверный ввод |
408 | Достигнут лимит |
409 | Объект не найден |
410 | Не удалось удалить объекты |
411 | Не удалось разобрать JSON-объект |
412 | Ошибка при подписке или отписке |
413 | Идентификатор подписки не найден |
414 | Ошибка создания вызова |
415 | Неверный формат поля data |
416 | Ошибка разбора JSON-объекта |
417 | Неверный формат данных (допускаются только числа) |
418 | Операция запрещена категорией доступа |
498 | Ошибка сопоставления кодов ошибок |
499 | Максимальный код ошибки модуля Mongoose |
Коды ошибок конфигурации API:
| Код | Описание |
|---|---|
50 | Ошибка создания объекта |
51 | Объект создан, но не может быть сохранён |
52 | Ошибка при работе с объектом |
53 | Ошибка получения данных объекта |
54 | Ошибка выделения памяти для объекта |
55 | Неверный тип или индекс объекта |
56 | Неверный тип объекта |
57 | Неверный индекс объекта |
58 | Неверный размер объекта |
59 | Объект не найден |
60 | Тип объекта не найден |
61 | Объект с аналогичными параметрами уже существует |
62 | Слишком большой размер объекта |
63 | Не удалось удалить объект |
64 | Объект не может быть удалён |
65 | Запрошено слишком большое количество объектов |
66 | Тип объекта в ответе отличается от запрошенного |
69 | Обнаружено пересечение сочетания порта и сетевых интерфейсов с другим объектом |
70 | Обнаружено пересечение Termination-ID и Channel-ID |
71 | Обнаружено пересечение сочетания IP:порт с другим объектом |
72 | Изменение объекта ограничено лицензией |
210 | Пересечение номера с существующим абонентом |
211 | Коллизия объектов. Измените размер номера или количество объектов |
215 | Абонент не зарегистрирован |
217 | Превышено допустимое количество абонентов |
218 | Указанная пара IP:порт уже назначена другому абоненту |
219 | Не указан IP:порт |
220 | Пересечение номера с именем пользователя API-аккаунта |
login | ||
Запрос | Описание | |
|---|---|---|
| Авторизация пользователя Возвращает токен | |
Ответ | Описание | |
{"status":"ok","version":"v1","payload":{"token":"phOzH44FVLKAxtJV6sBPwxew0E4Vp9"}} | Токен используется для авторизации всех последующих запросов | |
Срок действия токена: 20 минут неактивности. По истечении необходимо выполнить повторную авторизацию. |
is_active | ||
Запрос | Описание | |
|---|---|---|
| Проверка активности текущей сессии | |
Ответ | Описание | |
| `true` – сессия активна, `false` – сессия неактивна | |
logout | ||
Запрос | Описание | |
|---|---|---|
| Завершение сессии | |
Ответ | ||
| ||
save | ||
Запрос | Описание | |
|---|---|---|
| Сохранение конфигурации во flash-память | |
Ответ | ||
| ||
Изменения, внесённые через API, не сохраняются автоматически и теряются после перезагрузки устройства. Для сохранения конфигурации необходимо явно вызвать метод /config/save |
Подробнее в разделе Интерфейсы SIP/SIP-T/SIP-I, SIP-профили.
POST/PATCH | |||
Ключ | Параметр | Значение | Описание |
|---|---|---|---|
name | <s_name> | Строка до 31 символа | Имя для интерфейса |
hostname | <HOSTNAME> | Строка до 63 символов | Имя хоста взаимодействующего шлюза |
sip_domain | <SIPDOM> | строка до 63 символов | SIP домен |
port_source | <SRCPORT> | 1-65535 | Локальный порт устройства |
port_destination | <DSTPORT> | 1-65535 | Порт удалённого шлюза |
net_interface_sig | <IFACE_NAME> | ID интерфейса | Сетевой интерфейс для приема и передачи сигнальных SIP сообщений |
net_interface_rtp | <IFACE_NAME> | ID интерфейса | Сетевой интерфейс для приема и передачи голосового трафика |
transport | <TRANSPORT> | UDP-only, UDP-prefer, TCP-prefer, TCP-only | Протокол транспортного уровня |
max_active | <MAX_ACTIVE> | 0-65535 | Максимум одновременных вызовов |
regmode | <REGMODE> | none, trunk, user, upper | Тип регистрации на вышестоящем сервере |
register_delay | <REG_DELAY> | 500-5000 | Минимальный интервал (мс) между отправками сообщений Register |
codec | <CODEC> | CODEC_G711U CODEC_G711A CODEC_G729 CODEC_G7231_53 CODEC_G7231_63 CODEC_G726 CODEC_G722 CLEARMODE | Кодек, используемый для кодирования голосового трафика Кодеки передаются списком |
pte | <PTE> | 10/20/30/40/50/60/70/80/90 | Время пакетизации |
ptype | <PTYPE> | Кодек — Ptype; | payload type, значение static устанавливает значение по |
mode | <INTF_MODE> | SIP | Режим работы интерфейса (по умолчанию SIP) |
trunk_group | <TRUNK> | 1-65535 | Транковая группа, в которую входит интерфейс |
Пример запроса POST/PATCH:
curl -X POST "http://192.168.113.230:3999/api/v1/config/sip_interfaces/sip" \
-H "accept: application/json" \
-H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" \
-H "Content-Type: application/json" \
-d '{
"name": "sip_name",
"hostname": "host_name",
"sip_domain": "domain",
"port_source": 5060,
"port_destination": 5061,
"net_interface_sig": 1,
"net_interface_rtp": 1,
"transport": "UDP-prefer",
"regmode": "upper",
"max_active": 0,
"register_delay": 3603,
"codec_ops": [
{
"codec": "CODEC_G726",
"pte": 30,
"ptype": "119"
},
{
"codec": "CODEC_G729",
"pte": 40,
"ptype": "18"
}
],
"mode": "SIP",
"trunk_group": {
"id": 6
}
}' |
Ответ | ||
|---|---|---|
| ||
Обязательные параметры для метода POST:
net_interface_sig
net_interface_rtp
codec_ops
hostname
Остальные параметры являются необязательными и, если не заданы, автоматически принимают значения по умолчанию.
GET | ||
Запрос | Описание | |
|---|---|---|
| Получение информации об интерфейсе | |
Ответ | ||
| ||
| Получение списка интерфейсов | |
Ответ | ||
| ||
DELETE | ||
Запрос | Описание | |
|---|---|---|
| Удаление интерфейса | |
Ответ | ||
| ||
POST/PATCH | |||
Ключ | Параметр | Значение | Описание |
|---|---|---|---|
name | <s_name> | Строка до 31 символа | Имя для интерфейса |
port_source | <SRCPORT> | 1-65535 | Локальный порт устройства |
net_interface_sig | <IFACE_NAME> | ID интерфейса | Сетевой интерфейс для приема и передачи сигнальных SIP сообщений |
net_interface_rtp | <IFACE_NAME> | ID интерфейса | Сетевой интерфейс для приема и передачи голосового трафика |
transport | <TRANSPORT> | UDP-only, UDP-prefer, TCP-prefer, TCP-only | Протокол транспортного уровня |
max_active | <MAX_ACTIVE> | 0-65535 | Максимум одновременных вызовов |
codec | <CODEC> | CODEC_G711U CODEC_G711A CODEC_G729 CODEC_G7231_53 CODEC_G7231_63 CODEC_G726 CODEC_G722 CLEARMODE | Кодек, используемый для кодирования голосового трафика Кодеки передаются списком |
pte | <PTE> | 10/20/30/40/50/60/70/80/90 | Время пакетизации |
ptype | <PTYPE> | Кодек — Ptype; | payload type, значение static устанавливает значение по |
mode | <INTF_MODE> | SIP profile | Режим работы интерфейса. По умолчанию SIP profile |
transit_dir_id | <TRANSIT_DIR_IDX> | 0-31 | Выбор транзитного направления для вышестоящего сервера |
Пример запроса POST/PATCH:
curl -X POST "http://192.168.113.230:3999/api/v1/config/sip_interfaces/sip_profile" \
-H "Accept: application/json" \
-H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" \
-H "Content-Type: application/json" \
-d '{
"name": "sip_name",
"port_source": 5060,
"net_interface_sig": 1,
"net_interface_rtp": 1,
"transport": "UDP-only",
"max_active": 0,
"codec_ops": [
{
"codec": "CODEC_G711A",
"pte": 40,
"ptype": "8"
},
{
"codec": "CODEC_G729",
"pte": 40,
"ptype": "18"
}
],
"transit_dir_id": 1
}' |
Ответ | ||
|---|---|---|
| ||
Обязательные параметры для метода POST:
net_interface_sig
net_interface_rtp
codec_ops
Остальные параметры являются необязательными и, если не заданы, автоматически принимают значения по умолчанию.
GET | ||
Запрос | Описание | |
|---|---|---|
| Получение информации о SIP-профиле | |
Ответ | ||
| ||
| Получение списка SIP-профилей | |
Ответ | ||
| ||
DELETE | ||
Запрос | Описание | |
|---|---|---|
| Удаление SIP-профиля | |
Ответ | ||
| ||
Более подробная информация описана в разделе Транковые группы.
POST/PATCH | |||
Ключ | Параметр | Значение | Описание |
|---|---|---|---|
name | <s_name> | Строка до 31 символа | Имя транковой группы |
interface_id | <ENTRY_INDEX> | 1-65535 | Назначить транковую группу интерфейсу |
type | <TG_ENTRY> | sip, none | Состав транковой группы |
Пример запроса POST/PATCH:
curl -X POST "http://192.168.113.230:3999/api/v1/config/trunks" \
-H "accept: application/json" \
-H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" \
-H "Content-Type: application/json" \
-d '{
"name": "trunk_name",
"interface_id": 1,
"type": "sip"
}' |
Ответ | ||
|---|---|---|
| ||
Обязательных параметров нет.
GET | ||
Запрос | Описание | |
|---|---|---|
| Получение информации о транковой группе | |
Ответ | ||
| ||
| Получение списка транковых групп | |
Ответ | ||
| ||
DELETE | ||
Запрос | Описание | |
|---|---|---|
| Удаление транковой группы | |
Ответ | ||
| ||
Более подробная информация описана в разделе Вкладка «Настройки абонента».
POST/PATCH | |||
Команда | Параметры | Значение | Описание |
|---|---|---|---|
number | <NUMBER> | Номер для SIP-абонента | |
sip_profile | <PROFILE> | 1-65535 | SIP-Profile для SIP-абонента |
pbx_profile | <PROFILE> | 1-65535 | PBX profile |
name | <USER_NAME> | Строка до 31 символов | Имя SIP-абонента |
domain_index | <DOMAIN> | 0-255 | SIP-домен для абонента |
ipaddr | <IPADDR> | IP-адрес в формате AAA.BBB.CCC.DDD | IP-адрес для указанного абонента |
port | <PORT> | 0-65535 | Порт |
sip_forking | <ON_OFF> | 0-1 | Включение множественной регистрации на абоненте |
max_contacts | <MAX_CONTACTS> | 2-5 | Разрешенный допустимый диапазон регистрации на одного абонента |
authmode | <AUTHMODE> | none, register, register_and_invite | Режим аутентификации для абонента |
login | <LOGIN> | Строка до 63 символов | Имя пользователя для аутентификации |
password | <PASSWORD> | Строка до 63 символов | Пароль для аутентификации |
group_tag | <GROUP_TAG> | Строка до 63 символов | Произвольно заданное значение, позволяющее группировать абонентов |
Пример запроса POST/PATCH:
curl -X POST "http://192.168.113.230:3999/api/v1/config/abonents/static" \
-H "accept: application/json" \
-H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" \
-H "Content-Type: application/json" \
-d '{
"number": "40000",
"sip_profile": 1,
"pbx_profile": 1,
"name": "abon_name",
"domain_index": 0,
"port": 5085,
"sip_forking": 1,
"max_contacts": 3,
"ipaddr": "192.168.0.10",
"login": "user",
"password": "passwd",
"authmode": "register",
"group_tag": "123"
}' |
Ответ | ||
|---|---|---|
| ||
Обязательные параметры для метода POST:
Остальные параметры являются необязательными и, если не заданы, автоматически принимают значения по умолчанию.
GET | ||
Запрос | Описание | |
|---|---|---|
| Получение информации об абоненте | |
Ответ | ||
| ||
| Получение списка абонентов | |
Ответ | ||
| ||
DELETE | ||
Запрос | Описание | |
|---|---|---|
| Удаление абонента | |
Ответ | ||
| ||
Более подробная информация описана в разделе Список доменных имен.
POST/PATCH | |||
Ключ | Параметр | Значение | Описание |
|---|---|---|---|
name | <DOMAIN_NAME> | Строка от 3 до 63 символов | Доменное имя |
Пример запроса POST/PATCH:
curl -X POST "http://192.168.113.230:3999/api/v1/config/domains" \
-H "accept: application/json" \
-H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" \
-H "Content-Type: application/json" \
-d '{
"name": "domain"
}' |
Ответ | ||
|---|---|---|
| ||
Обязательный параметр для метода POST:
GET | ||
Запрос | Описание | |
|---|---|---|
| Получение информации о домене | |
Ответ | ||
| ||
| Получение списка доменов | |
Ответ | ||
| ||
DELETE | ||
Запрос | Описание | |
|---|---|---|
| Удаление домена | |
Ответ | ||
| ||
Более подробная информация описана в разделе PBX профили.
POST/PATCH | |||
Ключ | Параметр | Значение | Описание |
|---|---|---|---|
name | <NAME> | Строка до 31 символа | Имя PBX-профиля |
first_digit_timeout | <TIMEOUT> | 5-20 | Таймаут ожидания первой цифры, после нажатия |
next_digit_timeout | <TIMEOUT> | 5-20 | Таймаут ожидания следующей за первой цифры |
busy_signal_timeout | <TIMEOUT> | 30-180 | Таймаут выдачи сигнала «занято» в случае неуспешного |
Пример запроса POST/PATCH:
curl -X POST \
"http://192.168.113.230:3999/api/v1/config/pbx_profiles" \
-H "Accept: application/json" \
-H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" \
-H "Content-Type: application/json" \
-d '{
"name": "PBX profile",
"first_digit_timeout": 10,
"next_digit_timeout": 20,
"busy_signal_timeout": 30
}' |
Ответ | ||
|---|---|---|
| ||
Обязательных параметров нет.
GET | ||
Запрос | Описание | |
|---|---|---|
| Получение информации о PBX профиле | |
Ответ | ||
| ||
| Получение списка PBX профилей | |
Ответ | ||
| ||
DELETE | ||
Запрос | Описание | |
|---|---|---|
| Удаление PBX-профиля. Последний существующий PBX-профиль удалить нельзя | |
Ответ | ||
| ||
Более подробная информация представлена в разделе Транзитные направления.
POST/PATCH | |||
Ключ | Параметр | Значение | Описание |
|---|---|---|---|
name | <s_name> | Строка до 31 символа | Имя транзитного направления |
numplan_id | <NUMPLAN> | 0-255 | ID плана нумерации |
upper_registration_sip_interface | <SIP_IFACE_IDX> | 0-254 | Массив идентификаторов SIP-интерфейсов транзитной регистрации Максимальное количество интерфейсов - 4 |
На текущем этапе параметр `numplan_id` задается автоматически и не может быть изменен через API. |
Если в существующих планах нумерации нет префикса с типом «Транзитное направление», то при создании транзитного направления автоматически создается план нумерации с префиксом типа «Транзитное направление». |
Пример запроса POST/PATCH:
curl -X POST \
"http://192.168.113.230:3999/api/v1/config/transit_direction" \
-H "Accept: application/json" \
-H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" \
-H "Content-Type: application/json" \
-d '{
"name": "Transit direction",
"numplan_id": 0,
"upper_registration_sip_interface": [
3,
9,
10,
11
]
}' |
Ответ | ||
|---|---|---|
| ||
Обязательных параметров нет.
GET | ||
Запрос | Описание | |
|---|---|---|
| Получение информации о транзитном направлении | |
Ответ | ||
| ||
| Получение списка транзитных направлений | |
Ответ | ||
| ||
DELETE | ||
Запрос | Описание | |
|---|---|---|
| Удаление транзитного направления | |
Ответ | ||
| ||
licenses | ||
Запрос | Описание | |
|---|---|---|
| Получение списка лицензий SMG. Соответствует информации со страницы «Лицензирование» в WEB-интерфейсе | |
Ответ | Описание | |
| name – название лицензии
| |
version | ||
Запрос | Описание | |
|---|---|---|
| Получение версии и типа SMG | |
Ответ | Описание | |
| version – версия ПО type – модель | |
savedb | ||
Запрос | Описание | |
|---|---|---|
| Сохранение информации о зарегистрированных абонентах в энергонезависимую память | |
Ответ | ||
| ||
prefixes | ||
Запрос | Описание | |
|---|---|---|
| Получение списка префиксов | |
Ответ | ||
| ||
interfaces | ||
Запрос | Описание | |
|---|---|---|
| Получение списка сетевых интерфейсов | |
Ответ | ||
| ||
В разделе описана информация о текущем состоянии SIP-абонентов.
Метод: GET /monitoring/abonents/static
Параметры запроса
| Параметр | Обязательный | Описание |
|---|---|---|
| id | Нет | Список идентификаторов абонентов, разделенных запятыми. Допускается не более 50 идентификаторов. Например: id=1,2,3. |
Примеры запросов
Получение информации обо всех абонентах:
curl -X GET \ "http://192.168.113.230:3999/api/v1/monitoring/abonents/static" \ -H "Accept: application/json" \ -H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" |
Получение информации о выбранных абонентах:
curl -X GET \ "http://192.168.113.230:3999/api/v1/monitoring/abonents/static?id=1,2" \ -H "Accept: application/json" \ -H "Authorization: Bearer phOzH44FVLKAxtJV6sBPwxew0E4Vp9" |
{
"status": "ok",
"version": "v1",
"payload": [
{
"id": 1,
"name": "abon_name",
"number": "3005",
"group_tag": "400",
"access": 0,
"sip_domain": "192.168.113.230",
"contact_list": [
{
"ipaddr": "192.168.1.100:5061",
"local_ipaddr": "192.168.1.100:5060",
"last_reg": "17:42:02 28.07.2026",
"reset_time": "00:56:14",
"sip_profile_ID": 1,
"reg_state": "Is active"
}
]
}
]
} |
| Поле | Тип | Описание |
|---|---|---|
| id | integer | Идентификатор абонента |
| name | string | Имя абонента |
| number | string | Номер абонента |
| group_tag | string | Тег группы абонента |
| access | integer | Категория доступа абонента |
| sip_domain | string | Домен, к которому принадлежит абонент |
| contact_list | array | Информация о регистрации |
| contact_list[].ipaddr | string | IP адрес:Порт |
| contact_list[].local_ipaddr | string | Локальный IP адрес:Порт |
| contact_list[].last_reg | string | Время и дата последней регистрации |
| contact_list[].reset_time | string | Время, оставшееся до окончания действия регистрации |
| contact_list[].sip_profile_ID | integer | Привязанный SIP-профиль к абоненту |
| contact_list[].reg_state | string | Состояние регистрации контакта. Возможные значения: Is active, Not registered. |