2.85.3https://api-docs.egsv2.kz/CHANGELOG.txt
Начните с разделов HTTP, SocketIO, и метода account.login
Крайне рекомендуется изучить примеры по ссылке https://documenter.getpostman.com/view/1091318/RzfZQt2z
По этой же ссылке можно импортировать примеры в приложение Postman, в котором намного удобнее можно протестировать все методы.
В документации поля описаны в dot-notation. Это означает, что если поле описано как camera.id, то необходимо послать JSON:
{
"camera": {
"id": "id камеры"
}
}
Многие запросы к апи поддерживают пагинацию с помощью параметров limit (число записей в ответе) и offset (число записей, которые надо пропустить).
Многие запросы к апи поддерживают фильтрацию по любым полям в БД. Запрос при этом формируется в формате MongoDB.
Если в описании какого-либо метода перечислены поля фильтра, это не значит что это единственные допустимые поля для фильтрации - можно добавить что-то своё.
Лишь некоторые методы поддерживают оператор $like для поиска по частичному совпадению. В остальных случаях следует использовать $regex.
При использовании оператора $like необходимо использовать спецсимвол "%" - например, {"name": {"$like": "%слово%"}}. $regex доступен только там, где недоступен $like. Для $regex не нужно использовать %, но нужно экранировать спецсимволы регулярных выражений.
Ознакомиться с форматом запросов можно в примерах из Postman и по ссылкам:
Подключение через HTTP API
Используется только метод POST.
URL запроса имеет вид /v2/{method}.
Необходимо передавать заголовок
Content-Type: application/json
Данные должны быть отправлены в теле запроса, в формате JSON. Ответ предоставляется тоже в формате JSON.
Практически все запросы должны содержать токен, полученный с помощью метода account.login (POST /v2/account.login).
Полученный токен необходимо передавать в заголовке Authorization, с суффиксом "Bearer " (пробел важен).
Полученный токен соответствует стандарту JSON Web Token (RFC 7519)
Токен необходимо хранить до его истечения (поскольку это JWT, дату истечения можно прочитать из самого токена, из поля exp), и переиспользовать в последующих запросах. Не стоит каждый раз запрашивать новый токен - вы можете превысить лимиты и аккаунт будет временно заблокирован.
Начиная с версии 2.37.0 можно передавать запросы с Content-Type: application/x-www-form-urlencoded
Тело запроса при этом размещается в поле json, а токен либо в заголовке Authorization, либо в поле token
Начиная с версии 2.57.0 можно передавать search-параметр language, либо заголовок X-Language.
Например /v2/account.login?language=kz
В случае ошибки, ответ будет содержать JSON с текстовым полем error - в нём будет указано описание ошибки. Дополнительно, HTTP статус ответа будет равен 400.
// Запрос
POST /v2/account.login HTTP/1.1
Host: localhost
Content-Type: application/json; charset=utf-8
{
"auth": {
"username": "test",
"password": "test"
}
}
// Ответ
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NDIzOTA0NzUsImV4cCI6MTU0NDk4MjQ3NSwiaXNzIjoiZWdzdjIifQ.sIWSj-eInyrEVYau-zM_f-hYKG4Ho8HU78x_v7E-74E",
"account": {
"id": "5bf1b6baea47842084b4a72a",
"created": "2018-11-18T18:49:18.715Z",
"username": "test",
"mail": "test@test.com",
}
}
// Запрос
POST /v2/global.echo HTTP/1.1
Host: localhost
Content-Type: application/json; charset=utf-8
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NDIzOTA0NzUsImV4cCI6MTU0NDk4MjQ3NSwiaXNzIjoiZWdzdjIifQ.sIWSj-eInyrEVYau-zM_f-hYKG4Ho8HU78x_v7E-74E
{
"a": "b",
"test": true,
"list": [1, 2, 3]
}
// Ответ
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
{
"a": "b",
"test": true,
"list": [
1,
2,
3
]
"echo": true
}
// Получение токена с помощью jQuery — особое внимание на JSON.stringify
jQuery.ajax({
"crossDomain": true,
"url": "http://localhost:4080/v2/account.login",
"method": "POST",
"contentType": "application/json; charset=utf-8",
"data": JSON.stringify({
"auth": {
"username": "test",
"password": "test"
}
})
}).done(function (response) {
console.log(response);
});
// Запросы к API с токеном — особое внимание на Authorization: Bearer [...]
jQuery.ajax({
"crossDomain": true,
"url": "http://localhost:4080/v2/global.echo",
"method": "POST",
"contentType": "application/json; charset=utf-8",
"headers": {
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NDIzOTA0NzUsImV4cCI6MTU0NDk4MjQ3NSwiaXNzIjoiZWdzdjIifQ.sIWSj-eInyrEVYau-zM_f-hYKG4Ho8HU78x_v7E-74E",
},
"data": JSON.stringify({
"a": "b",
"test": true,
"list": [1, 2, 3]
})
}).done(function (response) {
console.log(response);
});
Подключение через Socket.IO.
Внимание! Socket.IO v3 не совместим с v2. Необходимо использовать socket.io-client версии 2.
Внимание! В случае переподключения необходимо повторно авторизоваться с помощью токена или логина и пароля.
var socket = io.connect('http://localhost:4080', {transports: ['websocket']});
socket.on('connect', function () {
socket.emit('account.login', {auth: {username: "test", password: "test"}}, function (err, data) {
if (err) {
console.error(err);
// err может быть как строкой, так и объектом {name: '', message: ''}
}
else {
// Посылаем запросы
console.log('Успешная авторизация', data);
socket.emit('global.echo', {test: true}, function (err, data) {
if (err) {
console.error(err);
}
else {
console.log(data);
}
});
}
});
});
// После успешной авторизации можно вызывать любые методы - формат вызова всегда одинаков.
// params - входные поля запроса, это простой JavaScript объект, конвертировать в JSON с помощью JSON.stringify его не нужно.
socket.emit('название метода', params, function (err, data) {
if (err) {
console.error(err);
}
else {
console.log(data);
}
});
// Socket.IO позволяет получать различные события от API
// payload.event - имя события, совпадает с именем метода, например `taxonomy.update`
// payload.object - объект события
socket.on('api-event', function (payload) {
console.log(payload);
});
Модель пользователя.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list'
Тип или модель: Object
(String)
: ID
(String)
: Логин
(String)
: Пароль
(String?)
: E-mail
(String?)
: Телефон
(String?)
: Имя пользователя
(Date?)
: Дата регистрации
(Date?)
: Дата последнего редактирования
(Date?)
: Дата последнего изменения пароля
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель правила доступа.
Права доступа описывают все возможные операции, которые допустимы при работе с API.
Внедрена поддержка древовидности. Таким образом, если в поле what указан ID элемента таксономии, правило будет применено
для всех вложенных таксономий, и всех камер, которые принадлежат вложенным таксономиям.
Таким же образом работает поле for — все группы, подгруппы и принадлежащие им аккаунты получат (либо лишатся) доступа
к объектам, описанным в правиле.
Пользователи и группы, которым назначено правило {"action": "admin", "model_name": "Acl"} получают права на любые действия.
Особое внимание стоит обратить на то, что поле what хранит ID камер либо таксономий, но не хранит непоследственно информацию,
к какому типу модели относится указанный ID. То же самое с полем for - хранится только ID, но не информация, группа это
или аккаунт. Избежать коллизий помогает факт, что ObjectID является уникальным для всей БД. Тем не менее, информация о
принадлежности к модели порой бывает необходима. Предполагается, что эти данные могут быть записаны клиентом API самостоятельно
в поле data. Также, в качестве решения можно использовать атрибут include для запроса правила ACL в запросах acl.list.
Правила cannot стоит применять только в крайнем случае, к примеру, если надо исключить доступ к объекту, права на который получены из-за наследования таксономии или группы. Использовать cannot чтобы забрать ранее выданные права не стоит.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete'
Тип или модель: Object
(String)
: ID
(String?)
: Тип правила -
can
или
cannot
(Array<String>?)
: Массив с ID моделей, к которым применяется правило (например, ID камеры или таксономии)
(Array<String>)
: Массив с ID моделей, которым выдается, либо отнимается право (например, ID аккаунта или группы)
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(String?)
: Комментарий
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель действий. Действия перекликаются с реакциями и триггерами - действия, как и триггеры, выполняют реакции, но действия доступны для выполнения пользователям напрямую. Действия отображаются в интерфейсе egsv2-ui в
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list', 'run'
Тип или модель: Object
(String)
: ID
(String)
: Имя действия
(Object?)
: Описание сущности, к которой будет присоеденено действие.
entity.model_name (String?)
: Имя модели (например,
Account
,
Acl
,
Cam
и т.д.) - учтите, что некоторые реакции уже требуют для себя поле с ID сущности
entity.id (String?)
: ID сущности, к которой присоеденено действие. Может быть использовано UI, чтобы ограничить показ виджета (например, показать кнопку только для определенной камеры)
entity.once (Boolean?)
: Разрешить запустить действие над сущностью только один раз. Работает только если указан entity.model_name - при выполнении действия в сущность будет вписан ID действия в поле data.committed_actions
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель тревоги
Действия ACL: 'admin', 'create', 'view', 'accept', 'assign', 'deblock', 'list'
Тип или модель: Object
(String)
: ID
(String)
: Источник тревоги. Допустимые значения:
button
,
sensor
,
detector
,
rtms
,
lvs2
,
manual
(String?)
: ID камеры
(String?)
: ID экрана
(String?)
: ID аккаунта ответственного
(String?)
: ID аккаунта принявшего тревогу
(String?)
: ID аккаунта деблокировавшего
(String?)
: Описание
(String?)
: Идентификатор источника
(String?)
: Имя источника
(String?)
: Серийный номер источника
(String?)
: Адрес источника
(String?)
: Идентификатор события на источнике
(String?)
: Уникальный идентификатор события
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Date?)
: Дата принятия тревоги
(Date?)
: Дата назначения ответственного
(Date?)
: Дата деблокировки
((Boolean | Null)?)
: Является ли тревога истинной. Может принимать значения true, false и null. null означает, что истонность не определена - например, оператор не подтвердил статус
(Object?)
: Объект с данными - можно использовать для записи собственных полей
(Object<{type: String, object: (Lvs2Record | RtmsNumber | Object)}>?)
: Объект с данными исходного события, на основе которого сгенерирована тревога
Модель камеры.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'archive', 'download', 'ptz', 'rtms', 'intercept', 'alarm', 'list'
Тип или модель: Object
(String)
: ID
(String)
: Имя камеры
(String)
: URL видеопотока
(Object)
: Архив
(Object)
: PTZ включён
(String)
: ID сервера
(String?)
: ID владельца
(Object?)
: Настройки для внутреннего соединения API с сервером. Поле будет скрыто при запросе от пользователя, не имеющего права редактирования камеры
(Object?)
: Настройки для подключенных сервисов
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель Барьеров
Тип или модель: Object
(String)
: Идентификатор барьера
(String)
: Имя барьера
(String)
: ID сервера
(String?)
: ID владельца
(Object?)
: Настройки для внутреннего соединения API с сервером. Поле будет скрыто при запросе от пользователя, не имеющего права редактирования
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель группы.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list'
Тип или модель: Object
(String)
: ID
(String)
: Имя группы
((String | null)?)
: ID родительской группы. Если группа находится на верхнем уровне, необходимо либо передать
null
, либо не передавать поле. Пустая строка выдаст ошибку
(String?)
: Путь из ID родительских групп, разделенный " > "
(только для чтения)
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель события перехвата
Тип или модель: Object
(String)
: Идентификатор события
(Date)
: Дата и время события
(String)
: ГРНЗ
(String)
: ID сервера
(String)
: ID камеры
(String)
: Классификатор контроля
(String)
: Описание
(String)
: Комментарий
(String)
: Идентификатор источника (задаётся на источнике)
(String)
: Имя источника (задаётся на источнике)
(String)
: Идентификатор события на источнике (задаётся на источнике)
(String)
: Уникальный идентификатор события (используется для слияния)
(Date)
: Дата и время добавления в БД
(Object)
: Метаданные
Модель ориентировки.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list'
Тип или модель: Object
(String)
: ID
(Boolean)
: Включено
(String)
: ГРНЗ
(String)
: Классификатор контроля
(String?)
: Класс ТС
(String?)
: Марка ТС
(String?)
: Модель ТС
(String?)
: Год ТС
(String?)
: Цвет ТС
(String?)
: Имя персоны
(String?)
: Комментарий
(String?)
: ID владельца
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель логов.
Действия ACL: 'admin', 'create', 'view', 'list'
Тип или модель: Object
(String)
: ID
(String)
: Уровень лога (может быть только info, warning или error)
(String)
: Тип лога, может принимать любое строковое значение. ('Разное', 'Авторизация', 'Выход', 'Аккаунт', 'Камера', 'Сервер', 'Таксономия', 'Группа', 'E-mail', 'Права доступа')
(Object)
: Объект события
(String?)
: ID аккаунта
(String?)
: IP адрес
(String?)
: IP адрес, который был проксирован
(String?)
: User-Agent
(String?)
: Версия API
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель записи из LVS2
Тип или модель: Object
(String)
: Идентификатор события
(Date)
: Дата и время события
(Date)
: Дата и время завершения события
(String)
: ID сервера
(String)
: ID камеры
(String)
: ID экрана
(String)
: Тип события
(String)
: Описание события
(String)
: Комментарий
(String)
: Уровень (unknown - неизвестен; default - по умолчанию; violation - нарушение; alert - тревога; emergency - экстренное)
(String)
: Идентификатор источника (задаётся на источнике)
(String)
: Имя источника (задаётся на источнике)
(String)
: Серийный номер источника (задаётся на источнике)
(String)
: Адрес источника (задаётся на источнике)
(String)
: Идентификатор события на источнике (задаётся на источнике)
(String)
: Уникальный идентификатор события (используется для слияния)
(String)
: Версия события с уникальным идентификатором (используется для слияния)
(Date)
: Дата и время добавления в БД
(Object)
: Метаданные
(Object?)
: Оригинальный объект с источника (поле может отсутствовать)
Модель персон.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list'
Тип или модель: Object
(String)
: ID
(Boolean)
: Включено
(String)
: Классификатор контроля
(String)
: Имя персоны
(String?)
: Пол
(String?)
: Комментарий
(String?)
: ID владельца
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
data.initiator (String?)
: Инициатор розыска
data.article (String?)
: Статья кодекса
data.recorded_at (String?)
: Дата постановки на учёт / объявления в розыск (допустим любой формат, рекомендуется YYYY-MM-DD)
data.case_number (String?)
: Номер дела
data.wanted_type (String?)
: Тип розыска
data.wanted_kind (String?)
: Вид розыска
data.wanted_category (String?)
: Категория разыскиваемого
data.violation_class (String?)
: Квалификация правонарушения по УД
data.precautionary (String?)
: Мера пресечения
data.prosecutor_supervisor (String?)
: Орган прокуратуры, надзирающей за розыском
data.prosecutor_executive (String?)
: Текущий ответственный исполнитель прокуратуры
data.executive_name (String?)
: Имя сотрудника, ответственного за розыск
data.tracing_agent (String?)
: Орган, ведущий розыск
data.phone_station (String?)
: Телефон дежурной части
Модель записи из результата поиска персон.
Тип или модель: Object
(String)
: ID
(String)
: ID поисковой задачи
(String)
: Дата и время
(String?)
: ID камеры
(String)
: Классификатор контроля
(String)
: Имя персоны
(String?)
: Пол
(String?)
: Комментарий
(String)
: ID аккаунта, по чьему запросу произведён поиск
(Array<{note: String, image: {width: Number, height: Number, filedata: String}}>)
: Массив объектов с данными лица
(Number)
: Процент схожести
(Date)
: Дата истечения срока действия
(Date?)
: Дата создания
(Object?)
: Объект с дополнительными данными
Модель планов.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list'
Тип или модель: Object
Модель события проезда авто из RTMS
Тип или модель: Object
(String)
: Идентификатор события
(Date)
: Дата и время события
(String)
: ГРНЗ
(String)
: Двухбуквенный код страны
(String)
: Нарушение
(Number)
: Скорость ТС
(Number)
: Лимит скорости
(Number)
: Погрешность измерения скорости
(Number)
: Срок стоянки/остановки в секундах
(Number)
: Номер полосы
(String)
: Название полосы
(String)
: approaching (приближающееся ТС) либо receding (удаляющееся ТС)
(String)
: Название направления
(String)
: Класс ТС
(String)
: Марка ТС
(String)
: Модель ТС
(String)
: Цвет ТС
(String)
: Идентификатор источника (задаётся на источнике)
(String)
: Имя источника (задаётся на источнике)
(String)
: Серийный номер источника (задаётся на источнике)
(String)
: Адрес источника (задаётся на источнике)
(String)
: Идентификатор события на источнике (задаётся на источнике)
(String)
: Уникальный идентификатор события (используется для слияния)
(String)
: Версия события с уникальным идентификатором (используется для слияния)
(String)
: Номер сертификата поверки (задаётся на источнике)
(String)
: Дата выдачи сертификата поверки (задаётся на источнике)
(String)
: Дата окончания сертификата поверки (задаётся на источнике)
(String)
: Орган, выдавший сертификат поверки (задаётся на источнике)
(Date)
: Дата и время добавления в БД
(Object)
: Метаданные
(Object?)
: Оригинальный объект с источника (поле может отсутствовать)
Модель экранов.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list', 'alarm'
Тип или модель: Object
(String)
: ID
(String)
: Имя экрана
(String?)
: ID владельца
(Array<{template: String, cameras: Array<{camera: String, slot: Number}>}>)
: Массив дисплеев. Каждый экран содержит минимум один дисплей. Формат поля template:
9+9x9
или
9x9
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель сервера.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list'
Тип или модель: Object
(String)
: ID
(String)
: Имя сервера
(String)
: Публичный hostname сервера
(Number)
: Публичный порт сервера
(String?)
: Публичный протокол сервера - http или https
(Object)
: Настройки для внутреннего соединения API с сервером. Поле будет скрыто при запросе от пользователя, не имеющего права редактирования сервера
api_connection.host (String?)
: Приватный hostname сервера для соединения API с сервером. Ели не указан, используется публичный
api_connection.port (Number?)
: Приватный порт сервера для соединения API с сервером. Ели не указан, используется публичный
api_connection.protocol (String?)
: Приватный протокол сервера для соединения API с сервером. Ели не указан, используется публичный
api_connection.proxy (Object?)
: Настройки прокси для внутреннего соединения API с сервером. Пример:
socks5://user:pass@127.0.0.1:1080
. Поле будет скрыто при запросе от пользователя, не имеющего права редактирования сервера
api_connection.driver (String)
: Драйвер для сервера.
api_connection.brc (Object?)
: Настройки для соединения с BRC
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель таксономии.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete', 'list'
Тип или модель: Object
(String)
: ID
(String)
: Имя элемента таксономии
(String?)
: ID родительского элемента
(String?)
: Путь из ID родительских элементов, разделенный " > "
(только для чтения)
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Boolean?)
: Является ли термин таксономии объектом (поле есть только если включен модуль megacam)
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Модель триггера.
Триггер срабатывает при возникновении какого-либо события и выполняет заданные действия.
Действия ACL: 'admin', 'create', 'view', 'update', 'delete'
Тип или модель: Object
(String)
: ID
(String)
: Имя триггера
(Array<String>)
: Массив событий модели (например,
camera.create
,
server.update
,
taxonomy.*
) или псевдомодели (например
cron.minutely
).
(Object?)
: Mongo-подобный объект для фильтрации данных события. @see
https://www.npmjs.com/package/sift
(Date?)
: Дата создания
(Date?)
: Дата последнего редактирования
(Object?)
: Объект с данными - можно использовать для записи собственных полей
Шаги администратора egsv2:
Шаги разработчика внешней системы:
account.login для получения токена, передавая логин, пароль и сгенерированный кодaccount.login для получения токенаcamera.list для получения списка доступных камерcamera.get, с включением "include": ["player"] в запросе. Обратите внимание, что нельзя получить URL потока один раз и потом использовать его в просмотре - URL может быть "протухающим" со временемaccount.login для получения токенаalarm.subscribealarm.list с фильтром и датой (каждый раз устанавливая дату на последнюю полученную):{
"filter": {
"created_at": {
"$gt": "2024-04-01T15:00:00+0500"
}
}
}
Этот пример используется только для получения тревог, которые были проверены оператором системы и отправлены во внешнюю систему.
account.login для получения токенаalarm.subscribealarm.list с фильтром и датой (каждый раз устанавливая дату на последнюю полученную):{
"filter": {
"data.incident.sent_at": {
"$gt": "2024-04-01T15:00:00+0500"
},
"real": true
}
}
Шаги разработчика внешней системы:
account.login для получения токенаsocket.emit('rtms.number.subscribe', {});socket.on('api-event', payload => console.log(payload));rtms.number.list или rtms.number.csv. Вариант с csv не будет содержать ссылки на файлы, но более предпочтителен для выгрузки больших объемов данных.Получение событий требует указания диапазона дат, когда событие произошло. Тем не менее, события могут приходить не в хронологическом порядке, поэтому для последовательных выгрузок в цикле рекомендуется использовать фильтр по двум полям: datetime и inserted_at.
datetime - время регистрации проезда, т.е. время, когда автомобиль проехал
inserted_at - время, когда событие было получено и записано в БД RTMS
Пример тела запроса rtms.number.list:
{
"filter": {
"datetime": {
"$gte": "2024-09-17T00:00:00+0500",
"$lte": "2024-09-20T00:00:00+0500"
},
"inserted_at": {
"$gte": "2024-09-19T23:00:00+0500",
"$lte": "2024-09-20T00:00:00+0500"
}
},
"limit": 100000,
"sort": {
"inserted_at": "asc"
},
"include": ["files", "certificate"],
"performance": true,
}
Пояснения:
filter.datetime.$gte вставлен в три дня назад от интересующей даты - поскольку фильтр по дате обязателен в запросе, и события проезда могут приходить с ощутимой задержкой, мы выбираем проезды вплоть до 3 дней назад.filter.datetime.$lte и filter.inserted_at.$lte установлены в одинаковые значения даты "до"filter.inserted_at.$gte установлен в стартовую дату, начиная от которой мы хотим получить свежие записи. Если делать запросы в цикле, рекомендуется устанавливать максимальную дату-время, полученную в результатах предыдущего запросаinclude позволяет получить файлы фото и видео, и данные о сертификатах поверкиperformance отключит подсчёт общего числа записей, подходящих под фильтр, позволяя запросу выполниться быстрееbulk.queue
{
"bulk": [
{
"method": "interceptor.wanted.list",
"params": {
"filter": {
"tags": "ТУТ ТЕГ"
}
},
"return": false
},
{
"method": "interceptor.wanted.delete",
"params": {},
"loop": "0.interceptor_wanted",
"set": {
"interceptor_wanted.id": "$.id"
},
"return": false
}
]
}
Также можно удалить params.filter из запроса, чтобы удалить все ориентировки.
bulk.queue
{
"bulk": [
{
"method": "person.list",
"params": {
"filter": {
"tags": "ТУТ ТЕГ"
}
},
"return": false
},
{
"method": "person.delete",
"params": {},
"loop": "0.persons",
"set": {
"person.id": "$.id"
},
"return": false
}
]
}
Также можно удалить params.filter из запроса, чтобы удалить все персоны.
Для интеграции внешней системы и приёма в RTMS новых записей о детекциях ГРНЗ или правонарушениях, необходимо знать URL для отправки данных. Если вы осуществляете интеграцию, запросите URL у представителя компании.
По договорённости, API может требовать (а может и нет) авторизацию методом HTTP Auth Basic. Запросите имя пользователя и пароль у представителя компании.
Каждая детекция/нарушение отправляется отдельным запросом по HTTP, метод POST. Тело запроса должно соответствовать RFC7578 (multipart/form-data).
multipart/form-data описывает метод, которым браузеры посылают HTML-формы по HTTP методом POST - тот же самый принцип используется для приёма данных. Обратитесь к документации вашей библиотеки, чтобы сформировать правильный запрос.
Для начала, необходимо сформировать JSON с метаданными. Описание полей:
{
"datetime": "Дата, время и временная зона, обязательное поле",
"plate_number": "Номерной знак, латиницей, верхний регистр, обязательное поле",
"plate_country": "Двухбуквенный код страны, необязательное поле",
"origin_id": "Уникальный идентификатор источника, строка, обязательное поле",
"origin_name": "Название источника, обязательное поле",
"origin_serial_number": "Серийный номер источника, строка, обязательное поле",
"origin_address": "Адрес источника, обязательное поле",
"origin_event_id": "Уникальный ID события во внешней системе, строка, необязательное поле",
"origin_event_uuid": "Уникальный UUID измерения во внешней системе, строка, необязательное поле. Если событие проезда и событие нарушения во внешней системе это две разных записи, они должны иметь одинаковый origin_event_uuid. Если одна и та же детекция отправляется повторно, тот же самый origin_event_uuid должен быть передан повторно",
"latitude": "Широта, число от -90 до 90, необязательное поле",
"longitude": "Долгота, число от -180 до 180, необязательное поле",
"certificate_number": "Номер сертификата поверки, необязательное поле",
"certificate_issue_date": "Дата выдачи сертификата поверки, необязательное поле",
"certificate_expire_date": "Дата окончания сертификата поверки, необязательное поле",
"certificate_issuer": "Кем выдан сертификат поверки, необязательное поле",
"violation": "Код нарушения, необязательное поле, допустимые значения: speed, speed-average, stop-line, stop-forbidden, parking-forbidden, red-light, lane-violation, pedestrian-no-pass",
"speed": "Скорость ТС в км/ч, число, необязательное поле (если violation не speed)",
"speed_limit": "Скоростной лимит в км/ч, число, необязательное поле (если violation не speed)",
"speed_imprecision": "Погрешность измерения скорости в км/ч, число, необязательное поле (если violation не speed)",
"standing_duration": "Срок стоянки в секундах (для нарушений парковки либо фиксации остановки), число, необязательное поле",
"lane_number": "Номер полосы, число, необязательное поле",
"lane_name": "Название полосы (например, автобусная полоса), строка, необязательное поле",
"direction": "Направление движения транспортного средства, необязательное поле, допустимые значения: unknown, approaching, receding",
"direction_name": "Название направления движение (например, в сторону вокзала), строка, необязательное поле",
"vehicle_class": "Класс ТС, необязательное поле, допустимые значения: VAN, MINIVAN, HT, LT, OFFROAD, CROSSOVER, PICKUP, BUS, CAR, MOTO",
"vehicle_color": "Цвет ТС, необязательное поле, допустимые значения: black, blue, brown, gold, gray, green, orange, purple, red, silver, tan, white, yellow",
"vehicle_mark": "Марка ТС, необязательное поле",
"vehicle_model": "Модель ТС, необязательное поле",
"metadata": {"Объект с дополнительными метаданными, необязательное поле"},
"flags": ["Массив дополнительных пометок, необязательное поле"]
}
Необязательные поля можно просто не включать в JSON.
Пример JSON:
{
"datetime": "2000-12-05T14:15:22+06:00",
"plate_number": "001ABC01",
"plate_country": "KZ",
"origin_id": "123abc",
"origin_name": "Камера на стадионе Шахтёр",
"origin_serial_number": "001XXX11",
"origin_address": "Бухар-Жырау",
"origin_event_id": "2121abcddd",
"latitude": 73.08197,
"longitude": 49.79914,
"certificate_number": "4-сю-424",
"certificate_issue_date": "2021-01-21",
"certificate_expire_date": "2023-01-21",
"certificate_issuer": "НацЭкс",
"violation": "speed",
"speed": 78,
"speed_limit": 60,
"speed_imprecision": 2,
"standing_duration": 0,
"lane_number": 2,
"lane_name": "полоса для автобусов",
"direction": "approaching",
"direction_name": "в сторону ул. Ерубаева",
"vehicle_class": "CROSSOVER",
"vehicle_color": "black",
"vehicle_mark": "BMW",
"vehicle_model": "X5"
}
Для передачи информации о потенциальном таксисте необходимо добавить в JSON поле flags, массив со значением "maybe-taxi-driver", пример:
{
// ...остальные поля из примера выше,
"vehicle_mark": "BMW",
"vehicle_model": "X5",
"flags": ["maybe-taxi-driver"]
}
Полученный JSON надо отправить как текстовое поле формы с именем json. Фотографии и видео помещаются в поля формы со следующими именами:
image_full для фото полного кадраimage_plate для фото ГРНЗimage_vehicle для фото ТС отдельноimage_clean для фото без добавления разметки детектора и подписейimage_additional для дополнительного фотоimage_bofore_violation для фото перед нарушениемimage_traffic_lights для фото светофораvideo_violation для видео нарушенияvideo_traffic_lights для видео светофораЕсли определенного типа фото/видео нет, включать поле в запрос не нужно.
Пример сформированного "голого" HTTP запроса:
POST /webhook/server-id/await HTTP/1.1
Host: ip:post
Content-Length: 1220
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="json"
{"datetime":"2000-12-05T14:15:22+06:00", "origin_id":"123abc", "plate_number":"001ABC01", "plate_country":"KZ", "origin_name":"Камера на стадионе Шахтёр", "origin_serial_number":"001XXX11", "origin_address":"Бухар-Жырау", "origin_event_id":"2121abcddd", "latitude":73.08197,"longitude":49.79914,"certificate_number":"4-сю-424", "certificate_issue_date":"2021-01-21", "certificate_expire_date":"2023-01-21", "certificate_issuer":"НацЭкс", "violation":"red-light", "lane_number":2,"lane_name":"полоса для автобусов", "direction":"approaching", "direction_name":"в сторону ул. Ерубаева", "vehicle_class":"CROSSOVER", "vehicle_mark":"BMW", "vehicle_model":"X5"}
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image_full"; filename="full.jpg"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image_plate"; filename="plate.jpg"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Пример сформированного "голого" HTTP запроса с авторизацией Basic Auth (имя пользователя и пароль соеденены через двоеточие и закодированы алгоримом base64):
POST /webhook/server-id/await HTTP/1.1
Host: ip:post
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Content-Length: 1220
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="json"
{"datetime":"2000-12-05T14:15:22+06:00", "origin_id":"123abc", "plate_number":"001ABC01", "plate_country":"KZ", "origin_name":"Камера на стадионе Шахтёр", "origin_serial_number":"001XXX11", "origin_address":"Бухар-Жырау", "origin_event_id":"2121abcddd", "latitude":73.08197,"longitude":49.79914,"certificate_number":"4-сю-424", "certificate_issue_date":"2021-01-21", "certificate_expire_date":"2023-01-21", "certificate_issuer":"НацЭкс", "violation":"red-light", "lane_number":2,"lane_name":"полоса для автобусов", "direction":"approaching", "direction_name":"в сторону ул. Ерубаева", "vehicle_class":"CROSSOVER", "vehicle_mark":"BMW", "vehicle_model":"X5"}
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image_full"; filename="full.jpg"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image_plate"; filename="plate.jpg"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Пример запроса curl из командной строки:
curl --location --request POST 'http://ip:post/webhook/server-id/await' \
--form 'json="{\"datetime\":\"2000-12-05T14:15:22+06:00\", \"origin_id\":\"123abc\", \"plate_number\":\"001ABC01\", \"plate_country\":\"KZ\", \"origin_name\":\"Камера на стадионе Шахтёр\", \"origin_serial_number\":\"001XXX11\", \"origin_address\":\"Бухар-Жырау\", \"origin_event_id\":\"2121abcddd\", \"latitude\":73.08197,\"longitude\":49.79914,\"certificate_number\":\"4-сю-424\", \"certificate_issue_date\":\"2021-01-21\", \"certificate_expire_date\":\"2023-01-21\", \"certificate_issuer\":\"НацЭкс\", \"violation\":\"red-light\", \"lane_number\":2,\"lane_name\":\"полоса для автобусов\", \"direction\":\"approaching\", \"direction_name\":\"в сторону ул. Ерубаева\", \"vehicle_class\":\"CROSSOVER\", \"vehicle_mark\":\"BMW\", \"vehicle_model\":\"X5\"}"' \
--form 'image_full=@"/path/to/file"' \
--form 'image_plate=@"/path/to/file"'
Пример на javascript/nodejs:
const fs = require('fs');
const fetch = require('node-fetch');
const FormData = require('form-data');
const formdata = new FormData();
formdata.append("json", JSON.stringify({
"datetime": "2000-12-05T14:15:22+06:00",
"origin_id": "123abc",
"plate_number": "001ABC01",
"plate_country": "KZ",
"origin_name": "Камера на стадионе Шахтёр",
"origin_serial_number": "001XXX11",
"origin_address": "Бухар-Жырау",
"origin_event_id": "2121abcddd",
"latitude": 73.08197,
"longitude": 49.79914,
"certificate_number": "4-сю-424",
"certificate_issue_date": "2021-01-21",
"certificate_expire_date": "2023-01-21",
"certificate_issuer": "НацЭкс",
"violation": "red-light",
"lane_number": 2,
"lane_name": "полоса для автобусов",
"direction": "approaching",
"direction_name": "в сторону ул. Ерубаева",
"vehicle_class": "CROSSOVER",
"vehicle_color": "black",
"vehicle_mark": "BMW",
"vehicle_model": "X5"
}));
formdata.append("image_full", fs.createReadStream('full.jpg'));
formdata.append("image_plate", fs.createReadStream('plate.jpg'));
await fetch("http://ip:post/webhook/rtms.capture.some-random", {method: 'POST', body: formdata});
Ответ будет выглядеть примерно так:
{
"status": true,
"event": {
"name": "webhook.6391773bbda15962f0218cfd",
"payload": {}
},
"response": {
"ok": true,
"json": {
"datetime": "2000-12-05T14:15:22+06:00"
}
}
}
Либо примерно так:
{
"status": true,
"event": {
"name": "webhook.6391773bbda15962f0218cfd",
"payload": {}
},
"response": {
"ok": false,
"error": "plate_number is missing"
}
}
Флагом того, что событие было принято, является булево поле response.ok.
Если response не существует в ответе (либо null), то это значет что вы отправляете данные на некорректный URL.
Для интеграции внешней системы и приёма в LVS2 новых записей о новых записях из видеоаналитики, необходимо знать URL для отправки данных. Если вы осуществляете интеграцию, запросите URL у представителя компании.
По договорённости, API может требовать (а может и нет) авторизацию методом HTTP Auth Basic. Запросите имя пользователя и пароль у представителя компании.
Каждая детекция/нарушение отправляется отдельным запросом по HTTP, метод POST. Тело запроса должно соответствовать RFC7578 (multipart/form-data).
multipart/form-data описывает метод, которым браузеры посылают HTML-формы по HTTP методом POST - тот же самый принцип используется для приёма данных. Обратитесь к документации вашей библиотеки, чтобы сформировать правильный запрос.
Для начала, необходимо сформировать JSON с метаданными. Описание полей:
{
"datetime": "Дата, время и временная зона, обязательное поле",
"origin_id": "Уникальный идентификатор источника, строка, обязательное поле",
"origin_name": "Название источника, обязательное поле",
"origin_serial_number": "Серийный номер источника, строка, необязательное поле",
"origin_address": "Адрес источника, обязательное поле",
"origin_event_id": "Уникальный ID события во внешней системе, строка, необязательное поле",
"type": "Тип события lvs2",
"description": "Текстовое описание события, необязательное поле",
"latitude": "Широта, число от -90 до 90, необязательное поле",
"longitude": "Долгота, число от -180 до 180, необязательное поле"
}
Необязательные поля можно просто не включать в JSON.
Пример JSON:
{
"datetime": "2024-01-06T03:07:22+06:00",
"origin_id": "abc123 (уникальный идентификатор источника)",
"origin_name": "Камера на стадионе Шахтёр (имя источника)",
"origin_serial_number": "001XXX111 (серийный номер источника)",
"origin_address": "Бухар-Жырау, 1 (адрес источник)",
"origin_event_id": "2121abcddd (id события)",
"type": "count.lack-of-people",
"description": "Тестовое событие",
"latitude": 73.08197,
"longitude": 49.79914
}
Полученный JSON надо отправить как текстовое поле формы с именем json. Фотографии и видео помещаются в поля формы со следующими именами:
image_full для фото полного кадраimage_clean для фото без добавления разметки детектора и подписейimage_additional для дополнительного фотоimage_face для фото лица с детектораimage_person для фото персоны (из ориентировки или СКУД)image_bofore_violation для фото перед нарушениемvideo_violation для видео нарушенияЕсли определенного типа фото/видео нет, включать поле в запрос не нужно.
Если есть фото/видео другого назначения, можно добавить их в запрос со своим ключом с префиксом image_ или video_ (по согласованию)
Пример сформированного "голого" HTTP запроса:
POST /webhook/server-id/await HTTP/1.1
Host: ip:post
Content-Length: 1220
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="json"
{"datetime":"2024-01-06T03:07:22+06:00","origin_id":"abc123 (уникальный идентификатор источника)","origin_name":"Камера на стадионе Шахтёр (имя источника)","origin_serial_number":"001XXX111 (серийный номер источника)","origin_address":"Бухар-Жырау, 1 (адрес источник)","origin_event_id":"2121abcddd (id события)","type":"count.lack-of-people","description":"Тестовое событие","latitude":73.08197,"longitude":49.79914}
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image_full"; filename="full.jpg"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image_additional"; filename="additional.jpg"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Пример сформированного "голого" HTTP запроса с авторизацией Basic Auth (имя пользователя и пароль соеденены через двоеточие и закодированы алгоримом base64):
POST /webhook/server-id/await HTTP/1.1
Host: ip:post
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Content-Length: 1220
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="json"
{"datetime":"2024-01-06T03:07:22+06:00","origin_id":"abc123 (уникальный идентификатор источника)","origin_name":"Камера на стадионе Шахтёр (имя источника)","origin_serial_number":"001XXX111 (серийный номер источника)","origin_address":"Бухар-Жырау, 1 (адрес источник)","origin_event_id":"2121abcddd (id события)","type":"count.lack-of-people","description":"Тестовое событие","latitude":73.08197,"longitude":49.79914}
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image_full"; filename="full.jpg"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image_additional"; filename="additional.jpg"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Пример запроса curl из командной строки:
curl --location --request POST 'http://ip:post/webhook/server-id/await' \
--form 'json="{\"datetime\":\"2024-01-06T03:07:22+06:00\",\"origin_id\":\"abc123 (уникальный идентификатор источника)\",\"origin_name\":\"Камера на стадионе Шахтёр (имя источника)\",\"origin_serial_number\":\"001XXX111 (серийный номер источника)\",\"origin_address\":\"Бухар-Жырау, 1 (адрес источник)\",\"origin_event_id\":\"2121abcddd (id события)\",\"type\":\"count.lack-of-people\",\"description\":\"Тестовое событие\",\"latitude\":73.08197,\"longitude\":49.79914}"' \
--form 'image_full=@"/path/to/file"' \
--form 'image_additional=@"/path/to/file"'
Ответ будет выглядеть примерно так:
{
"status": true,
"event": {
"name": "webhook.6391773bbda15962f0218cfd",
"payload": {}
},
"response": {
"ok": true,
"json": {
"datetime": "2000-12-05T14:15:22+06:00"
}
}
}
Либо примерно так:
{
"status": true,
"event": {
"name": "webhook.6391773bbda15962f0218cfd",
"payload": {}
},
"response": {
"ok": false,
"error": "datetime is missing"
}
}
Флагом того, что событие было принято, является булево поле response.ok.
Если response не существует в ответе (либо null), то это значет что вы отправляете данные на некорректный URL.
Типы значений, которые можно передать в поле type можно получить через метод lvs2.record.types (предпочтительно, т.к. часть типов может быть отключена в настройках). Либо воспользуйтесь списком ниже, значение и описание типа:
unclassified: Неклассифицированное событие
unclassified.violation: Неклассифицированное нарушение
count.lack-of-people: Недостаточное количество людей
count.excess-of-people: Избыточное количество людей
equipment-violation: Нарушение ношения СИЗ
equipment-violation.head: Нарушение ношения СИЗ на голове
equipment-violation.hand: Нарушение ношения СИЗ на руках
equipment-violation.body: Нарушение ношения СИЗ на теле
equipment-violation.hips: Нарушение ношения СИЗ на плечах
equipment-violation.foot: Нарушение ношения СИЗ на ногах
motion: Зафиксировано движение
motion.stop: Зафиксировано окончание движения
motion.snapshot: Снимок во время движения
fire: Огонь
fire.smoke: Дым
fire.smoking: Курение
gun: Оружие
person: Человек
person.violator: Нарушитель
person.sit: Сидящий человек
person.lay: Лежащий человек
person.run: Бегущий человек
face.matched: Распознанное лицо известно
face.unmatched: Распознанное лицо неизвестно
object: Предмет
object.abandoned: Оставленный предмет
object.taken: Забранный предмет
object.gas.tank: Газовый баллон
unlawful.fight: Драка
unlawful.vandalism: Вандализм
unlawful.hooliganism: Хулиганство
phone.talking: Разговор по телефону
distance.violation: Нарушение дистанции
zone.enter: Вход в зону
zone.leave: Выход из зоны
zone.long: Длительное нахождение в зоне
line.cross: Пересечение линии
video.loss: Видеосигнал потерян
video.blind: Видеосигнал ослеплён
archive.record: Запись архива
archive.record.started: Запись архива начата
archive.record.stopped: Запись архива остановлена
source.static: Нет передвижения источника
vehicle.accident: ДТП
Для срабатывания ориентировок рекомендуется использовать тип события "face.matched". Этот же тип события следует использовать для организации белых списков (например, для интеграции СКУД).
Для событий, когда на объекте появляется неизвестный человек (не из числа разрешенных лиц) рекомендуется слать событие "face.unmatched". Его же следует использовать, если распознавание лиц не смогло найти соответствие.
Если сработала ориентировка, и есть необходимость передать информацию об ориентировке, добавьте в json поле metadata в таком виде (все поля необязательные, но в любом случае укажите "reason": "wanted" или значение из списка ниже):
{
[... остальные поля json ...],
"metadata": {
"score": "Процент распознания",
"person": {
"reason": "wanted",
"gender": "male",
"name": "Имя",
"comment": "Комментарий",
"created_at": "Дата создания ориентировки, ISO Date",
"data": {
"initiator": "Инициатор розыска",
"article": "Статья кодекса",
"recorded_at": "Дата постановки на учёт (объявления в розыск), YYYY-MM-DD",
"case_number": "Номер дела",
"wanted_type": "Тип розыска",
"wanted_kind": "Вид розыска",
"wanted_category": "Категория разыскиваемого",
"violation_class": "Квалификация правонарушения по УД",
"precautionary": "Мера пресечения",
"prosecutor_supervisor": "Орган прокуратуры, надзирающей за розыском",
"prosecutor_executive": "Текущий ответственный исполнитель прокуратуры",
"executive_name": "Имя сотрудника, ответственного за розыск",
"tracing_agent": "Орган, ведущий розыск",
"phone_station": "Телефон дежурной части"
}
}
}
}
Фотографию из ориентировки передавайте как файл в поле формы image_person.
Возможные значения поля reason:
wanted: Розыск
wanted.category.1: Розыск (Категория 1)
wanted.category.2: Розыск (Категория 2)
wanted.category.3: Розыск (Категория 3)
wanted.category.4: Розыск (Категория 4)
wanted.category.5: Розыск (Категория 5)
wanted.fraud: Розыск (мошенничество)
wanted.theft.personal: Розыск (кража личного имущества)
wanted.injury: Розыск (телесное повреждение)
wanted.theft.inventory: Розыск (кража ТМЦ)
wanted.fight: Розыск (драка)
wanted.hooligan: Розыск (хулиганство)
wanted.disorder: Розыск (дебош)
wanted.other: Розыск (другое)
staff: Персонал
vip: VIP
Чтение аккаунта.
Поле account.id является не обязательным. Если не передавать, будет возвращен текущий аккаунт.
Список аккаунтов.
Возвращает список аккаунтов, к которым есть доступ. Для обычного пользователя вернет только его самого.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB.
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Account>) - Массив с аккаунтами
(Object) - Объект с результатами проверки действий из параметра
params.can
(Array<Group>) - Массив с группами, в которых состоят аккаунты, если параметр запроса
include
содержит элемент
groups
(также с родителями, если содержит
parents
)
(Integer) - Количество найденных записей
Авторизация с помощью логина и пароля. Используется как в HTTP API, так и в окружении, работающем без передачи токена в каждом запросе (socket.io / websocket).
При работе c HTTP API этот метод необходимо выполнить для получения токена.
Для выполнения этого метода токен не требуется.
Существуют лимиты на количество запросов для имени пользователя. Будет применена временная блокировка при превышении любого из следущих ограничений:
(Account)
(String) -
JWT-токен
- возвращается, только если не включена двухфакторная аутентификация
(Boolean) - Флаг, что двухфакторная аутентификация настроена на аккаунте
(Boolean) - Возвращается вместе с ошибкой, если включена двухфакторная аутентификация.
(String) - Возвращается вместе с ошибкой, если включена двухфакторная аутентификация, но у аккаунта еще не настроено приложение аутентификации. Секрет нужно добавить в приложение, и прислать вместе с кодом в методе account.2fa
Авторизация с помощью токена в окружении, работающем без передачи токена в каждом запросе (socket.io / websocket).
Существуют лимиты на количество запросов для акканта. Лимиты те же самые, как при использовании метода account.login.
(Account)
Подписка на получение событий изменения аккаунтов. Метод можно вызывать только при использовании socket.io
Присылаемые значения event в событии api-event: account.create, account.update, account.delete
(any)
Редактирование аккаунта.
Поле account.id является обязательным и должно содержать id редактируемого аккаунта.
(Boolean
= false)
Склеить вложенные значения (актуально для поля
data
), переданные в запросе с существующими
Проверка, есть ли у пользователя права доступа к запрошенным объектам.
Особое поведение - если надо проверить не доступ к конкретной модели, а поведение "в целом" - например, право на создание камеры. Для этого случая надо передать пустой массив "what", а ключ ответа будет установлен в "$" вместо ID модели.
(Object) - Результаты проверки - объекты, в качестве ключей использующие ID запрошенных моделей (или "$"), с вложенным объектом, в качестве ключей использующих название действий. Если модель не найдена в базе данных, её ID не будет включён в ответ
// Запрос
{"query": {
"actions": ["view", "unknown-action"],
"model_name": "Camera",
"what": ["5bf9c27f89bd0733449ec34e", "5bf9c28689bd0733449ec34f"]
}}
// Ответ
{"results": {
"5bf9c27f89bd0733449ec34e": {
"view": true,
"unknown-action": false
},
"5bf9c28689bd0733449ec34f": {
"view": true,
"unknown-action": false
}
}}
// Запрос
{"query": {
"actions": ["create", "admin"],
"model_name": "Camera",
"what": []
}}
// Ответ
{"results": {
"$": {
"create": true,
"admin": false
}
}}
Чтение правила.
Поле acl.id является обязательным и должно содержать id читаемого правила.
(Acl)
((Array<Camera> | Array<Screen> | Array<Taxonomy>)) - Массив с моделями, к которым применятся правило, если параметр запроса
include
содержит элемент
what
. У каждой модели будет доступно поле
_modelName
((Array<Account> | Array<Group>)) - Массив с моделями, которым выдается, либо отнимается право, если параметр запроса
include
содержит элемент
for
. У каждой модели будет доступно поле
_modelName
Список правил.
Возвращает список правил.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Acl>) - Массив с правилами
(Object) - Объект с результатами проверки действий из параметра
params.can
((Array<Camera> | Array<Screen> | Array<Taxonomy>)) - Массив с моделями, к которым применятся правило, если параметр запроса
include
содержит элемент
what
. У каждой модели будет доступно поле
_modelName
((Array<Account> | Array<Group>)) - Массив с моделями, которым выдается, либо отнимается право, если параметр запроса
include
содержит элемент
for
. У каждой модели будет доступно поле
_modelName
(Integer) - Количество найденных записей
Чтение действия.
Поле action.id является обязательным и должно содержать id читаемого действия.
Список действий.
Возвращает список действий.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
Список доступных типов реакций.
Возвращает список доступных реакций, в зависимости от настроек API.
(Object) - Объект с типами реакций
Чтение тревоги.
Поле alarm.id является обязательным и должно содержать id читаемой тревоги.
(Alarm)
(Array<Account>) - Массив с аккаунтами, которые имеют отношение к тревоге (ответственный, принявший, деблокировавший, прокомментировавший), если параметр запроса
include
содержит элемент
accounts
.
((Lvs2Record | RtmsNumber | Object)) - Оригинальный объект, из которого была создана тревога, например записи lvs2 или rtms, если параметр запроса
include
содержит элемент
origin
.
Список тревог.
Возвращает список тревог, к которым есть доступ.
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Alarm>) - Массив с тревогами.
(Object<(Lvs2Record | RtmsNumber | Object)>) - Оригинальные объекты, из которых была создана тревога, если параметр запроса
include
содержит элемент
origins
.
((Lvs2Record | RtmsNumber | Object)) - Оригинальный объект записан в origins, в качестве ключа используется id тревоги.
(Integer) - Количество найденных записей.
Установка реальности тревоги оператором.
Поле alarm.id является обязательным и должно содержать id тревоги. Тревога также будет деблокирована
(Alarm)
Создание записи в LVS2
Доступно два варианта - передать base64, либо загружить файл методом multipart/form-data
При multipart/form-data поле image.filedata необязательно. Дополнительные параметры будет передаваться в поле с именем json,
а файлы - в полях с именами image_* и video_*
(Camera)
Запись изменения статуса смены/дежурства
(Boolean)
Анализ смен Bodycam
(Object)
Фильтр в формате MongoDB.
Отчёт по сменам Bodycam
(Boolean?)
Надо ли обновить камеры и записать смены в поле data.shifts
(Array<{camera: Camera, archive: Object<{covered_seconds: Number, missing_seconds: Number}>, faces: Object<{matched: Number}>, shifts_seconds: Number}>) - Статистика по камерам
(Array<{taxonomy: Taxonomy, archive: Object<{covered_seconds: Number, missing_seconds: Number}>, faces: Object<{matched: Number}>, shifts_seconds: Number}>) - Суммарная статистика по таксономиям
Выполнение нескольких методов одновременно.
Все перечисленые методы будут запущены параллельно, но не более указанного лимита в один момент времени. Лимит параллельных запросов по умолчанию равен 20.
(Object)
Объект, для дописывания значений в каждый запрос. Может быть полезно при отправке больших данных в несколько вызовов.
(Number
= 20)
Ограничить количество одновременно запущенных команд. Передайте -1 для запуска всех команд одновременно
(Array<Object>) - Массив результатов выполнения. Каждый элемент массива соответсвует запрошенному объекту, с добавлением полей "error" и "data"
// Запрос
{
"bulk": [
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 1"
}
}
},
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 2"
}
}
},
{
"method": "taxonomy.create",
"params": {
"group": {
"name": "Новый термин таксономии"
}
}
}
],
"limit": 5
}
// Ответ
{
"results": [
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 1"
}
},
"error": null,
"data": {
"group": {
"created_at": "2018-12-02T06:37:18.191Z",
"updated_at": "2018-12-02T06:37:30.998Z",
"name": "Новая группа 1",
"path": "5c037daa825f352e684a5c9a",
"id": "5c037daa825f352e684a5c9a"
}
}
},
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 2"
}
},
"error": null,
"data": {
"group": {
"created_at": "2018-12-02T06:37:18.191Z",
"updated_at": "2018-12-02T06:37:31.004Z",
"name": "Новая группа 2",
"path": "5c037dab825f352e684a5c9b",
"id": "5c037dab825f352e684a5c9b"
}
}
},
{
"method": "taxonomy.create",
"params": {
"taxonomy": {
"name": "Новый термин таксономии"
}
},
"error": null,
"data": {
"taxonomy": {
"created_at": "2018-12-02T06:39:06.826Z",
"updated_at": "2018-12-02T06:41:10.127Z",
"name": "Новый термин таксономии",
"path": "5c037e86535f570c804c2600",
"id": "5c037e86535f570c804c2600"
}
}
}
]
}
Выполнение нескольких методов последовательно
Все перечисленные методы запускаются один за другим, при этом есть возможность передать данные из предыдущего метода в последующий.
В отличии от метода bulk.parallel, если один один вызов вернет ошибку, все последующие вызовы не будут выполнены.
В отличии от метода bulk.parallel, если один один вызов вернет ошибку, текст ошибки будет помещен в свойство error на верхнем уровне, а не в объект внутри results
Есть возможность зациклить запросы, используя свойство loop
(Boolean
= false)
Пропускать ошибки. Если не установлено в true, первая ошибка прервёт всю цепочку вызовов.
(Array<Object>) - Массив результатов выполнения. Каждый элемент массива соответсвует запрошенному объекту, с добавлением полей "error" и "data"
// Запрос
// "group.parent": "0.group.id" означает следующее: установить значение "group.parent" в текущем запросе, взяв "group.id" из запроса номер 0 - т.е. id, который будет назначен "Новая группа 10".
// "group.parent": "1.group.id" означает то же самое, но в качестве источника уже будет взят запрос номер 1 - т.е. из "Новая группа 11 - вложенная в 10".
// В результате, будет создано три группы, одна вложенная в другую.
{
"bulk": [
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 10"
}
}
},
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 11 - вложенная в 10"
}
},
"set": {
"group.parent": "0.group.id"
}
},
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 12 - вложенная в 11"
}
},
"set": {
"group.parent": "1.group.id"
}
},
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 13 - вложенная в 11"
}
},
"set": {
"group.parent": "1.group.id"
}
}
]
}
// Ответ
{
"results": [
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 10"
}
},
"error": null,
"data": {
"group": {
"created_at": "2018-12-02T08:01:33.666Z",
"updated_at": "2018-12-02T08:04:51.835Z",
"name": "Новая группа 10",
"path": "5c039223a27710048c09cfbe",
"id": "5c039223a27710048c09cfbe"
}
}
},
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 11 - вложенная в 10",
"parent": "5c039223a27710048c09cfbe" // Не было в оригинальном запросе, но было добавлено из-за правила в "set"
}
},
"set": {
"group.parent": "0.group.id"
},
"error": null,
"data": {
"group": {
"created_at": "2018-12-02T08:01:33.666Z",
"updated_at": "2018-12-02T08:04:51.843Z",
"name": "Новая группа 11 - вложенная в 10",
"parent": "5c039223a27710048c09cfbe",
"path": "5c039223a27710048c09cfbe > 5c039223a27710048c09cfbf",
"id": "5c039223a27710048c09cfbf"
}
}
},
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 12 - вложенная в 11",
"parent": "5c039223a27710048c09cfbf" // Не было в оригинальном запросе, но было добавлено из-за правила в "set"
}
},
"set": {
"group.parent": "1.group.id"
},
"error": null,
"data": {
"group": {
"created_at": "2018-12-02T08:01:33.666Z",
"updated_at": "2018-12-02T08:04:51.852Z",
"name": "Новая группа 12 - вложенная в 11",
"parent": "5c039223a27710048c09cfbf",
"path": "5c039223a27710048c09cfbe > 5c039223a27710048c09cfbf > 5c039223a27710048c09cfc0",
"id": "5c039223a27710048c09cfc0"
}
}
},
{
"method": "group.create",
"params": {
"group": {
"name": "Новая группа 13 - вложенная в 11",
"parent": "5c039223a27710048c09cfbf" // Не было в оригинальном запросе, но было добавлено из-за правила в "set"
}
},
"set": {
"group.parent": "1.group.id"
},
"error": null,
"data": {
"group": {
"created_at": "2018-12-02T08:01:33.666Z",
"updated_at": "2018-12-02T08:04:51.859Z",
"name": "Новая группа 13 - вложенная в 11",
"parent": "5c039223a27710048c09cfbf",
"path": "5c039223a27710048c09cfbe > 5c039223a27710048c09cfbf > 5c039223a27710048c09cfc1",
"id": "5c039223a27710048c09cfc1"
}
}
}
]
}
{
"bulk": [
{
"method": "camera.list",
"params": {
"limit": 2
},
"return": false
},
{
"method": "global.echo",
"params": {
"test": true
},
"loop": "0.cameras",
"set": {
"id": "$.id",
"name": "$.name"
}
}
]
}
// Ответ
{
"results": [
{
"method": "camera.list",
"params": {
"limit": 2
},
"return": false,
"error": null,
"data": null
},
{
"method": "global.echo",
"params": {
"test": true
},
"loop": "0.cameras",
"set": {
"id": "$.id",
"name": "$.name"
},
"count": 2,
"error": null,
"data": null
},
{
"method": "global.echo",
"params": {
"test": true,
"id": "60e7d7946331397119064789",
"name": "Купол KAR-K-063 005483-09_P"
},
"error": null,
"data": {
"test": true,
"id": "60e7d7946331397119064789",
"name": "Купол KAR-K-063 005483-09_P",
"echo": true
}
},
{
"method": "global.echo",
"params": {
"test": true,
"id": "6107a05f633139003d907526",
"name": "Статика 005680-02"
},
"error": null,
"data": {
"test": true,
"id": "6107a05f633139003d907526",
"name": "Статика 005680-02",
"echo": true
}
}
]
}
Скачивание архива камеры.
Требует прав на действие ACL: 'archive'
(Object)
| Имя | Описание |
|---|---|
time.start String
|
Дата и время начала архивного файла |
time.end String
|
Дата и время окончания архивного файла |
(String?)
Формат файла
(Boolean?)
Ответить только после того, как файл будет создан
Воспроизведение архива камеры.
Требует прав на действие ACL: 'archive'
(String?)
Формат, зависит от драйвера. Можно не указывать, либо для спец-версий указать одно из:
rtsp
(BRC/Strazh),
timelapse
(BRC/Strazh)
(Number
= 1)
Скорость воспроизведения от 1 до 10
Размер архива камеры.
Требует прав на действие ACL: 'archive'
Получение снапшота из архива
Требует прав на действие ACL: 'archive'
Сохранение архива камеры в хранилище.
Требует прав на действие ACL: 'archive'
(Object)
| Имя | Описание |
|---|---|
time.start String
|
Дата и время начала архивного файла |
time.end String
|
Дата и время окончания архивного файла |
(String?)
Формат файла
(Boolean?)
Ответить только после того, как файл будет создан
Сводка архива камеры.
Требует прав на действие ACL: 'archive'
(Object)
| Имя | Описание |
|---|---|
time.start String
|
Дата и время начала архива |
time.end String
|
Дата и время окончания архива |
(String?)
Формат архива. Можно не указывать, либо для спец-версий указать одно из:
timelapse
,
history
,
history-extremes
,
protected
(Integer?)
Удаление всех камер.
Удаляем все камеры, к которым есть доступ.
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
Кластер камер.
Возвращает список координат, созданных из кластеризированных камер, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Number
= 50)
Размер стороны квадрата кластера, км
(Boolean
= false)
Отдавать в качестве координат кластера координаты первой камеры из кластера (если false - то центральную точку квадрата)
Чтение камеры.
Поле camera.id является обязательным и должно содержать id читаемой камеры.
(String?)
Действие ACL, которое будут проверено, если параметр запроса
include
содержит элемент
allowed
или
can
(Object?)
Объект с дополнительными параметрами для запроса сводки архива
(Camera)
(Object) - объект плеера, если параметр запроса
include
содержит элемент
player
. Плеер необходимо запрашивать каждый раз, когда начинается просмотр видео, не допускается сохранять URL для повторного переиспользования
(String) - формат видеопотока
(String) - ссылка на видеопоток
(String) - формат вторичного видеопотока, null если не поддерживается
(String) - ссылка на вторичный видеопоток
(String) - формат видеопотока через WebSocket, null если не поддерживается
(String) - ссылка на видеопоток через WebSocket
(String) - ссылка на вторичный видеопоток через WebSocket
(String) - формат вторичного видеопотока через WebSocket, null если не поддерживается
(String) - формат видеопотока через MSE, null если не поддерживается
(String) - ссылка на видеопоток через MSE
(String) - ссылка на вторичный видеопоток через MSE
(String) - формат вторичного видеопотока через MSE, null если не поддерживается
(String) - ссылка на видеопоток через RTSP, если поддерживается
(String) - ссылка на вторичный видеопоток через RTSP, если поддерживается
(Object) - объект снапшота, если параметр запроса
include
содержит элемент
snapshot
(String) - формат снапшота
(String) - ссылка на снапшот
(Object) - объект архива, если параметр запроса
include
содержит элемент
archive
(Array<Object>) - сводка видеоархива
(Boolean) - в онлайне ли камера, если параметр запроса
include
содержит элемент
is_online
((Boolean | null)) - в онлайне ли камера (кешированное значение), если параметр запроса
include
содержит элемент
is_online_cached
(Server) - Сервер, на котором хранится камера, если параметр запроса
include
содержит элемент
server
(Array<Taxonomy>) - Массив с терминами таксономии, которым принадлежат камера, если параметр запроса
include
содержит элемент
taxonomies
(Account) - Аккаунт, который владеет камерой, если параметр запроса
include
содержит элемент
account
(Array<Account>) - Массив с аккаунтами, которые имеют доступ к камере, если параметр запроса
include
содержит элемент
allowed
.
(Object) - Объект с результатами проверки действий из параметра
params.can
(Object) - Объект возможностей драйвера камеры, если параметр запроса
include
содержит элемент
capabilities
(Object) - Объект информации о камере от драйвера камеры, если параметр запроса
include
содержит элемент
computed
Список камер.
Возвращает список камер, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Camera>) - Массив с камерами.
(Object) - Объект с результатами проверки действий из параметра
params.can
(Array<Server>) - Массив с серверами, на которых хранятся камеры, если параметр запроса
include
содержит элемент
server
(Array<Taxonomy>) - Массив с терминами таксономии, которым принадлежат камеры, если параметр запроса
include
содержит элемент
taxonomies
. Если параметр запроса
include
содержит элемент
taxonomies_count
, то в каждый элемент массива
taxonomies
будет добавлено свойство
_count
.
(Array<Account>) - Массив с аккаунтами, которые владеют камерами, если параметр запроса
include
содержит элемент
account
(Array<Object>) - Массив снапшотов камер, если параметр запроса
include
содержит элемент
snapshot
(String) - ссылка на снапшот
(boolean) - формат снапшота
(Array<Object>) - Массив информации в онлайне ли камеры, если параметр запроса
include
содержит элемент
is_online
(String) - ID камеры
(boolean) - в онлайне ли камера
(String) - ID камеры
(boolean) - в онлайне ли камера (данные is_online_cached не запрашиваются в момент вызова метода, а берутся из кеша - хоть и менее точно, но предпочтительнее, т.к. быстрее)
(Array<Object>) - Массив информации о возможностях драйвера камеры, если параметр запроса
include
содержит элемент
capabilities
(String) - ID камеры
(Array<Object>) - Массив информации о камере от драйвера камеры, если параметр запроса
include
содержит элемент
computed
(String) - ID камеры
(Integer) - Количество найденных записей.
Опрос информации о камере по Onvif.
(Object)
(Object)
(String) - Ссылка, полученная по Onvif
(String) - Ссылка, полученная по Onvif и содержащая username и password из запроса
(Object) - Список потоков
(Object)
(String)
(String)
(Boolean)
Начало движения PTZ. Чтобы остановить движение, отправьте запрос без параметров.
(Object)
| Имя | Описание |
|---|---|
ptz.x Integer
(по умолчанию 0)
|
Перемещение по оси X, от -100 до 100 |
ptz.y Integer
(по умолчанию 0)
|
Перемещение по оси Y, от -100 до 100 |
ptz.zoom Integer
(по умолчанию 0)
|
Изменение зума, от -100 до 100 |
(Boolean
= false)
Использовать непрерывное движение
(Boolean)
Сохранение снапшота камеры в хранилище.
Требует прав на действие ACL: 'view'
Подписка на получение событий изменения камер. Метод можно вызывать только при использовании socket.io
Присылаемые значения event в событии api-event: camera.create, camera.update, camera.delete, camera.online, camera.offline, camera.detection.config.set
(any)
Перенос камеры на другой сервер. Архив будет утерян.
Требует прав на действие ACL: 'admin' для камеры, 'view' для сервера, на который осуществляется перенос.
(Camera)
Редактирование камеры.
Поле camera.id является обязательным и должно содержать id редактируемой камеры. Изменение сервера не доступно через этот метод.
(Boolean
= false)
Склеить вложенные значения (актуально для полей
data
и
api_connection
), переданные в запросе с существующими
(Camera)
Редактирование или создание камеры.
Поле camera.id является обязательным и должно содержать id редактируемой камеры. Изменение сервера не доступно через этот метод.
(Boolean
= false)
Склеить вложенные значения (актуально для полей
data
и
api_connection
), переданные в запросе с существующими
(Camera)
Получение настроек Face API
Требует прав на действие ACL: 'admin'
(Object) - Текущие настройки Face API
Поиск лица из сохраненных детекций. Метод можно вызывать только при использовании socket.io.
После старта поиска API будет присылать события через api-event с данными результатов поиска.
В payload события api-event будет передаваться параметр event, который может принимать следующие значения:
faceapi.search.start - в начале поискаfaceapi.search.end - после завершения поискаfaceapi.search.result - передаётся несколько раз, с результатами поискаА также свойства:
object.process_id - с ID процесса поискаobject.detected_at - Дата детекцииobject.image_data - Изображение, в base64object.camera - Данные о камереГенерация вебхука на открытие или закрытие барьера.
Вебхук будет доступен некоторое заданное время и пока он не истёк - получатель вебхука сможет управлять шлагбаумом
В вебхук будет необходимо слать JSON {"state": "open"} или {"state": "close"}
Поле gate.id является обязательным и должно содержать id барьера.
Требуется право доступа operation
Чтение барьера.
Поле gate.id является обязательным и должно содержать id читаемого барьера.
Список барьеров.
Возвращает список барьеров, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Gate>) - Массив с барьерами
(Object) - Объект с результатами проверки действий из параметра
params.can
(Integer) - Количество найденных записей.
(Array<Camera>) - Объект связанных камер, если параметр запроса
include
содержит элемент
cameras
(Array<Server>) - Массив с серверами, на которых хранятся камеры, если параметр запроса
include
содержит элемент
server
(Object) - Объект состояния о барьера, если параметр запроса
include
содержит элемент
states
(String) - ID барьера
(Object) - Объект информации о барьере от драйвера барьеров, если параметр запроса
include
содержит элемент
computed
(String) - ID барьера
Список барьеров megacam.
Возвращает список барьеров, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Gate>) - Массив с барьерами
(Object) - Объект с результатами проверки действий из параметра
params.can
(Integer) - Количество найденных записей.
(Array<Camera>) - Объект связанных камер, если параметр запроса
include
содержит элемент
cameras
(Object) - Объект состояний барьеров, если параметр запроса
include
содержит элемент
states
(String) - ID барьера
(Object) - Объект информации о барьере от драйвера барьеров, если параметр запроса
include
содержит элемент
computed
(String) - ID барьера
Генерация вебхука на открытие или закрытие барьера.
Вебхук будет доступен некоторое заданное время и пока он не истёк - получатель вебхука сможет управлять шлагбаумом
В вебхук будет необходимо слать JSON {"state": "open"} или {"state": "close"}
Поле gate.id является обязательным и должно содержать id барьера.
Требуется право доступа operation
Чтение барьера.
Поле gate.id является обязательным и должно содержать id читаемого барьера.
Список барьеров.
Возвращает список барьеров, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Gate>) - Массив с барьерами
(Object) - Объект с результатами проверки действий из параметра
params.can
(Integer) - Количество найденных записей.
(Array<Camera>) - Объект связанных камер, если параметр запроса
include
содержит элемент
cameras
(Array<Server>) - Массив с серверами, на которых хранятся камеры, если параметр запроса
include
содержит элемент
server
(Object) - Объект состояния о барьера, если параметр запроса
include
содержит элемент
states
(String) - ID барьера
(Object) - Объект информации о барьере от драйвера барьеров, если параметр запроса
include
содержит элемент
computed
(String) - ID барьера
Список барьеров megacam.
Возвращает список барьеров, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Gate>) - Массив с барьерами
(Object) - Объект с результатами проверки действий из параметра
params.can
(Integer) - Количество найденных записей.
(Array<Camera>) - Объект связанных камер, если параметр запроса
include
содержит элемент
cameras
(Object) - Объект состояний барьеров, если параметр запроса
include
содержит элемент
states
(String) - ID барьера
(Object) - Объект информации о барьере от драйвера барьеров, если параметр запроса
include
содержит элемент
computed
(String) - ID барьера
Параметры API.
(String) - Версия API
(String) - Версия UI, если она установлена на этой же машине
(Boolean) - Доступность регистрации анонимами
(Boolean) - Включён ли "низкий режим"
(Boolean) - Включена ли двухфакторная авторизация
(Object) - Список включённых или отключённых модулей
(Object) - Список включённых или отключённых сервисов
(Object) - Список включённых или отключённых фич
(Object) - Информация о брендировании
(Object) - Информация о лимитах
(String) - Шаблон урла тайлов для карт
(Array) - Широта и долгота центра карты
(String) - Таймзона
Список групп.
Возвращает список групп, к которым есть доступ. Для обычного пользователя вернет список групп, в которых он состоит.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
Подписка на получение событий охраны. Метод можно вызывать только при использовании socket.io
API будет присылать события через api-event с данными результатов поиска.
В payload события api-event будет передаваться параметр event, который может принимать следующие значения:
guard.set - при постановке или снятии с охраныguard.detection - при срабатывании детекции(any)
Список подтверждённых событий перехвата
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
|
filter.acknowledged_by String
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
Список камер для перехвата.
Возвращает список камер, к которым есть доступ и которые участвуют в модуле Interceptor.
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Camera>) - Массив с камерами.
(Array<Server>) - Массив с серверами, на которых хранятся камеры, если параметр запроса
include
содержит элемент
server
(Array<Taxonomy>) - Массив с терминами таксономии, которым принадлежат камеры, если параметр запроса
include
содержит элемент
taxonomies
(Integer) - Количество найденных записей.
Принятие (отработка) события перехвата оператором.
Поля event.id и event.datetime являются обязательными
(InterceptorEvent) - Событие
Подтверждение получения события перехвата.
Поля event.id и event.datetime являются обязательными
(InterceptorEvent) - Событие
Экспорт событий перехвата в формат CSV. Метод можно вызывать только при использовании http. Метод отличается от типичных ответов - возвращается не JSON, а сразу начинается передача данных. Ошибки возвращаются как обычно + код HTTP. Метод вернёт статус 204, если экспорт не содержит данных. Метод вернёт ошибку 422 при попытке экспорта более ста тысяч записей.
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(Object?)
| Имя | Описание |
|---|---|
csv.delimiter String
(по умолчанию ,)
|
Символ-разделитель полей CSV |
csv.charset String
(по умолчанию utf-8)
|
Кодировка. Допустимые значения:
utf-8
,
windows-1251
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
Чтение события перехвата.
Поля event.id и event.datetime являются обязательными
(InterceptorEvent) - Событие
(InterceptorWanted) - Ориентировка, если параметр запроса
include
содержит элемент
wanted
(Camera) - Камера, зафиксировавшая событие, если параметр запроса
include
содержит элемент
camera
(Server) - Сервер, на котором хранится камера, если параметр запроса
include
содержит элемент
server
(Object) - Объект плеера, если параметр запроса
include
содержит элемент
player
. Плеер необходимо запрашивать каждый раз, когда начинается просмотр видео, не допускается сохранять URL для повторного переиспользования
(Array<Object>) - Массив с файлами из RTMS, если параметр запроса
include
содержит элемент
files
(Array<Object>) - Массив с файлами, запрошенными напрямую с устройства, если параметр запроса
include
содержит элемент
files_fast
Список отловленных событий перехвата
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
|
filter.acknowledged_by String
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Integer) - Количество найденных записей.
(Array<InterceptorEvent>) - Найденные записи.
(Array<Camera>) - Массив камер, если параметр запроса
include
содержит элемент
camera
(Array<Object>) - Предполагаемые траектории передвижения, если параметр запроса
include
содержит элемент
directions
и сервис направлений включён
Подписка на получение новых событий. Метод можно вызывать только при использовании socket.io
Присылаемые значения event в событии api-event: rtms.capture.intercept
(Object?)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
Список аккаунтов, которые участвуют в системе Interceptor - т.е. те, кто имеет право доступа intercept, но не право редактировать камеры
Статистика по уникальным значениям поля "Комментарий" по принятым событиям
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(Boolean
= false)
Ответить массивом объектов
Отчёт по Interceptor. Рекомендуется изучить примеры, находящиеся в коллекции Postman (см. ссылку в README)
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(Object?)
| Имя | Описание |
|---|---|
group.by String
(по умолчанию camera)
|
Поле группировки |
group.date Boolean
(по умолчанию true)
|
Группировать по дате |
group.hour Boolean
(по умолчанию false)
|
Группировать до часов |
group.plate_number Boolean
(по умолчанию false)
|
Группировать по ГРНЗ |
(Boolean
= false)
Ответить массивом объектов
Добавление новой ориентировки ГРНЗ.
(InterceptorWanted)
(InterceptorWanted)
Экспорт ориентировок ГРНЗ в формат CSV. Метод можно вызывать только при использовании http. Метод отличается от типичных ответов - возвращается не JSON, а сразу начинается передача данных. Ошибки возвращаются как обычно + код HTTP. Метод вернёт статус 204, если экспорт не содержит данных. Метод вернёт ошибку 422 при попытке экспорта более ста тысяч записей.
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
(Object?)
| Имя | Описание |
|---|---|
csv.delimiter String
(по умолчанию ,)
|
Символ-разделитель полей CSV |
csv.charset String
(по умолчанию utf-8)
|
Кодировка. Допустимые значения:
utf-8
,
windows-1251
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<RtmsNumber>) - Найденные записи.
Удаление ориентировки ГРНЗ.
Поле interceptor_wanted.id является обязательным и должно содержать id удаляемой ориентировки.
(InterceptorWanted)
| Имя | Описание |
|---|---|
interceptor_wanted.id String
|
(InterceptorWanted)
Чтение ориентировки ГРНЗ.
Поле interceptor_wanted.id является обязательным и должно содержать id читаемой ориентировки.
(InterceptorWanted)
Список ориентировок ГРНЗ.
Возвращает список ориентировок, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<InterceptorWanted>) - Массив с ориентировками
(Object) - Объект с результатами проверки действий из параметра
params.can
(Integer) - Количество найденных записей.
(Array<Account>) - Массив с аккаунтами, которые создали ориентировки, если параметр запроса
include
содержит элемент
account
Подписка на получение событий изменения ориентировок ГРНЗ. Метод можно вызывать только при использовании socket.io
Присылаемые значения event в событии api-event: interceptor.wanted.committed.
В отличие от других способов доставки изменений, данное событие приходит не чаще, чем 1 раз в 20 секунд, и не содержит информации об изменённой ориентировке.
(any)
Редактирование ориентировки ГРНЗ.
Поле interceptor_wanted.id является обязательным и должно содержать id редактируемой ориентировки.
(InterceptorWanted)
| Имя | Описание |
|---|---|
interceptor_wanted.id String
|
(Boolean
= false)
Склеить вложенные значения (актуально для поля
data
), переданные в запросе с существующими
(InterceptorWanted)
Редактирование или создание ориентировки ГРНЗ.
Поле interceptor_wanted.id либо interceptor_wanted.plate_number является обязательным и должно содержать id либо ГРНЗ редактируемой ориентировки.
(InterceptorWanted)
| Имя | Описание |
|---|---|
interceptor_wanted.id String
|
|
interceptor_wanted.plate_number String
|
(Boolean
= false)
Склеить вложенные значения (актуально для поля
data
), переданные в запросе с существующими
(InterceptorWanted)
Добавление нового списока.
(ListNumber)
(ListNumber)
Удаление списока.
Поле list_number.id является обязательным и должно содержать id удаляемого списока.
(ListNumber)
| Имя | Описание |
|---|---|
list_number.id String
|
(ListNumber)
Чтение списока.
Поле list_number.id является обязательным и должно содержать id читаемого списока.
(String?)
Действие ACL, которое будут проверено, если параметр запроса
include
содержит элемент
allowed
(ListNumber)
(Account) - Аккаунт, который владеет списоком, если параметр запроса
include
содержит элемент
account
(Array<Account>) - Массив с аккаунтами, которые имеют доступ к списоку, если параметр запроса
include
содержит элемент
allowed
.
Список списков.
Возвращает список списков, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<ListNumber>) - Массив с списокми. ВНИМАНИЕ! stages.$.image не будет включён в ответ.
(Object) - Объект с результатами проверки действий из параметра
params.can
(Array<Account>) - Массив с аккаунтами, которые владеют списокми, если параметр запроса
include
содержит элемент
account
(Integer) - Количество найденных записей.
Редактирование списока.
Поле list_number.id является обязательным и должно содержать id редактируемого списока.
(ListNumber)
| Имя | Описание |
|---|---|
list_number.id String
|
(Boolean
= false)
Склеить вложенные значения (актуально для поля
data
), переданные в запросе с существующими
(ListNumber)
Экспорт логов в формат CSV. Метод можно вызывать только при использовании http. Метод отличается от типичных ответов - возвращается не JSON, а сразу начинается передача данных. Ошибки возвращаются как обычно + код HTTP. Метод вернёт статус 204, если экспорт не содержит данных. Метод вернёт ошибку 422 при попытке экспорта более ста тысяч записей без include: raw, или более 1000 записей с include: raw
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Object?)
| Имя | Описание |
|---|---|
csv.delimiter String
(по умолчанию ,)
|
Символ-разделитель полей CSV |
csv.charset String
(по умолчанию utf-8)
|
Кодировка. Допустимые значения:
utf-8
,
windows-1251
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<RtmsNumber>) - Найденные записи.
Чтение лога.
Поле logger.id является обязательным и должно содержать id читаемого лога.
(String?)
Действие ACL, которое будут проверено, если параметр запроса
include
содержит элемент
allowed
Список логов.
Возвращает список логов, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
Список камер lvs2.
Возвращает список камер, к которым есть доступ и которые участвуют в lvs2.
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Camera>) - Массив с камерами.
(Array<Server>) - Массив с серверами, на которых хранятся камеры, если параметр запроса
include
содержит элемент
server
(Array<Taxonomy>) - Массив с терминами таксономии, которым принадлежат камеры, если параметр запроса
include
содержит элемент
taxonomies
(Integer) - Количество найденных записей.
Экспорт записей из lvs2 в формат CSV. Метод можно вызывать только при использовании http. Метод отличается от типичных ответов - возвращается не JSON, а сразу начинается передача данных. Ошибки возвращаются как обычно + код HTTP. Метод вернёт статус 204, если экспорт не содержит данных. Метод вернёт ошибку 422 при попытке экспорта более ста тысяч записей.
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(Object?)
| Имя | Описание |
|---|---|
csv.delimiter String
(по умолчанию ,)
|
Символ-разделитель полей CSV |
csv.charset String
(по умолчанию utf-8)
|
Кодировка. Допустимые значения:
utf-8
,
windows-1251
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Lvs2Record>) - Найденные записи.
Чтение записи из lvs2
Поля record.id и record.datetime являются обязательными
(Lvs2Record) - Запись
(Camera) - Камера, зафиксировавшая событие, если параметр запроса
include
содержит элемент
camera
(Server) - Сервер, на котором хранится камера, если параметр запроса
include
содержит элемент
server
(Object) - Объект плеера, если параметр запроса
include
содержит элемент
player
. Плеер необходимо запрашивать каждый раз, когда начинается просмотр видео, не допускается сохранять URL для повторного переиспользования
Список записей из lvs2
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Boolean
= false)
Включить режим оптимизации производительности. В этом режиме не будет подсчитано количество записей.
Подписка на получение новых записей. Метод можно вызывать только при использовании socket.io
Присылаемые значения event в событии api-event: lvs2.capture
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
Сводка по полю
Возвращает список значений поля и количество записей.
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(String)
Поле, по которому будет выполнена сводка. Допустимые значения:
type
,
description
,
level
,
server
,
camera
Отчёт по LVS2
(Integer) - Количество найденных записей.
(Object) - Строки статистики.
(Array<Object>) - Строки статистики. Ключ - ID камеры.
(String) - Дата, если group.hour = false.
(String) - Дата и время, если group.hour = true.
(Number) - Количество.
Чтение объекта.
Поле facility.id является обязательным и должно содержать id читаемого объекта.
(Taxonomy)
(Array<Camera>) - Массив с камерами объекта, если параметр запроса
include
содержит элемент
cameras
(Array<Screen>) - Массив с экранами объекта, если параметр запроса
include
содержит элемент
screens
(Array<Plan>) - Массив с планаи объекта, если параметр запроса
include
содержит элемент
plans
(Array<Gate>) - Массив с барьерами объекта, если параметр запроса
include
содержит элемент
gates
Список объектов.
Возвращает список объектов, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
Чтение персоны.
Поле person.id является обязательным и должно содержать id читаемой персоны.
(String?)
Действие ACL, которое будут проверено, если параметр запроса
include
содержит элемент
allowed
Список персон.
Возвращает список персон, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Person>) - Массив с персонами. ВНИМАНИЕ! faces.$.image не будет включён в ответ.
(Object) - Объект с результатами проверки действий из параметра
params.can
(Array<Account>) - Массив с аккаунтами, которые владеют записями, если параметр запроса
include
содержит элемент
account
(Integer) - Количество найденных записей.
Отчёт по камерам из результатов поиска
(Array<PersonSearchItem>) - Массив с результатами поиска.
(Integer) - Количество найденных записей.
(Boolean) - Завершёл ли процесс поиска.
(String) - Дата, после которой результаты поиска будут очищены.
Результаты поиска.
Возвращает список записей, соответствующих существующему поиску.
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<PersonSearchItem>) - Массив с результатами поиска.
(Integer) - Количество найденных записей.
(Boolean) - Завершёл ли процесс поиска.
(String) - Дата, после которой результаты поиска будут очищены.
Поиск совпадения лица в списке персон
Доступно два варианта - передать base64, либо загружить файл методом multipart/form-data
При multipart/form-data поле image.filedata необязательно. Дополнительные параметры будет передаваться в поле с именем json,
а данные файла - в поле file
(Object?)
| Имя | Описание |
|---|---|
event.camera Object?
|
|
event.camera.id String?
|
ID камеры, на которой была детекция лица |
event.datetime String?
|
Дата и время детекции лица |
event.latlng Array<Number>?
|
координаты детекции лица |
Новый поиск лица из сохраненных детекций. Операция является асинхронной.
После старта поиска API будет присылать события через api-event с данными результатов поиска.
Подписка на получение событий изменения персон. Метод можно вызывать только при использовании socket.io
Присылаемые значения event в событии api-event: person.create, person.update, person.delete
Присылаемый объект не будет содержать фотографии (поле faces.$.image)
(any)
Чтение плана.
Поле plan.id является обязательным и должно содержать id читаемого плана.
(String?)
Действие ACL, которое будут проверено, если параметр запроса
include
содержит элемент
allowed
(Plan)
(Account) - Аккаунт, который владеет планом, если параметр запроса
include
содержит элемент
account
(Array<Account>) - Массив с аккаунтами, которые имеют доступ к плану, если параметр запроса
include
содержит элемент
allowed
.
(Array<Camera>) - Массив с камерами, если параметр запроса
include
содержит элемент
cameras
Список планов.
Возвращает список планов, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Plan>) - Массив с планми. ВНИМАНИЕ! stages.$.image не будет включён в ответ.
(Object) - Объект с результатами проверки действий из параметра
params.can
(Array<Account>) - Массив с аккаунтами, которые владеют планми, если параметр запроса
include
содержит элемент
account
(Integer) - Количество найденных записей.
Список камер RTMS.
Возвращает список камер, к которым есть доступ и которые участвуют в RTMS.
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Camera>) - Массив с камерами.
(Array<Server>) - Массив с серверами, на которых хранятся камеры, если параметр запроса
include
содержит элемент
server
(Array<Taxonomy>) - Массив с терминами таксономии, которым принадлежат камеры, если параметр запроса
include
содержит элемент
taxonomies
(Integer) - Количество найденных записей.
Экспорт номеров из RTMS в формат CSV. Метод можно вызывать только при использовании http. Метод отличается от типичных ответов - возвращается не JSON, а сразу начинается передача данных. Ошибки возвращаются как обычно + код HTTP. Метод вернёт статус 204, если экспорт не содержит данных. Метод вернёт ошибку 422 при попытке экспорта более ста тысяч записей.
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(Object?)
| Имя | Описание |
|---|---|
csv.delimiter String
(по умолчанию ,)
|
Символ-разделитель полей CSV |
csv.charset String
(по умолчанию utf-8)
|
Кодировка. Допустимые значения:
utf-8
,
windows-1251
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<RtmsNumber>) - Найденные записи.
Чтение номера из RTMS
Поля number.id и number.datetime являются обязательными
(RtmsNumber) - Номер
(Camera) - Камера, зафиксировавшая событие, если параметр запроса
include
содержит элемент
camera
(Server) - Сервер, на котором хранится камера, если параметр запроса
include
содержит элемент
server
(Object) - Объект плеера, если параметр запроса
include
содержит элемент
player
. Плеер необходимо запрашивать каждый раз, когда начинается просмотр видео, не допускается сохранять URL для повторного переиспользования
Список номеров из RTMS
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Boolean
= false)
Включить режим оптимизации производительности. В этом режиме не будет подсчитано количество записей.
(Integer) - Количество найденных записей.
(Array<RtmsNumber>) - Найденные записи.
Подписка на получение новых номеров. Метод можно вызывать только при использовании socket.io
Присылаемые значения event в событии api-event: rtms.capture либо rtms.capture.fast-capture
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
(Boolean
= false)
Подписаться на быстрое получение номеров
Отчёт по RTMS
(Object)
Фильтр в формате MongoDB. Исключение: поддерживается запрос $like
| Имя | Описание |
|---|---|
filter.datetime Object
|
Фильтр даты в формате MongoDB - запросы без указания диапазона дат запрещены |
filter.datetime.$gte String
|
|
filter.datetime.$lte String
|
(Integer) - Количество найденных записей.
(Object) - Строки статистики.
(Array<Object>) - Строки статистики. Ключ - ID камеры.
(String) - Дата, если group.hour = false.
(String) - Дата и время, если group.hour = true.
(Number) - Количество.
Чтение экрана.
Поле screen.id является обязательным и должно содержать id читаемого экрана.
(String?)
Действие ACL, которое будут проверено, если параметр запроса
include
содержит элемент
allowed
или
can
(Screen)
(Array<Object>) - Массив объектов плеера, если параметр запроса
include
содержит элемент
players
. Плееры необходимо запрашивать каждый раз, когда начинается просмотр видео, не допускается сохранять URL для повторного переиспользования
(String) - ID камеры
(String) - формат видеопотока
(String) - ссылка на видеопоток
(Array<Object>) - Массив объектов снапшотов, если параметр запроса
include
содержит элемент
snapshots
(String) - ID камеры
(String) - формат видеопотока
(String) - ссылка на видеопоток
(Array<Object>) - Массив объекток архива, если параметр запроса
include
содержит элемент
archives
(String) - ID камеры
(Array<Object>) - сводка видеоархива
(Array<Object>) - Массив информации в онлайне ли камеры, если параметр запроса
include
содержит элемент
is_online
(String) - ID камеры
(Boolean) - в онлайне ли камера
(Array<Taxonomy>) - Массив с терминами таксономии, которым принадлежат экран, если параметр запроса
include
содержит элемент
taxonomies
(Account) - Аккаунт, который владеет экраном, если параметр запроса
include
содержит элемент
account
(Array<Account>) - Массив с аккаунтами, которые имеют доступ к камере, если параметр запроса
include
содержит элемент
allowed
.
(Object) - Объект с результатами проверки действий из параметра
params.can
Список экранов.
Возвращает список экранов, к которым есть доступ.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Screen>) - Массив с экранми.
(Object) - Объект с результатами проверки действий из параметра
params.can
(Array<Taxonomy>) - Массив с терминами таксономии, которым принадлежат экрана, если параметр запроса
include
содержит элемент
taxonomies
(Array<Account>) - Массив с аккаунтами, которые владеют экранми, если параметр запроса
include
содержит элемент
account
(Integer) - Количество найденных записей.
Список детекций.
Возвращает список детекций на сервере
(Object)
| Имя | Описание |
|---|---|
filter.date Object
|
|
filter.date.$gte String?
|
Дата от |
filter.date.$lte String?
|
Дата до |
filter.camera Object
|
|
filter.camera.id Object
|
|
filter.camera.id.$in Array<String>?
|
Массив ID камер, по которым производится поиск |
filter.server Object
|
|
filter.server.id String
|
(Integer?)
(Integer?)
Список драйверов.
(String)
(Object) - Объект с описанием дополнительных полей драйвера, если параметр запроса
include
содержит элемент
fields
(Object) - Объект с описанием дополнительных полей драйвера, если параметр запроса
include
содержит элемент
camera_fields
(Object) - Объект с описанием доступных операций драйвера, если параметр запроса
include
содержит элемент
operations
(Object) - Объект с описанием доступных операций драйвера, если параметр запроса
include
содержит элемент
operations
Чтение сервера.
Поле server.id является обязательным и должно содержать id читаемого сервера.
(Server)
Список серверов.
Возвращает список серверов, к которым есть доступ. Для обычного пользователя вернет список всех серверов.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB.
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Server>)
params.can
(Object)
(Array<Object>) - Массив информации о версии серверов, если параметр запроса
include
содержит элемент
version
(Array<Object>) - Массив информации о серверах, если параметр запроса
include
содержит элемент
info
(Array<Object>) - Массив информации о здоровье серверов, если параметр запроса
include
содержит элемент
health
(Array<Object>) - Массив информации о статистике серверов, если параметр запроса
include
содержит элемент
stats
(Integer)
Выполнение операции.
(String?)
Имя драйвера, если операция не предполагает выполнение над сервером. Обязательно, если не передается server.id
(String)
Операция
(Object?)
Остальные параметры, зависят от полей, заданный для конкретной операции @see server.drivers
(Object) - Объект с результатами
Синхронизация камер локального API с сервером. Если указан и upload, и download, то сначала будут сохранены камеры с сервера на локальное API. В случае если камеры уже есть, они будут перезаписаны на локальном API.
Особое внимание! Для синхронизации камер необходимо разрешение на действие admin с сервером.
Права на создание камер при синхронизации не проверяются. Если камера еще не была создана, владельцем будет пользователь, производящий синхронизацию.
(Boolean
= false)
Загружать камеры с сервера на API. По умолчанию false.
(Boolean
= false)
Выгружать камеры с API на сервер. По умолчанию false.
(Boolean
= false)
Удалять отсутствующие камеры. Работает только если download или upload установлен в false, но не оба параметра. В зависимости от направления синхронизации, удаление будет происходить либо на сервере, либо в локальном API.
(Boolean
= false)
Пропустить сохранение камеры, если у камеры нет никаких изменений. По умолчанию false.
(Array<Camera>) - Массив с камерами, которые были загружены с сервера на API.
(Array<Camera>) - Массив с камерами, которые были удалены с API.
(Array<Camera>) - Массив с камерами, которые были загружены с API на сервер.
(Array<Object>) - Массив с краткими данными камер, которые были удалены на сервере.
Редактирование или создание сервера.
Поле server.id является обязательным и должно содержать id редактируемого сервера.
(Boolean
= false)
Склеить вложенные значения (актуально для полей
data
и
api_connection
), переданные в запросе с существующими
(Server)
Список файлов
Возвращает список сохраненных файлов в хранилище
(String)
include
содержит элемент
installable
(Array<{filename: String, filepath: String, url: String, size: Number, is_dir: boolean, installable: boolean}>)
(Integer)
(Integer) - Доступное для записи место на диске в байтах, если параметр запроса
include
содержит элемент
disk_space
(Integer) - Свободное место на диске в байтах, если параметр запроса
include
содержит элемент
disk_space
(Integer) - Объём диска в байтах, если параметр запроса
include
содержит элемент
disk_space
Загрузка нового файла. Доступно два варианта - передать base64 и имя файла, либо загружить файл методом multipart/form-data
При multipart/form-data поля base64 и filename необязательны. Дополнительные параметры будет передаваться в поле с именем json,
а данные файла - в поле file
Перезапуск Приложения Страж
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск Приложения Страж
Требует прав на действие ACL: 'admin'
(Boolean)
Статус Приложения Страж
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка Приложения Страж
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск BRC CRON
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск BRC CRON
Требует прав на действие ACL: 'admin'
(Boolean)
Статус BRC CRON
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка BRC CRON
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск BRC
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск BRC
Требует прав на действие ACL: 'admin'
(Boolean)
Статус BRC
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка BRC
Требует прав на действие ACL: 'admin'
(Boolean)
Удалить Chrony из автозагрузки
Требует прав на действие ACL: 'admin'
(Boolean)
Добавить Chrony в автозагрузку
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск Chrony
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск Chrony
Требует прав на действие ACL: 'admin'
(Boolean)
Статус Chrony
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка Chrony
Требует прав на действие ACL: 'admin'
(Boolean)
Удалить DHCP из автозагрузки
Требует прав на действие ACL: 'admin'
(Boolean)
Добавить DHCP в автозагрузку
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск DHCP
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск DHCP
Требует прав на действие ACL: 'admin'
(Boolean)
Статус DHCP
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка DHCP
Требует прав на действие ACL: 'admin'
(Boolean)
Удалить FaceApi из автозагрузки
Требует прав на действие ACL: 'admin'
(Boolean)
Добавить FaceApi в автозагрузку
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск FaceApi
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск FaceApi
Требует прав на действие ACL: 'admin'
(Boolean)
Статус FaceApi
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка FaceApi
Требует прав на действие ACL: 'admin'
(Boolean)
Удалить Iptables из автозагрузки
Требует прав на действие ACL: 'admin'
(Boolean)
Добавить Iptables в автозагрузку
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск Iptables
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск Iptables
Требует прав на действие ACL: 'admin'
(Boolean)
Статус Iptables
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка Iptables
Требует прав на действие ACL: 'admin'
(Boolean)
Удалить lvs-queue из автозагрузки
Требует прав на действие ACL: 'admin'
(Boolean)
Добавить lvs-queue в автозагрузку
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск lvs-queue
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск lvs-queue
Требует прав на действие ACL: 'admin'
(Boolean)
Статус lvs-queue
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка lvs-queue
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск Сети
Требует прав на действие ACL: 'admin'
(Boolean)
Удалить Ntp из автозагрузки
Требует прав на действие ACL: 'admin'
(Boolean)
Добавить Ntp в автозагрузку
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск Ntp
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск Ntp
Требует прав на действие ACL: 'admin'
(Boolean)
Статус Ntp
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка Ntp
Требует прав на действие ACL: 'admin'
(Boolean)
Удалить Openvpn из автозагрузки
Требует прав на действие ACL: 'admin'
(Boolean)
Добавить Openvpn в автозагрузку
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск Openvpn
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск Openvpn
Требует прав на действие ACL: 'admin'
(Boolean)
Статус Openvpn
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка Openvpn
Требует прав на действие ACL: 'admin'
(Boolean)
Перезапуск Стража
Требует прав на действие ACL: 'admin'
(Boolean)
Выключение Стража
Требует прав на действие ACL: 'admin'
(Boolean)
Запуск Xterm
Требует прав на действие ACL: 'admin'
(Boolean)
Остановка Xterm
Требует прав на действие ACL: 'admin'
(Boolean)
Очистка списка клиентов DHCP
Требует прав на действие ACL: 'admin'
(Boolean)
Получение списка клиентов DHCP
Требует прав на действие ACL: 'admin'
Получение настроек DHCP
Требует прав на действие ACL: 'admin'
(Object) - Настройки dhcp
(String) - слушать IP
(String) - сетевой интерфейс
(Object)
(String) - начало диапазона IP
(String) - конец диапазона IP
(Number) - срок хранения IP, в часах
(String) - сетевая маска
(String) - IP роутера
(String) - IP dns
(String) - IP ntp
Установка настроек DHCP
Требует прав на действие ACL: 'admin'
(Object)
Настройки dhcp
| Имя | Описание |
|---|---|
dhcp.listen String
|
слушать IP |
dhcp.interface String
|
сетевой интерфейс |
dhcp.range Object
|
|
dhcp.range.start String
|
начало диапазона IP |
dhcp.range.end String
|
конец диапазона IP |
dhcp.range.lease Number
|
срок хранения IP, в часах |
dhcp.netmask String
|
сетевая маска |
dhcp.router String
|
IP роутера |
dhcp.dns String
|
IP dns |
dhcp.ntp String
|
IP ntp |
Получение списка соответствий MAC и IP
Требует прав на действие ACL: 'admin'
Список файловых систем
Требует прав на действие ACL: 'admin'
(Array<{path: String, size: Number, type: String}>) - Список всех дисков
(Array<{path: String, size: Number, type: String}>) - Список неинициализированных дисков
(Array<{path: String, size: Number, pool: {name: String, path: String}, type: String}>) - Список инициализированных дисков, включающий имя пула zpool
Получение лицензии BRC
Требует прав на действие ACL: 'admin'
Получение лицензии FaceAPI
Требует прав на действие ACL: 'admin'
Получение Machine ID
Требует прав на действие ACL: 'admin'
(String)
Получение настроек lvs-queue
Требует прав на действие ACL: 'admin'
(Object) - Текущие настройки lvs-queue
Получение сетевых настроек
Требует прав на действие ACL: 'admin'
(Object) - Сетевые настройки
(String)
(String)
(String) - static или dhcp
(String) - если inet = static
(String) - если inet = static
(String) - если inet = static
(String) - если inet = static
Получение настроек API
Требует прав на действие ACL: 'admin'
(Object) - Текущие настройки API
Установка настроек API
Требует прав на действие ACL: 'admin'
(Object)
Настройки API. Можно передавать частично, только необходимые значения
(Boolean
= false)
если false, сетевой интерфейс будет перезапущен сразу. Если true, то через 1 секунду - это даст возможность получить ответ
Получение hostname
Требует прав на действие ACL: 'admin'
(String) - Системный hostname
Аптайм
Требует прав на действие ACL: 'admin'
(Object)
(Object) - аптайм API в секундах
(Object) - аптайм API в отформатированном виде
(Object) - аптайм API в человекопонятном формате, приближенно
(Object)
(Object) - аптайм Linux в секундах
(Object) - аптайм Linux в отформатированном виде
(Object) - аптайм Linux в человекопонятном формате, приближенно
Чтение термина таксономии.
Поле taxonomy.id является обязательным и должно содержать id читаемого термина таксономии.
Список терминов таксономии.
Возвращает список терминов, к которым есть доступ. Для обычного пользователя вернет список всех терминов.
(String
= view)
Будут возвращены только те модели, для которых разрешено указанное действие ACL
(Object?)
Фильтр в формате MongoDB.
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
(Array<Taxonomy>)
include
содержит элемент
parents
.
(Array<Taxonomy>)
params.can
(Object)
(Integer)
Подписка на получение событий изменения таксономии. Метод можно вызывать только при использовании socket.io
Присылаемые значения event в событии api-event: taxonomy.create, taxonomy.update, taxonomy.delete
(any)
Редактирование или создание термина таксономии.
Поле taxonomy.id является обязательным и должно содержать id редактируемого термина.
(Boolean
= false)
Склеить вложенные значения (актуально для поля
data
), переданные в запросе с существующими
(Taxonomy)
Вызов событий для триггеров.
Поле event.name является обязательным и должно содержать имя вызываемого события.
Поле event.name обязательно должно начинаться с external. или broadcast.
(Boolean)
Список триггеров.
Возвращает список триггеров.
(Object?)
Фильтр в формате MongoDB
(Mixed?)
Сортировка в формате MongoDB
(Integer?)
(Integer?)
Список доступных типов реакций.
Возвращает список доступных реакций, в зависимости от настроек API.
(Object) - Объект с типами реакций
Ручной запуск триггера. Назначение триггеров срабатывать по событиям API, но этот метод может быть полезен.
Требует прав на действие ACL: 'admin'
Поле trigger.id является обязательным и должно содержать id запускаемого триггера.
(Trigger)
| Имя | Описание |
|---|---|
event.name String
(по умолчанию external.api-call)
|
|
event.payload Object?
|
(Boolean
= fale)
Пропустить проверку условий
(Trigger)