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

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


install_local_version

Это старая версия документа.


Системные требования.

  • На сервере (здесь и далее примем, что “сервером” может быть как отдельный компьютер,
    так и виртуальная машина, VPS/VDS и т .д.
    Также отметим: docker-контейнер с локальной версией системы статистики может быть запущен как на том же сервере, что и АТС Asterisk, так и на отдельном сервере) должна быть установлена операционная система Linux семейства Debian не ниже 7.0 (Ubuntu 14.04 и выше), CentOS не ниже 6.5 или другие дистрибутивы с актуальной базой репозиториев.
  • IP АТС Asterisk должна быть версии не ниже 1.8.
    На Asterisk должна быть настроена запись информации о разговорах в таблицы cel, cdr и queue_log, подробную информацию о необходимых настройках Asterisk вы найдете ниже в разделе «Настройки Asterisk».
  • Сервер БД MySQL не ниже версии 5.1.
  • Docker версии 1.7.1 и выше (версии ниже нужно проверять дополнительно).
    Установка docker в различных ОС подробно расписана в официальной документации:
    Debian, Ubuntu, CentOS.
    Для установки в FreePBX 13 можете воспользоваться нашей инструкцией

Настройки Asterisk.

  1. Инсталлируем необходимые пакеты (для примера в Debian/Ubuntu)
    aptitude install unixodbc-dev libmyodbc
  2. Asterisk должен быть собран со следующими опциями
  3. Далее редактируем несколько конфиг-файлов:
    /etc/asterisk/res_odbc.conf
    [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
  4. Создадим БД и таблицу cdr в MySQL
    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';
  5. Таблицу cel
    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;
  6. Таблицу queue_log
    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
  7. Внесем в /etc/asterisk/extconfig.conf внесем
    queue_log => odbc,asterisk
  8. cel.conf выглядит так
    [general]
    enable=yes
    apps=all
    events=all
    dateformat = %F %T
    [manager]
    [radius]
  9. Проверим все ли в порядке с подключением Asterisk к MySQL
    *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
  10. И последним (далеко не в плане значимости) шагом будет настройка диалплана для записи разговоров. Ниже приведен пример макроса для синтаксиса AEL (extensions.ael)
    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
  11. Если вам ближе стандартный синтаксис, обратите внимание на следующий макрос
    [globals]
    WAV=/records
    MP3=/records/mp3
    VISTEPRURECORDING=1
    [macro-vistep.ru-record]
    exten => s,1,NoOp(== START macro-vistep.ru-record ==)
    same => s,n,Set(CallerID=${ARG1})
    same => s,n,Set(CalleeID=${ARG2})
    same => s,n,NoOp(CalleeID=${CalleeID}, CallerID=${CallerID})
    same => s,n,NoOp(VISTEPRURECORDING = ${VISTEPRURECORDING})
    same => s,n,GotoIf($["${VISTEPRURECORDING}" = "0"]?end)
    same => s,n,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${CallerID}-${CalleeID})
    same => s,n,Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)})
    same => s,n,System(mkdir -p ${MP3}/${datedir})
    same => s,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 => s,n,Set(CDR(filename)=${fname}.mp3)
    same => s,n,Set(CDR(realdst)=${called})
    same => s,n,MixMonitor(${WAV}/${fname}.wav,b,${monopt})
    same => s,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})

Установка, настройка и запуск.

  1. Для начала нужно провести первичную подготовку MySQL-базы данных Asterisk.
    Зайдите на сервер MySQL и создайте нового пользователя с полными правами, например вот так:
    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-адресах сервера.

  2. Теперь зайдите на сервер, где предполагаете запускать docker-контейнер, по ssh. Скачайте архив контейнера по предоставленной ссылке, например (это пример, корректная ссылка высылается на почту после оплаты):
    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
  3. Далее перейдите в папку с архивом контейнера (здесь и далее это /root/) и загрузите его в docker
    docker load -i stat.vistep.ru_local_1.0.3.tgz

    Проверьте все ли в порядке, команда

    docker images

    должна вернуть нечто подобное

  4. Следующим пунктом будет настройка возможности прослушивать и скачивать файлы разговоров в интерфейсе статистики. Как и было описано ранее, вы можете запустить docker-контейнер с ПО как на сервере с АТС, так и на отдельном сервере. Для запуска docker там же, где и Asterisk, вам нужно выполнить такую команду:
    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
  5. Далее откройте web-браузер и перейдите по ссылке
    http://DOCKER_DAEMON_IP_ADRESS/install.html

    Вас встретит мастер настройки

  6. Заполните все поля (на шаге номер 1 мы создали нужного пользователя) и нажмите кнопку Тест
  7. При успешном прохождении теста на подключение к БД вы увидите
    Если все так, жмите Настроить БД
  8. Здесь мастер сообщит, что все прошло успешно и вы можете перейти по ссылке
    http://DOCKER_DAEMON_IP_ADRESS

    т.е. к авторизации в системе

  9. Для входа используйте логин и пароль, которые прийдут вам в письме вместе со ссылкой на контейнер и конфиг-файлом

На этом настройка завершена, приятного пользования!
По любым вопросам/неполадкам/пр. пишите нам на support@vistep.ru или прямо из интерфейса, в меню Help Desk.

install_local_version.1504848340.txt.gz · Последние изменения: 2017/09/08 12:25 — Евгений Романенко