Help-Center
Search
K

Канал статистики

Содержит описание канала статистики для Ролевого приложения Аксател

Концепция решения

Ролевое приложение или внешний сервис (далее Визуальный Интерфейс) делает запрос по http методом POST на получение данных для хронологических отчетов и оперативных дашбордов. Все запросы обрабатываются служебным сценарием и возвращаются данные. Задачи отображения данных лежат на визуальном интерфейсе.

Протокол взаимодействия

Все запросы инициируются только Визуальным Интерфейсом. На каждый запрос возвращается один и только один ответ, содержащий запрашиваемую информацию или отчет об ошибке.

Запрос

Все запросы делаются на адрес
• для Ролевого Приложения описано в администрировании
• для Внешнего сервиса через token интеграционного канала
Метод запроса POST Content-type application/json; charset=utf-8 Body содержит сам запрос в формате json в виде
{
"entity":"text",
"action":"text",
"options": {"key":"value"}
}
Поле
Описание
entity
определяет раздел запроса.
action
определяет действие внутри entity.
options
содержит дополнительные параметры запроса в зависимости от entity и action и детально описан в разделе по каждому запросу.

Ответ

Ответ в формате json.
{
"success":true/false,
"error":null/"text",
"data": null/"text"
}
Поле
Описание
success
возвращает признак корректности выполнения запроса
• true = запрос выполнен без ошибок, результат в поле data
• false = запрос выполнен с ошибкой. Текст ошибки в поле error
error
Поле содержит описание ошибки (если success == false) или констрантно равно null (если success == true)
data
Поле содержит запрашиваемые данные (если success == true) или констрантно равно null (если success == false). При корректном выполнении запроса формат зависит от запроса и детально описан в разделе по каждому запросу.

Запросы хронологиской статистики

Запрос данных для отображения

Выполняет команду Select для получения блока данных из таблиц (подробно в Структура хронологических таблиц) Может содержать любые агрегации выборки в формате языка postgre sql.
Body запроса
{
"entity":"chronological",
"action":"data",
"options": {"psql":"тело запроса выборки в psql формате"}
}
Поле options.psql должно начинаться с Select. Иначе будет возвращена ошибка выполнения.
Успешный ответ
{
"success":true,
"error":null,
"data": []
}
В поле data будет возвращен массив запрашиваемых данных
Пример
Запрос
{
"entity":"chronological",
"action":"data",
"options": {"psql":"select
inviteid,anumber,acallednum,bnumber,duration,stopreason from calls.success limit
2"}
}
Ответ
{
"success":true,
"error":null,
"data":
[
{
"inviteid": "a72866b5-0631-87dd-2624-0900000334b5",
"anumber": "205",
"acallednum": "375291831767",
"bnumber": "375291831767",
"duration": 19,
"stopreason": "<<\"Bye from side a\">>"
},
{
"inviteid": "cb1a456e-0631-883c-c444-5c00000334b5",
"anumber": "205",
"acallednum": "375291831767",
"bnumber": "375291831767",
"duration": 22,
"stopreason": "<<\"Bye from side a\">>"
}
]
}

Запрос количества данных

Для получения количество строк удовлетворяющих Select необходимо выполнить запрос получения количества строк.
Body запроса
{
"entity":"chronological",
"action":"quantity",
"options": {"psql":"тело запроса получения количества строк выборки в psql
формате"}
}
Поле options.psql должно начинаться с select count. Иначе будет возвращена ошибка выполнения
Успешный ответ
{
"success":true,
"error":null,
"data": number
}
В поле data будет возвращено количество найденных строк в int
Пример
Запрос
{
"entity":"chronological",
"action":"data",
"options": {"psql":"select count (inviteid) from calls.success"}
}
Ответ
{
"success":true,
"error":null,
"data": 835
}
Для получения количества строк можно использовать action=data. В этом случае в поле data ответа будет [{"count":835}]

Запрос файла записи разговора

Запись разговора запрашивается напрямую из системы без сценария-обработчика.

Инфо по записи разговора

method = HEAD url = [fqdn]/rest/v1/journal/calls/<id>/attachment1 <id> = inviteid звонка
Успешный ответ
SIP Code = 200
В заголовках ответа содержится информация
content-type: audio/mpeg content-length: 50 kilobytes
Неуспешный ответ
SIP Code
Причина
404
Файл не найден
403
Доступ запрещен
Получение записи разговора
method = GET url = [fqdn]/rest/v1/journal/calls/<id>/attachment1?attachment=true/false <id> = inviteid звонка attachment=true ответ выдается с заголовком Content-Disposition: attachment; filename*=UTF-8''FILENAME.EXT , где FILENAME.EXT – имя и расширение файла в UrlEncoding, сделано для скачивания браузером attachment=false выдается с Content-Type, соответствующим mime-type расширения файла. сделано для проигрывания средствами браузера
Если запрос без ?attachment, то поведение аналогичное ?attachment=false
Успешный ответ
Для `attachment=false'
SIP Code = 200
В заголовках ответа содержится информация
content-type: audio/mpeg content-length: 50 kilobytes
В body возвращается файл записи
Для `attachment=true'
SIP Code = 200
В заголовках ответа содержится информация
content-length: 50 kilobytes content-type: audio/mpeg content-disposition: attachment; filename=mg1_1711382410-1589448421120.mp3
В body возвращается файл записи
Неуспешный ответ
SIP Code
Причина
404
Файл не найден
403
Доступ запрещен

Структура хронологических таблиц

Для составления хронологических отчетов доступны следующие схемы
Схема
Описание
alertcallevents
События по системе обзвона и оповещения
calls
События по звонкам
ivrhuntq
События по обработке звонков в очередях
ivrhuntqevents
События по состоянию объектов очередей
products
Дополнительные продуктовые данные
providerevents
События по состояниям внешних линий связи (SIP
scriptevents
События по сценариям
selectorevents
События по селекторным совещаниям
sipuserevents
События по сотояниям sip абонентов
sipusers
События по активностям sip абонентов
userevents
События по активностям пользователей

Схема alertcallevents

Позволяет получить все события по системе оповещения и массового автоматизированного обзвона.
Состоит из таблиц
Таблица
Описание
callinited
callpreanswered
callapproved
statechanged
prepared
callrejected
callstarted
callanswered
callfailed
callfinished

Схема calls

Позволяет получить статистические данные по звонкам. Состоит из таблиц
Таблица
Описание
success
Записи по успешным звонкам (был разговор)
cancelled
Записи по звонкам, у которых разговор не состоялся (пропущенные, не дозвонился и прочее)
failed
Записи у которых не было вызова стороны В
holds
Информация по постановке и снятию с удержания
routes
Информация по сработавшим правилам таблицы маршрутизации
forks
Информация по вызовам стороны В (дозвоны)
Основными идентифкатора связи между таблицами является пара полей inviteid и invitedt. Связать цепочку коммутаций можно при инициализации звонка с внешней линии по полю esgdlg. На каждый вызов может быть несколько записей в таблице forks (количество одновременно зарегистрированных устройств абонента В) и в таблице routes (количество успешно сработавших правил маршрутизации).

Таблица success

Содержит агрегирующую информацию по всем успешным звонкам. Успешным считается звонок, у которого сторона В поднял трубку (т.е. состоялась коммутация).
Поле
Тип
Описание
inviteid
uuid
Основной идентификатор по звонку
invitedt
timestamp without time zone
Время инициации первичного звонка в UTC
acallid
character
CallId стороны А
bcallid
character
CallId стороны B
anumber
character
Номер А
ausername
character
Имя пользователя стороны А
adomain
character
Домер стороны А
adisplayname
character
Имя отображения стороны А
anetworkaddr
character
IP адрес стороны А
acallednum
character
Номер, который пришел от А при инициации
arepresentative
character
Номер представления стороны А (при кроссдоменных звонках)
aouter
boolean
Битовый признак что сторона А является внешней линией
aprovidercode
character
Код провайдера стороны А
bnumber
character
Номер B
busername
character
Имя пользователя стороны B
bdomain
character
Домен стороны B
bdisplayname
character
Имя отображения стороны B
bnetworkaddr
character
IP адрес стороны B
bouter
boolean
Битовый признак что сторона B является внешней линией
bprovidercode
character
Код провайдера стороны B
dial_dt
timestamp without time zone
Время инициации вызова в UTC
start_dt
timestamp without time zone
Время начала разговора в UTC
stop_dt
timestamp without time zone
Время окончания разговора в UTC
dial_duration
integer
Продолжительность вызова в сек (кол-во секунд между dial_dt и start_dt)
duration
integer
Продолжительность разговора в сек (кол-во секунд между start_dt и stop_dt)
stopreason
character
Текстовая причина завершения звонка
isrec
boolean
Битовый признак, что разговор был записан
callrecpath
character
Относительный путь записи разговора
callstoragecode
character
Имя хранилища записи разговора
callrecsize
bigint
Размер файла в байтах
callrecdel_dt
timestamp without time zone
Время (UTC) когда запись разговора была удалена по правилам хранения записей
recordruleid
uuid
идентификатор правила записи разговоров
storageruleid
uuid
идентификатор правила хранения записей разговоров
recdomain
character
Домен, в котором велась запись звонка
recexpirets
timestamp withouttime zone
Время в UTC когда запись разговора будет удалена
recexpirets
timestamp withouttime zone
Время в UTC когда запись разговора будет удалена
sys_recdelts
bigint
системное поле
dlgbinding
character
Текстовое поле всех меток звонка
esgdlg
character
CallID внешнего абонента. Может служить единым признаком цепочки коммутаций при инициации звонка с внешней линии
isreplacing
boolean
признак что текущий звонок был переведен от другого

Таблица cancelled

Содержит агрегирующую информацию по всем звонкам без ответа (звонок у которых найдена сторона В, на сторону В отправлен вызов, но диалог / разговор не был начат). Примеры звонков - В не взял трубку или отменил вызов или занят и т.д.
Поле
Тип
Описание
inviteid
uuid
Основной идентификатор по звонку
invitedt
timestamp without time zone
Время инициации первичного звонка в UTC
dial_dt
timestamp without time zone
Время инициации вызова в UTC
stop_dt
timestamp without time zone
Время окончания дозвона в UTC
fromnumber
character
Номер А
fromusername
character
Имя пользователя стороны А
fromdomain
character
Домер стороны А
fromouter
boolean
Битовый признак что сторона А является внешней линией
fromprovidercod
character
Код провайдера стороны А
callednum
character
Номер, который пришел от А при инициации звонка
networkaddr
character
IP адрес стороны А
stoptype
character
SIP код ответа завершения звонка
stopreason
character
Текстовая причина завершения звонка

Таблица failed

Содержит агрегирующую информацию по всем неуспешным попыткам вызова. Неуспешная попытка - сторона В не найдена. Примеры ситуации - В не зарегистрирован, недоступна внешняя линия, набор запрещен по таблице маршрутизации и т.д.
Поле
Тип
Описание
inviteid
uuid
Основной идентификатор по звонку
invitedt
timestamp without time zone
Время инициации первичного звонка в UTC
fromnumber
character
Номер А
fromusername
character
Имя пользователя стороны А
fromdomain
character
Домер стороны А
fromouter
boolean
Битовый признак что сторона А является внешней линией
fromprovidercod
character
Код провайдера стороны А
callednum
character
Номер, который пришел от А при инициации звонка
networkaddr
character
IP адрес стороны А
sipcode
character
SIP код причины
reason
character
Текстовая причина неуспешного звонка

Таблица holds

Содержит информацию по постановке/снятию с удержания звонка.
Поле
Тип
Описание
inviteid
uuid
Основной идентификатор по звонку
invitedt
timestamp without time zone
Время инициации первичного звонка в UTC
side
character
Сторона кто поставил на удержание. Может быть a или b
hold_dt
timestamp without time zone
Время (UTC) постановки на удержание
unhold_dt
timestamp without time zone
Время (UTC) снятия с удержания
eventid
uuid
уникальный идентификатор события

Таблица routes

Содержит информацию по сработавшим маршрутам таблицы маршрутизации для каждого звонка в таблицах success, cancelled, failed.
Окончательно сработавшее правило всегда последнее в списке. Если несколько правил на один вызов, то значит все, кроме последнего, не смогли быть применены.
Поле
Тип
Описание
inviteid
uuid
Основной идентификатор по звонку
invitedt
timestamp without time zone
Время инициации первичного звонка в UTC
event_dt
timestamp without time zone
Время срабатывания правила в UTC
eventid
uuid
уникальный идентификатор события
vectorcode
character
Код вектора
ruleid
uuid
идентификатор правила
routeaction
character
Событие правила
routedomain
character
Домен правила
providercode
character
Код провайдера (если событие правила = outer)
featurecodeid
uuid
Идентификатор правила featurecode (если событие правила = featurecode)
featurecodetype
character
Тип кода абонентских функций (если событие правила = featurecode)
featurenumber
character
номер после обработки правилами featurecode (если событие правила = featurecode)

Таблица forks

Содержит Информацию по вызовы сторон В для всех звонков в таблицах success, cancelled.
Если на один вызов несколько записей форков, то значит сторона В имеет несколько одновременно зарегистрированных аппаратов.
Поле
Тип
Описание
inviteid
uuid
Основной идентификатор по звонку
invitedt
timestamp without time zone
Время инициации первичного звонка в UTC
busername
character
Имя пользователя стороны B
bdomain
character
Домер стороны B
bnetworkaddr
character
IP адрес стороны B
bouter
boolean
Битовый признак что сторона B является внешней линией
bprovidercode
character
Код провайдера стороны B
ispreanswered
boolean
Битовый признак был ли предварительный ответ SIP 18x от этого форка
isanswered
boolean
Битовый признак был ли окончательный ответ SIP 200 от этого форка. У каждого вызова таблицы success существует одна и только одна запись где данное поле == true
forkstart_dt
timestamp withouttime zone
Время инициации вызова на этот форк в UTC
forkpreansw_dt
timestamp without time zone
Время предварительного ответа в UTC
forkansw_dt
timestamp without time zone
Время окончательного ответа в UTC
sipcode
integer
Конечный результат вызова форка (SIP Code окончательного ответа)
reason
character
Конечный результат вызова форка (текстовое поле)
eventid
uuid
Уникальный идентифкатор данного форка

Схема ivrhuntq

huntq_calls
inviteid uuid NOT NULL,
huntq_id uuid,
callid character varying COLLATE pg_catalog."default",
esgdlg character varying COLLATE pg_catalog."default",
from_user character varying COLLATE pg_catalog."default",
from_displayname character varying COLLATE pg_catalog."default",
qid character varying COLLATE pg_catalog."default",
enqueue_result character varying COLLATE pg_catalog."default",
start_call_uid uuid,
dequeue_result character varying COLLATE pg_catalog."default", dequeue_reason character varying COLLATE pg_catalog."default", banned_user uuid,
final_stopreason character varying COLLATE pg_catalog."default", dt_greet timestamp without time zone, dt_enqueue timestamp without time zone,
dt_start_call timestamp without time zone,
dt_dequeue timestamp without time zone,
dt_preivr timestamp without time zone,
dt_userban timestamp without time zone,
dt_quit timestamp without time zone,
dt_final timestamp without time zone

Схема ivrhuntqevents

final
huntq_id character varying COLLATE pg_catalog."default",
callid character varying COLLATE pg_catalog."default",
inviteid uuid,
esgdlg character varying COLLATE pg_catalog."default",
stopreason character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
queue_dequeue
qid character varying COLLATE pg_catalog."default",
huntq_id character varying COLLATE pg_catalog."default",
from_user character varying COLLATE pg_catalog."default",
from_displayname character varying COLLATE pg_catalog."default",
callid character varying COLLATE pg_catalog."default",
inviteid uuid,
esgdlg character varying COLLATE pg_catalog."default",
result character varying COLLATE pg_catalog."default",
reason character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
queue_enqueue
qid character varying COLLATE pg_catalog."default",
huntq_id character varying COLLATE pg_catalog."default",
callid character varying COLLATE pg_catalog."default",
inviteid uuid,
esgdlg character varying COLLATE pg_catalog."default",
from_user character varying COLLATE pg_catalog."default",
result character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
queue_greeting
huntq_id character varying COLLATE pg_catalog."default",
qivrscript character varying COLLATE pg_catalog."default",
callid character varying COLLATE pg_catalog."default",
inviteid uuid,
esgdlg character varying COLLATE pg_catalog."default",
from_user character varying COLLATE pg_catalog."default",
from_displayname character varying COLLATE pg_catalog."default",
sys_iscopied boolean DEFAULT false,
sys_copyid bigint,
eventts timestamp without time zone
queue_preivr_start
qid character varying COLLATE pg_catalog."default",
userid character varying COLLATE pg_catalog."default",
callid character varying COLLATE pg_catalog."default",
inviteid uuid,
esgdlg character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
queue_quit
qid character varying COLLATE pg_catalog."default",
from_user character varying COLLATE pg_catalog."default",
callid character varying COLLATE pg_catalog."default",
inviteid uuid,
esgdlg character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
queue_start_call
qid character varying COLLATE pg_catalog."default",
userid character varying COLLATE pg_catalog."default",
callid character varying COLLATE pg_catalog."default",
inviteid uuid,
esgdlg character varying COLLATE pg_catalog."default", eventts timestamp without time zone
queue_userban
qid character varying COLLATE pg_catalog."default",
huntq_id character varying COLLATE pg_catalog."default",
callid character varying COLLATE pg_catalog."default",
inviteid uuid,
esgdlg character varying COLLATE pg_catalog."default",
userid character varying COLLATE pg_catalog."default",
eventts timestamp without time zone

Схема products

filter_intervals
filter_id interval,
filter_text character varying COLLATE pg_catalog."default"
ref_huntblock_reasons
title character varying COLLATE pg_catalog."default", event_key character varying COLLATE pg_catalog."default", duration bigint,
type character varying COLLATE pg_catalog."default", is_allowed boolean

Схема providerevents

provider_state_changed
code character varying COLLATE pg_catalog."default",
objid character varying COLLATE pg_catalog."default",
state character varying COLLATE pg_catalog."default",
eventts timestamp without time zone

Схема scriptevents

script_start
type character varying COLLATE pg_catalog."default",
scrcode character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
script_stop
type character varying COLLATE pg_catalog."default",
scrcode character varying COLLATE pg_catalog."default",
stoptype character varying COLLATE pg_catalog."default",
stopreason character varying COLLATE pg_catalog."default",
eventts timestamp without time zone

Схема selectorevents

sel_abon_state_changed
id character varying COLLATE pg_catalog."default",
num character varying COLLATE pg_catalog."default",
name character varying COLLATE pg_catalog."default",
selid character varying COLLATE pg_catalog."default",
state character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
sel_create
id character varying COLLATE pg_catalog."default",
opts character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
sel_delete
id character varying COLLATE pg_catalog."default",
reason character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
sel_state_changed
id character varying COLLATE pg_catalog."default",
state character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
sel_update
id character varying COLLATE pg_catalog."default",
opts character varying COLLATE pg_catalog."default",
eventts timestamp without time zone
sel_voting_state_changed
id character varying COLLATE pg_catalog."default",
name character varying COLLATE pg_catalog."default",
selid character varying COLLATE pg_catalog."default",
state character varying COLLATE pg_catalog."default",
info character varying COLLATE pg_catalog."default",
eventts timestamp without time zone

Схема sipuserevents

sipuser_state_changed
login character varying COLLATE pg_catalog."default" NOT NULL,
state character varying COLLATE pg_catalog."default" NOT NULL,
sys_iscopied boolean DEFAULT false, sys_copyid bigint,
eventts timestamp without time zone NOT NULL
sipuser_transtate_set
login character varying COLLATE pg_catalog."default" NOT NULL,
state character varying COLLATE pg_catalog."default" NOT NULL,
ttl bigint,
strategy character varying COLLATE pg_catalog."default",
xinfo character varying COLLATE pg_catalog."default",
sys_iscopied boolean DEFAULT false, sys_copyid bigint,
eventts timestamp without time zone NOT NULL

Схема sipusers

states
eventid bigint,
event_name character varying COLLATE pg_catalog."default",
login character varying COLLATE pg_catalog."default",
state character varying COLLATE pg_catalog."default",
dt_start timestamp without time zone,
dt_stop timestamp without time zone,
len bigint,
xinfo character varying COLLATE pg_catalog."default",
strategy character varying COLLATE pg_catalog."default"

Схема userevents

usr_state_changed
user_id character varying COLLATE pg_catalog."default" NOT NULL,
state character varying COLLATE pg_catalog."default",
changed_by character varying COLLATE pg_catalog."default",
eventts timestamp without time zone