Ryo CDR: еще один asterisk CDR viewer

    Для астериска, наверное, только ленивый не писал cdr viewer. Таких решений полно: asterisk cdr viewer, agcdr,  asterisk cdr viewer mod (статья на Хабре), cdr-stats и еще много других, которых я не знаю.

    Но не требовалась функциональность крутых фильтров, сортировок-группировок, а нужен просто просмотр данных по звонкам за день, возможность прослушивать запись разговора и защита паролем. Чтобы бизнес-тетушка, сидя на заднем кресле автомобиля, пока ее муж, объезжая вечерние пробки, везет ее домой, могла взять планшет и посмотреть данные по звонкам своих сотрудников и быстро прослушать записи разговоров.

    Недолго поискав по гитхабу, я наткнулся на webcdr. Немного обработал его напильником: убрал лишнее, добавил http basic авторизацию и получил необходимый вариант cdr viewer'а. C привычным тетушке веб-интерфейсом в стиле Twitter Bootstrap. Тетушка довольна.

    image

    Далее немного деталей.



    Ryo CDR

    У нас на хосте с Ubuntu 14 есть asterisk 11, БД mysql 5.6. Asterisk записывает разговоры, данные о звонках складывает в БД. Также нам потребуется установленные node.js, npm и bower.

    Установка

    wget https://github.com/antirek/ryocdr/archive/v0.0.11.tar.gz
    tar -xzf v0.0.11.tar.gz
    cd ryocdr-0.0.11
    npm install
    bower install   // добавьте опцию --allow-root, если устанавливаете под root
    npm run build
    


    Конфигурационный файл

    {
      tz:"+0400",
      port: 9030,  // порт веб-интерфейса Ryo CDR
      recordspath:"/var/records",   //базовый путь к записям разговоров
      db: {
        client: "mysql",
        connection: {
          host: "127.0.0.1",
          user: "user",
          password: "password",
          database: "cdr",
          charset:"utf8"
        }
      },
      cdr: {
        table: "cdr"
      },
      auth: true,  // авторизация basic по паролю
      username: 'admin',
      password: 'password'
    };
    


    Запуск

    Запускаем app.js

    node app.js
    


    Или воспользуемся менеджером pm2

    pm2 start app.js  --name "ryocdr-app"
    


    Также путь к конфигурационному файлу можно указать через переменную окружения RYOCDR_CONFIG, тогда приложение будет использовать указанный конфиг, а не расположенный в локальной директории. Это, например, удобно, когда вы используете Ryo CDR в docker контейнере.
    export RYOCDR=/etc/ryocdr/config
    


    Хранение путей записей в БД

    Путь к файлу записи хранится в поле БД record. Например, у нас может быть такой диалплан (lua):

        local basePath = '/var/records';
        local date = os.date("*t");
        local uniqueid = channel.UNIQUEID:get();
    
        local fname = string.format("%s_%s-%s-%s_%s:%s:%s", uniqueid, date.year, date.month, date.day, date.hour, date.min, date.sec);
        local WAV = "/wav/";
        local MP3 = string.format("/mp3/%s-%s-%s/", date.year, date.month, date.day);
    
        local recordCommand = "/usr/bin/nice -n 19 mkdir -p %s && /usr/bin/lame -b 16 --silent %s%s.wav %s%s.mp3";
        local options = string.format(recordCommand, basePath..MP3, basePath..WAV, fname, basePath..MP3, fname);
    
        app.mixmonitor(string.format("%s%s.wav,b,%s", basePath..WAV, fname, options));
        channel["CDR(record)"]:set(string.format("%s%s.mp3", MP3, fname));
    


    Т.е. файл записан mixmonitor'ом в wav, сконвертирован командой в mp3, а путь сконвертированного файла в папке с mp3-шками сохранено в БД приложением диалплана CDR.

    В конфигурационном файле Ryo CDR можно указать базовый путь расположения записей разговоров в параметре recordspath. А в самой БД хранить только путь относительно этого базового пути.

    Структура БД CDR

    Структура таблицы cdr традиционная, дополненная полем record для записей разговоров (структура таблицы).

    Видео установки Ryo CDR

    Осторожно, видео без бубнящих комментариев по установке, зато с музыкой.



    Возможно, кому-нибудь еще пригодится. Баги, пожелания, конструктивная критика — пожалуйста, сообщайте.

    Ссылки
    Ryo CDR: https://github.com/antirek/ryocdr

    P.S. Отдельная благодарность Ивану за webcdr, мне пришлось немного адаптировать для своих нужд.

    P.P.S. Одним из запросов тетушки было голосовое управление прослушиванием записей разговоров: «Так это нормально, следующая, промотать, промотать, так нормально, следующая». WebAudio надо попробовать добавить.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.