Функционал доступен при наличии лицензии SMG-API.
Функционал доступен только для SMG-3016 и SMG-2016.
Введение
Назначение
Данное руководство описывает REST API для управления конфигурацией шлюзов SMG.
API предоставляет возможность выполнять CRUD-операции (Create, Read, Update, Delete) над объектами конфигурации посредством HTTP-запросов.
Предварительная настройка
Перед началом работы с API необходимо:
1. Настроить API сервер шлюза
- Убедиться, что API сервер включён и настроен интерфейс управления конфигурацией
API → Сервер
2. Создать пользователя
- Пользователь создаётся через веб-интерфейс шлюза или через CLI
- Пользователю должны быть выданы права на управление конфигурацией
API → Аккаунты
Swagger
В веб-интерфейсе шлюза доступна страница Swagger, предназначенная для:
тестирования API-запросов
просмотра структуры эндпоинтов
анализа форматов запросов и ответов
API → Swagger
Формат данных
Запросы и ответы:
application/jsonАутентификация: Bearer Token
Для выполнения запросов через Swagger необходимо:
1. Выполнить запрос /login, указав имя пользователя и пароль;
2. Получить token из ответа;
3. Указать токен через кнопку Authorize.
Быстрый старт
Для начала работы с API выполните следующие шаги:
- Авторизуйтесь и получите токен:
curl -X POST http://<IP>:<PORT>/api/v1/login \ -H "Content-Type: application/json" \ -d '{"login":"<login>","password":"<password>"}' - Скопируйте token из ответа
- Выполните тестовый запрос используя скопированный токен в заголовке Authorization:
curl -X GET http://<IP>:<PORT>/api/v1/config/interfaces \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <token>"
Сценарий работы с API
Типовой сценарий взаимодействия с API:
- Авторизация пользователя (получение Bearer-токена)
- Выполнение запросов к конфигурации
- Сохранение конфигурации (при необходимости)
Запросы API
Поддерживаются следующие HTTP-методы:
- POST — Создание объекта
- GET — Получение одного объекта или списка объектов
- PATCH — Частичное обновление существующего объекта
- DELETE — Удаление объекта
GET запросы поддерживают два режима работы:
1. Получение одного объекта:
GET /endpoint?id=<id>
2. Получение списка объектов:
GET /endpoint
В ответе возвращается соответствующий объект или массив объектов.
POST применяется для создания нового объекта и, как правило, требует передачи всех обязательных параметров.
PATCH применяется для частичного обновления существующего объекта и допускает передачу только изменяемых параметров. Обновляет только переданные поля, остальные параметры остаются без изменений.
Методы POST и PATCH используют одинаковую структуру тела запроса.
Структура API
- /login — авторизация
- /config/... — работа с конфигурацией
- /config/interfaces — сетевые интерфейсы
- /config/domains — домены
- /config/pbx_profiles — PBX профили
- /config/trunks — транковые группы
- /config/sip_interfaces/... — SIP интерфейсы
- /config/abonents/... — абоненты
Заголовки HTTP-запросов
- Content-Type: application/json
- Accept: application/json
- Authorization: Bearer <token>
Все запросы выполняются относительно базового URL: http://<SMG_IP>:<PORT>/api/v1/<endpoint>
Формат ответа API
Успешный ответ:
{
"status": "ok",
"version": "v1",
"payload": {}
}
Ошибка:
{
"status": "error",
"payload": {
"code": 400,
"message": "Описание ошибки"
}
}
Коды ошибок:
400 — Bad request
401 — Unauthorized
403 — Forbidden
404 — Not found
405 — Method not allowed
500 — Internal server error
Авторизация и работа с сессией
login | |
Запрос | Описание |
|---|---|
curl -X POST "http://192.168.113.230:3333/api/v1/login" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '{"login": "API","password":"rootpasswd"}'
| Авторизация пользователя. Возвращает токен |
Ответ | Описание |
{"status":"ok","version":"v1","payload":{"token":"ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij"}} | Токен используется для авторизации всех последующих запросов |
Токен истекает после 20 минут неактивности, после этого времени нужно будет получить новый токен.
active | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/is_active" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Проверка активности текущей сессии |
logout | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/logout" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Завершение сессии |
savedb | |
Запрос | Описание |
|---|---|
curl -X POST "http://192.168.113.230:3333/api/v1/config/abonents/savedb" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Сохранить информацию о зарегистрированных абонентах в энергонезависимую память |
Сохранение конфигурации
save | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/config/save" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Сохранение конфигурации во flash-память |
Изменения, внесённые через API, не сохраняются автоматически и теряются после перезагрузки устройства. Для сохранения конфигурации необходимо явно вызвать метод /config/save.
Настройка SIP интерфейса в режиме SIP
Подробнее в главе Интерфейсы 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:3333/api/v1/config/sip_interfaces/sip" \
-H "accept: application/json" \
-H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" \
-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 | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/config/sip_interfaces/sip?id=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение информации об интерфейсе id — уникальный идентификатор объекта, возвращаемый в ответе API |
curl -X GET "http://192.168.113.230:3333/api/v1/config/sip_interfaces/sip" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение списка интерфейсов |
DELETE | |
Запрос | Описание |
|---|---|
curl -X DELETE "http://192.168.113.230:3333/api/v1/config/sip_interfaces/sip?id=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Удаление интерфейса |
Настройка SIP интерфейса в режиме SIP-профиль
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 |
upper_registration_profile | <SIP_IFACE_IDX> | 1-65535 | Выбор SIP-интерфейса для транзитной регистрации |
Пример запроса POST/PATCH:
curl -X POST "http://192.168.113.230:3333/api/v1/config/sip_interfaces/sip_profile" \
-H "accept: application/json" \
-H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" \
-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"
}
],
"mode": "SIP profile",
"upper_registration_profile": [
1,
3
]
}'
Обязательные параметры для метода POST:
net_interface_sig
net_interface_rtp
codec_ops
Остальные параметры являются необязательными и, если не заданы, автоматически принимают значения по умолчанию.
GET | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/config/sip_interfaces/sip_profile?id=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение информации об интерфейсе |
curl -X GET "http://192.168.113.230:3333/api/v1/config/sip_interfaces/sip_profile" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение списка интерфейсов |
DELETE | |
Запрос | Описание |
|---|---|
curl -X DELETE "http://192.168.113.230:3333/api/v1/config/sip_interfaces/sip_profile?id=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Удаление интерфейса |
Настройка транковой группы
Подробнее в главе Транковые группы |
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:3333/api/v1/config/trunks" \
-H "accept: application/json" \
-H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" \
-H "Content-Type: application/json" \
-d '{
"name": "trunk_name",
"interface_id": 3,
"type": "sip"
}'
Обязательных параметров нет.
GET | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/config/trunks?id=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение информации о транковой группе. |
curl -X GET "http://192.168.113.230:3333/api/v1/config/trunks" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение списка транковых групп |
DELETE | |
Запрос | Описание |
|---|---|
curl -X DELETE "http://192.168.113.230:3333/api/v1/config/trunks?id=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Удаление транковой группы |
Настройка абонентов
Подробнее в главе Вкладка «Настройки абонента» |
POST/PATCH | |||
Команда | Параметры | Значение | Описание |
|---|---|---|---|
number | <NUMBER> | Номер для SIP-абонента | |
sip_profile | <PROFILE> | 1-65535 | SIP-Profile для SIP-абонента |
pbx_profile | <PROFILE> | 1-65535 | PBX profile |
name | <USER_NAME> | Строка до 63 символов | Имя SIP-абонента |
domain_index | <DOMAIN> | 0-255 | SIP-домен для абонента |
ipaddr | <IPADDR> | IP-адрес в формате AAA.BBB.CCC.DDD | IP-адрес для указанного абонента |
port | <PORT> | 0-65535 | Порт |
authmode | <AUTHMODE> | none, register, register_and_invite | Режим аутентификации для абонента |
login | <LOGIN> | Строка до 63 символов | Имя пользователя для аутентификации |
password | <PASSWORD> | Строка до 63 символов | Пароль для аутентификации |
Пример запроса POST/PATCH:
curl -X POST "http://192.168.113.230:3333/api/v1/config/abonents/static_abonents" \
-H "accept: application/json" \
-H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" \
-H "Content-Type: application/json" \
-d '{
"number": "40000",
"sip_profile": 1,
"pbx_profile": 1,
"name": "abon_name",
"domain_index": 0,
"port": 5085,
"ipaddr": "192.168.0.10",
"login": "user",
"password": "passwd",
"authmode": "register"
}'
Обязательные параметры для метода POST:
number
Остальные параметры являются необязательными и, если не заданы, автоматически принимают значения по умолчанию.
GET | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/config/abonents/static_abonents?id=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение информации об абоненте |
curl -X GET "http://192.168.113.230:3333/api/v1/config/abonents/static_abonents" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение списка абонентов |
DELETE | |
Запрос | Описание |
|---|---|
curl -X DELETE "http://192.168.113.230:3333/api/v1/config/abonents/static_abonents?id=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Удаление абонента |
Настройка домена
Подробнее в главе Список доменных имён |
POST/PATCH | |||
Ключ | Параметр | Значение | Описание |
|---|---|---|---|
name | <DOMAIN_NAME> | Строка от 3 до 63 символов | Доменное имя |
Пример запроса POST/PATCH:
curl -X POST "http://192.168.113.230:3333/api/v1/config/domains" \
-H "accept: application/json" \
-H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" \
-H "Content-Type: application/json" \
-d '{
"name": "domen"
}'
Обязательный параметр для метода POST:
- name
GET | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/config/domains?index=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение информации о домене |
curl -X GET "http://192.168.113.230:3333/api/v1/config/domains" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение списка доменов |
DELETE | |
Запрос | Описание |
|---|---|
curl -X DELETE "http://192.168.113.230:3333/api/v1/config/domains?index=1" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Удаление домена |
Команды для получения списка различных сущностей
GET | |
Запрос | Описание |
|---|---|
curl -X GET "http://192.168.113.230:3333/api/v1/config/pbx_profiles" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение списка PBX профилей |
curl -X GET "http://192.168.113.230:3333/api/v1/config/interfaces" \ -H "accept: application/json" \ -H "Authorization: Bearer ilJpdO7gx5tnlg9ZU8cUlhhg8Fjaij" | Получение списка сетевых интерфейсов |


