callsService
callsService
- callsService
- GetPaginatedCalls(params) ⇒
Promise.<ApiResult.<PaginatedCallsResponseDto>> - GetCallsAnalytics(queryString) ⇒
Promise.<ApiResult> - GetCategoryAnalytics(queryString) ⇒
Promise.<ApiResult.<CategoryAnalyticsResponseDto>> - GetResultAnalytics(params) ⇒
Promise.<ApiResult.<CallResultAnalyticsResponseDto>> - GetAgentAnalytics(params) ⇒
Promise.<ApiResult.<CallAgentAnalyticsResponseDto>> - GetEntityAnalytics(params) ⇒
Promise.<ApiResult.<CallEntityAnalyticsResponseDto>> - GetLoadAnalytics(params) ⇒
Promise.<ApiResult.<CallLoadAnalyticsResponseDto>> .GetCallStateByContactId(contactId) ⇒Promise.<ApiResult>.ClarifyCallStatus(params) ⇒Promise.<ApiResult>
- GetPaginatedCalls(params) ⇒
GetPaginatedCalls(params) ⇒ Promise.<ApiResult.<PaginatedCallsResponseDto>>
Получает список звонков с пагинацией и фильтрами
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| params | GetCallsRequestDto | Пагинация и фильтры. См. GetCallsRequestDto |
Возвращаемые данные
Returns: Promise.<ApiResult.<PaginatedCallsResponseDto>> - Список звонков под полем result
INFO
Список объединяет два источника: звонки и сессии агента без собственного звонка. Фильтр по колонке, которой у сессии нет (queueIds, queueTypes, recallCreated, outcomeReason, webexCorrelationId), отбрасывает ветвь сессий целиком.
Пример
await callsService.GetPaginatedCalls({
pagination: { page: 1, rowsPerPage: 25, sortBy: '', descending: true },
phoneNumbers: [],
from: '2026-07-01',
to: '2026-07-31',
agentIds: [3],
sessionOutcomes: [1],
durationSeconds: { from: 60 },
})GetCallsAnalytics(queryString) ⇒ Promise.<ApiResult>
Получает аналитику звонков по диапазону дат
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| queryString | string | Готовая строка запроса с диапазоном дат |
Возвращаемые данные
Returns: Promise.<ApiResult> - Аналитика звонков
GetCategoryAnalytics(queryString) ⇒ Promise.<ApiResult.<CategoryAnalyticsResponseDto>>
Получает аналитику звонков по категориям (график + KPI) за диапазон дат по выбранным категориям
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| queryString | string | Готовая строка запроса (диапазон дат, categories) |
Возвращаемые данные
Returns: Promise.<ApiResult.<CategoryAnalyticsResponseDto>> - Аналитика по категориям под полем result
GetResultAnalytics(params) ⇒ Promise.<ApiResult.<CallResultAnalyticsResponseDto>>
Получает статистику завершения звонков за период с разбивкой по категориям сессии.
Считаются все сессии периода плюс те звонки, у которых своей сессии нет: сессия в приоритете, а звонок без сессии нельзя терять — сопоставить звонок и сессию во всех случаях невозможно, и именно в таких звонках лежит трафик, который никто не разобрал.
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| params | CallAnalyticsPeriodRequestDto | Период в локальных днях колл-центра, to включительно |
Возвращаемые данные
Returns: Promise.<ApiResult.<CallResultAnalyticsResponseDto>> - Статистика завершения под полем result
INFO
Причина завершения (SessionResultDto) заполняется только у негативного исхода, поэтому причины описывают малую долю трафика. Знаменатель несут счётчики: notReached + positive + negative + interrupted + unclassified = total. Строка с category: null — звонки, у которых категории нет вообще; она идёт последней и не смешивается с категорией Other.
Пример
const { result } = await callsService.GetResultAnalytics({ from: '2026-07-01', to: '2026-07-31' })
result.total.total // всего звонков за период
result.categories.find((row) => row.category === null)?.counters.unclassifiedGetAgentAnalytics(params) ⇒ Promise.<ApiResult.<CallAgentAnalyticsResponseDto>>
Получает статистику звонков за период в разрезе webex-агентов: объём и исход по категориям, доля разговоров короче минуты, средняя продолжительность.
Популяция та же, что у GetResultAnalytics, поэтому два разреза сходятся: сумма agents[].counters.total плюс unattributedCalls равна total.total оттуда.
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| params | CallAnalyticsPeriodRequestDto | Период в локальных днях колл-центра, to включительно |
Возвращаемые данные
Returns: Promise.<ApiResult.<CallAgentAnalyticsResponseDto>> - Разрез по агентам под полем result
WARNING
Сумма по агентам НЕ равна всем звонкам периода. unattributedCalls — звонки, которых не удалось привязать ни к одному агенту (звонки без сессии, которых CDR не привязал к пользователю); на dev это около трети трафика.
INFO
Длительности (duration) считаются только по отвеченным звонкам и несут свой знаменатель duration.answeredTotal — делить shortCalls на counters.total нельзя. Порог «короткого» звонка приходит в shortCallThresholdSeconds, а не задан на фронте.
Пример
const { result } = await callsService.GetAgentAnalytics({ from: '2026-07-01', to: '2026-07-31' })
const agent = result.agents[0]
agent.duration.shortCalls / agent.duration.answeredTotal // доля разговоров короче порогаGetEntityAnalytics(params) ⇒ Promise.<ApiResult.<CallEntityAnalyticsResponseDto>>
Получает разбивку звонков периода по привязанной сущности — в целом и в разрезе категорий.
Популяция та же, что у GetResultAnalytics и GetAgentAnalytics, поэтому total совпадает с их тоталами, а счётчики entities складываются в него ровно: каждый звонок попадает в один бакет, включая непривязанные.
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| params | CallAnalyticsPeriodRequestDto | Период в локальных днях колл-центра, to включительно |
Возвращаемые данные
Returns: Promise.<ApiResult.<CallEntityAnalyticsResponseDto>> - Разбивка по сущностям под полем result
WARNING
entityType: null — звонки без привязки, и на реальных данных это большинство: все звонки без сессии плюс те сессии, где агент не связал разговор с карточкой. Бакет идёт последним. Показывать ли этот сектор или считать доли только по привязанным — решение представления.
INFO
Лида партнёра в домене нет, поэтому и потенциальный, и существующий партнёр ведут на Partner. У строк byCategory нет отдельного тотала: сумма их entities и есть число звонков категории.
Пример
const { result } = await callsService.GetEntityAnalytics({ from: '2026-07-01', to: '2026-07-31' })
result.entities.filter((row) => row.entityType !== null) // только привязанныеGetLoadAnalytics(params) ⇒ Promise.<ApiResult.<CallLoadAnalyticsResponseDto>>
Получает нагрузку колл-центра за период по дню недели и часу — под тепловую карту.
Популяция та же, что у остальных разрезов аналитики, поэтому total совпадает с их тоталами и равен сумме cells[].count.
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| params | CallAnalyticsPeriodRequestDto | Период в локальных днях колл-центра, to включительно |
Возвращаемые данные
Returns: Promise.<ApiResult.<CallLoadAnalyticsResponseDto>> - Нагрузка под полем result
WARNING
weekday — ISO: 1 понедельник … 7 воскресенье. Это НЕ Date.getDay(), где 0 воскресенье. Маппинг на подписи дней должен быть сознательным, иначе карта поедет на один день.
INFO
cells[].count — абсолютное число звонков за весь период. Среднее = деление на dayCount того же дня недели из weekdays; считать этот знаменатель на фронте по своим локальным датам нельзя, числитель посчитан в таймзоне timeZone и по разрешённому на бэке периоду. cells — полная сетка 168 ячеек, пустые приходят нулями, дорисовывать ничего не нужно.
Пример
const { result } = await callsService.GetLoadAnalytics({ from: '2026-07-01', to: '2026-07-31' })
const days = new Map(result.weekdays.map((row) => [row.weekday, row.dayCount]))
const average = result.cells.map((cell) => cell.count / (days.get(cell.weekday) || 1))callsService.GetCallStateByContactId(contactId) ⇒ Promise.<ApiResult>
Promise.<ApiResult>Deprecated
Получает активный звонок контакта по его ID
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| contactId | number | ID контакта |
Возвращаемые данные
Returns: Promise.<ApiResult> - Активный звонок контакта
callsService.ClarifyCallStatus(params) ⇒ Promise.<ApiResult>
Promise.<ApiResult>Deprecated
Уточняет статус звонка
Принимаемые параметры
| Param | Type | Description |
|---|---|---|
| params | ClarifyCallStatusRequestParam | Параметры запроса с ID звонка и новым статусом |
Возвращаемые данные
Returns: Promise.<ApiResult> - Подтверждение операции