====== 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~~