Учет и просмотр статистики звонков (cdr viewer) Asterisk: различия между версиями
Danil (обсуждение | вклад) |
Danil (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 9: | Строка 9: | ||
mysql -uroot -p | mysql -uroot -p | ||
− | MariaDB [(none)]> create database asterisk; | + | MariaDB [(none)]> create database asterisk; |
− | MariaDB [(none)]> use asterisk; | + | MariaDB [(none)]> use asterisk; |
− | MariaDB [asterisk]> CREATE TABLE `cdr` ( `id` int(9) unsigned NOT NULL auto_increment, `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '', `src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `channel` varchar(80) NOT NULL default '', `dstchannel` varchar(80) NOT NULL default '', `lastapp` varchar(80) NOT NULL default '', `lastdata` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default '', `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default '', `uniqueid` varchar(32) NOT NULL default '', `userfield` varchar(255) NOT NULL default '', PRIMARY KEY (`id`), KEY `calldate` (`calldate`), KEY `accountcode` (`accountcode`), KEY `uniqueid` (`uniqueid`), KEY `dst` (`dst`), KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; | + | MariaDB [asterisk]> CREATE TABLE `cdr` ( `id` int(9) unsigned NOT NULL auto_increment, `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '', `src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `channel` varchar(80) NOT NULL default '', `dstchannel` varchar(80) NOT NULL default '', `lastapp` varchar(80) NOT NULL default '', `lastdata` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default '', `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default '', `uniqueid` varchar(32) NOT NULL default '', `userfield` varchar(255) NOT NULL default '', PRIMARY KEY (`id`), KEY `calldate` (`calldate`), KEY `accountcode` (`accountcode`), KEY `uniqueid` (`uniqueid`), KEY `dst` (`dst`), KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; |
− | MariaDB [asterisk]> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by '12345678'; | + | MariaDB [asterisk]> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by '12345678'; |
− | |||
− | |||
− | |||
− | |||
− | + | asterisk имя базы данных | |
+ | asterisk_user пользователь базы данных | ||
+ | 12345678 пароль пользователя бд | ||
+ | Устанавливаем odbc коннекторы: | ||
+ | |||
+ | yum install -y mysql-connector-odbc.x86_64 unixODBC-devel.x86_64 | ||
Редактируем файлы конфигурации. Добавляем в самый конец /etc/asterisk/res_odbc.conf: | Редактируем файлы конфигурации. Добавляем в самый конец /etc/asterisk/res_odbc.conf: | ||
− | [asterisk] | + | [asterisk] |
− | enabled => yes | + | enabled => yes |
− | dsn => MySQL-asterisk | + | dsn => MySQL-asterisk |
− | username => asterisk_user | + | username => asterisk_user |
− | password => 12345678 | + | password => 12345678 |
− | В конец файла /etc/asterisk/cdr_adaptive_odbc.conf: | + | В конец файла /etc/asterisk/cdr_adaptive_odbc.conf: |
+ | |||
+ | [cdr_adaptive_connection] | ||
+ | connection=asterisk | ||
+ | table=cdr | ||
+ | alias start => calldate | ||
+ | Создаем файл /etc/odbc.ini следующего содержания: | ||
− | [ | + | [MySQL-asterisk] |
− | + | Description = MySQL Asterisk database | |
− | + | Driver = MySQL | |
− | + | Server = localhost | |
− | + | User = asterisk_user | |
+ | Password = 12345678 | ||
+ | Socket = /var/lib/mysql/mysql.sock | ||
+ | Database = asterisk | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Редактируем файл /etc/odbcinst.ini. Я его не трогал, оставил по-умолчанию, только в самый конец секции [MySQL] добавил две недостающие строки. Я не разбирался нужны они или нет, просто подсмотрел в другой инструкции. Вот как этот файл выглядит у меня: | Редактируем файл /etc/odbcinst.ini. Я его не трогал, оставил по-умолчанию, только в самый конец секции [MySQL] добавил две недостающие строки. Я не разбирался нужны они или нет, просто подсмотрел в другой инструкции. Вот как этот файл выглядит у меня: | ||
− | [MySQL] | + | [MySQL] |
− | Description = ODBC for MySQL | + | Description = ODBC for MySQL |
− | Driver = /usr/lib/libmyodbc5.so | + | Driver = /usr/lib/libmyodbc5.so |
− | Setup = /usr/lib/libodbcmyS.so | + | Setup = /usr/lib/libodbcmyS.so |
− | Driver64 = /usr/lib64/libmyodbc5.so | + | Driver64 = /usr/lib64/libmyodbc5.so |
− | Setup64 = /usr/lib64/libodbcmyS.so | + | Setup64 = /usr/lib64/libodbcmyS.so |
− | FileUsage = 1 | + | FileUsage = 1 |
− | CPTimeout = | + | CPTimeout = |
− | CPReuse = | + | CPReuse = |
+ | |||
Настроим использование нашего часового пояса в записях cdr. По-умолчанию там стоит часовой пояс GTM. Для этого в файле /etc/asterisk/cdr.conf указываем параметр: | Настроим использование нашего часового пояса в записях cdr. По-умолчанию там стоит часовой пояс GTM. Для этого в файле /etc/asterisk/cdr.conf указываем параметр: | ||
− | usegmtime=no | + | usegmtime=no |
+ | |||
После этого перезапускаем астериск: | После этого перезапускаем астериск: | ||
Строка 63: | Строка 67: | ||
systemctl start httpd | systemctl start httpd | ||
systemctl enable httpd | systemctl enable httpd | ||
+ | |||
С phpmyadmin сами разберитесь, в интернете море инструкций, либо воспользуйтесь моей по установке и настройке phpmyadmin. Теперь астериск сохраняет статистику звонков в mysql базу asterisk в таблицу cdr. Дальше нам надо настроить какую-нибудь web панель для просмотра этой статистики. Я решил сразу установить панель, которая позволяет не только смотреть статистику, но прослушивать записанные разговоры. Поэтому дальнейшая настройка панели просмотра статистики переходит в следующий раздел, в котором я расскажу, как записывать звонки. | С phpmyadmin сами разберитесь, в интернете море инструкций, либо воспользуйтесь моей по установке и настройке phpmyadmin. Теперь астериск сохраняет статистику звонков в mysql базу asterisk в таблицу cdr. Дальше нам надо настроить какую-нибудь web панель для просмотра этой статистики. Я решил сразу установить панель, которая позволяет не только смотреть статистику, но прослушивать записанные разговоры. Поэтому дальнейшая настройка панели просмотра статистики переходит в следующий раздел, в котором я расскажу, как записывать звонки. | ||
+ | |||
+ | '''Запись (record) разговоров'''<br> | ||
+ | |||
+ | Запись разговоров в asterisk настраивается относительно не сложно. Буквально нужно добавить несколько строк в dialplan. Но мы сразу сделаем более расширенную настройку. Мы будем не просто записывать все разговоры, но станем хранить информацию о звонках в mysql, чтобы их можно было прослушивать через удобную web панель просмотра статистики. | ||
+ | |||
+ | Хранить записи будем в mp3, потому нам понадобится утилита lame, для конвертации файлов из формата wav в mp3. Скачаем ее и установим. | ||
+ | |||
+ | cd /usr/src | ||
+ | wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz | ||
+ | tar zxvf lame-3.* | ||
+ | cd lame-3.* | ||
+ | ./configure | ||
+ | make | ||
+ | make install | ||
+ | |||
+ | В качестве web панели я буду использовать Asterisk-CDR-Viewer-Mod. Очень простая и функциональная штука. Настраивается легко, пользоваться удобно. Скачиваем исходники с github: | ||
+ | |||
+ | cd /usr/src | ||
+ | wget https://github.com/prog-it/Asterisk-CDR-Viewer-Mod/tarball/master | ||
+ | tar xzvf master | ||
+ | |||
+ | Копируем содержимое папки /usr/src/master в корень web сервера. Если вам нужно, можете в отдельную папку положить. У меня обычно на сервере с астериском больше ничего нет, так что сойдет и корень — /var/www/html | ||
+ | |||
+ | В папке docs подробная инструкция по настройке. Все дальнейшие действия делаются в соответствии с ней. Исправляются только некоторые особенности данной версии системы. Нам необходимо добавить дополнительное поле в таблицу cdr для хранения имени файла. Для этого либо в консоли mysql, либо через phpmyadmin выполните код: | ||
+ | |||
+ | alter table `cdr` add column `filename` varchar(120) DEFAULT 'none' after `userfield`; | ||
+ | Редактируем файл /etc/asterisk/cdr_mysql.conf, добавляя в самый конец 2 строки: | ||
+ | |||
+ | alias realdst => realdst | ||
+ | alias filename => filename | ||
+ | |||
+ | Дальше редактируем диалплан. Открываем /etc/asterisk/extensions.conf и добавляем в секцию globals переменную, соответствующую папке, где будут храниться записи разговоров. | ||
+ | |||
+ | [globals] | ||
+ | DIR_RECORDS=/mnt/calls/ | ||
+ | |||
+ | Добавляем макрос для записи перед контекстами звонков: | ||
+ | |||
+ | [macro-recording] | ||
+ | exten => s,1,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2}); | ||
+ | exten => s,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3"); | ||
+ | exten => s,n,Set(CDR(filename)=${fname}.mp3); | ||
+ | exten => s,n,Set(CDR(realdst)=${ARG2}); | ||
+ | exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt}); | ||
+ | xten => s,n(no),Verbose(Exit record); | ||
+ | |||
+ | И редактируем контексты входящих и исходящих разговоров, добавляя туда макрос на запись. Он идет самым первым, перед набором номера. Вот так у меня выглядит контекст локальных звонков и входящих через ivr меню с учетом всех сделанных ранее настроек: | ||
+ | |||
+ | [call-out] | ||
+ | ;Номер для записи звуков, окончание записи # | ||
+ | exten => _35X, 1, NoOp() | ||
+ | exten => _35X, n, Wait(2) | ||
+ | exten => _35X, n, Playback(beep) | ||
+ | exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav) | ||
+ | exten => _35X, n, Wait(1) | ||
+ | exten => _35X, n, Playback(/tmp/music${EXTEN:2}) | ||
+ | exten => _35X, n, Wait(2) | ||
+ | exten => _35X, n, Hangup() | ||
+ | |||
+ | ;Управление голосовой почтой | ||
+ | exten => 500,1,VoiceMailMain() | ||
+ | ;Звонок на внутренний номер | ||
+ | exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) | ||
+ | exten => _XXX,n,Dial(SIP/${EXTEN},10) | ||
+ | exten => _XXX,n,Set(dstNUM=${EXTEN}) | ||
+ | exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) | ||
+ | exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) | ||
+ | exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) | ||
+ | exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) | ||
+ | exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) | ||
+ | exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) | ||
+ | exten => _XXX,n,Goto(num-${DIALSTATUS},1) | ||
+ | exten => num-not-exist,1,Wait(2) | ||
+ | exten => num-not-exist,n,Playback(invalid) | ||
+ | exten => num-not-connected,1,Wait(2) | ||
+ | exten => num-not-connected,n,Playback(ss-noservice) | ||
+ | exten => num-BUSY,1,Wait(2) | ||
+ | exten => num-BUSY,n,Playback(vm-isonphone) | ||
+ | exten => num-NOANSWER,1,Wait(2) | ||
+ | exten => num-NOANSWER,n,Voicemail(${dstNUM},u) | ||
+ | exten => num-CHANUNAVAIL,1,Wait(2) | ||
+ | exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) | ||
+ | ;Звонок на внешний номер | ||
+ | exten => _XXX.,1,Macro(recording,${CALLERID(num)},${EXTEN}) | ||
+ | exten => _XXX.,n,Dial(SIP/${EXTEN}@397945) | ||
+ | include => handup-sip | ||
+ | |||
+ | [ivr-main] | ||
+ | exten => s,1,Answer() | ||
+ | exten => s,2,Background(/etc/asterisk/ivr/ivr-main) | ||
+ | exten => s,3,WaitExten(5) | ||
+ | exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) | ||
+ | exten => _XXX,n,Dial(SIP/${EXTEN},10) | ||
+ | exten => _XXX,n,Set(dstNUM=${EXTEN}) | ||
+ | exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) | ||
+ | exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) | ||
+ | exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) | ||
+ | exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) | ||
+ | exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) | ||
+ | exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) | ||
+ | exten => _XXX,n,Goto(num-${DIALSTATUS},1) | ||
+ | exten => num-not-exist,1,Wait(2) | ||
+ | exten => num-not-exist,n,Playback(invalid) | ||
+ | exten => num-not-connected,1,Wait(2) | ||
+ | exten => num-not-connected,n,Playback(ss-noservice) | ||
+ | exten => num-BUSY,1,Wait(2) | ||
+ | exten => num-BUSY,n,Playback(vm-isonphone) | ||
+ | exten => num-NOANSWER,1,Wait(2) | ||
+ | exten => num-NOANSWER,n,Voicemail(${dstNUM},u) | ||
+ | exten => num-CHANUNAVAIL,1,Wait(2) | ||
+ | exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) | ||
+ | exten => t,1,Macro(recording,${CALLERID(num)},${EXTEN}) | ||
+ | exten => t,n,Queue(secretary,t) | ||
+ | Перезапускаем астериск для применения всех настроек: | ||
+ | |||
+ | service asterisk restart | ||
+ | |||
+ | Осталось только указать настройки подключения к базе данных cdr viewer. Эти настройки находятся в файле inc/config.inc.php. Задаем там следующие параметры: | ||
+ | |||
+ | Mysql | ||
+ | $db_type = 'mysql'; | ||
+ | $db_host = 'localhost'; | ||
+ | $db_port = '3306'; | ||
+ | $db_user = 'asterisk_user'; | ||
+ | $db_pass = '12345678'; | ||
+ | $db_name = 'asterisk'; | ||
+ | $db_table_name = 'cdr'; | ||
+ | |||
+ | $system_storage_format = 5; | ||
+ | $system_monitor_dir = '/mnt/calls'; | ||
+ | |||
+ | Остальные параметры я оставил без изменений. Можно звонить и тестировать запись разговоров, просмотр статистики через Asterisk CDR Viewer Mod. Все записанные файлы складываются в одну папку /mnt/calls. В readme.txt описан пример, как настроить сортировку записей по папкам с датами. Если вам это нужно, сделайте, ничего сложного нет, все рассказано подробно. В web панель можно зайти просто набрав в браузере ip адрес сервера, если скрипты положили в корень веб сервера. |
Текущая версия на 12:09, 26 февраля 2019
Важной и нужной возможностью современной АТС на базе asterisk является сбор и просмотр статистики звонков. По умолчанию, астериск ведет статистику в файле /var/log/asterisk/cdr-csv/Master.csv. Разобрать этот файл и передать куда-то в обработку не очень сложно, если у вас есть что-то или кто-то, кто способен написать на каком-нибудь языке программирования обработку.
Мы будем использовать готовые бесплатные инструменты для просмотра статистики звонков. Все необходимое для этого мы установили в самом начале. Перенесем сбор статистики в mysql базу. Для этого запускаем mariadb сервер, добавляем в автозагрузку и устанавливаем пароль администратора:
systemctl start mariadb systemctl enable mariadb.service /usr/bin/mysql_secure_installation
Подключаемся к mysql и создаем пользователя и базу данных:
mysql -uroot -p MariaDB [(none)]> create database asterisk; MariaDB [(none)]> use asterisk; MariaDB [asterisk]> CREATE TABLE `cdr` ( `id` int(9) unsigned NOT NULL auto_increment, `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default , `src` varchar(80) NOT NULL default , `dst` varchar(80) NOT NULL default , `dcontext` varchar(80) NOT NULL default , `channel` varchar(80) NOT NULL default , `dstchannel` varchar(80) NOT NULL default , `lastapp` varchar(80) NOT NULL default , `lastdata` varchar(80) NOT NULL default , `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default , `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default , `uniqueid` varchar(32) NOT NULL default , `userfield` varchar(255) NOT NULL default , PRIMARY KEY (`id`), KEY `calldate` (`calldate`), KEY `accountcode` (`accountcode`), KEY `uniqueid` (`uniqueid`), KEY `dst` (`dst`), KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; MariaDB [asterisk]> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by '12345678';
asterisk имя базы данных asterisk_user пользователь базы данных 12345678 пароль пользователя бд Устанавливаем odbc коннекторы:
yum install -y mysql-connector-odbc.x86_64 unixODBC-devel.x86_64
Редактируем файлы конфигурации. Добавляем в самый конец /etc/asterisk/res_odbc.conf:
[asterisk] enabled => yes dsn => MySQL-asterisk username => asterisk_user password => 12345678 В конец файла /etc/asterisk/cdr_adaptive_odbc.conf:
[cdr_adaptive_connection] connection=asterisk table=cdr alias start => calldate Создаем файл /etc/odbc.ini следующего содержания:
[MySQL-asterisk] Description = MySQL Asterisk database Driver = MySQL Server = localhost User = asterisk_user Password = 12345678 Socket = /var/lib/mysql/mysql.sock Database = asterisk
Редактируем файл /etc/odbcinst.ini. Я его не трогал, оставил по-умолчанию, только в самый конец секции [MySQL] добавил две недостающие строки. Я не разбирался нужны они или нет, просто подсмотрел в другой инструкции. Вот как этот файл выглядит у меня:
[MySQL] Description = ODBC for MySQL Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/libodbcmyS.so Driver64 = /usr/lib64/libmyodbc5.so Setup64 = /usr/lib64/libodbcmyS.so FileUsage = 1 CPTimeout = CPReuse =
Настроим использование нашего часового пояса в записях cdr. По-умолчанию там стоит часовой пояс GTM. Для этого в файле /etc/asterisk/cdr.conf указываем параметр:
usegmtime=no
После этого перезапускаем астериск:
service asterisk restart
Совершаем звонок и проверяем таблицу. Для удобства дальнейшей проверки и настройки, я запустил httpd и настроил phpmyadmin. Они должны были установиться в самом начале. Запускаем httpd и добавляем в автозагрузку:
systemctl start httpd systemctl enable httpd
С phpmyadmin сами разберитесь, в интернете море инструкций, либо воспользуйтесь моей по установке и настройке phpmyadmin. Теперь астериск сохраняет статистику звонков в mysql базу asterisk в таблицу cdr. Дальше нам надо настроить какую-нибудь web панель для просмотра этой статистики. Я решил сразу установить панель, которая позволяет не только смотреть статистику, но прослушивать записанные разговоры. Поэтому дальнейшая настройка панели просмотра статистики переходит в следующий раздел, в котором я расскажу, как записывать звонки.
Запись (record) разговоров
Запись разговоров в asterisk настраивается относительно не сложно. Буквально нужно добавить несколько строк в dialplan. Но мы сразу сделаем более расширенную настройку. Мы будем не просто записывать все разговоры, но станем хранить информацию о звонках в mysql, чтобы их можно было прослушивать через удобную web панель просмотра статистики.
Хранить записи будем в mp3, потому нам понадобится утилита lame, для конвертации файлов из формата wav в mp3. Скачаем ее и установим.
cd /usr/src wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz tar zxvf lame-3.* cd lame-3.* ./configure make make install
В качестве web панели я буду использовать Asterisk-CDR-Viewer-Mod. Очень простая и функциональная штука. Настраивается легко, пользоваться удобно. Скачиваем исходники с github:
cd /usr/src wget https://github.com/prog-it/Asterisk-CDR-Viewer-Mod/tarball/master tar xzvf master
Копируем содержимое папки /usr/src/master в корень web сервера. Если вам нужно, можете в отдельную папку положить. У меня обычно на сервере с астериском больше ничего нет, так что сойдет и корень — /var/www/html
В папке docs подробная инструкция по настройке. Все дальнейшие действия делаются в соответствии с ней. Исправляются только некоторые особенности данной версии системы. Нам необходимо добавить дополнительное поле в таблицу cdr для хранения имени файла. Для этого либо в консоли mysql, либо через phpmyadmin выполните код:
alter table `cdr` add column `filename` varchar(120) DEFAULT 'none' after `userfield`; Редактируем файл /etc/asterisk/cdr_mysql.conf, добавляя в самый конец 2 строки:
alias realdst => realdst alias filename => filename
Дальше редактируем диалплан. Открываем /etc/asterisk/extensions.conf и добавляем в секцию globals переменную, соответствующую папке, где будут храниться записи разговоров.
[globals] DIR_RECORDS=/mnt/calls/
Добавляем макрос для записи перед контекстами звонков:
[macro-recording] exten => s,1,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2}); exten => s,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3"); exten => s,n,Set(CDR(filename)=${fname}.mp3); exten => s,n,Set(CDR(realdst)=${ARG2}); exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt}); xten => s,n(no),Verbose(Exit record);
И редактируем контексты входящих и исходящих разговоров, добавляя туда макрос на запись. Он идет самым первым, перед набором номера. Вот так у меня выглядит контекст локальных звонков и входящих через ivr меню с учетом всех сделанных ранее настроек:
[call-out] ;Номер для записи звуков, окончание записи # exten => _35X, 1, NoOp() exten => _35X, n, Wait(2) exten => _35X, n, Playback(beep) exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav) exten => _35X, n, Wait(1) exten => _35X, n, Playback(/tmp/music${EXTEN:2}) exten => _35X, n, Wait(2) exten => _35X, n, Hangup()
;Управление голосовой почтой exten => 500,1,VoiceMailMain() ;Звонок на внутренний номер exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XXX,n,Dial(SIP/${EXTEN},10) exten => _XXX,n,Set(dstNUM=${EXTEN}) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) exten => _XXX,n,Goto(num-${DIALSTATUS},1) exten => num-not-exist,1,Wait(2) exten => num-not-exist,n,Playback(invalid) exten => num-not-connected,1,Wait(2) exten => num-not-connected,n,Playback(ss-noservice) exten => num-BUSY,1,Wait(2) exten => num-BUSY,n,Playback(vm-isonphone) exten => num-NOANSWER,1,Wait(2) exten => num-NOANSWER,n,Voicemail(${dstNUM},u) exten => num-CHANUNAVAIL,1,Wait(2) exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) ;Звонок на внешний номер exten => _XXX.,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XXX.,n,Dial(SIP/${EXTEN}@397945) include => handup-sip
[ivr-main] exten => s,1,Answer() exten => s,2,Background(/etc/asterisk/ivr/ivr-main) exten => s,3,WaitExten(5) exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XXX,n,Dial(SIP/${EXTEN},10) exten => _XXX,n,Set(dstNUM=${EXTEN}) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) exten => _XXX,n,Goto(num-${DIALSTATUS},1) exten => num-not-exist,1,Wait(2) exten => num-not-exist,n,Playback(invalid) exten => num-not-connected,1,Wait(2) exten => num-not-connected,n,Playback(ss-noservice) exten => num-BUSY,1,Wait(2) exten => num-BUSY,n,Playback(vm-isonphone) exten => num-NOANSWER,1,Wait(2) exten => num-NOANSWER,n,Voicemail(${dstNUM},u) exten => num-CHANUNAVAIL,1,Wait(2) exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) exten => t,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => t,n,Queue(secretary,t) Перезапускаем астериск для применения всех настроек:
service asterisk restart
Осталось только указать настройки подключения к базе данных cdr viewer. Эти настройки находятся в файле inc/config.inc.php. Задаем там следующие параметры:
Mysql $db_type = 'mysql'; $db_host = 'localhost'; $db_port = '3306'; $db_user = 'asterisk_user'; $db_pass = '12345678'; $db_name = 'asterisk'; $db_table_name = 'cdr';
$system_storage_format = 5; $system_monitor_dir = '/mnt/calls';
Остальные параметры я оставил без изменений. Можно звонить и тестировать запись разговоров, просмотр статистики через Asterisk CDR Viewer Mod. Все записанные файлы складываются в одну папку /mnt/calls. В readme.txt описан пример, как настроить сортировку записей по папкам с датами. Если вам это нужно, сделайте, ничего сложного нет, все рассказано подробно. В web панель можно зайти просто набрав в браузере ip адрес сервера, если скрипты положили в корень веб сервера.