====== Asterisk: смотрим статистику звонков через Интернет ====== * ОС: FreeBSD * ПО: Asterisk 1.8 * Цель: веб-статистика звонков Asterisk Предположим, что у вас имеется установленный и настроенный Asterisk версии 1.8, а также СУБД MySQL и Apache 2. Это означает, что уже из коробки Asterisk способен писать логи в MySQL (т.е. никаких asterisk-addons ставить не нужно). А дальше нам просто нужна веб-морда, которая бы показывала данные логов пользователю. ===== Порядок действий ===== - Устанавливаем порт /usr/ports/www/asterisk-stat либо берем исходники. - Распаковываем в папку веб-директории, предположим, это будет папка на сервере /var/www/asteriskstat - Создаем таблицу, которая будет хранить статистику (посмотреть код создания БД и таблиц можно в файле /usr/local/etc/asterisk/cdr_mysql.tbl, код ниже м.б. устарел):# mysql -p > CREATE DATABASE asterisk; GRANT INSERT ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'yourpassword'; USE asterisk; CREATE TABLE `cdr` ( `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 '', `userfield` varchar(255) NOT NULL default '' ); ALTER TABLE `cdr` ADD `uniqueid` VARCHAR(32) NOT NULL default ''; ALTER TABLE `cdr` ADD INDEX ( `calldate` ); ALTER TABLE `cdr` ADD INDEX ( `dst` ); ALTER TABLE `cdr` ADD INDEX ( `accountcode` ); Теперь создаем пользователя для доступа к созданной БД: mysql> grant LOCK TABLES on asterisk.* to 'asterisk_user'@'localhost' identified by 'pass'; Query OK, 0 rows affected (0.00 sec) mysql> grant SELECT on asterisk.* to 'asterisk_user'@'localhost' identified by 'pass'; Query OK, 0 rows affected (0.02 sec) mysql> grant INSERT on asterisk.* to 'asterisk_user'@'localhost' identified by 'pass'; mysql> flush privileges;Обращаем внимание, что пользователю дается только право на чтение данных. - правим файл /usr/local/etc/asterisk/cdr_mysql.conf. Нам нужно правильно прописать параметры к только что созданной базе данных:hostname=localhost dbname=asterisk table=cdr password=pass user=asterisk_user port=3306 Выполняем перезапуск asterisk. Делаем контрольный звонок, проверяем, что, данные по звонкам пишутся в MySQL БД asterisk. - также мы должны внести соответствующие коррективы в файлы asterisk-stat (исходники asterisk-stat распаковали в /var/www/asteriskstat). Для начала файл ./lib/defines.php: define ("WEBROOT", "http://IP адрес вашего сервера/asterisk-stat/"); define ("FSROOT", "/var/www/asteriskstat/"); ... define ("HOST", "localhost"); define ("PORT", "3306"); define ("USER", "asterisk_user"); define ("PASS", "pass"); define ("DBNAME", "asterisk"); define ("DB_TYPE", "mysql"); Теперь файл ./lib/DB-modules/phplib_mysql.php: var $Host = "localhost"; var $Database = "asterisk"; var $User = "asterisk_user"; var $Password = "pass"; - теперь вносим корректировки в Apache - правим файл httpd.conf: Alias /asterisk-stat "/var/www/asteriskstat/" Options none AuthName "Asterisk access" AuthType Basic AuthUserFile /usr/local/etc/apache22/authasteriskstat Require valid-user AllowOverride Limit Order Deny,Allow Allow from all DirectoryIndex cdr.php СтрокиAuthName "Asterisk access" AuthType Basic AuthUserFile /usr/local/etc/apache22/authasteriskstat Require valid-userзакрывают доступ к статистике простой аутентификацией пользователя по логину/паролю. Если это не нужно, убираем строки. Чтобы создать файл аутентификации, выполняем команду:htpasswd -c /usr/local/etc/apache22/authasteriskstat <имя пользователя>Выполняем перезапуск Apache. - выполняем вход в www-консоль статистики: http://localhost/asteriskstat. - На всех этапах настройки смотрим логи asterisk (/var/log/asterisk/messages), apache (/var/log/httpd-error.log) и если нужно MySQL. ==== Исправление ошибок ==== **1.** Ошибка при экспорте в PDF: Parse error: parse error, unexpected T_STRING in export_pdf.php on line 120 Решение: - во-первых, ставим /usr/ports/print/fpdf - во-вторых, в файле asteriskstat/export_pdf.php в пятой строке заменяем одинарную кавычку (') на двойную ("), чтобы получилось в итоге так: include_once(dirname(__FILE__) . "/lib/fpdf.php"); **2.** Если WWW-страница не отображается корректно, то возможно, нужно задать правильные настройки в /usr/local/etc/php.ini (если нет файла, скопируйте оригинал /usr/local/etc/php.ini-production): ... short_open_tag = On ... date.timezone = Europe/Moscow ... TAG: {{tag>asterisk FreeBSD}} ~~DISCUSSION:off~~