prog-it / Asterisk-CDR-Viewer-Mod

Simple and fast viewer for Asterisk CDRs and Recordings (Mod)
GNU General Public License v3.0
109 stars 80 forks source link

Загрузка файлов #2

Open fatgreentrol opened 9 years ago

fatgreentrol commented 9 years ago

Здравствуйте, подскажите пожалуйста. Возможно ли реализовать работу загрузки с модуля аудио файлов? Если путь к файлам и формат аудиозаписей такой как у меня: /var/spool/asterisk/monitor/год/месяц/день/external-100-+380637581052-20150722-173232-1437575552.2.wav

PS Help please! Я разбираюсь в php не очень.

prog-it commented 9 years ago

Формат файлов wav задается в конфиге - $system_audio_format. В скрипте логика хранения файлов другая, либо все файлы в одной папке, либо такой "/var/calls/2014/2014-09/2014-09-29".

Чтобы было, как вы написали, надо править файл func.php. Вообще сначала надо попробовать самим сделать. Примерно так нужно, пробуйте. Заменяем строчку: $rec['filename'] = "$mycalldate_y/$mycalldate_ym/$mycalldate_ymd/$recorded_file"; на $y = substr($row['calldate'], 0, 4); $m = substr($row['calldate'], 5, 2); $d = substr($row['calldate'], 8, 2); $rec['filename'] = "$y/$m/$d/$recorded_file";

Имя файла должно храниться в базе.

prog-it commented 9 years ago

У вас получилось? Можно закрывать ветку...

fatgreentrol commented 9 years ago

Поменял но не заработало.

prog-it commented 9 years ago

Посмотрите какие ошибки выдает, для этого включите дебаг - раскомментируйте первую строчку в index.php. Ишибки типа "undefined" не в счет, напишите, какие ошибки выдает на счет того, что файл не существует.

Или приведите логику хранения записей звонков, как в скрипте.

fatgreentrol commented 9 years ago

Вот всё что выдал, других ошибок нет.

Notice: Undefined index: did in /var/www/my/index.php on line 72 Notice: Undefined index: dstchannel in /var/www/my/index.php on line 78 Notice: Undefined index: channel in /var/www/my/index.php on line 86 Notice: Undefined index: clid in /var/www/my/index.php on line 92 Notice: Undefined index: dstchannel in /var/www/my/index.php on line 95 Notice: Undefined index: userfield in /var/www/my/index.php on line 104 Notice: Undefined index: accountcode in /var/www/my/index.php on line 107

Notice: Undefined offset: 1 in /var/www/my/inc/func.inc.php on line 386 Notice: Undefined offset: 2 in /var/www/my/inc/func.inc.php on line 386 Notice: Undefined offset: 3 in /var/www/my/inc/func.inc.php on line 386 Notice: Undefined offset: 4 in /var/www/my/inc/func.inc.php on line 386 Notice: Undefined offset: 4 in /var/www/my/inc/func.inc.php on line 386 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127 Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127

prog-it commented 9 years ago

Советую хорошо прочитать Readme в папке docs, там все написано как настроить. Обратите внимание на строку: Notice: Undefined index: filename in /var/www/my/inc/func.inc.php on line 127

Не может найти имя файла записи звонка, котороое должно храниться в базе. В какой колонке БД у вас хранится имя файла записи ? Если название колонки не filename, то задайте свое в конфиге.

fatgreentrol commented 9 years ago

Спасибо большое получилось! Скачивает!

А можете ещё помочь с одним вопросом? Там ещё есть кнопка чтоб проигрывать звонок, но когда нажимаешь её, открывается плеер но он ничего не проигрывает...

prog-it commented 9 years ago

Это зеленая кнопка такая... Только вот прочитал, что uppod (плеер) не поддерживает воспроизведение wav. С mp3 все работает. Настройте лучше прозрачную конвертацию в mp3 сразу во время звонка, в Readme все написано. Главное примемущество - размер файла в несколько раз меньше и можно будет прослушать через браузер. Имеющиеся записи можно конвертнуть в MP3, но тут надо небольшой скрипт написать. А так больше нормальных плееров нет, html5 в том числе. Перебрал очень много.

prog-it commented 9 years ago

Можете поставить в конфиге $system_audio_format = 'mp3'; Тогда исчезнет зеленая стрелка, т.е. можно будет только скачать.

fatgreentrol commented 9 years ago

Кстати файлы можно скачать но не всегда... Сегодня показывало вчерашние записи и фалы можно было скачать. Через время перестало показывать вчерашние записи. В новых записях уже аудио фалы не находит...

И ещё показывает звонки абсолютно все. Из под всех екстеншенов...

fatgreentrol commented 9 years ago

и ошибки в логах такого характера:

2015/07/28 13:16:21 [error] 13152#0: *1 FastCGI sent in stderr: "PHP message: PHP Notice: Undefined index: did in /var/www/my/index.php on line 72 PHP message: PHP Notice: Undefined index: dstchannel in /var/www/my/index.php on line 78 PHP message: PHP Notice: Undefined index: channel in /var/www/my/index.php on line 86 PHP message: PHP Notice: Undefined index: clid in /var/www/my/index.php on line 92 PHP message: PHP Notice: Undefined index: dstchannel in /var/www/my/index.php on line 95 PHP message: PHP Notice: Undefined index: userfield in /var/www/my/index.php on line 104 PHP message: PHP Notice: Undefined index: accountcode in /var/www/my/index.php on line 107" while reading upstream

prog-it commented 9 years ago

PHP Notice - это не ошибки, а уведомления. Надо закомментировать первую строчку в index.php.

И ещё показывает звонки абсолютно все. Из под всех екстеншенов... Так и должно быть, чтобы отсортировать - есть "Условия поиска".

Кстати файлы можно скачать но не всегда... Все правильно. У вас записи звонков по папкам год/месяц/день распределяет Asterisk или скрипт ? Если Asterisk пишет запись звонка сразу в нужную папку (год/месяц/день), то надо сделать так: в конфиге $system_storage_format = 0 в func.inc.php

  1. Убрать замену, которую я писал выше. т.е. восстановить func.inc.php как было до этого
  2. Заменить строку $rec['filename'] = $recorded_file; на $y = substr($row['calldate'], 0, 4); $m = substr($row['calldate'], 5, 2); $d = substr($row['calldate'], 8, 2); $rec['filename'] = "$y/$m/$d/$recorded_file";
fatgreentrol commented 9 years ago

Поменял но абсолютно ничего не меняться. :worried:

fatgreentrol commented 9 years ago

Стоит у меня FreePBX и Астериск сам складывает файлы по папкам.

Вот если настроить так как ранее вы писали то звонки видно становиться на следующий день. То есть скачать звонки можно только за прошедший день. За текущий день файлы не находит.

За прошедший день: 2

За текущий: 3

А если внести последнее изменения которые вы написали то файлы абсолютно не видит.

prog-it commented 9 years ago

Чтобы я мог что-то понять, закиньте содержимое файлов (как они есть на текущий момент) config.inc.php (убрав данные подключения к базе) и func.inc.php на https://gist.github.com/. И напишите ссылки здесь. Тогда что-то смогу сделать.

Кстати обновите скрипт, кроме конфига, сейчас немного дизайн поправлен, стало получше.

fatgreentrol commented 9 years ago

Вот так вот сейчас всё выглядит.

https://gist.github.com/fatgreentrol/d622a0334000a232ac63

prog-it commented 9 years ago

Не удивительно, что не работает. Вы не сделали, как я написал.

Для чего у вас заменена эта строчка ? $rec['filesize'] = file_exists($rec['path']) ? filesize($rec['path'])/1024 : 0; на $rec['filesize'] = file_exists($rec['path']) ? filesize($rec['path'])/1 : 0;

В конфиге можно же поставить размер файла $system_fsize_exists, больше которого считается, что файл существует.

Надо сделать так: Конфиг в порядке, заменяете в func.inc.php всю функцию formatFiles на это: https://gist.github.com/prog-it/5e489f6ce72ebaa46e3f

Пробуйте.

fatgreentrol commented 9 years ago

Спасибо огромное!!! :+1: Пока вроде работает.

У меня возникли ещё два вопроса:

  1. Можно ли как то распределить звонки, например чтоб из под 100-го экстеншена показывались звонки только из под 100-го экстеншена. А из 101-го соответственно исключительно входящие и исходящие звонки из под 101-го.
  2. Когда заходишь под одним из пользователей потом нажимаешь кнопку "выход" он не выходит.
prog-it commented 9 years ago
  1. Так для этого есть поля Номер звонящего и Номер назначения ...
  2. На самом деле все выходит, только у себя проверил. У вас nginx php-fpm ? Не полностью настроили. У вас в конфиге хоста наверняка есть запись location ~ \.php$ { ... }. Скопируйте ее в location с авторизацией. Сделайте примерно так: location /path/to/script { auth_basic "Asterisk"; auth_basic_user_file /path/to/.htpasswd; location ~ .php$ { ..... } }
fatgreentrol commented 9 years ago
  1. А сделать так чтоб они не видели записи друг друга?
  2. Да, установлен на nginx и php-fpm. Вроде как всё правильно...
    https://gist.github.com/fatgreentrol/71093de2ccefe39728c0
prog-it commented 9 years ago
  1. Ввести в Номер звонящего 100 и будут показаны звонки только с экстеншена 100, тоже самое с 101. Или вы имели ввиду, чтобы разделялись входящие и исходящие звонки ?
  2. Нужно примерно так https://gist.github.com/prog-it/229e53b543d6a54889dc. Укажите только правильные пути и auth_basic "Asterisk"; !
fatgreentrol commented 9 years ago
  1. Я имею введу можно ли как то связать пользователя CDR с экстеншеном. Чтоб каждый экстеншен мог видеть только свои звонки. Ну например чтоб сотрудники не видели звонки совершенные с номера директора.
  2. Прописал так же. Но не работает...
prog-it commented 9 years ago
  1. Вы наверное имели ввиду пользователя связать с контекстом... Допустим звонки директора в одном контексте, сотрудники в другом. Все можно, но для этого надо слишком много переписывать. Если сейчас скрипт по сути берет параметры только из базы asterisk, чтобы сделать, как вы написали - надо заводить в базе отдельную таблицу. Где будет прописано для каждого сотрудника какие контексты ему видеть разрешено. Насколько я знаю, такого функционала нет даже в freepbx. Пока такого делать не планируется.
  2. Должно работать. Проверял у себя на nginx. Проверьте еще раз все. Если делать как было до этого, то к файлам php доступ разрешался, сейчас же нет.
Pavel-Skiba commented 8 years ago

Низкий Вам поклон, за кропотливую работу. Я к Вам с проблемой. Не качаются и не прослушиваются файлы: http://c2n.me/3nZn3c6 - видно что они есть, но при нажатии скачивание/воспроизведение не происходит. После нажатия СКАЧАТЬ выдает вот такой адрес: https://192.168.1.120/acdr/dl.php?f=MTQ0MzE5NjY1OS4xNS0yMDE1LTA5LTI1LTE4XzU3LTA2NzQ0MzQ4NDQtMDk2MzE1NzQ3MC5tcDM= (понятно, что ничего тут не прочитаешь) Воспроизведение: http://c2n.me/3nZnnLQ

Вводные: Elastixs 2.5 http://c2n.me/3nZnHbd - Данные по астеру Файл MP3 лежит /var/calls Права на папку 777 http://c2n.me/3nZnVYq Имя файла в папке соответствует занесенной в базу SQL. Как мне кажется это что то с правами на Apache http://c2n.me/3nZoXAG

prog-it commented 8 years ago

Я правильно понял, что у вас все файлы хранятся в одной папке (скрипт для рапределения по папкам не используется) ? Выдает ли какие-либо ошибки, если нажать скачать ? Какая у вас версия PHP ?

Закиньте текущее содержимое конфиг файла (config.inc.php) на Gist, уберите только параметры подключения к базе и напишите ссылку здесь. В файле dl.php замените строчку <?php на <?php error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 'On'); После этой замены опять попробуйте скачать файл, если выдает какие-либо ошибки, скопируйте их полностью и поместите на Gist, ссылку напишите здесь. Можно скрином.

Ссылка вида https://192.168.1.120/acdr/dl.php?f=MTQ0MzE5NjY1OS4xNS0yMDE1LTA5LTI1LTE4XzU3LTA2NzQ0MzQ4NDQtMDk2MzE1NzQ3MC5tcDM= - это нормально, используется base64. Права на папку тут совсем не причем, что-то с dl.php, скорее всего в вашей версии php отсутствует класс finfo.

На последнем скрине вы пытаетесь обратиться к папке records, но в скрипте она отсутствует. Вы случайно не делали симлинк на /var/calls ? Он не нужен.

Советую еще раз прочитать Readme.

Pavel-Skiba commented 8 years ago

Большое спасибо Вам что находите время вникать в МОИ проблемы. Я на 100% уверен, что касяк у меня.

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

php -v PHP 5.1.6 (cli) (built: Jun 27 2012 12:21:16) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

https://gist.github.com/Pavel-Skiba/5d765dea43fd026b5a15 - config.inc.php

Да, симлинк на /var/calls (и records) стоял, это я пытался понять отсутствия подключения. Ну что с ним, что без него, разницы никакой.

Что меня еще смущает, это ошибка в файле "Index.php" когда расскоментируеш первую строку "<?php error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 'On');" https://gist.github.com/Pavel-Skiba/a85e3a4dedde6af2432e - сам файл Индекса. https://gist.github.com/Pavel-Skiba/c49a0f6cd81ce711ba18 - ошибки на станице

dl.php - Заменил строку. Никаких ошибок не появилось. при попытке скачать выводиться чистая страница в середине которой ничего нету, ни одно строки. По эксперементировал - удалил ДЛ и попытался скачать - реакция идентичной первой. По моему, он до файла ДЛ не доходит. Может пригодиться файл func.inc.php https://gist.github.com/Pavel-Skiba/e2a8a92945fe509472e5

"Советую еще раз прочитать Readme." - Спасибо, перечитал. Переустановил пакет с нуля, изменив; подключение к базе,Формат хранения файлов и путь Путь к файлу с тарифами, также этот путь прописан в настройках плагина $callrate_csv_file = '/var/www/asterisk-cdr-viewer/inc/plugins/' . $callrate_csv_fileName; Увы, озарение не наступило. Файл не скачивается и не воспроизводиться. Если адрес будет: https://192.168.1.120/asterisk-cdr-viewer/ Появились ошибки: http://c2n.me/3o0kKpC Если https://192.168.1.120/acdr/? - таких ошибок нету. Вот внутрянка: http://c2n.me/3o0mSml

prog-it commented 8 years ago

Только увидел ваше сообщение.

  1. Симлинк не нужен, скрипт сам берет файл из папки, путь к которой указан в конфиге. У вас версия PHP ниже той, что указана в Readme (5.3). Отсюда в PHP у вас отсутствует класс finfo для авто определения типа файла, нужно или обновить PHP, или уставновить расширение PECL - fileinfo. Скачайте последнюю версию скрипта, добавил проверку на существование класса. Должно работать. Напишите, если все заработало.
  2. Насчет файла с тарифами. Сам файл находится в inc/plugins/gen_callrates.csv. Так как у вас версия PHP ниже 5.3, то вместо прописывания полного пути от корня, можете заменить __DIR__ на dirname(__FILE__).
  3. У вас не настроено в php.ini date.timezone, раз ругаетсяб что не выбрана зона.
  4. Обновите последние скрины, они уже не доступны.
Pavel-Skiba commented 8 years ago

Я понял причина: в Elasix 2.5 стоит PHP версия 5.1, а Ваш модуль рассчитан на 5,3. Обновление PHP Elasix до 5.3 - не представляется возможным (вернее оно обновляется и потом перестает работать сам Elaistx, таблетки к этому не существует). Вопрос: а есть такой-же модуль для PHP версии 5.1 ?

prog-it commented 8 years ago

Чтобы работало с 5.1 необходимо сделать некоторые правки в файлах.

  1. Замените __DIR__ на dirname(__FILE__) в конфиге и my_callrates.inc.php
  2. Закомментируйте строчку namespace SendFile; в sendfile.class.php
  3. Закомментируйте строчку use SendFile\sendFile as sendFile; в dl.php
  4. В dl.php добавьте строчку $send->ContentTypeAuto = false; перед $send->send();

Попробуйте и отпишитесь.

Pavel-Skiba commented 8 years ago

prog-it ПРИ МНОГО БЛАГОДАРЕН ЗАРАБОТАЛО!!! Воспроизводит и дает скачивать файл.

defont0 commented 8 years ago

Добрый день, подскажите пожалуйста , дистрибутив elastix , 'filename' заменил на uniqueid, паз в конфиге поменял, в описание имя файла вижу , а вот воспроизвести или скачать немогу . [Wed Jan 20 09:51:10 2016] [error] [client 10.10.10.2] PHP Notice: Undefined index: did in /var/www/html/cd/index.php on line 70, referer: http://X.X.X.X/cd/index.php [Wed Jan 20 09:51:10 2016] [error] [client 10.10.10.2] PHP Notice: Undefined index: channel in /var/www/html/cd/index.php on line 77, referer: http://X.X.X.X/cd/index.php [Wed Jan 20 09:51:10 2016] [error] [client 10.10.10.2] PHP Notice: Undefined index: clid in /var/www/html/cd/index.php on line 83, referer: http://X.X.X.X/cd/index.php [Wed Jan 20 09:51:10 2016] [error] [client 10.10.10.2] PHP Notice: Undefined index: dstchannel in /var/www/html/cd/index.php on line 86, referer: http://X.X.X.X/cd/index.php [Wed Jan 20 09:51:10 2016] [error] [client 10.10.10.2] PHP Notice: Undefined index: userfield in /var/www/html/cd/index.php on line 95, referer: http://X.X.X.X/cd/index.php [Wed Jan 20 09:51:10 2016] [error] [client 10.10.10.2] PHP Notice: Undefined index: accountcode in /var/www/html/cd/index.php on line 98, referer: http://X.X.X.X/cd/index.php [Wed Jan 20 09:51:11 2016] [error] [client 10.10.10.2] PHP Notice: Undefined offset: 1 in /var/www/html/cd/inc/func.inc.php on line 396, referer: http://X.X.X.X/cd/index.php [Wed Jan 20 09:51:11 2016] [error] [client 10.10.10.2] PHP Notice: Undefined offset: 2 in /var/www/html/cd/inc/func.inc.php on line 396, referer: http://X.X.X.X/cd/index.php [Wed Jan 20 09:51:11 2016] [error] [client 10.10.10.2] PHP Notice: Undefined offset: 3 in /var/www/html/cd/inc/func.inc.php on line 396, referer