Страница 2 из 11

Re: Запись разговоров в базу mysql..

Добавлено: 13 апр 2013, 00:57
noize
ded, я привёл лишь пару вариантов, в которых хранение данных в БД является оправданным. Может у человека в компании политика такая - всё хранить в БД ))

Re: Запись разговоров в базу mysql..

Добавлено: 13 апр 2013, 12:49
mik-mak
noize писал(а):Что касается реализации, то уже написали - пишете в файл, на завершение записи разговора вешаете скрипт, который загоняет файл в базу.
А средствами FreePBX это можно сделать? Я имею ввиду, при помощи мышиной возни можно ли написанный скрипт повесить на окончание разговора?

Re: Запись разговоров в базу mysql..

Добавлено: 13 апр 2013, 13:36
gosha
впринципе да.

мышОй открываете виртуальную клавиатуру, бабацаете там скрипт. потом той же виртуальной клавиатурой бабацаете _custom.conf с конфигом перезаписывающим стандартный макрос и вуаля, кла-клац и настрока freePBX мышОй готова.

Re: Запись разговоров в базу mysql..

Добавлено: 13 апр 2013, 14:52
noize
General Settings -> Call Recording -> Run after record

Как-то так

Re: Запись разговоров в базу mysql..

Добавлено: 13 апр 2013, 16:38
mik-mak
gosha писал(а):впринципе да.

мышОй открываете виртуальную клавиатуру..
Хыы..

Re: Запись разговоров в базу mysql..

Добавлено: 13 апр 2013, 23:10
tma
noize писал(а):Смысл есть. Когда стоит пара астерисков в горячем резерве, целесооборазно звонки с них хранить в одном месте.
Открою великую тайну - для этого существуют файловые сервера! Бинарные же данные хранить в БД - это маразм. В базе можно хранить ссылку. А файловые сервера можно и в кластер объединить при желании... Поэтому смысла никакого не вижу.
Я не великий специалист по БД, но обычно данные они хранят в памяти. Т.е. при первоначальном запросе данные загружаются в RAM, а затем по ним осуществляется поиск. Зачем туда грузить еще и бинарные данные? Завтра уточню у своего программиста БД, пусть подправит если я не прав...

Re: Запись разговоров в базу mysql..

Добавлено: 14 апр 2013, 10:17
tma
Ответ с родни "он бьется головой об стену, поэтому и я бьюсь головой об стену" :lol:

Можно и образы дисков хранить в БД.
Кто хранит картинки в БД? Покажите пальцем на тот кривой софт, чтобы я его не использовал...

Re: Запись разговоров в базу mysql..

Добавлено: 14 апр 2013, 10:43
noize
СУБД не обязательно хранит все данные в памяти. Всё зависит от настроек.
Кто хранит картинки в БД? Покажите пальцем на тот кривой софт, чтобы я его не использовал...
http://www.mantisbt.org/

Re: Запись разговоров в базу mysql..

Добавлено: 14 апр 2013, 12:37
Sfinx
И картинки хранят в базе и аудиофайлы, и все работает пучком, назло злопыхателям ;) Поиск в аудифайлах - бред сивой кобылы, этим занимаются только силовики, и то сомневаюсь, так как тут нужен мощный ASR. Обычно ищут по номеру, имени и timestamp'у, который тут же в таблицу и добавляем. Хранится это дело в blob, имеет смысл добавить mime-тип файла, src/dst номер, timestamp. Алгоритм простой :

Пример dialplan'а:

...
[macro-start-record]
exten => s,1,Set(callrecord_fname=${CALLERID(num)}-${MACRO_EXTEN}-${EPOCH}.gsm)
exten => s,n,Set(callrecord_user=${ARG1})
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n,MixMonitor(${callrecord_fname},i(monitor_id))
....
exten => _1XX,Macro(start-record,${EXTEN})
same => n,Dial(SIP/${EXTEN})

exten => h,1,StopMixMonitor(${monitor_id})
exten => h,n,Agi(add_call_record.agi,${callrecord_fname},${callrecord_user})

...

Скелет AGI:

1. на входе имеем переменные callrecord_fname и callrecord_user
2. запихиваем /var/spool/asterisk/monitor/${callrecord_fname} бинарь в базу
3. удаляем нафик файл

На astxx это можно сделать в 20 строк, типа где-то так :

...
astxx::agi& agi = astxx::agi::instance();
string crf(string("/var/spool/asterisk/monitor/") + argv[1]);
ifstream cr(crf.c_str(), ios::binary);
if (!cr)
throw Exception("acr.agi: Can't open CR file " + string(argv[1]) + " !");
stringstream data;
data << cr.rdbuf();
if (!data.str().size()) {
agi.verbose("acr.agi: Hmm, zero CR file !");
unlink(crf.c_str());
exit(0);
}
agi.verbose("acr.agi: Adding callrecord : " + string(argv[1]) + ", " +
itoa(data.str().size()) + " bytes for " + string(argv[2]));
db_query q;
q << "insert into callrecords (...) values (..)";
q.execute();
unlink(crf.c_str());
...

Как наворот еще можно определять duration файла (через sox например) и добавлять его тоже - весьма удобственно рисовать это в табличке на фронтенде.

Re: Запись разговоров в базу mysql..

Добавлено: 14 апр 2013, 12:48
tma
Нашел небольшую статью для ленивых.
В частности:
Если вы будете хранить изображение в базе в виде BLOBа, то когда пользователь запросит с сервера данные все данные будут загружены в память. А это много.
И правильно сказано:
А «При этого однозначного ответа нет» только потому, что 18 иконок 16на16 в десктопном приложении ещё терпимо запихать в базу ради облегчения работы ленивого программиста.