Функционал доступен при наличии лицензии SMG-API.

Введение

Назначение

Данное руководство описывает 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 выполните следующие шаги:

  1. Авторизуйтесь и получите токен:
    curl -X POST http://<IP>:<PORT>/api/v1/login \
      -H "Content-Type: application/json" \
      -d '{"login":"<login>","password":"<password>"}'
    
  2.  Скопируйте token из ответа
  3. Выполните тестовый запрос используя скопированный токен в заголовке Authorization:
    curl -X GET http://<IP>:<PORT>/api/v1/config/interfaces \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer <token>"
    

Сценарий работы с API

Типовой сценарий взаимодействия с API:

  1. Авторизация пользователя (получение Bearer-токена)
  2. Выполнение запросов к конфигурации
  3. Сохранение конфигурации (при необходимости)

Запросы 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

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;
G.711A — 8;
G.711U — 0;
G.729 — 18;
G.723.1 (5.3 kbps) — 4;
G.723.1 (6.3 kbps) — 4;
G.726-32 - 2 и 96-127;
G.722 — 9;
CLEARMODE — 96-127;

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;
G.711A — 8;
G.711U — 0;
G.729 — 18;
G.723.1 (5.3 kbps) — 4;
G.723.1 (6.3 kbps) — 4;
G.726-32 - 2 и 96-127;
G.722 — 9;
CLEARMODE — 96-127;

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"

Получение списка сетевых интерфейсов

  • Нет меток