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

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


install_local_version

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

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

Настройка

Часть шагов по конфигурированию вам поможет сделать установщик, ссылку для скачивания которого пришлют наши инженеры после оплаты
Скачайте, запустите и следуйте его инструкциям.
В данном видео представлен пример работы установщика на АТС FreePBX
По завершению его работы вам будет предоставлена ссылка для входа в web-интерфейс, но настройка не завершена - нужно выполнить еще несколько манипуляций:

  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

    /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. Внесем в /etc/asterisk/extconfig.conf
    queue_log => odbc,asterisk
  5. cel.conf выглядит так
    [general]
    enable=yes
    apps=all
    events=all
    dateformat = %F %T
    [manager]
    [radius]
  6. cel_odbc.conf
    [asterisk]
    connection=asterisk
    table=cel
    loguniqueid=yes
    charset=utf8
  7. Проверим все ли в порядке с подключением 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
  8. И последним (далеко не в плане значимости) шагом будет настройка диалплана для записи разговоров. Ниже приведен пример макроса для синтаксиса AEL (extensions.ael)
    globals {
        WAV=/var/calls; //Временный каталог с WAV
        MP3=/var/calls; //Куда выгружать mp3 файлы
        RECORDING=1; // Запись, 1 - включена.
    };
     
    macro recording (calling,called) {
            if ("${RECORDING}" = "1"){
                  Set(CUTTEDCHANNEL=${CUT(CHANNEL,,1)});
                  Set(CUTTEDCHANNEL=${CUT(CUTTEDCHANNEL,/,2)});
                  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});
                  Set(CDR(realsrc)=${calling});
                  ExecIf($["${calling:-10:10}" = "${called:-10:10}"]?Set(CDR(realsrc)=${CUTTEDCHANNEL}));
                  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
  9. Если вам ближе стандартный синтаксис, обратите внимание на следующий макрос
    [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,Set(CUTTEDCHANNEL=${CUT(CHANNEL,,1)})
     same => n,Set(CUTTEDCHANNEL=${CUT(CUTTEDCHANNEL,/,2)})
     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,Set(CDR(realsrc)=${CallerID})
     same => n,ExecIf($["${CallerID:-10:10}" = "${CalleeID:-10:10}"]?Set(CDR(realsrc)=${CUTTEDCHANNEL}))
     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})
  10. Или у вас внезапно lua
    WAV = "/opt/records/wav" -- Временный каталог с WAV
    MP3="/opt/records/mp3" --Куда выгружать mp3 файлы
    RECORDING=1 -- 1 - запись включена.
     
    function recording(calling,called)
      if RECORDING == 1 then
        fname = channel.UNIQUEID:get() .. "-" .. channel.STRFTIME("${EPOCH},,%Y-%m-%d-%H_%M".."-"..calling.."-"..called):get()
        datedir = channel.STRFTIME("${EPOCH},,%Y/%m/%d"):get().."/"
        os.execute("mkdir -p " .. WAV.."/"..datedir)
        os.execute("mkdir -p " .. MP3.."/"..datedir)
        WAVfname = WAV..datedir..fname..".wav"
        MP3fname = MP3..datedir..fname..".mp3"
        channel.CDR("filename"):set(MP3fname)
        channel.CDR("realdst"):set(called)
        channel.CDR("realsrc"):set(calling)
        monopt = string.format("nice -n 19 /usr/bin/lame -b 32  --silent %s %s && rm -f %s && chown o+r %s",WAVfname,MP3fname,WAVfname,MP3fname)
        app.mixmonitor(WAVfname,b,monopt)
        return
      end;
    end;
     
    extensions = {
      ["local"] = {
        --локальные вызовы на номера XXX
        ["_XXX"] = function(context,extension)
                     app.answer()
                     recording(channel.CALLERID("num"):get(),extension)
                     app.dial("SIP/"..extension,300,"t")
                     app.hangup()
                   end;
      };
     
    }
  11. Для входа в систему статистики используйте email/пароль, которые сообщат вам инженеры технической поддержки.


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

Некоторые замечания по части MySQL.

  1. В ходе своей работы установщик подключается к БД Asterisk, для чего ему необходимы имя пользователя и пароль. Создать их можно, например, вот так:
    mysql -uroot -p
    Enter password: 
    Welcome TO the MariaDB monitor.  Commands END WITH ; OR \g.
    Your MariaDB connection id IS 3359
    Server version: 5.5.60-MariaDB MariaDB Server
     
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab AND others.
     
    TYPE 'help;' OR '\h' FOR help. TYPE '\c' TO clear the CURRENT INPUT statement.
     
    MariaDB [(NONE)]> GRANT ALL PRIVILEGES ON *.* TO 'vistepru'@'%' \
    IDENTIFIED BY 'MySuperPassword111' WITH GRANT OPTION;
    FLUSH privileges;
    quit


  2. Также проверьте, что MySQL слушает не только 127.0.0.1, но и IP-адрес, по которому к нему будет обращаться система статистики.
    За это в настройках MySQL отвечает параметр bind-address, проще всего закомментировать эту строку в my.cnf и перезагрузить демон MySQL, тогда сервис будет слушать все IP-адреса сервера.
install_local_version.txt · Последние изменения: 2022/08/27 08:13 — Евгений Романенко