/
⏲ Рассчитываем среднее время до соединения с оператором

⏲ Рассчитываем среднее время до соединения с оператором

Наша задача на сегодня - сразу после того, как мы поставим абонента в очередь ожидания, озвучить среднее время до соединения с оператором.

Для решения задачи мы воспользуемся приложением CDR, которое позволит нам выполнить запрос в базу elasticsearch и получить среднее время ожидания абонентов в очереди main за последний час. Правильный запрос в elasticsearch будет иметь вот такой вид:

elasticsearch
{ "size": 0, "aggs": { "waiting": { "avg": { "field": "queue.wait_duration" } } }, "query": { "bool": { "must": [ { "match": { "queue.name": "main" } }, { "range": { "created_time": { "gte": "now-1h", "lte": "now" } } } ] } } }

Остается оформить все в нашей схеме ACR: получить целую часть из среднего значения ожидания в очереди, текст озвучим с помощью синтеза речи и т.д.

Привожу простой пример такой схемы:

ACR
[ { "cdr": { "exportVar": { "avg_wait": "aggregations.waiting.value" }, "elastic": { "aggs": { "waiting": { "avg": { "field": "queue.wait_duration" } } }, "index": "cdr-a*", "limit": 0, "query": "*", "filter": { "bool": { "must": [ { "match": { "queue.name": "main" } }, { "range": { "created_time": { "gte": "now-1h", "lte": "now" } } } ] } } } } }, { "math": { "data": "${avg_wait}", "setVar": "avg_wait", "fn": "ceil" } }, { "log": "avg_wait: ${avg_wait}" }, { "queue": { "name": "main", "timer": { "interval": 1, "tries": 1, "actions": [ { "ccPosition": { "var": "ccPosition" } }, { "if": { "expression": "!${avg_wait} || ${avg_wait} < 60", "then": [ { "tts": { "text": "Расчетное время ожидания до соединения с оператором меньше одной минуты.", "voice": "Maxim" } } ] } }, { "if": { "expression": "${avg_wait} > 120", "then": [ { "tts": { "text": "Расчетное время ожидания до соединения с оператором больше двух минут.", "voice": "Maxim" } } ], "else": [ { "tts": { "text": "Расчетное время ожидания до соединения с оператором меньше двух минут.", "voice": "Maxim" } } ] } } ] } } } ]