Asterisk-cdr-viewer
Веб интерфейс статистики вызовов Asterisk (Call Detail Recordings). Используется, также, в модуле статистики FreePBX. Прекрасное приложение, для просмотра статистики и прослушивания записей.

Установка Asterisk Cdr Veiwer
Страница программы на Google Code или На Github
Скачайте исходный код в директорию веб сервера:
Скопируйте конфиг в директорию настроек веб вервера:
Настройте алиас acdr для директории asterisk-cdr-veiwer:
Если аутентификация не требуется, можно пропустить этот пункт.
Вернитесь в директорию программы:
При помощи команды htpasswd задайте имя пользователя и пароль для аутентификации в интерфейсе.
config.inc.php
Настройка подключения к базе данных и настройки веб интерфейса производятся в файле /var/www/asterisk-cdr-viewer/include/config.inc.php
Откройте интерфейс в вашем любимом браузере:
http://your_ip/acdr/index.php
Asterisk CDR MySQL
Создание таблицы MySQL для данных и конфигурация Asterisk.
Создайте файл, например:
И скопируйте структуру таблицы БД:
Создайте базу данных:
Создайте таблицу cdr при помощи файла asteriskcdrdb:
Настройка Asterisk cdr_mysql.conf
Нативный драйвер MySQL в Asterisk. Также вы можете использовать ODBC. или adaptive ODBC.
Отредактируйте файл /etc/asterisk/cdr_mysql.conf в соответствии с заданным логином и паролем бд.
Убедитесь что модули cdr_mysql загружены:
Настройка записи разговоров
Чтобы ссылки на файлы отображались в интерфейсе, укажите директорию записи и формат файла в конфиге config.inc.php
В диалплане Asterisk, запись производится при помощи команды MixMonitor
Проверка. Выберете 5 последних строк из таблицы cdr:
«Допиливаем» Asterisk CDR Viewer под себя
«Я профессионал, потому что не ленюсь искать информацию в google» — сказал мне однажды коллега.
А я поленился и начал «допиливать» CDR Viewer под себя, даже не посмотрев хотя бы вот это.
А может и не в лени дело, просто было интересно… в общем, что из этого вышло можно посмотреть под катом:)
Споры о том, что лучше использовать в качестве офисной АТС — asterisk (с веб-интерфейсом или без, хотя это отдельная тема для споров) или какую-то коробку типа Panasonic, которых на рынок выкинуто немеренное количество — не утихают до сих пор, но топик не об этом, лично для себя я уже давно определился. Хотелось бы поделиться с сообществом своим вариантом придания интерфейсу просмотра статистики дополнительного фунционала.
В качестве «подопытного» я использовал FreePBX Distro (FreePBX 2.11, Asterisk 11, CentOS 6.5), скачанный с официального сайта проекта. Выбор был продиктован тем, что разработчики FreePBX уже позаботились о прикручивании БД к Asterisk и структура хранения записей в общем-то меня устраивает. Хотя процедура «прикручивания» MySQL или какой-либо другой базы к Asterisk была описана ни раз и ни два, о чем можно почитать например здесь, все же в целях экономии времени я решил этого не делать.
За основу был взят Asterisk CDR Viewer (если не нужно каких-то сверхмудреных отчетов — то вполне себе пригодная и простенькая статистика), скачать можно тут.
Установка CDR Viewer не представляется какой-то нетривиальной задачей.
Переходим в нужную нам директорию, качаем архив, извлекаем файлы из архива:
Переносим файлик алиаса в папку с apache2:
Изменяем настройки подключения к БД для Asterisk-CDR-viewer
Нужно поменять параметры в соответствии с текущей конфигурацией вашей базы:
$db_user = ‘[MySQL пользователь]’;
$db_pass = ‘[MySQL пароль]’;
$db_name = ‘[Имя базы]’;
Делаем рестарт веб-сервера:
Теперь в браузере набирая [адрес asteridk-сервера]/acdr/ попадаем на страницу статистики.
Первое, что мне захотелось сделать — прикрутить авторизацию для просмотра этой самой статистики, для этого воспользуемся htpasswd.
Если не установлена —
Переходим в /etc/apache2 и созадем юзер/пароль для статистики:
Вводим пароль в диалоге, который предлагает htpasswd и получаем файл «passwordfile» с юзером «username» и сгенерированным зашифрованным паролем.
Далее в /etc/apache2/conf.d изменяем asterisk-cdr-viewer.conf, раскомментрировав строки авторизации, в результате получаем:
Alias /acdr/ «/var/www/asterisk-cdr-viewer/»
AuthName «Asterisk-CDR-Stat»
AuthType Basic
AuthUserFile /etc/apache2/passwordfile
AuthGroupFile /dev/null
require valid-user
Рестартуем apache2 и при входе на страницу видим окно авторизации:
Следующее, что был сделано — это прослушивание разговоров из веб-интерфейса.
1) Для прослушивания звонков добавляем две иконки в каталог /var/www/asterisk-cdr-viewer/templates/images (play и stop)
Asternic CDR Reports. Прослушивание звонков в FreePBX с ограничением по доступу
Версии ПО
FreePBX 2.11.0.41
Asternic CDR Reports 1.5.1
Введение
Задача: необходимо дать человеку возможность прослушивать записи разговоров, но строго на определённом диапазоне внутренних экстеншенов. Мы пытаемся создать нового администратора и даже прописываем ему Extension Range, надеясь таким образом дать ему ограниченный доступ к прослушиванию
Но потом, заходя под созданной учётной записью и направляясь в отчёты по звонкам, понимаем, что потерпели фиаско — CDR Reports игнорирует заданный диапазон Extension Range и выводит информацию по всем номерам.
Почесав в затылке, ищем альтернативный модуль отчётов — и, о чудо, находим его: Asternic CDR Reports. Он замечательный и работает только с теми номерами, диапазон которых ограничен для авторизовавшегося администратора.
Но что это? Нет прослушивания звонков? В столбце Listen выводится голосовая почта? Нет, так дело не пойдёт…
Исправляем
Информация о звонках в Asterisk`е хранится в Mysql в базе «asteriskcdrdb», таблица cdr. Это видно из следующего кода, взятого из файла page.cdr.php обычного CDR Reports
Значит, всё, что нам нужно — это прочитать значение ячейки recordingfile, где хранится строка «имя_файла.wav» и добавить к нему полный путь к этому файлу, который берётся, кстати, из самого же имени файла (год, месяц, день).
Открываем файл /var/www/html/admin/modules/asternic_cdr/functions.inc.php модуля Asternic.
Так в запрос к базе мы добавили поле recordingfile, значение которого, соответственно, теперь будет и в результирующем массиве, из которого мы его потом возьмём для формирования ссылки на файл.
Таким образом, в ячейке таблицы вместо вывода голосовой почты мы сделали проверку на наличие записи данного звонка и в случае её нахождения вывод небольшой иконки «Play» с ссылкой, закодированной в base64, на сам файл аудиозаписи.
Внимательный читатель заметил, что в формируемой ссылке есть переменная GET-запроса под названием getRec. Так как веб-сервер не имеет доступа к каталогу с аудиозаписями, мы отдаём файл через php, а для этого в конце файла functions.inc.php мы делаем проверку на наличие переменной getRec, в случае наличия которой мы обращаемся к функции, отдающей файл
Добавляем код в самый конец файла до, само собой, закрывающего php-тега «?>»
разграничение прав #65
Comments
klez22 commented Oct 26, 2017
Подскажите, как реализовать разграничение доступа пользователей только к своей статистике и записям разговоров. По мануалу выполнил:
add user 2280:
htpasswd /var/www/asterisk-cdr-viewer/.htpasswd 2280 test
но при залогинивании под username=extension вижу все записи как и под admin’ом
The text was updated successfully, but these errors were encountered:
prog-it commented Oct 27, 2017
Проверил, есть такой баг. Скоро будет исправлено.
prog-it commented Oct 27, 2017
andrewnord commented Dec 16, 2017
prog-it commented Dec 16, 2017
Все правильно работает. Обычные пользователи могут только просматривать свои записи, админы же видят все записи и могут удалять/слушать их.
Возможность давать права слушать/удалять/скачивать записи обычным пользователям будет добавлена в ближайшее время.
Olpag commented Mar 30, 2018
Возможность давать права слушать/удалять/скачивать записи обычным пользователям будет добавлена в ближайшее время.
prog-it commented Mar 30, 2018
Уже есть в TODO. Постараюсь добавить в ближайшее время.
lexus45 commented Apr 6, 2018
Скачал 2.2.5, читаю config.php, но пока не вижу где именно это настроить.
ps: как понимаю, на Гитхабе ЛС нет, буду благодарен если ответите на kurgan-rus с о б а к а inbox тчк ru
prog-it commented Apr 6, 2018
Нет такой возможности в 2.2.5.
lexus45 commented Apr 6, 2018
prog-it, благодарю за оперативный ответ.
И за продукт конечно же тоже :^)
Olpag commented Apr 6, 2018
anutator commented Nov 7, 2018 •
А можно просто целиком отключить возможность удалять для всех, пока нет такого функционала? В принципе я могу поменять права на каталоги, но хотелось бы, чтобы и иконки не было (я поищу в шаблоне).
Также надо отключить возможность удалять правой кнопкой мыши строку CDR.
Olpag commented Nov 7, 2018 •
А можно просто целиком отключить возможность удалять для всех, пока нет такого функционала?
anutator commented Nov 8, 2018
Спасибо. Туплю. Правое контекстное меню там же убрала.
okovalev commented Nov 28, 2018
У меня версия 2.4.3
Аудиозаписи не дает прослушать.
Только посмотреть.
Присоединяюсь к вопросу lexus45
Как сделать так, что бы пользователь доупстим 100 смог прослушать свои аудизаписи?
Функционал удаления мне впринципе не нужен (даже для админов)
Olpag commented Nov 29, 2018
Нет такой возможности в этой версии
#65 (comment)
prog-it commented Nov 29, 2018
Разграничение прав в процессе реализации. До конца декабря постараюсь выложить. (нехватка времени)
Vlad1980 commented Jul 29, 2019
Скажите получилось реализовать разграничение прав? Хотелось бы разграничение по отделам (по пулам номеров), не только по пользователям. Спасибо.
prog-it commented Jul 29, 2019
Не хватает времени, постараюсь выложить в ближайшее время. Пока будет разграничение прав по пользователям (по логинам). А дальше уже посмотрим, что еще добавить.
vsh-it commented Feb 27, 2021
Не хватает времени, постараюсь выложить в ближайшее время. Пока будет разграничение прав по пользователям (по логинам). А дальше уже посмотрим, что еще добавить.
Есть какие-то подвижки по разграничению?
ylevin89 commented Mar 4, 2021 •
Тоже интересен этот вопрос
Realmagnum commented Jul 2, 2021
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Asterisk cdr viewer mod ограничение прав
Форматы записей разговоров
Используется HTML5 плеер для воспроизведения записей разговоров. Доступные форматы аудио: MP3, WAV, OGG, AAC.
Проверенные форматы аудио. Проверялось в Internet Explorer 11, Chrome 56, Firefox 52:
Формат GSM не поддерживается для воспроизведения ни одним браузером.
Начиная с версии 2.3 доступна проверка обновлений. Чтобы проверить доступность новой версии, нужно щелкнуть на стрелочку в самом низу веб-интерфейса (подвал), рядом с надписью «Asterisk CDR Viewer Mod v[версия]».
Проверяется только доступность новой версии, но автоматического обновления не происходит. Обновлять необходимо вручную. Автоматическое обновление, возможно, будет реализовано в будущих версиях.
Если доступна новая версия, то будут отображены: текущая версия, новая версия, изменения в последнем релизе.
Применение нового конфиг-файла
После скачивания новой версии, для того, чтобы заново не настраивать конфиг-файл, можно сравнить старый файл «config.php» и новый «config.php.sample» в текстовом редакторе «Notepad++».
Редактирование базы данных
С базой данных MySQL удобнее всего работать через PHPMYADMIN. Официальный сайт: https://www.phpmyadmin.net/
Если у вас используется не база данных MySQL (а например PostgreSQL), или PHPMYADMIN не установлен, то следует использовать ADMINER. Официальный сайт: https://www.adminer.org/
Создание таблицы в базе
Имя файла записи разговора будет храниться в базе MySQL (можно также выбрать, например, PostgreSQL).
Имя колонки для файла записи звонка будет «filename». Также будут созданы необходимые индексы и триггер, о котором можно прочитать ниже.
В дополнение ко всему, файл импорта создаст новые колонки в базе для Asterisk 12+.
Если имя таблицы «cdr» (или имя колонки для файла записи звонка) не устраивает, после импорта сами сможете переименовать. Например, с помощью PHPMYADMIN или ADMINER.
Если НЕ использовали файл импорта в базу
Допустим мы настроили Asterisk для работы с базой и уже создали таблицу, например «cdr». Теперь нам необходимо добавить с нашу таблицу новую колонку, например «filename», в которой будет имя файла с записью, удобнее это сделать через PHPMYADMIN или ADMINER (смотреть здесь: https://www.adminer.org). Название колонки можно задать в конфиге.
Более подробно о том, как настроить Asterisk для работы с MySQL можно найти в интернете.
Для того, чтобы Asterisk смог взаимодействовать с новыми столбцами в таблице, необходимо в файле cdr_mysql.conf создать их алиасы.
Добавим в конец этого файла ( секция [columns] ) строчки:
Вместо «название_столбца» вставьте название столбца, в котором хранится название записи звонка, например «filename». Алиас «remoteip» нужен для записи IP адреса клиента Asterisk. Это НЕОБЯЗАТЕЛЬНО.
Создание алиаса alias start => calldate и наличие в базе колонки «calldate» обязательно для правильной работы CDR Viewer.
Если название столбца, в котором хранится название записи звонка у вас отличается от «filename», то необходимо внести соответствующие изменения в диалплан. Необходимо изменить строку Set(CDR(filename)=$
Для extensions.ael, extensions.conf
В «globals» добавим пару переменных:
Сразу уточним, что в этом макросе, если RECORDING=1 запись прямо во время разговора конвертируется в MP3. т.е. существует некоторая нагрузка на сервер.
Пример вызова макроса:
Пример вызова макроса:
Дополнительно (необязательно). Если НЕ использовали файл импорта в базу «cdr_mysql.sql»
В Asterisk если используется макрос, то звонок совершается с экстеншеном s.
Настройка папки со звонками
Записи разговоров будут складываться в папку /home/calls/ из примера выше.
Есть два варианта хранения файлов записей:
Также есть возможность настройки «отложенной конвертации записей разговоров».
Когда днем выполняется запись в формат WAV, а ночью необходимо по CRON запустить скрипт для преобразования файлов из WAV в MP3. «Отложенную конвертацию записей разговоров» и распределение по папкам в соответствии с датой можно использовать вместе, а можно что-то одно.
За распределение файлов записей по папкам, преобразование файлов из WAV в MP3 отвечает скрипт proc_records.sh из папки docs.
Каждый день в 00.01 часов записи из папки /home/calls/ по CRON должны распределяться по дате в соответствующие папки.
Для распределения файлов по папкам в соответствии с датой нужно использовать скрипт proc_records.sh из папки docs.
Формат хранения записей (пример):
Настройки скрипта proc_records.sh для соответствующего формата:
Настройки скрипта proc_records.sh для преобразования файлов из WAV в MP3:
Также можно настроить уровень вложенности поиска WAV файлов для их преобразования в переменной «DEPTH».
Примеры значений для переменной
Для вариантов, когда Asterisk сам распределяет записи по папкам в соответствии с датой.
Если у вас Asterisk сам распределяет записи звонков по папкам в соответствии с датой, тогда необходимости запуска скрипта по CRON нет. Если только у вас не настроена «отложенная конвертация записей разговоров»
Возможные форматы хранения записей:
Полный/Частичный путь к файлам звонков хранится в базе данных
В этом случае можно использовать как полный путь к файлу, так и относительный. Также в пути можно использовать имя файла как с расширением, так и без расширения файла.
Аналогично для файлов без расширения.
Примеры путей к файлам при их хранении в базе данных (содержимое колонки «filename»):
Удаление старых записей звонков
Для удаления старых записей звонков нужно использовать скрипт proc_records.sh из папки docs. В нем есть подробные комментарии по настройке.
Чтобы включить удаление старых записей звонков, в скрипте следует задать:
В переменной CLEAN_OLD_EMPTYDIR можно включить удаление пустых папок. Чтобы это включить, в скрипте следует задать:
Настройка CDR Viewer
Все настройки находятся в файле inc/config/config.php с подробными комментариями, тут не должно возникнуть сложностей.
Формат имени файла конфига: config-[уникальное_имя_конфига].php
Для имени [уникальное_имя_конфига] можно использовать латинские буквы, цифры, тире и нижнее подчеркивание.
Пример конфига для Nginx:
Пример конфига для Apache:
Если массив пустой, то разрешен доступ всем пользователям
Выбор режима работы сервера телефонной платформы
В конфиг-файле файле можно выбрать режим работы сервера телефонной платформы (Asterisk или FreeSWITCH). Это нужно для выборочного отображения функциональности, которая поддерживается конкретным видом сервера телефонии.
Например, если выбрано Asterisk: В фильтре поиска «Статус звонка» будут показаны значения только для Asterisk, но будут скрыты значения для «FreeSWITCH». Если выбран режим «Asterisk + FreeSWITCH», то в фильтре поиска «Статус звонка» будут показаны значения и для Asterisk, и для FreeSWITCH.
Выбрать режим «Asterisk + FreeSWITCH»: ‘server_mode’ => 0
Выбрать режим «Asterisk»: ‘server_mode’ => 1
Выбрать режим «FreeSWITCH»: ‘server_mode’ => 2
Настройка тарифов на звонки
Тарифы на звонки задаются в файле my_callrates.csv ( inc/plugins/my_callrates.csv ). Путь к этому файлу можно изменить в конфиге.
Формат задания тарифы в CSV файле:
Пример для Мегафона, с поминутной тарификацией, стоимость первой минуты 90 коп., после первой минуты 10 коп (доп. тариф).
Функциональность CDR Viewer можно расширять в помощью плагинов.
Добавление нового плагина
Как пример для создания нового плагина, можно использовать плагин inc/plugins/my_callrates.php
Работа с БД PostgreSQL
Для использования CDR Viewer с базой данных PostgreSQL, в базу необходимо добавить следующую функцию:
Использование CDR Viewer
В фильтрах поиска: «Кто звонил», «Куда звонили», «DID (если есть)» можно использовать регулярные выражения Asterisk.
В шаблонах поиска некоторые символы имеют следующие значения:
В одно поле поиска (например: «Кто звонил») можно ввести несколько регулярных выражений, разделенных запятой. Благодаря этому можно осуществить поиск сразу по нескольким номерам (например в поле «Кто звонил»)
