Инструменты пользователя

Инструменты сайта


doc:os:freebsd:applied_software:asterisk_call_statistic_via_www

Asterisk: смотрим статистику звонков через Интернет

  • ОС: FreeBSD
  • ПО: Asterisk 1.8
  • Цель: веб-статистика звонков Asterisk

Предположим, что у вас имеется установленный и настроенный Asterisk версии 1.8, а также СУБД MySQL и Apache 2. Это означает, что уже из коробки Asterisk способен писать логи в MySQL (т.е. никаких asterisk-addons ставить не нужно). А дальше нам просто нужна веб-морда, которая бы показывала данные логов пользователю.

Порядок действий

  1. Устанавливаем порт /usr/ports/www/asterisk-stat либо берем исходники.
  2. Распаковываем в папку веб-директории, предположим, это будет папка на сервере /var/www/asteriskstat
  3. Создаем таблицу, которая будет хранить статистику (посмотреть код создания БД и таблиц можно в файле /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;

    Обращаем внимание, что пользователю дается только право на чтение данных.

  4. правим файл /usr/local/etc/asterisk/cdr_mysql.conf. Нам нужно правильно прописать параметры к только что созданной базе данных:
    hostname=localhost
    dbname=asterisk
    table=cdr
    password=pass
    user=asterisk_user
    port=3306

    Выполняем перезапуск asterisk. Делаем контрольный звонок, проверяем, что, данные по звонкам пишутся в MySQL БД asterisk.

  5. также мы должны внести соответствующие коррективы в файлы 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";
  6. теперь вносим корректировки в Apache - правим файл httpd.conf:
     Alias /asterisk-stat "/var/www/asteriskstat/"
    
        <Directory "/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
        </Directory>

    Строки

    AuthName "Asterisk access"
            AuthType Basic
            AuthUserFile /usr/local/etc/apache22/authasteriskstat
            Require valid-user

    закрывают доступ к статистике простой аутентификацией пользователя по логину/паролю. Если это не нужно, убираем строки. Чтобы создать файл аутентификации, выполняем команду:

    htpasswd -c /usr/local/etc/apache22/authasteriskstat <имя пользователя>

    Выполняем перезапуск Apache.

  7. выполняем вход в www-консоль статистики: http://localhost/asteriskstat.
  8. На всех этапах настройки смотрим логи 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

Решение:

  1. во-первых, ставим /usr/ports/print/fpdf
  2. во-вторых, в файле 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:

/var/www/wiki.itcall.ru/data/pages/doc/os/freebsd/applied_software/asterisk_call_statistic_via_www.txt · Последнее изменение: d.m.Y H:i — dbehterev