Skip to content

callsService

callsService

GetPaginatedCalls(params) ⇒ Promise.<ApiResult.<PaginatedCallsResponseDto>>

Получает список звонков с пагинацией и фильтрами


Принимаемые параметры

ParamTypeDescription
paramsGetCallsRequestDtoПагинация и фильтры. См. GetCallsRequestDto

Возвращаемые данные

Returns: Promise.<ApiResult.<PaginatedCallsResponseDto>> - Список звонков под полем result

INFO

Список объединяет два источника: звонки и сессии агента без собственного звонка. Фильтр по колонке, которой у сессии нет (queueIds, queueTypes, recallCreated, outcomeReason, webexCorrelationId), отбрасывает ветвь сессий целиком.


Пример

js
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>

Получает аналитику звонков по диапазону дат


Принимаемые параметры

ParamTypeDescription
queryStringstringГотовая строка запроса с диапазоном дат

Возвращаемые данные

Returns: Promise.<ApiResult> - Аналитика звонков




GetCategoryAnalytics(queryString) ⇒ Promise.<ApiResult.<CategoryAnalyticsResponseDto>>

Получает аналитику звонков по категориям (график + KPI) за диапазон дат по выбранным категориям


Принимаемые параметры

ParamTypeDescription
queryStringstringГотовая строка запроса (диапазон дат, categories)

Возвращаемые данные

Returns: Promise.<ApiResult.<CategoryAnalyticsResponseDto>> - Аналитика по категориям под полем result




GetResultAnalytics(params) ⇒ Promise.<ApiResult.<CallResultAnalyticsResponseDto>>

Получает статистику завершения звонков за период с разбивкой по категориям сессии.

Считаются все сессии периода плюс те звонки, у которых своей сессии нет: сессия в приоритете, а звонок без сессии нельзя терять — сопоставить звонок и сессию во всех случаях невозможно, и именно в таких звонках лежит трафик, который никто не разобрал.


Принимаемые параметры

ParamTypeDescription
paramsCallAnalyticsPeriodRequestDtoПериод в локальных днях колл-центра, to включительно

Возвращаемые данные

Returns: Promise.<ApiResult.<CallResultAnalyticsResponseDto>> - Статистика завершения под полем result

INFO

Причина завершения (SessionResultDto) заполняется только у негативного исхода, поэтому причины описывают малую долю трафика. Знаменатель несут счётчики: notReached + positive + negative + interrupted + unclassified = total. Строка с category: null — звонки, у которых категории нет вообще; она идёт последней и не смешивается с категорией Other.


Пример

js
const { result } = await callsService.GetResultAnalytics({ from: '2026-07-01', to: '2026-07-31' })
result.total.total // всего звонков за период
result.categories.find((row) => row.category === null)?.counters.unclassified


GetAgentAnalytics(params) ⇒ Promise.<ApiResult.<CallAgentAnalyticsResponseDto>>

Получает статистику звонков за период в разрезе webex-агентов: объём и исход по категориям, доля разговоров короче минуты, средняя продолжительность.

Популяция та же, что у GetResultAnalytics, поэтому два разреза сходятся: сумма agents[].counters.total плюс unattributedCalls равна total.total оттуда.


Принимаемые параметры

ParamTypeDescription
paramsCallAnalyticsPeriodRequestDtoПериод в локальных днях колл-центра, to включительно

Возвращаемые данные

Returns: Promise.<ApiResult.<CallAgentAnalyticsResponseDto>> - Разрез по агентам под полем result

WARNING

Сумма по агентам НЕ равна всем звонкам периода. unattributedCalls — звонки, которых не удалось привязать ни к одному агенту (звонки без сессии, которых CDR не привязал к пользователю); на dev это около трети трафика.

INFO

Длительности (duration) считаются только по отвеченным звонкам и несут свой знаменатель duration.answeredTotal — делить shortCalls на counters.total нельзя. Порог «короткого» звонка приходит в shortCallThresholdSeconds, а не задан на фронте.


Пример

js
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 складываются в него ровно: каждый звонок попадает в один бакет, включая непривязанные.


Принимаемые параметры

ParamTypeDescription
paramsCallAnalyticsPeriodRequestDtoПериод в локальных днях колл-центра, to включительно

Возвращаемые данные

Returns: Promise.<ApiResult.<CallEntityAnalyticsResponseDto>> - Разбивка по сущностям под полем result

WARNING

entityType: null — звонки без привязки, и на реальных данных это большинство: все звонки без сессии плюс те сессии, где агент не связал разговор с карточкой. Бакет идёт последним. Показывать ли этот сектор или считать доли только по привязанным — решение представления.

INFO

Лида партнёра в домене нет, поэтому и потенциальный, и существующий партнёр ведут на Partner. У строк byCategory нет отдельного тотала: сумма их entities и есть число звонков категории.


Пример

js
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.


Принимаемые параметры

ParamTypeDescription
paramsCallAnalyticsPeriodRequestDtoПериод в локальных днях колл-центра, to включительно

Возвращаемые данные

Returns: Promise.<ApiResult.<CallLoadAnalyticsResponseDto>> - Нагрузка под полем result

WARNING

weekday — ISO: 1 понедельник … 7 воскресенье. Это НЕ Date.getDay(), где 0 воскресенье. Маппинг на подписи дней должен быть сознательным, иначе карта поедет на один день.

INFO

cells[].count — абсолютное число звонков за весь период. Среднее = деление на dayCount того же дня недели из weekdays; считать этот знаменатель на фронте по своим локальным датам нельзя, числитель посчитан в таймзоне timeZone и по разрешённому на бэке периоду. cells — полная сетка 168 ячеек, пустые приходят нулями, дорисовывать ничего не нужно.


Пример

js
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>

Deprecated

Получает активный звонок контакта по его ID


Принимаемые параметры

ParamTypeDescription
contactIdnumberID контакта

Возвращаемые данные

Returns: Promise.<ApiResult> - Активный звонок контакта




callsService.ClarifyCallStatus(params) ⇒ Promise.<ApiResult>

Deprecated

Уточняет статус звонка


Принимаемые параметры

ParamTypeDescription
paramsClarifyCallStatusRequestParamПараметры запроса с ID звонка и новым статусом

Возвращаемые данные

Returns: Promise.<ApiResult> - Подтверждение операции