Это старая версия документа.
Системные требования.
Настройки Asterisk.
aptitude install unixodbc-dev libmyodbc
[asterisk] enabled => yes dsn => MySQL-asterisk username => asterisk_user password => 232d2edxse3e
/etc/asterisk/cdr_adaptive_odbc.conf
[cdr_adaptive_connection] connection=asterisk table=cdr alias start => calldate # раскомментируй, если хочешь видеть реальный номер, накоторый пришел вызов, а не номер оператора очереди #alias dst => does_not_exist #alias realdst => dst
/etc/odbc.ini
[MySQL-asterisk] Description = MySQL Asterisk database ;Trace = Off ;TraceFile = stderr Driver = MySQL Server = localhost User = asterisk_user Password = 232d2edxse3e ;Port = 3306 Socket = /var/run/mysqld/mysqld.sock Database = asterisk Charset = utf8
/etc/odbcinst.ini
[MySQL] Description = MySQL driver Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so CPTimeout = CPReuse =
в конец /etc/asterisk/cdr_mysql.conf добавить
alias filename => filename
mysql> CREATE DATABASE asterisk; mysql> USE asterisk; mysql> 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 '', `filename` 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=0 DEFAULT CHARSET=utf8; mysql> GRANT ALL ON asterisk.* TO 'asterisk_user'@'localhost' IDENTIFIED BY '232d2edxse3e';
mysql>CREATE TABLE `cel` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `eventtype` VARCHAR(30) NOT NULL, `eventtime` datetime NOT NULL, `cid_name` VARCHAR(80) NOT NULL, `cid_num` VARCHAR(80) NOT NULL, `cid_ani` VARCHAR(80) NOT NULL, `cid_rdnis` VARCHAR(80) NOT NULL, `cid_dnid` VARCHAR(80) NOT NULL, `exten` VARCHAR(80) NOT NULL, `context` VARCHAR(80) NOT NULL, `channame` VARCHAR(80) NOT NULL, `src` VARCHAR(80) DEFAULT NULL, `dst` VARCHAR(80) DEFAULT NULL, `channel` VARCHAR(80) DEFAULT NULL, `dstchannel` VARCHAR(80) DEFAULT NULL, `appname` VARCHAR(80) NOT NULL, `appdata` VARCHAR(80) NOT NULL, `amaflags` INT(11) NOT NULL, `accountcode` VARCHAR(20) NOT NULL, `uniqueid` VARCHAR(32) NOT NULL, `linkedid` VARCHAR(32) NOT NULL, `peer` VARCHAR(80) NOT NULL, `userdeftype` VARCHAR(255) NOT NULL, `eventextra` VARCHAR(255) DEFAULT NULL, `userfield` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `uniqueid_index` (`uniqueid`), KEY `linkedid_index` (`linkedid`), KEY `eventtime` (`eventtime`), KEY `exten` (`exten`), KEY `eventtype` (`eventtype`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
mysql> CREATE TABLE IF NOT EXISTS `queue_log` ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, TIME TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00', callid VARCHAR(32) NOT NULL DEFAULT '', queuename VARCHAR(32) NOT NULL DEFAULT '', agent VARCHAR(32) NOT NULL DEFAULT '', event VARCHAR(32) NOT NULL DEFAULT '', data1 VARCHAR(100) NOT NULL DEFAULT '', data2 VARCHAR(100) NOT NULL DEFAULT '', data3 VARCHAR(100) NOT NULL DEFAULT '', data4 VARCHAR(100) NOT NULL DEFAULT '', data5 VARCHAR(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql> \q
queue_log => odbc,asterisk
[general] enable=yes apps=all events=all dateformat = %F %T [manager] [radius]
*CLI> odbc show asterisk ODBC DSN Settings ----------------- Name: asterisk DSN: MySQL-asterisk Last connection attempt: 1970-01-01 07:00:00 Pooled: No Connected: Yes
globals { WAV=/var/calls; //Временный каталог с WAV MP3=/var/calls; //Куда выгружать mp3 файлы RECORDING=1; // Запись, 1 - включена. }; macro recording (calling,called) { if ("${RECORDING}" = "1"){ Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called}); Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)}); System(mkdir -p ${MP3}/${datedir}); System(mkdir -p ${WAV}/${datedir}); Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${datedir}/${fname}.wav" "${MP3}/${datedir}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${datedir}/${fname}.mp3"); Set(CDR(filename)=${fname}.mp3); Set(CDR(recordingfile)=${fname}.wav); Set(CDR(realdst)=${called}); MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt}); }; }; _XXXXXX => { &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/83843${EXTEN}@multifon,180,tT); HangUP(); } // end of _XXXXXX
В данном примере файлы записей разговоров попадают прямиков в /var/calls, где имеют следующую иерархию
ls /var/calls/2016/ -l total 24 drwxr-xr-x 19 asterisk asterisk 4096 May 31 10:10 05 drwxr-xr-x 30 asterisk asterisk 4096 Jun 30 10:02 06 drwxr-xr-x 31 asterisk asterisk 4096 Jul 31 10:18 07 drwxr-xr-x 31 asterisk asterisk 4096 Aug 31 09:00 08 drwxr-xr-x 26 asterisk asterisk 4096 Sep 26 09:51 09
[globals] WAV=/records MP3=/records/mp3 VISTEPRURECORDING=1 [macro-vistep.ru-record] exten => s,1,NoOp(== START macro-vistep.ru-record ==) same => n,Set(CallerID=${ARG1}) same => n,Set(CalleeID=${ARG2}) same => n,NoOp(CalleeID=${CalleeID}, CallerID=${CallerID}) same => n,NoOp(VISTEPRURECORDING = ${VISTEPRURECORDING}) same => n,GotoIf($["${VISTEPRURECORDING}" = "0"]?end) same => n,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${CallerID}-${CalleeID}) same => n,Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)}) same => n,System(mkdir -p ${MP3}/${datedir}) same => n,Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${fname}.wav" ${MP3}/${datedir}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${datedir}/${fname}.mp3") same => n,Set(CDR(filename)=${fname}.mp3) same => n,Set(CDR(realdst)=${CalleeID}) same => n,MixMonitor(${WAV}/${fname}.wav,b,${monopt}) same => n(end),MacroExit() ;пример использования [from-internal-custom] ;include => from-internal exten => _XX.,1, Macro(vistep.ru-record,${CALLERID(number)},${EXTEN}) [from-pstn-custom] exten => _XX.,1, Macro(vistep.ru-record,${CALLERID(number)},${EXTEN})
Установка, настройка и запуск.
GRANT ALL PRIVILEGES ON *.* TO 'vistepru'@'%' \ IDENTIFIED BY 'MySuperPassword111' WITH GRANT OPTION; FLUSH privileges; quit
Этот шаг необходим для работы мастера настройки БД, речь о котором пойдет несколько позже.
Также проверьте, что MySQL слушает не только 127.0.0.1, но и IP-адрес, по которому к нему будет обращаться система статистики.
За это в настройках MySQL отвечает параметр bind-address, проще всего закомментировать эту строку в my.cnf, тогда mysql-сервер будет слушать на всех IP-адресах сервера.
wget https://vistep.ru/stat.vistep.ru_local_1.0.3.tgz
Если в вашей системе нет wget, то воспользуйтесь вот этой командой:
curl -o stat.vistep.ru_local_1.0.3.tgz https://vistep.ru/stat.vistep.ru_local_1.0.3.tgz
docker run --name=stat.vistep.ru_local_1.0.3 -p 80:80 -v /ВАШ/ПУТЬ/К/ФАЙЛАМ:/var/www/html/public/user/УНИКАЛЬНЫЙ_КАТАЛОГ_ПОЛЬЗОВАТЕЛЯ/some/path/to/files/ --restart=always -d stat.vistep.ru_local_1.0.3
В консоле должно отобразиться подобное:
где /ВАШ/ПУТЬ/К/ФАЙЛАМ - это путь к файлам записей разговоров на вашей АТС
Если же запуск осуществляется на отдельном сервере, то сначала примонтируйте папку с файлами с сервера АТС на сервер с docker по NFS. Вот пример такой конфигурации: файл /etc/exports на сервере с Asterisk:
/records/mp3/ 192.168.0.0/255.255.255.0(rw,insecure,nohide,all_squash,anonuid=1001,anongid=1001,no_subtree_check)
а на сервере с docker, в /etc/fstab
ASTERISK_IP_ADDRESS:/records/mp3 /root/records nfs rsize=8192,wsize=8192 0 0
*здесь /records/mp3 - это путь к файлам записей на АТС
Затем выполните запуск уже знакомой командой
docker run --name=stat.vistep.ru_local_1.0.3 -p 80:80 -v /root/config.php:/var/www/html/app/config.php -v /root/records:/var/www/html/public/user/УНИКАЛЬНЫЙ_КАТАЛОГ_ПОЛЬЗОВАТЕЛЯ/some/path/to/files/ -d stat.vistep.ru_local_1.0.3
На этом настройка завершена, приятного пользования!
По любым вопросам/неполадкам/пр. пишите нам на support@vistep.ru или прямо из интерфейса, в меню Help Desk.