Теперь в CDR будет сохраняться информация об используемых для входящей связи городских номерах, которые можно увидеть в меню Reports \ CDR Report:
В целях анализа статистики использования городских линий можно выгрузить информацию из CDR в Excename = "note"
Также можно предварительно обработать данные из CDR примерно так:
чтобы выгрузить только по одной записи о каждом входящем звонке, тем самым упростив анализ:
Для подключения к базе CDR указанным выше способом требуется установить phpmyadmin, подключившись по SSH с правами root, выполнить команды:
sudo yum install phpmyadmin
sudo service httpd restart
Подпрограмма соединения звонящего с последним собеседником (SmartCallback)
Не редко мы пытаемся с офисного телефона позвонить кому-то на мобильный, но абонент оказывается не доступен или занят. Когда искомый нами человек перезванивает по пропущенному вызову, он слышит в ответ название компании, из которой ему звонили, но не всегда может догадаться кому он был нужен. В то же время, Elastix хранит информацию о вызовах и знает разгадку – кто и когда пытался с ним связаться. Если мы, получив такой звонок, соединим абонента с последним, кто ему звонил, скорее всего окажем услугу – сэкономим время обоих. Такой функционал не входит в стандартный набор функций, но может быть относительно просто реализован нами самостоятельно. Для этого потребуется:
• настроить подпрограмму (которую мы назовем SmartCallback) и присвоить ей номер 661234 (файл «extensions_custom.conf»)
• настроить запрос к статистике соединений и назвать его «LASTCALL» (файл «func_odbc.conf»)
• настроить подключение к базе данных CDR со статистикой соединений (файлы «res_odbc.conf» и «/etc/odbc.ini»)
• настроить Собственную функцию (Misc Destination) «SmartCallback» и присвоить ей вызов подпрограммы «661234»
• настроить Внутреннюю функцию (Misc Application) «NoSmartCallback», присвоив ей номер «601234», чтобы переключать на нее вызовы, не обработанные функцией «SmartCallback»
• настроить в правилах входящей связи (Inbound Routes) вызов Собственной функции (Misc Destination) «SmartCallback»
Настройка подпрограммы (контекста) SmartCallback
Собственные функции можно писать разными способами:
• в синтаксисе настраиваемого плана набора (файл «extensions_custom.conf»)
• на языке AEL (Asterisk Extension Language) (файл «extensions.ael»)
• на PHP или на другом языке, используя функцию AGI (Asterisk Gateway Interface)
Наша задача легко решается использованием файла «extensions_custom.conf». Для редактирования требуется открыть меню PBX / Tools / Asterisk File Editor:
открыть для редактирования «extensions_custom.conf» и добавить в него подпрограмму (контекст) [SmartCallback] с номером «661234»:
[SmartCallback]
exten => 661234,1,SET(CALL2B=${ODBC_LASTCALL(${CALLERID(number)})})
exten => 661234,n,Set(DIAL=${DB(DEVICE/${CALL2B}/dial)})
exten => 661234,n,GotoIf($["${DIAL}" = ""]?nfound)
exten => 661234,n,Set(CDR(accountcode)=B:${CDR(accountcode)})
exten => 661234,n,DIAL(${DIAL},12,)
exten => 661234,n,GotoIf($["s${DIALSTATUS}" = "sANSWER"]?endcon)
exten => 661234,n(nfound),Goto(601234,1)
exten => 661234,n(endcon),Hangup()
[ext-did-custom]
include => SmartCallback
Наша функция:
• вызывает еще не созданный нами запрос к статистике вызовов под названием «LASTCALL» (запросу передаем номер звонящего – «CALLERID(number)»)
• находит как следует сделать набор абонента, который вызывал звонящего последним
• добавляет к полю «accountcode» префикс «B:», чтобы в статистике сохранилась информация, что вызов был переключен на сотрудника нашей подпрограммой «SmartCallback»
• пытается в течение 12 секунд вызвать найденного абонента
• если абонент не найден или не ответил, переключает на еще не созданный номер «601234»
Создание запроса к CDR
Описания запросов хранятся в файле «func_odbc.conf», который по аналогии открываем через меню PBX / Tools / Asterisk File Editor и добавляем следующий текст:
[LASTCALL]
dsn=getcdr
readsql=SELECT src FROM cdr WHERE calldate > CURDATE() – 2 AND RIGHT(dst,10) = RIGHT('${SQL_ESC(${ARG1})}',10) ORDER BY calldate DESC LIMIT 0,1
Здесь «getcdr» – название еще не созданного источника данных, ARG1 – номер звонящего абонента. Чтобы учесть разные способы набора номера, используем последние 10 цифр от номера абонента («RIGHT(…,10)»). Поскольку в статистике могут храниться очень старые вызовы, ограничиваем поиск последними двумя днями («CURDATE() – 2»). Сортируем историю вызовов от последнего звонка к более старым («ORDER BY calldate DESC») и возвращаем первую из найденных записей («LIMIT 0,1»).
Настройка источника данных в Asterisk
Описание подключений к ресурсам баз данных Asterisk хранит в файле «res_odbc.conf». В этот файл следует добавить следующие строки:
[getcdr]
enabled => yes
dsn => asterisk-getcdr
pre-connect => yes
isolation => read_uncommitted
Таким образом мы сообщаем Asterisk, что:
• источник активен и может быть использован («enabled => yes»)
• в операционной системе следует найти подключение с именем «asterisk-getcdr»
• для ускорения доступа следует всегда держать открытым соединение с базой данных («pre-connect => yes»)
• для исключения блокировок и для ускорения доступа следует читать данные из базы не дожидаясь завершения других транзакций («isolation => read_uncommitted»)
Настройка источника данных в CentOS
Описание подключений к ресурсам баз данных CentOS, на которой работает Elastix, хранит в файле «/etc/odbc.ini». Для редактирования этого файла требуется подключиться к Elastix по протоколу SSH от имени пользователя «root». В Windows для этого можно использовать бесплатную программу Putty. После подключения к Elastix по SSH следует открыть файл «/etc/odbc.ini», используя, например, редактор «nano»:
nano /etc/odbc.ini
В этот файл следует добавить следующие строки:
[asterisk-getcdr]
Description=MySQL ODBC Driver for CDR DB
Driver=MySQL
Server=localhost
User=asteriskuser
Password=VeryStrongPassword
Database=asteriskcdrdb
Option=3
Port=3306
Вместо «VeryStrongPassword» укажите созданный при установке Elastix пароль подключения к базе данных mySQL. Если уже не помните его, подсмотрите его в файле «/etc/amportal.conf» в строке «AMPDBPPASS=».
Настройка Собственной функции (Misc Destination) «SmartCallback»
Чтобы использовать созданную подпрограмму «SmartCallback» требуется настроить Собственную функцию (Misc Destination) «SmartCallback»:
• открыть меню «PBX / Misc Destinations»
• добавить ссылку на подпрограмму:
• Destination – удобное для администратора Elastix название функции, можно назвать как и подпрограмму – «SmartCallback»
• Dial – номер «661234», присвоенный подпрограмме «SmartCallback»
Настройка Внутренней функции (Misc Application) «NoSmartCallback»
Чтобы при невозможности обнаружить абонента для соединения можно было направить звонок по другому направлению, необходимо создать функцию, имеющую цифровой код, чтобы ее было легко вызвать из подпрограммы «SmartCallback». Для этого следует: