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

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

Ролевое приложение или внешний сервис (далее Визуальный Интерфейс) делает запрос по 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  | <p>возвращает признак корректности выполнения запроса<br></p><p> • true = запрос выполнен без ошибок, результат в поле data</p><p>• false = запрос выполнен с ошибкой. Текст ошибки в поле error</p>                      |
| error    | Поле содержит описание ошибки (если success == false) или констрантно равно null (если success == true)                                                                                                                   |
| data     | Поле содержит запрашиваемые данные (если success == true) или констрантно равно null (если success == false). При корректном выполнении запроса формат зависит от запроса и детально описан в разделе по каждому запросу. |

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

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

Выполняет команду Select для получения блока данных из таблиц (подробно в Структура хронологических таблиц) Может содержать любые агрегации выборки в формате языка postgre sql.

**Body** **запроса**

```
{
"entity":"chronological",
"action":"data",
"options": {"psql":"тело  запроса  выборки  в  psql формате"}
}
```

{% hint style="info" %}
Поле **options.psql** должно начинаться с **Select**. Иначе будет возвращена ошибка выполнения.
{% endhint %}

**Успешный** **ответ**

```
{
"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
формате"}
}
```

{% hint style="info" %}
Поле **options.psql** должно начинаться с **select** count. Иначе будет возвращена ошибка выполнения
{% endhint %}

**Успешный** **ответ**

```
{
"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\
> **<**&#x69;d> = inviteid звонка\
> attachment=true\
> &#x20;    ответ  выдается  с  заголовком\
> &#x20;       Content-Disposition: attachment; filename\*=UTF-8''FILENAME.EXT\
> &#x20;       ,    где  FILENAME.EXT – имя  и  расширение  файла  в  UrlEncoding,\
> &#x20;   сделано  для  скачивания  браузером\
> attachment=false\
> &#x20;   выдается  с  Content-Type, соответствующим  mime-type расширения  файла.\
> &#x20;   сделано  для  проигрывания  средствами  браузера

{% hint style="info" %}
Если запрос без **?attachment**, то поведение аналогичное **?attachment=false**
{% endhint %}

**Успешный ответ**

**Для \`attachment=false'**

> SIP Code = 200

В заголовках ответа содержится информация

> content-type:          audio/mpeg\
> content-length: 50 kilobytes

В  body возвращается файл записи

**Для** **\`attachment=true'**&#x20;

> SIP Code = 200

В  заголовках ответа содержится информация

> content-length: 50 kilobytes\
> &#x20;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    |          |

### ![](file:///C:/Users/Alexader/AppData/Local/Temp/msohtmlclip1/01/clip_image005.png)**Схема 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**

Содержит агрегирующую информацию по всем неуспешным попыткам вызова.\
&#x20;Неуспешная попытка - сторона В не найдена.\
Примеры ситуации - В не зарегистрирован, недоступна внешняя линия, набор запрещен по таблице маршрутизации и т.д.

| **Поле**        | **Тип**                     | **Описание**                                          |
| --------------- | --------------------------- | ----------------------------------------------------- |
| 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
```
