ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Asterisk CDR Viewer Mod, в mysql не попадает filename

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение ded » 24 окт 2017, 16:43

filename не отправляется в CDR, потому что CDR имеет точный формат ячеек в каждой записи, а не "отправляю что хочу". Для последнего есть пустое поле - userfield, вот туда и можете отправлять имя файла. Чтобы увидеть какие поля в Asterisk CDR - подключитесь к базе
mysql> use asteriskcdrdb;

mysql> show columns in cdr;
ded
 
Сообщений: 15803
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение fecyt » 24 окт 2017, 17:29

А вы попробуйте сделать таким образом. Просто запишите в поле filename значение существующего файла.
Даст база записать? Если даст, появится он в вебке?


[Показать] Спойлер:
/var/www/html/inc/functions.php 5613/15858 35%
# Получение имени файла и пути
if ( $mycalldate_ymd < $mydate && Config::get('system.storage_format') === 1 ) {
$rec['filename'] = "$mycalldate_y/$mycalldate_ym/$mycalldate_ymd/$recorded_file";
} else if ( $mycalldate_ymd < $mydate && Config::get('system.storage_format') === 2 ) {
$rec['filename'] = "$mycalldate_y/$mycalldate_m/$mycalldate_d/$recorded_file";
} else if ( Config::get('system.storage_format') === 3 ) {
$rec['filename'] = "$mycalldate_y/$mycalldate_ym/$mycalldate_ymd/$recorded_file";
} else if ( Config::get('system.storage_format') === 4 ) {
$rec['filename'] = "$mycalldate_y/$mycalldate_m/$mycalldate_d/$recorded_file";
} else {
$rec['filename'] = $recorded_file;
}

$rec['path'] = Config::get('system.monitor_dir').'/'.$rec['filename'];

Значит вот сама функция. Вот и думайте, попадают Ваши файлы под данный формат или нет.

Сразу скажу, system.storage_format определяется в config.php.

И еще у меня например выглядит следующим образом запись в БД
[Показать] Спойлер:
cdr_pkey | 48
calldate | 2017-09-25 14:38:03+03
clid | "102" <102>
src | 102
dst | 200
dcontext | test2
channel | SIP/102-00000000
dstchannel |
lastapp | Playback
lastdata | tt-monkeys
duration | 2
billsec | 2
disposition | ANSWERED
amaflags | 3
accountcode |
uniqueid | 1506350283.0
userfield |

В настройках я беру имя файла из uniqueid. Поэтому привязался к нему. Сам я не юзал поле filename.
fecyt
 
Сообщений: 148
Зарегистрирован: 17 янв 2017, 18:51

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение Elektronik » 24 окт 2017, 17:48

ded писал(а):filename не отправляется в CDR, потому что CDR имеет точный формат ячеек в каждой записи, а не "отправляю что хочу". Для последнего есть пустое поле - userfield, вот туда и можете отправлять имя файла. Чтобы увидеть какие поля в Asterisk CDR - подключитесь к базе
mysql> use asteriskcdrdb;

mysql> show columns in cdr;



Добрый день!

[Показать] Спойлер:
mysql> show columns in cdr;
+-------------+--------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------------------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| calldate | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| clid | varchar(80) | NO | MUL | | |
| src | varchar(80) | NO | MUL | | |
| dst | varchar(80) | NO | MUL | | |
| realdst | varchar(80) | NO | | | |
| dcontext | varchar(80) | NO | MUL | | |
| channel | varchar(80) | NO | | | |
| dstchannel | varchar(80) | NO | | | |
| lastapp | varchar(80) | NO | | | |
| lastdata | varchar(80) | NO | | | |
| duration | int(11) | NO | | 0 | |
| billsec | int(11) | NO | | 0 | |
| disposition | varchar(45) | NO | | | |
| amaflags | int(11) | NO | | 0 | |
| remoteip | varchar(60) | NO | | | |
| accountcode | varchar(20) | NO | MUL | | |
| peeraccount | varchar(20) | NO | | | |
| uniqueid | varchar(32) | NO | MUL | | |
| userfield | varchar(255) | NO | | | |
| did | varchar(50) | NO | MUL | | |
| linkedid | varchar(32) | NO | | | |
| sequence | int(11) | NO | | 0 | |
| filename | varchar(255) | YES | | none | |
+-------------+--------------+------+-----+---------------------+----------------+


В базе есть filename, в Asterisk CDR Viewer Mod везде настроено именно с этим полем взаимодействовать.
Можно конечно везде переписать на другое поле...

Я нашел решение, вроде начало писаться но что то тут не так, надо разобраться еще.

решение:
используйте cdr_adaptive_odbc
модуль cdr_odbc НЕ пишет кастомные поля CDR

в cdr_adaptive_odbc.conf добавил
[first]
connection=asteriskcdrdb
table=cdr
alias filename=>filename

и имя файла стало заноситься в таблицу, но коряво, дублируется строка, надо разобраться теперь почему.

[Показать] Спойлер: mysql> select filename from cdr;
+---------------------------------------------------+
| filename |
+---------------------------------------------------+
| none |
| none |
| none |
| none |
| none |
| none |
| none |
| none |
| none |
| none |
| 1508850639.0-2017-10-24-16_10-4957755888-6388.mp3 |
| none |
| 1508850702.2-2017-10-24-16_11-4957755888-6388.mp3 |
| none |
| 1508851657.5-2017-10-24-16_27-4957755888-6388.mp3 |
| none |
| 1508851945.8-2017-10-24-16_32-9151276136-6388.mp3 |
| none |
+---------------------------------------------------+
25 rows in set (0,00 sec)


Ниже картинка того, что получается (скрин чтоб наглядней).
adaptive.JPG

Получается дублируется то, что взято из adaptive CDR и еще строкой пишется как обычно пишется. Где что я опять не так сделал...

а в статистике файлы все так же не видит и странно, в статистике не задваиваются результаты.
123.JPG
Последний раз редактировалось Elektronik 24 окт 2017, 17:50, всего редактировалось 1 раз.
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение fecyt » 24 окт 2017, 17:50

exten => s,n,Set(CDR(filename)=${fname}.mp3);

Вероятно проблема в этом. Попробуйте убрать mp3, т.е. оставить (CDR(filename)=${fname}). Отобразятся записи?
fecyt
 
Сообщений: 148
Зарегистрирован: 17 янв 2017, 18:51

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение Elektronik » 24 окт 2017, 17:52

уже все отображается, но с кастыликом, из которого вылезла новая проблема. хотя я читал, что в columns достаточно добавить поле, чтоб оно заиграло в CDR. короче ковыряю дальше, на выходе что надо так и не получается.
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение fecyt » 24 окт 2017, 17:56

Отображаются в смысле везде и в вебке? С вариантом в CDR(filename)=${fname} работает?
fecyt
 
Сообщений: 148
Зарегистрирован: 17 янв 2017, 18:51

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение fecyt » 24 окт 2017, 18:01

Да вот проверил, если запись в БД будет filename.wav, файла в вебке не будет отображаться. А у Вас следовательно filename.mp3
fecyt
 
Сообщений: 148
Зарегистрирован: 17 янв 2017, 18:51

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение Elektronik » 24 окт 2017, 18:17

exten => s,n(mp3),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);


> s,n,Set(CDR(filename)=${fname}.mp3);
если убрать mp3, в таблицу будет записывать без mp3? просто имя файла, а без mp3 он не должен его искать, а тем более при выводе в веб-интерфейсе проигрывать. я на пару постов выше написал, как решил проблему и что из этого получилось. в таблицу теперь попадает имя файла, но это получается как параллельная запись, а при core reload я увидел, что он создает для adaptive CDR новые поля

[Показать] Спойлер:
-- Found adaptive CDR table cdr@asteriskcdrdb.
> Found id column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found calldate column with type 93 with len 19, octetlen 19, and numlen (0,10)
> Found clid column with type -9 with len 80, octetlen 240, and numlen (0 ,0)
> Found src column with type -9 with len 80, octetlen 240, and numlen (0, 0)
> Found dst column with type -9 with len 80, octetlen 240, and numlen (0, 0)
> Found realdst column with type -9 with len 80, octetlen 240, and numlen (0,0)
> Found dcontext column with type -9 with len 80, octetlen 240, and numle n (0,0)
> Found channel column with type -9 with len 80, octetlen 240, and numlen (0,0)
> Found dstchannel column with type -9 with len 80, octetlen 240, and num len (0,0)
> Found lastapp column with type -9 with len 80, octetlen 240, and numlen (0,0)
> Found lastdata column with type -9 with len 80, octetlen 240, and numle n (0,0)
> Found duration column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found billsec column with type 4 with len 10, octetlen 10, and numlen ( 0,10)
> Found disposition column with type -9 with len 45, octetlen 135, and nu mlen (0,0)
> Found amaflags column with type 4 with len 10, octetlen 10, and numlen (0,10)
> Found remoteip column with type -9 with len 60, octetlen 180, and numle n (0,0)
> Found accountcode column with type -9 with len 20, octetlen 60, and num len (0,0)
> Found peeraccount column with type -9 with len 20, octetlen 60, and num len (0,0)
> Found uniqueid column with type -9 with len 32, octetlen 96, and numlen (0,0)
> Found userfield column with type -9 with len 255, octetlen 765, and num len (0,0)
> Found did column with type -9 with len 50, octetlen 150, and numlen (0, 0)
> Found linkedid column with type -9 with len 32, octetlen 96, and numlen (0,0)
> Found sequence column with type 4 with len 10, octetlen 10, and numlen (0,10)
-- Found alias filename for column filename in cdr@asteriskcdrdb
> Found filename column with type -9 with len 255, octetlen 765, and numlen (0,0)
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение fecyt » 24 окт 2017, 18:20

В смысле не должен искать? Почему у меня тогда работает? А не думаете, что ставя .mp3 вы говорите искать файл ${filename}.mp3.mp3 в итоге? Типа имя файла.mp3+расширение
fecyt
 
Сообщений: 148
Зарегистрирован: 17 янв 2017, 18:51

Re: Asterisk CDR Viewer Mod, в mysql не попадает filename

Сообщение Elektronik » 24 окт 2017, 18:31

в диалплане у нас этап создания файла? указанные строки макроса присваивают имя файлу и имя в таблице. они индеентичны, если посмотреть на скрин таблицы. посмотрел последний созданный файл 1508843143.25-2017-10-24-14_05-9151276136-6388.mp3, имя файла в поле filename 1508851945.8-2017-10-24-16_32-9151276136-6388.mp3, как видим, тут все ок. если у файла не будет расширения, он и проигрываться не будет, а будет только возможность скачать файл без расширения. суть то не в том.
посмотрите внимательно, из чего формируется имя файла:
exten => s,n(mp3),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
задать fname=UNIQUEID+STRFTIME(${EPOCH},,время и дата)+звонящий+принимающий вызов.
там нет расширений, по дефолту пишется wav, потом lame перекодирует его в mp3 и записывает с именем fname.mp3 и в таблицу и на диск. никаких задвоений расширения тут нет и быть не должно. сами же сказали, что убрали у себя wav и все сломалось...

в то же время если у файла будет двойное расширение, он нормально будет проигрываться ;)
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Пред.След.

Вернуться в Вопросы новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH