artem
13.10.2018
494

Счетчик донаборов в IVR

На многих АТС входящие вызовы попадают на голосовое меню (IVR), в котором присутствует возможность выбрать пункт меню, либо донабрать внутренний номер. Часто необходимо понять, по каким направления чаще всего отправляются люди, для этого будет реализован механизм подсчета этих значений.

Способ основывается на чтении и анализировании логов Asterisk, поэтому запись логов в файл необходима.

Часть лога в момент вызова IVR.

Для анализа будем использовать то, что при выборе пункта меню или донаборе происходит выполнение строки вида 1@ivr-1 (как пример). В котором первая цифра это набранный символ, вторая – это сама ИВР. Чтобы получить это значение будем использовать регулярные выражения, а также, поскольку нужно считать количество, то понадобится многомерный массив.

Использовать будем язык bash, поскольку в нем проще работать с запросами к файлам.

Первоначально нужно получить из лога все строки вышеуказанного вида:

string=$( cat /var/log/asterisk/full.1 | grep -E “[[0-9]+@ivr-” )

А также пароль для доступа к базе данных, чтобы составить подпись к ИВР. Пароль получим из файла freepbx.conf:

mysqlpass=”$(grep “AMPDBPASS” /etc/freepbx.conf | awk ‘{printf $3}’ | sed -e “s/[‘|;]//g”)”

Таблица IVR

Если у вас версия без FreePBX, то необходимо будет переделать регулярное выражение, либо указывать ИВР в явном виде.

Объявляем массив

declare -A arr

Указываем разделитель

IFS=$’n’

В цикле проверяем нажатую клавишу и заводим в созданный массив:

for fn in $string; do
unset IFS
s1=`expr “$fn” : ‘.*[([0-9]*@ivr-[0-9]*)’`
#Номер ИВР
ivr=`expr “$s1” : ‘.*-([0-9].*)’`
#Нажатый символ
ext=`expr “$s1” : ‘([0-9]*)’`
#Добавляем счетчик к соответствующему элементу массива
((arr[$ivr,$ext]++))
done;
unset IFS

Массив составлен, если необходимо вместо номера IVR указывать ее название, используем запрос в базу и цикл для обработки:

#Запрашиваем из базы имя ИВР
mysqlscript=”Select name from asterisk.ivr_details order by id;”
ivr_descr=$( mysql –user=freepbxuser –password=”$mysqlpass” -N asteriskcdrdb <<< “$mysqlscript” )
k=1
#Создаем массив с именами ИВР
for it in $ivr_descr; do
arrs[$k]=$it
((k++))
done;

После приступаем к формированию таблицы результатов, которые будем записывать в csv таблицу:

#Удаляем прошлый файл
rm -f temp.csv
echo “IVR, Клавиша/Добавочный, Количество наборов” >> temp.csv

В цикле получаем номер ИВР, для соотношения с названием и количество наборов:

for ft in ${!arr[*]}; do
#Вырезаем номер ИВР из ключа
ivr=${ft%,*}
#Вырезаем клавишу из ключа
ext=${ft#*,}
ivr_descr=${arrs[$ivr]}
#Записываем в файл
echo “$ivr_descr, $ext, ${arr[$ivr,$ext]}” >> temp.csv
done;

Сортируем записи в файле, для более наглядного представления:

sort temp.csv > /tmp/stat.csv

Получаем текущую дату и записываем ее в начало файла:

datenow=$(date +%Y-%m-%d -d “1 day ago”)
sed -i -e “1 s/^/,Дата: $datenow,n/;” /tmp/stat.csv

Полученный файл

После этого отправляем файл на почту:

#Отправляем файл на почту
/usr/local/bin/sendEmail.pl -t “test@test.ru” -t “test@test.ru” -f “Statistic IVR <statistic@yandex.ru>” -u “IVR Statistic on $datenow” -m “Во вложении статистика по ивр за $datenow.” -a /tmp/stat.txt -o message-charset=UTF-8

Письмо с вложением

Демонстрация

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices