/
⏲ Рассчитываем среднее время до соединения с оператором
⏲ Рассчитываем среднее время до соединения с оператором
Наша задача на сегодня - сразу после того, как мы поставим абонента в очередь ожидания, озвучить среднее время до соединения с оператором.
Для решения задачи мы воспользуемся приложением 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"
}
}
]
}
}
]
}
}
}
]