Канал статистики
Содержит описание канала статистики для Ролевого приложения Аксател
Ролевое приложение или внешний сервис (далее Визуальный Интерфейс) делает запрос по 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 | События по активностям пользователей |
Позволяет получить все события по системе оповещения и массового автоматизированного обзвона.
Состоит из таблиц
Таблица | Описание |
callinited | |
callpreanswered | |
callapproved | |
statechanged | |
prepared | |
callrejected | |
callstarted | |
callanswered | |
callfailed | |
callfinished | |
Позволяет получить статистические данные по звонкам. Состоит из таблиц
Таблица | Описание |
success | Записи по успешным звонкам (был разговор) |
cancelled | Записи по звонкам, у которых разговор не состоялся (пропущенные, не дозвонился и прочее) |
failed | Записи у которых не было вызова стороны В |
holds | Информация по постановке и снятию с удержания |
routes | Информация по сработавшим правилам таблицы маршрутизации |
forks | Информация по вызовам стороны В (дозвоны) |
Основными идентифкатора связи между таблицами является пара полей inviteid и invitedt.
Связать цепочку коммутаций можно при инициализации звонка с внешней линии по полю esgdlg.
На каждый вызов может быть несколько записей в таблице forks (количество одновременно зарегистрированных устройств абонента В) и в таблице routes (количество успешно сработавших правил маршрутизации).
Содержит агрегирующую информацию по всем успешным звонкам. Успешным считается звонок, у которого сторона В поднял трубку (т.е. состоялась коммутация).
Поле | Тип | Описание |
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 | признак что текущий звонок был переведен от другого |
Содержит агрегирующую информацию по всем звонкам без ответа (звонок у которых найдена сторона В, на сторону В отправлен вызов, но диалог / разговор не был начат). Примеры звонков - В не взял трубку или отменил вызов или занят и т.д.
Поле | Тип | Описание |
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 | Текстовая причина завершения звонка |
Содержит агрегирующую информацию по всем неуспешным попыткам вызова.
Неуспешная попытка - сторона В не найдена.
Примеры ситуации - В не зарегистрирован, недоступна внешняя линия, набор запрещен по таблице маршрутизации и т.д.
Поле | Тип | Описание |
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 | Текстовая причина неуспешного звонка |
Содержит информацию по постановке/снятию с удержания звонка.
Поле | Тип | Описание |
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 | уникальный идентификатор события |
Содержит информацию по сработавшим маршрутам таблицы маршрутизации для каждого звонка в таблицах 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) |
Содержит Информацию по вызовы сторон В для всех звонков в таблицах 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 | Уникальный идентифкатор данного форка |
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
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
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
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
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
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
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
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"
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
Last modified 3yr ago