Системные требования.
Часть шагов по конфигурированию вам поможет сделать установщик, ссылку для скачивания которого пришлют наши инженеры после оплаты
Скачайте, запустите и следуйте его инструкциям.
В данном видео представлен пример работы установщика на АТС FreePBX
По завершению его работы вам будет предоставлена ссылка для входа в web-интерфейс, но настройка не завершена - нужно выполнить еще несколько манипуляций:
aptitude install unixodbc-dev libmyodbc
[asterisk] enabled => yes dsn => MySQL-asterisk username => asterisk_user password => 232d2edxse3e
/etc/asterisk/cdr_adaptive_odbc.conf
[cdr_adaptive_connection] connection=asterisk table=cdr alias start => calldate
/etc/odbc.ini
[MySQL-asterisk] Description = MySQL Asterisk database ;Trace = Off ;TraceFile = stderr Driver = MySQL Server = localhost User = asterisk_user Password = 232d2edxse3e ;Port = 3306 Socket = /var/run/mysqld/mysqld.sock Database = asterisk Charset = utf8
/etc/odbcinst.ini
[MySQL] Description = MySQL driver Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so CPTimeout = CPReuse =
в конец /etc/asterisk/cdr_mysql.conf добавить
alias filename => filename
queue_log => odbc,asterisk
[general] enable=yes apps=all events=all dateformat = %F %T [manager] [radius]
[asterisk] connection=asterisk table=cel loguniqueid=yes charset=utf8
*CLI> odbc show asterisk ODBC DSN Settings ----------------- Name: asterisk DSN: MySQL-asterisk Last connection attempt: 1970-01-01 07:00:00 Pooled: No Connected: Yes
globals { WAV=/var/calls; //Временный каталог с WAV MP3=/var/calls; //Куда выгружать mp3 файлы RECORDING=1; // Запись, 1 - включена. }; macro recording (calling,called) { if ("${RECORDING}" = "1"){ Set(CUTTEDCHANNEL=${CUT(CHANNEL,,1)}); Set(CUTTEDCHANNEL=${CUT(CUTTEDCHANNEL,/,2)}); Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called}); Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)}); System(mkdir -p ${MP3}/${datedir}); System(mkdir -p ${WAV}/${datedir}); Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${datedir}/${fname}.wav" "${MP3}/${datedir}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${datedir}/${fname}.mp3"); Set(CDR(filename)=${fname}.mp3); Set(CDR(recordingfile)=${fname}.wav); Set(CDR(realdst)=${called}); Set(CDR(realsrc)=${calling}); ExecIf($["${calling:-10:10}" = "${called:-10:10}"]?Set(CDR(realsrc)=${CUTTEDCHANNEL})); MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt}); }; }; _XXXXXX => { &recording(${CALLERID(number)},${EXTEN}); Dial(SIP/83843${EXTEN}@multifon,180,tT); HangUP(); } // end of _XXXXXX
В данном примере файлы записей разговоров попадают прямиков в /var/calls, где имеют следующую иерархию
ls /var/calls/2016/ -l total 24 drwxr-xr-x 19 asterisk asterisk 4096 May 31 10:10 05 drwxr-xr-x 30 asterisk asterisk 4096 Jun 30 10:02 06 drwxr-xr-x 31 asterisk asterisk 4096 Jul 31 10:18 07 drwxr-xr-x 31 asterisk asterisk 4096 Aug 31 09:00 08 drwxr-xr-x 26 asterisk asterisk 4096 Sep 26 09:51 09
[globals] WAV=/records MP3=/records/mp3 FETGRURECORDING=1 [macro-fetg.uz-record] exten => s,1,NoOp(== START macro-fetg.uz-record ==) same => n,Set(CallerID=${ARG1}) same => n,Set(CalleeID=${ARG2}) same => n,Set(CUTTEDCHANNEL=${CUT(CHANNEL,,1)}) same => n,Set(CUTTEDCHANNEL=${CUT(CUTTEDCHANNEL,/,2)}) same => n,NoOp(CalleeID=${CalleeID}, CallerID=${CallerID}) same => n,NoOp(FETGRURECORDING = ${FETGRURECORDING}) same => n,GotoIf($["${FETGRURECORDING}" = "0"]?end) same => n,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${CallerID}-${CalleeID}) same => n,Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)}) same => n,System(mkdir -p ${MP3}/${datedir}) same => n,Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${fname}.wav" "${MP3}/${datedir}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${datedir}/${fname}.mp3") same => n,Set(CDR(filename)=${fname}.mp3) same => n,Set(CDR(realdst)=${CalleeID}) same => n,Set(CDR(realsrc)=${CallerID}) same => n,ExecIf($["${CallerID:-10:10}" = "${CalleeID:-10:10}"]?Set(CDR(realsrc)=${CUTTEDCHANNEL})) same => n,MixMonitor(${WAV}/${fname}.wav,b,${monopt}) same => n(end),MacroExit() ;пример использования [from-internal-custom] ;include => from-internal exten => _XX.,1, Macro(fetg.uz-record,${CALLERID(number)},${EXTEN}) [from-pstn-custom] exten => _XX.,1, Macro(fetg.uz-record,${CALLERID(number)},${EXTEN})
WAV = "/opt/records/wav" -- Временный каталог с WAV MP3="/opt/records/mp3" --Куда выгружать mp3 файлы RECORDING=1 -- 1 - запись включена. function recording(calling,called) if RECORDING == 1 then fname = channel.UNIQUEID:get() .. "-" .. channel.STRFTIME("${EPOCH},,%Y-%m-%d-%H_%M".."-"..calling.."-"..called):get() datedir = channel.STRFTIME("${EPOCH},,%Y/%m/%d"):get().."/" os.execute("mkdir -p " .. WAV.."/"..datedir) os.execute("mkdir -p " .. MP3.."/"..datedir) WAVfname = WAV..datedir..fname..".wav" MP3fname = MP3..datedir..fname..".mp3" channel.CDR("filename"):set(MP3fname) channel.CDR("realdst"):set(called) channel.CDR("realsrc"):set(calling) monopt = string.format("nice -n 19 /usr/bin/lame -b 32 --silent %s %s && rm -f %s && chown o+r %s",WAVfname,MP3fname,WAVfname,MP3fname) app.mixmonitor(WAVfname,b,monopt) return end; end; extensions = { ["local"] = { --локальные вызовы на номера XXX ["_XXX"] = function(context,extension) app.answer() recording(channel.CALLERID("num"):get(),extension) app.dial("SIP/"..extension,300,"t") app.hangup() end; }; }
На этом настройка завершена, приятного пользования!
По любым вопросам/неполадкам/пр. пишите нам на support@fetg.uz или прямо из интерфейса, в меню Help Desk.
Некоторые замечания по части MySQL.
mysql -uroot -p Enter password: Welcome TO the MariaDB monitor. Commands END WITH ; OR \g. Your MariaDB connection id IS 3359 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab AND others. TYPE 'help;' OR '\h' FOR help. TYPE '\c' TO clear the CURRENT INPUT statement. MariaDB [(NONE)]> GRANT ALL PRIVILEGES ON *.* TO 'fetguz'@'%' \ IDENTIFIED BY 'MySuperPassword111' WITH GRANT OPTION; FLUSH privileges; quit