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

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

Ролевое приложение или внешний сервис (далее Визуальный Интерфейс) делает запрос по 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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.axatel.by/razrabotchikam/untitled.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
