Учет и просмотр статистики звонков (cdr viewer) Asterisk: различия между версиями

Материал из RUSTEKO WIKI
Перейти к навигации Перейти к поиску
(Новая страница: «Важной и нужной возможностью современной АТС на базе asterisk является сбор и просмотр стат…»)
 
 
(не показаны 2 промежуточные версии этого же участника)
Строка 3: Строка 3:
 
Мы будем использовать готовые бесплатные инструменты для просмотра статистики звонков. Все необходимое для этого мы установили в самом начале. Перенесем сбор статистики в mysql базу. Для этого запускаем mariadb сервер, добавляем в автозагрузку и устанавливаем пароль администратора:
 
Мы будем использовать готовые бесплатные инструменты для просмотра статистики звонков. Все необходимое для этого мы установили в самом начале. Перенесем сбор статистики в mysql базу. Для этого запускаем mariadb сервер, добавляем в автозагрузку и устанавливаем пароль администратора:
  
# systemctl start mariadb
+
systemctl start mariadb
# systemctl enable mariadb.service
+
systemctl enable mariadb.service
# /usr/bin/mysql_secure_installation
+
/usr/bin/mysql_secure_installation
 
Подключаемся к mysql и создаем пользователя и базу данных:
 
Подключаемся к mysql и создаем пользователя и базу данных:
  
# 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
+
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 следующего содержания:
  
[cdr_adaptive_connection]
+
[MySQL-asterisk]
connection=asterisk
+
Description = MySQL Asterisk database
table=cdr
+
Driver = MySQL
alias start => calldate
+
Server = localhost
Создаем файл /etc/odbc.ini следующего содержания:
+
User = asterisk_user
 +
Password = 12345678
 +
Socket = /var/lib/mysql/mysql.sock
 +
Database = asterisk
  
[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 адрес сервера, если скрипты положили в корень веб сервера.