• настроить в правилах входящей связи (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»