Большое спасибо!спасибо говорить сюда :)
globals {
WAV=/records/wav; //Временный каталог с WAV
MP3=/records/mp3; //Куда выгружать mp3 файлы
RECORDING=1; // Запись, 1 - включена.
};
macro recording (calling,called) {
if ("${RECORDING}" = "1"){
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${fname}.wav" "${MP3}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${fname}.mp3");
Set(CDR(filename)=${fname}.mp3);
Set(CDR(realdst)=${called});
MixMonitor(${WAV}/${fname}.wav,b,${monopt});
};
};
_XXXXXX => {
&recording(${CALLERID(number)},${EXTEN});
Dial(SIP/rtk/${EXTEN});
Hangup();
}
/var/spool/asterisk/monitor/2013/10/30/1383124577.4-time-13.16-from-793-to-666.wav
1382864334.714773-2013-10-27-15_58-507-89130ХХХХХХ.mp3
uniqueid-год_месяц_день-час_минута_кто-куда.mp3
select * from cdr where calldate like '2013-10%' limit 1;
<param name=FlashVars value=mp3=/var/spool/asterisk/monitor/2013/10/30/1383130793.0-2013-10-30-15_00-793-666.mp3 />
[macroStartRecord]
exten => s,1,NoOp
same => n,Set(fname=/var/spool/asterisk/monitor/${STRFTIME(${EPOCH},,%Y/%m/%d/${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)})
same => n,Set(CDR(filename)=${STRFTIME(${EPOCH},,${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)}.mp3)
same => n,Set(MONITOR_OPT=nice -n 19 /usr/bin/lame -b 16 --silent "${fname}.wav" "${fname}.mp3" && rm -f "${fname}.wav")
same => n,MixMonitor(${fname}.wav,b,${MONITOR_OPT})
но из браузера же не выдастэт почему не выдаст?
CALLFILENAME=${STRFTIME(${EPOCH},,%d-%m-%Y_%H:%M)}-${CALLERID(number)}-${EXTEN}-${UNIQUEID}как должен выглядеть скрипт в functions.inc.php чтобы всё заработало?
добрый день. нужна помощь
у меня есть настроенный на запись разговоров в мп3 астериск, пишет в каталог /records/mp3
формат имени файлаЦитироватьCALLFILENAME=${STRFTIME(${EPOCH},,%d-%m-%Y_%H:%M)}-${CALLERID(number)}-${EXTEN}-${UNIQUEID}как должен выглядеть скрипт в functions.inc.php чтобы всё заработало?
у меня получилось сделать только если давать имя файлу по его uniqeid.
и еще у меня не проигрывается файл. кнопка play есть, а "бегунок" не идет.
select * from cdr where calldate like '2014-01-20%' limit 1;
$recorded_file = $row['uniqueid'];
$mycalldate = substr("$calldate",0,10);
$mycalldate_ym = substr("$calldate",0,7);
$mydate = date("Y-m-d");
$from1 = $row['src'];
$to1 = $row['dst'];
/* ============================================================================ */
if (file_exists("mp3/$recorded_file.mp3"))
globals {
WAV=/records/wav; //Временный каталог с WAV
MP3=/records/mp3; //Куда выгружать mp3 файлы
RECORDING=1; // Запись, 1 - включена.
};
macro recording (calling,called) {
if ("${RECORDING}" = "1"){
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${fname}.wav" "${MP3}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${fname}.mp3");
Set(CDR(filename)=${fname}.mp3);
Set(CDR(realdst)=${called});
MixMonitor(${WAV}/${fname}.wav,b,${monopt});
};
};
buhta, у меня вот такая запись в базу падает -Код: [Выделить]в поле filename,1382864334.714773-2013-10-27-15_58-507-89130ХХХХХХ.mp3
т.е.Код: [Выделить]uniqueid-год_месяц_день-час_минута_кто-куда.mp3
выложи select из таблицы, типо такогоКод: [Выделить]если время будет подправлю, но проще как у меня сделать :)select * from cdr where calldate like '2013-10%' limit 1;
$recorded_file = $row['filename'];
$mycalldate = substr("$calldate",0,10);
$mycalldate_ym = substr("$calldate",0,7);
$mydate = date("Y-m-d");
if ($mycalldate<$mydate){
if (file_exists("records/$mycalldate_ym/$mycalldate/$recorded_file")) {
echo " <td class="record_col"><a href="downloads.php?audio=records/$mycalldate_ym/$mycalldate/$recorded_file" title="Скачать файл с разговором"><img src="templates/images/sound.png"</a>
<object type="application/x-shockwave-flash" data="include/player_mp3_maxi.swf" width="150" height="20">
<param movie=include/player_mp3_maxi.swf/>
<param name=FlashVars value=mp3=records/$mycalldate_ym/$mycalldate/$recorded_file /> </td>n";
}
else {echo " <td class="record_col">запись отсутствует</td>n"; }
}
else {
if (file_exists("records/$recorded_file")) {
echo " <td class="record_col"><a href="downloads.php?audio=records/$recorded_file" title="Скачать файл с разговором"><img src="templates/images/sound.png"</a>
<object type="application/x-shockwave-flash" data="include/player_mp3_maxi.swf" width="150" height="20">
<param movie=include/player_mp3_maxi.swf/>
<param name=FlashVars value=mp3=records/$recorded_file /> </td>n";
}
else {echo " <td class="record_col">запись отсутствует</td>n";}
}
}
crontab -l|grep -v "^#"
1 0 * * * /root/sh/mvrecords.sh
cat /root/sh/mvrecords.sh
#!/bin/bash
ym=`date %Y-%m -d "-1 day"`
ymd=`date %Y-%m-%d -d "-1 day"`
mkdir -p /records/mp3/$ym/$ymd/
mv /records/mp3/*$ymd* /records/mp3/$ym/$ymd/
if (file_exists("/var/spool/asterisk/monitor/$mydate_y/$mydate_m/$mydate_d/$recorded_file")) {
echo " <td class="record_col"><object type="application/x-shockwave-flash" data="include/player_mp3_maxi.swf" width="150" height="20">
<param movie=include/player_mp3_maxi.swf/>
<param name=FlashVars value=mp3=/var/spool/asterisk/monitor/$mydate_y/$mydate_m/$mydate_d/$recorded_file />
asdf </td>n";
}
else {echo " <td class="record_col"></td>n"; }
}
[macroStartRecord]
exten => s,1,NoOp
same => n,Set(fname=/var/spool/asterisk/monitor/${STRFTIME(${EPOCH},,%Y/%m/%d/${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)})
same => n,Set(CDR(filename)=${STRFTIME(${EPOCH},,${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)}.mp3)
same => n,Set(MONITOR_OPT=nice -n 19 /usr/bin/lame -b 16 --silent "${fname}.wav" "${fname}.mp3" && rm -f "${fname}.wav")
same => n,MixMonitor(${fname}.wav,b,${MONITOR_OPT})
[night]
exten => 200,1,Macro(StartRecord,200,SIP/200)
exten => 200,n,Hangup
[from-goip4]
include => day,09:00-19:59,mon-fri,*,*
include => night
[macro-StartRecord]
exten => s,1,NoOp
same => n,Set(fname=/records/mp3/${STRFTIME(${EPOCH},,%Y-%m/%Y-%m-%d/${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)})
same => n,Set(CDR(filename)=${STRFTIME(${EPOCH},,${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)}.mp3)
same => n,Set(MONITOR_OPT=nice -n 19 /usr/bin/lame -b 16 --silent "${fname}.wav" "${fname}.mp3" && rm -f "${fname}.wav")
same => n,MixMonitor(${fname}.wav,b,${MONITOR_OPT})
== Using SIP RTP CoS mark 5
-- Executing [200@from-goip4:1] Answer("SIP/101-0000007d", "") in new stack
-- Executing [200@from-goip4:2] Macro("SIP/101-0000007d", "StartRecord,200,SIP/200") in new stack
-- Executing [s@macro-StartRecord:1] NoOp("SIP/101-0000007d", "") in new stack
-- Executing [s@macro-StartRecord:2] Set("SIP/101-0000007d", "fname=/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200") in new stack
-- Executing [s@macro-StartRecord:3] Set("SIP/101-0000007d", "CDR(filename)=1394112398.125-2014-03-06-20_26-73832269756-200.mp3") in new stack
-- Executing [s@macro-StartRecord:4] Set("SIP/101-0000007d", "MONITOR_OPT=nice -n 19 /usr/bin/lame -b 16 --silent "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.wav" "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.mp3" && rm -f "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.wav"") in new stack
-- Executing [s@macro-StartRecord:5] MixMonitor("SIP/101-0000007d", "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.wav,b,nice -n 19 /usr/bin/lame -b 16 --silent "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.wav" "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.mp3" && rm -f "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.wav"") in new stack
-- Executing [200@from-goip4:3] Hangup("SIP/101-0000007d", "") in new stack
== Spawn extension (from-goip4, 200, 3) exited non-zero on 'SIP/101-0000007d'
== Begin MixMonitor Recording SIP/101-0000007d
== Executing [nice -n 19 /usr/bin/lame -b 16 --silent "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.wav" "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.mp3" && rm -f "/records/mp3/2014-03/2014-03-06/1394112398.125-2014-03-06-20_26-73832269756-200.wav"]
== End MixMonitor Recording SIP/101-0000007d
[night]
exten => 200,1,Macro(StartRecord,200,SIP/200)
exten => 200,n,Hangup
[from-goip4]
include => day,09:00-19:59,mon-fri,*,*
include => night
/records/mp3/2014-03/2014-03-07Файлы есть, в базе имена вида 1394163720
<tr class="record">
<td class="record_col"><abbr title="UniqueID: 1394163720.150">2014-03-07 10:42:00</abbr></td>
<td class="record_col">запись отсутствует</td>
<td class="record_col"><abbr title="Caller*ID: "73832699849" <73832699849>">73832699849</abbr></td>
<td class="record_col"><abbr title="Destination Context: from-goip4">200</abbr></td>
<td class="record_col"><abbr title="Application: Dial(SIP/200,60,tTm(manual))">Dial</abbr></td>
<td class="record_col"><abbr title="Channel: SIP/101-00000096">SIP</abbr></td>
<td class="record_col"><abbr title="AMA Flag: DEFAULT">ANSWERED</abbr></td>
<td class="record_col"><abbr title="Billing Duration: 02:07">02:18</abbr></td>
<td class="record_col"></td>
<td class="record_col"></td>
<td></td>
1394163720.150-2014-03-07-10_42-73832699849-200.mp3
Теперь другой вопрос, cdr viewer не видит файлы записи.пишет:
запись отсутствует?
root@asterisk:~# ls -la /var/www/asterisk-cdr/
итого 64
drwxr-xr-x 6 root root 4096 марта 7 12:09 .
drwxr-xr-x 4 root root 4096 марта 7 12:09 ..
-rwxr-xr-x 1 root root 182 нояб. 19 2011 callrates.csv
drwxr-xr-x 3 root root 4096 марта 6 18:58 contrib
-rwxr-xr-x 1 root root 246 сент. 6 12:28 downloads.php
drwxr-xr-x 4 root root 4096 марта 7 11:09 include
-rwxr-xr-x 1 root root 30384 дек. 2 20:21 index.php
lrwxrwxrwx 1 root root 9 марта 7 12:09 records -> /records/
drwxr-xr-x 2 root root 4096 марта 6 18:58 style
drwxr-xr-x 3 root root 4096 марта 6 18:58 templates
records -> /records/а должен на /records/mp3
[macro-StartRecord]
exten => s,1,NoOp
same => n,Set(fname=/var/tmp/h/RCDFL/${STRFTIME(${EPOCH},,%Y-%m/%Y-%m-%d/${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)})
same => n,Set(catname=/mnt/asterisk/RCDFL/${STRFTIME(${EPOCH},,%Y-%m/%Y-%m-%d/))
same => n,Set(fnamenew=/mnt/asterisk/RCDFL/RCDFL/${STRFTIME(${EPOCH},,%Y-%m/%Y-%m-%d/${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)})
same => n,Set(CDR(filename)=${STRFTIME(${EPOCH},,${CDR(uniqueid)}-%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)}.mp3)
same => n,Set(MONITOR_OPT=nice -n 19 /usr/bin/lame -b 16 --silent "${fname}.wav" "${fname}.mp3" && mkdir -p "${catname}" && cp "${fname}.mp3" "${fnamenew}.mp3" && rm -f "${fname}.wav" && rm -f "${fname}.mp3")
same => n,MixMonitor(${fname}.wav,b,${MONITOR_OPT})
"SIP/8173-00000048", "MONITOR_OPT=nice -n 19 /usr/bin/lame -b 16 --silent "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.wav" "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" && mkdir -p "/mnt/asterisk/RCDFL/2014-04/2014-04-09/" && cp "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" "/mnt/asterisk/RCDFL/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" && rm -f "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.wav" && rm -f "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3"") in new stack
-- Executing [s@macro-StartRecord:7] MixMonitor("SIP/8173-00000048", "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.wav,b,nice -n 19 /usr/bin/lame -b 16 --silent "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.wav" "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" && mkdir -p "/mnt/asterisk/RCDFL/2014-04/2014-04-09/" && cp "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" "/mnt/asterisk/RCDFL/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" && rm -f "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.wav" && rm -f "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3"") in new stack
-- Executing [84952211111@call045:2] Dial("SIP/8173-00000048", "IAX2/ServerUAkiev/84952211111,,r") in new stack
-- Called IAX2/ServerUAkiev/84952211111
== Begin MixMonitor Recording SIP/8173-00000048
-- Call accepted by 192.168.128.22 (format ulaw)
-- Format for call is (ulaw)
-- IAX2/ServerUAkiev-2342 is ringing
-- IAX2/ServerUAkiev-2342 is ringing
-- IAX2/ServerUAkiev-2342 answered SIP/8173-00000048
-- Hungup 'IAX2/ServerUAkiev-2342'
== Spawn extension (callua045, 84952211111, 2) exited non-zero on 'SIP/8173-00000048'
== MixMonitor close filestream (mixed)
== Executing [nice -n 19 /usr/bin/lame -b 16 --silent "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.wav" "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" && mkdir -p "/mnt/asterisk/RCDFL/2014-04/2014-04-09/" && cp "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" "/mnt/asterisk/RCDFL/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3" && rm -f "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.wav" && rm -f "/var/tmp/h/RCDFL/2014-04/2014-04-09/1397060689.95-2014-04-09-20_24-8173-84952211111.mp3"]
== End MixMonitor Recording SIP/8173-00000048
при записи туда напрямую несрабатываетпотом -
справами все ок ибо отдельно в впапки все пишется..
/var/www# ls -l
total 60
-rw-r--r-- 1 fessae fessae 182 Nov 19 2011 callrates.csv
drwxr-xr-x 3 fessae fessae 4096 Sep 26 2012 contrib
-rw-r--r-- 1 fessae fessae 1986 Dec 22 2012 download.php
-rw-r--r-- 1 fessae fessae 246 Sep 6 2013 downloads.php
drwxr-xr-x 4 fessae fessae 4096 Apr 15 20:48 include
-rw-r--r-- 1 fessae fessae 30384 Dec 2 20:21 index.php
lrwxrwxrwx 1 root root 13 Apr 15 20:48 records -> /records/mp3/
drwxr-xr-x 2 fessae fessae 4096 Feb 13 2013 style
drwxr-xr-x 3 fessae fessae 4096 Feb 18 21:07 templates
mysql -p
mysql> alter table cdr alter filename set default 'none';
mysql> describe cdr;
+-------------+-----------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+------+-----+---------------------+----------------+
| id | int(9) unsigned | NO | PRI | NULL | auto_increment |
| calldate | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| clid | varchar(80) | NO | | | |
| src | varchar(80) | NO | MUL | | |
| dst | varchar(80) | NO | MUL | | |
| dcontext | varchar(80) | NO | | | |
| 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 | |
| accountcode | varchar(20) | NO | MUL | | |
| uniqueid | varchar(32) | NO | MUL | | |
| userfield | varchar(255) | NO | | | |
| filename | varchar(120) | YES | | none | |
+-------------+-----------------+------+-----+---------------------+----------------+
18 rows in set (0.00 sec)
mysql> \q
Bye
Все подробности читайте на Хабре, таки запилил хау-ту
[url]http://habrahabr.ru/post/212815/[/url]
dmfox00,Все подробности читайте на Хабре, таки запилил хау-ту
[url]http://habrahabr.ru/post/212815/[/url]
-rw-r--r-- 1 root root 10944 Nov 12 18:40 1415806847.45-2014-11-12-18_40-1556-5001.mp3
-rw-r--r-- 1 root root 864 Nov 12 18:42 1415806949.47-2014-11-12-18_42-1556-5000.mp3
-rw-r--r-- 1 root root 864 Nov 12 18:42 1415806972.48-2014-11-12-18_42-1556-5001.mp3
-rw-r--r-- 1 root root 15552 Nov 12 18:43 1415807032.50-2014-11-12-18_43-1556-5010.mp3
-rw-r--r-- 1 root root 864 Nov 12 18:44 1415807058.52-2014-11-12-18_44-1556-5010.mp3
== Using SIP RTP CoS mark 5
-- Executing [5001@spb_lomo_inc:1] Gosub("SIP/SPB_Lomo-00000037", "recording,~~s~~,1(1556,5001)") in new stack
-- Executing [~~s~~@recording:1] MSet("SIP/SPB_Lomo-00000037", "LOCAL(calling)=1556") in new stack
-- Executing [~~s~~@recording:2] MSet("SIP/SPB_Lomo-00000037", "LOCAL(called)=5001") in new stack
-- Executing [~~s~~@recording:3] GotoIf("SIP/SPB_Lomo-00000037", "1?4:9") in new stack
-- Goto (recording,~~s~~,4)
-- Executing [~~s~~@recording:4] Set("SIP/SPB_Lomo-00000037", "fname=1415807474.55-2014-11-12-18_51-1556-5001") in new stack
-- Executing [~~s~~@recording:5] Set("SIP/SPB_Lomo-00000037", "monopt=nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415807474.55-2014-11-12-18_51-1556-5001.wav" "/records/mp3/1415807474.55-2014-11-12-18_51-1556-5001.mp3" && rm -f "/records/wav/1415807474.55-2014-11-12-18_51-1556-5001.wav" && chmod o+r "/records/mp3/1415807474.55-2014-11-12-18_51-1556-5001.mp3"") in new stack
-- Executing [~~s~~@recording:6] Set("SIP/SPB_Lomo-00000037", "CDR(filename)=1415807474.55-2014-11-12-18_51-1556-5001.mp3") in new stack
-- Executing [~~s~~@recording:7] Set("SIP/SPB_Lomo-00000037", "CDR(realdst)=5001") in new stack
-- Executing [~~s~~@recording:8] MixMonitor("SIP/SPB_Lomo-00000037", "/records/wav/1415807474.55-2014-11-12-18_51-1556-5001.wav,b,nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415807474.55-2014-11-12-18_51-1556-5001.wav" "/records/mp3/1415807474.55-2014-11-12-18_51-1556-5001.mp3" && rm -f "/records/wav/1415807474.55-2014-11-12-18_51-1556-5001.wav" && chmod o+r "/records/mp3/1415807474.55-2014-11-12-18_51-1556-5001.mp3"") in new stack
-- Executing [~~s~~@recording:9] NoOp("SIP/SPB_Lomo-00000037", "Finish if_recording_20") in new stack
-- Executing [~~s~~@recording:10] Return("SIP/SPB_Lomo-00000037", "") in new stack
-- Executing [5001@spb_lomo_inc:2] Dial("SIP/SPB_Lomo-00000037", "SIP/5001") in new stack
== Begin MixMonitor Recording SIP/SPB_Lomo-00000037
== Using SIP RTP CoS mark 5
-- Called SIP/5001
-- SIP/5001-00000038 is ringing
-- SIP/5001-00000038 is ringing
== Spawn extension (spb_lomo_inc, 5001, 2) exited non-zero on 'SIP/SPB_Lomo-00000037'
== MixMonitor close filestream (mixed)
== Executing [nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415807474.55-2014-11-12-18_51-1556-5001.wav" "/records/mp3/1415807474.55-2014-11-12-18_51-1556-5001.mp3" && rm -f "/records/wav/1415807474.55-2014-11-12-18_51-1556-5001.wav" && chmod o+r "/records/mp3/1415807474.55-2014-11-12-18_51-1556-5001.mp3"]
== End MixMonitor Recording SIP/SPB_Lomo-00000037
92 2014-11-13 13:23:58 "1444" <1444> 1444 5000 1415874238.79 1415874254.81-2014-11-13-13_24-5000-5001.mp3
93 2014-11-13 13:24:14 "5000" <5000> 5000 5001 1415874254.81 1415874238.79-2014-11-13-13_23-1444-5000.mp3
== Using SIP RTP CoS mark 5
-- Executing [5000@spb_lomo_inc:1] StopMixMonitor("SIP/SPB_Lomo-0000004f", "") in new stack
-- Executing [5000@spb_lomo_inc:2] Gosub("SIP/SPB_Lomo-0000004f", "recording,~~s~~,1(1444,5000)") in new stack
-- Executing [~~s~~@recording:1] MSet("SIP/SPB_Lomo-0000004f", "LOCAL(calling)=1444") in new stack
-- Executing [~~s~~@recording:2] MSet("SIP/SPB_Lomo-0000004f", "LOCAL(called)=5000") in new stack
-- Executing [~~s~~@recording:3] GotoIf("SIP/SPB_Lomo-0000004f", "1?4:9") in new stack
-- Goto (recording,~~s~~,4)
-- Executing [~~s~~@recording:4] Set("SIP/SPB_Lomo-0000004f", "fname=1415874238.79-2014-11-13-13_23-1444-5000") in new stack
-- Executing [~~s~~@recording:5] Set("SIP/SPB_Lomo-0000004f", "monopt=nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415874238.79-2014-11-13-13_23-1444-5000.wav" "/records/mp3/1415874238.79-2014-11-13-13_23-1444-5000.mp3" && rm -f "/records/wav/1415874238.79-2014-11-13-13_23-1444-5000.wav" && chmod o+r "/records/mp3/1415874238.79-2014-11-13-13_23-1444-5000.mp3"") in new stack
-- Executing [~~s~~@recording:6] Set("SIP/SPB_Lomo-0000004f", "CDR(filename)=1415874238.79-2014-11-13-13_23-1444-5000.mp3") in new stack
-- Executing [~~s~~@recording:7] Set("SIP/SPB_Lomo-0000004f", "CDR(realdst)=5000") in new stack
-- Executing [~~s~~@recording:8] MixMonitor("SIP/SPB_Lomo-0000004f", "/records/wav/1415874238.79-2014-11-13-13_23-1444-5000.wav,b,nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415874238.79-2014-11-13-13_23-1444-5000.wav" "/records/mp3/1415874238.79-2014-11-13-13_23-1444-5000.mp3" && rm -f "/records/wav/1415874238.79-2014-11-13-13_23-1444-5000.wav" && chmod o+r "/records/mp3/1415874238.79-2014-11-13-13_23-1444-5000.mp3"") in new stack
-- Executing [~~s~~@recording:9] NoOp("SIP/SPB_Lomo-0000004f", "Finish if_recording_23") in new stack
-- Executing [~~s~~@recording:10] Return("SIP/SPB_Lomo-0000004f", "") in new stack
-- Executing [5000@spb_lomo_inc:3] Dial("SIP/SPB_Lomo-0000004f", "SIP/5000") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/5000
== Begin MixMonitor Recording SIP/SPB_Lomo-0000004f
-- SIP/5000-00000050 is ringing
-- SIP/5000-00000050 answered SIP/SPB_Lomo-0000004f
-- Started music on hold, class 'default', on SIP/SPB_Lomo-0000004f
== Using SIP RTP CoS mark 5
-- Executing [5001@internal:1] StopMixMonitor("SIP/5000-00000051", "") in new stack
-- Executing [5001@internal:2] Gosub("SIP/5000-00000051", "recording,~~s~~,1(5000,5001)") in new stack
-- Executing [~~s~~@recording:1] MSet("SIP/5000-00000051", "LOCAL(calling)=5000") in new stack
-- Executing [~~s~~@recording:2] MSet("SIP/5000-00000051", "LOCAL(called)=5001") in new stack
-- Executing [~~s~~@recording:3] GotoIf("SIP/5000-00000051", "1?4:9") in new stack
-- Goto (recording,~~s~~,4)
-- Executing [~~s~~@recording:4] Set("SIP/5000-00000051", "fname=1415874254.81-2014-11-13-13_24-5000-5001") in new stack
-- Executing [~~s~~@recording:5] Set("SIP/5000-00000051", "monopt=nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415874254.81-2014-11-13-13_24-5000-5001.wav" "/records/mp3/1415874254.81-2014-11-13-13_24-5000-5001.mp3" && rm -f "/records/wav/1415874254.81-2014-11-13-13_24-5000-5001.wav" && chmod o+r "/records/mp3/1415874254.81-2014-11-13-13_24-5000-5001.mp3"") in new stack
-- Executing [~~s~~@recording:6] Set("SIP/5000-00000051", "CDR(filename)=1415874254.81-2014-11-13-13_24-5000-5001.mp3") in new stack
-- Executing [~~s~~@recording:7] Set("SIP/5000-00000051", "CDR(realdst)=5001") in new stack
-- Executing [~~s~~@recording:8] MixMonitor("SIP/5000-00000051", "/records/wav/1415874254.81-2014-11-13-13_24-5000-5001.wav,b,nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415874254.81-2014-11-13-13_24-5000-5001.wav" "/records/mp3/1415874254.81-2014-11-13-13_24-5000-5001.mp3" && rm -f "/records/wav/1415874254.81-2014-11-13-13_24-5000-5001.wav" && chmod o+r "/records/mp3/1415874254.81-2014-11-13-13_24-5000-5001.mp3"") in new stack
-- Executing [~~s~~@recording:9] NoOp("SIP/5000-00000051", "Finish if_recording_23") in new stack
-- Executing [~~s~~@recording:10] Return("SIP/5000-00000051", "") in new stack
-- Executing [5001@internal:3] Dial("SIP/5000-00000051", "SIP/5001") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/5001
== Begin MixMonitor Recording SIP/5000-00000051
-- SIP/5001-00000052 is ringing
-- SIP/5001-00000052 is ringing
-- SIP/5001-00000052 answered SIP/5000-00000051
-- Stopped music on hold on SIP/SPB_Lomo-0000004f
== Spawn extension (spb_lomo_inc, 5000, 3) exited non-zero on 'SIP/5000-00000051<ZOMBIE>'
== MixMonitor close filestream (mixed)
== Spawn extension (internal, 5001, 3) exited non-zero on 'SIP/SPB_Lomo-0000004f'
== MixMonitor close filestream (mixed)
== Executing [nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415874254.81-2014-11-13-13_24-5000-5001.wav" "/records/mp3/1415874254.81-2014-11-13-13_24-5000-5001.mp3" && rm -f "/records/wav/1415874254.81-2014-11-13-13_24-5000-5001.wav" && chmod o+r "/records/mp3/1415874254.81-2014-11-13-13_24-5000-5001.mp3"]
== Executing [nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1415874238.79-2014-11-13-13_23-1444-5000.wav" "/records/mp3/1415874238.79-2014-11-13-13_23-1444-5000.mp3" && rm -f "/records/wav/1415874238.79-2014-11-13-13_23-1444-5000.wav" && chmod o+r "/records/mp3/1415874238.79-2014-11-13-13_23-1444-5000.mp3"]
== End MixMonitor Recording SIP/5000-00000051
== End MixMonitor Recording SIP/SPB_Lomo-0000004f
Половина инфо устарела и не открывается.И что же там устарело и не открывается?
Добрый день!Покажите Ваш диалплан.
Возник вопрос - файлы пишутся, даже если NOANSWER
Как можно это поправить? Заранее спасибоСпасибо за багу, отпишусь когда появится возможность потестить.
Покажите Ваш диалплан.
macro recording (calling,called) {
if ("${RECORDING}" = "1"){
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${fname}.wav" "${MP3}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${fname}.mp3");
Set(CDR(filename)=${fname}.mp3);
Set(CDR(realdst)=${called});
MixMonitor(${WAV}/${fname}.wav,b,${monopt});
}
}
context Local {
_5XXX => {
&recording (${CALLERID(number)},${EXTEN});
Dial(SIP/${EXTEN});
Hangup ();
}
}
Половина инфо устарела и не открывается.И что же там устарело и не открывается?
[url]http://blog.thecall.ru/page/asterisk-18-cdr-v-mysql-cdr_adaptive_odbc[/url]
Сделал немного подругому - Апач пишет напрямую в Mysql минуя odbc. А вот с Веб мордой понять не могу можно получать данные минуя odbc или не получится?Не понятно, что у Вас Апач пишет в MySQL ?
/etc/odbcinst.ini
[MySQL]
Description = MySQL driver
Driver = /usr/lib/odbc/libmyodbc.so
Setup = /usr/lib/odbc/libodbcmyS.so
CPTimeout =
CPReuse =
Можно как то подробнее описать настройки, что нужно сделать чтобы форма php брала данные из mysql?да там делать то особо нечего, в конфиг в папке include прописать доступы к базе и все
у меня фряха и таких библиотек нет -не подскажу, на FreeBSD Asterisk поднимал, но он был исключительно для звонков, без каких-либо обвесов
if ($mycalldate < $mydate) {
if (file_exists("records/$mycalldate_ym/$mycalldate/$recorded_file")) {
echo " <td class="record_col"><a href="downloads.php?audio=records/$mycalldate_ym/$mycalldate/$recorded_file" title="Скачать файл с разговором"><img src="templates/images/sound.png"</a>
<object type="application/x-shockwave-flash" data="include/player_mp3_maxi.swf" width="150" height="20">
<param movie=include/player_mp3_maxi.swf/>
<param name=FlashVars value=mp3=records/$mycalldate_ym/$mycalldate/$recorded_file /> </td>n";
} else {echo " <td class="record_col">запись отсутствует</td>n";
}
} else {
if (file_exists("records/$recorded_file")) {
echo " <td class="record_col"><a href="downloads.php?audio=records/$recorded_file" title="Скачать файл с разговором"><img src="templates/images/sound.png"</a>
<object type="application/x-shockwave-flash" data="include/player_mp3_maxi.swf" width="150" height="20">
<param movie=include/player_mp3_maxi.swf/>
<param name=FlashVars value=mp3=records/$recorded_file /> </td>n";
} else {echo " <td class="record_col">запись отсутствует</td>n";
}
}
if (file_exists("records/$mycalldate_ym/$mycalldate/$recorded_file")) {
echo " <td class="record_col"><a href="downloads.php?audio=records/$mycalldate_ym/$mycalldate/$recorded_file" title="Скачать файл с разговором"><img src="templates/images/sound.png"></a>
<object type="application/x-shockwave-flash" data="include/player_mp3_maxi.swf" width="150" height="20">
<!--param movie="include/player_mp3_maxi.swf"/-->
<param name="movie" value="include/player_mp3_maxi.swf"/>
<param name="FlashVars" value="mp3=records/$mycalldate_ym/$mycalldate/$recorded_file" /></object> </td>n";
} else {echo " <td class="record_col">запись отсутствует</td>n";
}
Дополнительно пофиксили ошибку при просмотре из IEтак делитесь =)
Обнаружил косячок такой - если выбрать "Количество строк" меньше чем их отображается в детализации то он просто остальные скрывает и не показывает :(Это не бага, это фича.
К примеру пишу Количество строк:5, соответственно - "Детализация звонков - найдены 5 из 10 звонков " как посмотреть остальные непонятно.
все круто, все поставилось, но зараза из базы не делает выборку почему то... при том в предыдущий раз на другом сервере настроил, работает до сих пор. Есть подозрения, что связано все с использованием 64-битной системы и т.д...Вопрос снимаю, надо было доставить php-mysql
суть в том, что интерфейс видно, однако при нажатии на поиск ничего не происходит. На оригинальном тоже самое... есть идеи куда копать что б исправить?
Вопрос снимаю, надо было доставить php-mysqlда как-то всегда ./configure подсказывает чего ему не хватило
все же надо инструкцию с зависимостями.
P.S. спасибо за vmware+ adaptec =)пожалуйста, для спасибо у нас тут еще кнопочка под ником с аватаркой есть (Рейтинг) :)
#!/bin/bash
for i in $(find ./ -name "+*");
do x=$(echo $i |cut -c 4-)
mv $i $x
done
fessae@workbook ~/4sommer $ ls -la
total 12
drwxr-xr-x 2 fessae fessae 4096 янв. 15 02:20 .
drwxr-xr-x 60 fessae fessae 4096 янв. 15 02:20 ..
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:20 +79130751120.mp3
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:20 +79130751121.mp3
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:20 +79130751124.mp3
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:19 +79130751127.mp3
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:20 +79130751128.mp3
-rw-r--r-- 1 fessae fessae 92 янв. 15 02:20 test.sh
fessae@workbook ~/4sommer $ bash ./test.sh
fessae@workbook ~/4sommer $ ls -la
total 12
drwxr-xr-x 2 fessae fessae 4096 янв. 15 02:20 .
drwxr-xr-x 60 fessae fessae 4096 янв. 15 02:20 ..
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:20 79130751120.mp3
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:20 79130751121.mp3
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:20 79130751124.mp3
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:19 79130751127.mp3
-rw-r--r-- 1 fessae fessae 0 янв. 15 02:20 79130751128.mp3
-rw-r--r-- 1 fessae fessae 92 янв. 15 02:20 test.sh
exten => s,n,Set(who=${IF($["${ARG1:0:1}"="+"]?${ARG1:1}:${ARG1})})
exten => s,n,Set(to_whom=${IF($["${ARG2:0:1}"="+"]?${ARG2:1}:${ARG2})})
поработал с введением этой штуки в строй.. пока допер, как совместить records/filename c реальностью.. там же в функции не включено /mp3/ в проверку наличия.не понятно, что нужно проверять в функции
надо бы статью на хабре подправлять по этому поводу
P.S. Модераторы, ну капча у вас на ресурсе, ну это просто катастрофа и хорошо, что ответом к примеру не 1252325452необходимость вводить капчу пропадает после нескольких сообщений на форуме.
[sip]
exten => _.X,1,Macro(record,${CALLERID(num)},${EXTEN})
[macro-record]
exten => s,1, 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 "${WAV}/${fname}.wav" "${MP3}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${fname}.mp3")
exten => s,n, Set(CDR(filename)=${fname}.mp3)
exten => s,n, Set(CDR(realdst)=${ARG2})
exten => s,n, MixMonitor(${WAV}/${fname}.wav,b,${monopt})
exten => s,n, Goto(sip-recorded,${MACRO_EXTEN},1)
[sip-recorded]
exten => _.X,1,Dial(SIP/${EXTEN})
Channel: Local/1@autocaller
MaxRetries: 0
RetryTime: 60
WaitTime: 30
Context: sip
CallerID: 3000
Extension: 3000
Priority: 1
[autocaller]
exten => 1,1,Macro(call5715user,5715)
[macro-call5715user]
exten => s,1, NooP(${CALLERID(num)})
exten => s,n, Dial(H323/${ARG1}@atska,,t|60|M(privet))
exten => s,n, Goto(s-${DIALSTATUS},1)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,n,Hangup()
exten => s-BUSY,n,Hangup()
exten => _s-.,1,Goto(s-NOANSWER,1)
[macro-privet]
exten => s,1, AGI(govorilka.php,"Здесь какое-то приветствие")
exten => s,n, Playback(${GVOICE})
-- Attempting call on Local/1@autocaller for 3000@sip:1 (Retry 1)
-- Executing [1@autocaller:1] Macro("Local/1@autocaller-0000000e;2", "record,5715") in new stack
-- Executing [s@macro-record:1] NoOp("Local/1@autocaller-0000000e;2", "3000") in new stack
-- Executing [s@macro-record:2] Dial("Local/1@autocaller-0000000e;2", "H323/5715@atska,5,t|60|M(privet)") in new stack
== Using H323 RTP TOS bits 184
== Using H323 RTP CoS mark 6
== Using UDPTL TOS bits 184
== Using UDPTL CoS mark 6
-- Requested transfer capability: 0x00 - SPEECH
-- Called H323/5715@atska
-- H323/atska-30 is ringing
-- H323/atska-30 is ringing
-- H323/atska-30 is making progress passing it to Local/1@autocaller-0000000e;2
-- H323/atska-30 answered Local/1@autocaller-0000000e;2
-- Executing [s@macro-privet:1] AGI("H323/atska-30", "govorilka.php,"Здесь какое-то приветствие"") in new stack
-- Launched AGI Script /usr/local/asterisk/var/lib/asterisk/agi-bin/govorilka.php
-- <H323/atska-30>AGI Script govorilka.php completed, returning 0
-- Executing [s@macro-privet:2] Playback("H323/atska-30", "/usr/local/asterisk/var/lib/asterisk/govorilka/6c93fa3232431db27d3731a60d22d61b") in new stack
-- <H323/atska-30> Playing '/usr/local/asterisk/var/lib/asterisk/govorilka/6c93fa3232431db27d3731a60d22d61b.alaw' (language 'en')
> 0x8f5dbca8 -- Probation passed - setting RTP source address to 192.168.118.118:32688
> Channel Local/1@autocaller-0000000e;1 was answered
-- Executing [3000@sip:1] Macro("Local/1@autocaller-0000000e;1", "sip-recorded,3000,3000") in new stack
-- Executing [s@macro-sip-recorded:1] Set("Local/1@autocaller-0000000e;1", "fname=1427694294.164-2015-03-30-08_44-3000-3000") in new stack
-- Executing [s@macro-sip-recorded:2] Set("Local/1@autocaller-0000000e;1", "monopt=nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1427694294.164-2015-03-30-08_44-3000-3000.wav" "/records/mp3/1427694294.164-2015-03-30-08_44-3000-3000.mp3" && rm -f "/records/wav/1427694294.164-2015-03-30-08_44-3000-3000.wav" && chmod o+r "/records/mp3/1427694294.164-2015-03-30-08_44-3000-3000.mp3" ") in new stack
-- Executing [s@macro-sip-recorded:3] Set("Local/1@autocaller-0000000e;1", "CDR(filename)=1427694294.164-2015-03-30-08_44-3000-3000.mp3") in new stack
-- Executing [s@macro-sip-recorded:4] Set("Local/1@autocaller-0000000e;1", "CDR(realdst)=3000") in new stack
-- Executing [s@macro-sip-recorded:5] MixMonitor("Local/1@autocaller-0000000e;1", "/records/wav/1427694294.164-2015-03-30-08_44-3000-3000.wav,b,nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1427694294.164-2015-03-30-08_44-3000-3000.wav" "/records/mp3/1427694294.164-2015-03-30-08_44-3000-3000.mp3" && rm -f "/records/wav/1427694294.164-2015-03-30-08_44-3000-3000.wav" && chmod o+r "/records/mp3/1427694294.164-2015-03-30-08_44-3000-3000.mp3") in new stack
-- Executing [s@macro-sip-recorded:6] Goto("Local/1@autocaller-0000000e;1", "sip-recorded,3000,1") in new stack
-- Goto (sip-recorded,3000,1)
== Channel 'Local/1@autocaller-0000000e;1' jumping out of macro 'sip-recorded'
-- Executing [3000@sip-recorded:1] Dial("Local/1@autocaller-0000000e;1", "SIP/3000") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/3000
-- Local/1@autocaller-0000000e;1 requested media update control 20, passing it to SIP/3000-00000068
== Begin MixMonitor Recording Local/1@autocaller-0000000e;1
> [INSERT INTO cdr (calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,uniqueid) VALUES ({ ts '2015-03-30 08:44:54' },'3000','3000','1','autocaller','Local/1@autocaller-0000000e;2','H323/atska-30','Dial','H323/5715@atska,5,t|60|M(privet)',3,2,'ANSWERED',3,'1427694294.165')]
== Spawn extension (macro-record, s, 2) exited non-zero on 'Local/1@autocaller-0000000e;2' in macro 'record'
== Spawn extension (autocaller, 1, 1) exited non-zero on 'Local/1@autocaller-0000000e;2'
-- SIP/3000-00000068 is ringing
> 0xb75501b8 -- Probation passed - setting RTP source address to 192.168.11.10:62342
-- SIP/3000-00000068 answered H323/atska-30
> 0xb75501b8 -- Probation passed - setting RTP source address to 192.168.11.10:62342
[Mar 30 08:45:09] NOTICE[10191]: chan_sip.c:27853 handle_request_subscribe: Received SIP subscribe for peer without mailbox: 3000
> [INSERT INTO cdr (calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,uniqueid) VALUES ({ ts '2015-03-30 08:44:57' },'3000','3000','3000','sip-recorded','H323/atska-30','SIP/3000-00000068','Dial','SIP/3000',22,12,'ANSWERED',3,'1427694294.166')]
== Spawn extension (sip-recorded, 3000, 1) exited non-zero on 'H323/atska-30'
== MixMonitor close filestream (mixed)
== Executing [nice -n 19 /usr/bin/lame -b 32 --silent "/records/wav/1427694294.164-2015-03-30-08_44-3000-3000.wav" "/records/mp3/1427694294.164-2015-03-30-08_44-3000-3000.mp3" && rm -f "/records/wav/1427694294.164-2015-03-30-08_44-3000-3000.wav" && chmod o+r "/records/mp3/1427694294.164-2015-03-30-08_44-3000-3000.mp3"]
[Mar 30 08:45:20] NOTICE[1872]: pbx_spool.c:402 attempt_thread: Call completed to Local/1@autocaller
== End MixMonitor Recording Local/1@autocaller-0000000e;1
так вот сам вопрос - вы ставили lame из репозитариев, или собирали из сорцов?из реп, на Debian есть
1. будет ли работать такой вот вариант:так проверь =)
Так же хочу обратить внимание, что вызывается очередь, а не просто телефон...пофиг
имя файла получается к примеру 1428069741.25-2015-04-03-17_02--.mp3, то есть ${calling}-${called} не пишутся, но может ли из-за них не писаться информация в базу???это всего лишь невнимательность
P.S. личные додумки... а может ли это быть из-за того, что у меня таблица называется не CDR а cdr...
update 2.2в ael работает, extensions.conf не пользую
Не срабатывала запись в таблицу CDR, потому что в конфиге было прописано
exten => s,n,Set((CDR(filename)=${fname}.mp3))
Не стал морочиться, поменял filename на userfield в function.php... Все заработало.а поле filename в базе есть?
Вопрос опять же. Никто не пробовал какой-нить хтмл плеер туда засунуть? А то натяльника не может слушать с гейпада...
describe cdr;
с USERFIELD другая проблема - туда не вставляются значения по дефолту none... то есть плеер есть всегда!я не зря говорил о невнимательности
странно все это...
PD 2
Обнаружился небольшой глюк, если запись по каким-либо направлениям отключена(т.е. не пишется файл и не заполняется поле filename в базе), то флеш плеер все равно отображается, как-будто файл есть.
Для исправления нужно внести изменения в таблицу CDR, для поля filename выставить значение по умолчанию:
mysql -p
mysql> alter table cdr alter filename set default 'none';
mysql> describe cdr;
+-------------+-----------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+------+-----+---------------------+----------------+
| id | int(9) unsigned | NO | PRI | NULL | auto_increment |
| calldate | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| clid | varchar(80) | NO | | | |
| src | varchar(80) | NO | MUL | | |
| dst | varchar(80) | NO | MUL | | |
| dcontext | varchar(80) | NO | | | |
| 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 | |
| accountcode | varchar(20) | NO | MUL | | |
| uniqueid | varchar(32) | NO | MUL | | |
| userfield | varchar(255) | NO | | | |
| filename | varchar(120) | YES | | none | |
+-------------+-----------------+------+-----+---------------------+----------------+
18 rows in set (0.00 sec)
mysql> \q
Bye
Готовим MySQL
CDR нашего Asterisk должны писаться в MySQL базу, о том как это настроить можно прочесть здесь например ;).
Имя файла записи разговора пишется в поле file таблицы CDR.
Добавим его:
mysql -uroot -p -e "alter table `cdr` add column `filename` varchar(120) after `userfield`;" asterisk
Set(CDR(filename)=ololo_123)
[cdr]
connection = asterisk-cdr
table = cdr
Однако РНР скрипт не берет из базы это значение =((( непонятно...какой скрипт и какое значение?
$recorded_file = $row['userfield'];
$mycalldate = substr("$calldate",0,10);
$mycalldate_ym = substr("$calldate",0,7);
$mydate = date("Y-m-d");
/* ============================================================================ */
if ($mycalldate<$mydate){
if (file_exists("records/$mycalldate/$recorded_file]")) {
echo " <td class=\"record_col\"><a href=\"downloads.php?audio=records/$mycalldate/$recorded_file\" title=\"Скачать файл с разговором\"><img src=\"templates/images/sound.png\"</a>
<audio src=\"records/$mycalldate/$recorded_file\" type=\"audio/mp3\" controls=\"controls\"> </td>\n";
}
else {echo " <td class=\"record_col\">запись отсутствует</td>\n"; }
}
else {
if (file_exists("records/$recorded_file")) {
echo " <td class=\"record_col\"><a href=\"downloads.php?audio=records/$recorded_file\" title=\"Скачать файл с разговором\"><img src=\"templates/images/sound.png\"</a>
<audio src=\"records/$recorded_file\" type=\"audio/mp3\" controls=\"controls\"></td>\n";
}
else {echo " <td class=\"record_col\">запись отсутствует</td>\n";}
}
}
brain, думаю, что нет.а может это быть из за того, что когда я пытаюсь переключить абонента, при вызове сотрудника врубается очередной скрипт с записью на внутреннюю линию?
Но могу ошибаться, поштудируйте доку Asterisk.
Много чего еще изменил, в том числе внешний вид (см. скрин). В ближайшее время будет на Github.
ym=`date +%Y-%m -%d "-1 day"`
ym=`date +%Y-%m -d "-1 day"`
// MixMonitor
macro recording(calling,called) {
if ("${RECORDING}" = "1") {
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
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");
Set(CDR(filename)=${fname}.mp3);
Set(CDR(realdst)=${called});
MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
}
return;
};
Пример вызова макроса:
context internal {
_X. => {
&recording(${CALLERID(num)},${EXTEN});
Dial(SIP/${EXTEN},60);
Hangup();
};
};
[macro-recording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?yes:no)
exten => s,n(yes),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);
exten => s,n,Set(CDR(realdst)=${called});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
exten => s,n(no),Verbose(exit record);
[globals]
...
RECORDING=1; // 1-вкл / 0-выкл запись разговора
DIR_RECORDS=/var/calls/; // папка с записями разговоров
...
;##################################################################################################################################################################################
; These changes has made TheCall.RU
; Start
[macro-thecall.ru-record]
exten => s,1,NoOp(== START macro-thecall.ru-record ==)
exten => s,n,Set(THECALLRURECORDING=0)
exten => s,n,Set(CallerID=${ARG1})
exten => s,n,Set(CalleeID=${ARG2})
exten => s,n,NoOp(CalleeID=${CalleeID}, CallerID=${CallerID})
exten => s,n,AGI(record_or_not.py,${CalleeID},${CallerID})
exten => s,n,NoOp(THECALLRURECORDING = ${THECALLRURECORDING})
exten => s,n,GotoIf($["${THECALLRURECORDING}" = "0"]?end)
exten => s,n,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${CallerID}-${CalleeID})
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${fname}.wav" "${MP3}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${fname}.mp3")
exten => s,n,Set(CDR(filename)=${fname}.mp3)
exten => s,n,Set(CDR(realdst)=${called})
exten => s,n,MixMonitor(${WAV}/${fname}.wav,b,${monopt})
exten => s,n(end),MacroExit()
[from-internal-custom]
;include => from-internal
exten => _XX.,1, Macro(thecall.ru-record,${CALLERID(number)},${EXTEN})
[from-pstn-custom]
exten => _XX.,1, Macro(thecall.ru-record,${CALLERID(number)},${EXTEN})
; End TheCall.RU's changes
;####################################################################################################################################################################################
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
def agi_command(cmd):
print cmd
sys.stdout.flush()
return sys.stdin.readline().strip()
list_of_numbers = ['201','202','203', '204', '205', '206', '207', '208', '209', '210', '211', '222']
if sys.argv[1] in list_of_numbers:
response = agi_command("EXEC Set THECALLRURECORDING=1")
elif sys.argv[2] in list_of_numbers:
response = agi_command("EXEC Set THECALLRURECORDING=1")
sys.exit(0)
#!/bin/bash
ym=`date +%Y-%m -d "-1 day"`
ymd=`date +%Y-%m-%d -d "-1 day"`
mkdir -p /records/mp3/$ym/$ymd/
mv /records/mp3/$ym* /records/mp3/$ym/$ymd/
$send->ContentTypeAuto = false;
...
$send = new sendFile;
$send->ContentTypeAuto = false;
...
context route {
s => {
SET(DNID=${CUT(CUT(SIP_HEADER(To),@,1),:,2)});
SET(OLO=${EXTEN});
jump ${DNID}@route_in_default;
}
}
context route_in_default {
_X. => {
jump ${OLO}@route_in_turn;
}
}
context route_in_turn {
s =>{
start:
Answer();
SetMusicOnHold(welcome);
Queue("turn",t,,,30);
Queue(turn2,t,,,30);
goto start;
}
Set(CDR(filename)=${fname}.mp3);
Set(CDR(realdst)=${called});
Всем привет!
Есть вопрос по такому моменту. Все настроил как по вашей статье на хабре, все работает, НО каждый звонок дублируется (то есть когда делаем select * from cdr; - видим 2 записи, вместо одной).
Соответственно, в веб-интерфейсе отображается также 2 позиции.
Подскажите, куда копать?
ls /var/spool/asterisk/monitor/2016/02/04/
exten-69xx-1xxx-20160204-090435-1454551475.7921.wav - входящий
q-19xx-1xxx-20160204-094051-1454553650.8091.wav - очередь
out-1xxx-69xx-20160204-094628-1454553988.8121.wav - исходящий
PDO::errorInfo(): Array (
- => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY unix_timestamp(calldate) ASC LIMIT 100' at line 1 )
Версия сервера: 5.5.47-0+deb8u1 - (Debian)
Веб-сервер nginx/1.6.2
Версия клиента базы данных: libmysql - 5.5.47
PHP расширение: mysqli
### Включение / Отключение показа условий поиска и типов отчетов
## Если 1 - показать, 0 - скрыть
$display_search = array();
# Показ типа отчета - Параллельные звонки
$display_search['chart_cc']=0;
# Показ типа отчета - ASR и ACD (Коэффициент отвеченных вызовов / Средняя продолжительность вызова)
$display_search['asr_report'] = 0;
# Показ условия поиска - Входящий канал
$display_search['channel'] = 0;
# Показ условия поиска - Имя звонящего
$display_search['clid'] = 0;
# Показ условия поиска - DID (Внешний номер)
$display_search['did'] = 0;
# Показ условия поиска - Исходящий канал
$display_search['dstchannel'] = 0;
# Показ условия поиска - Код аккаунта
$display_search['accountcode'] = 0;
# Показ условия поиска - Описание (userfield)
$display_search['userfield'] = 0;
# Показ условия поиска - Приложение
$display_search['lastapp'] = 0;
<?php
$filename = $_SERVER['REQUEST_TIME'] . '-' . $_GET['from'] . '-' . $_GET['to'] . '.call';
$temp_dn = "/var/spool/asterisk/outgoing_archive/";
$dn = "/var/spool/asterisk/outgoing/";
$fn = $temp_dn . $filename;
$dest_fn = $dn . $filename;
echo "Calling from SIP/" . $_GET["from"] . "\n";
echo "to " . $_GET["to"] . "\n";
echo '<br>';
$fp = fopen($fn,'wt');
$test = fwrite($fp,"Channel: SIP/" . $_GET["from"] . "
CallerID: \"Some Name\" <+380123456789>
MaxRetries : 2
RetryTime: 300
WaitTime: 45
Context: outgoing
Extension: " . $_GET["to"] . "
Priority: 1
Archive: Yes");
if ($test) echo 'File successfully writed';
else echo 'Write file error!';
echo '<br>';
$new_fn = $fn . '.bak';
$test = copy($fn,$new_fn);
if ($test) echo 'File successfully copied';
else echo 'Copy file error!';
echo '<br>';
$test = rename($fn,$dest_fn);
if ($test) echo 'File successfully moved';
else echo 'Move file error!';
?>
// Имя пользователя
$cdr_user_name = getenv('REMOTE_USER');
if ( strlen($cdr_user_name) > 0 ) {
$is_admin = strpos(",$admin_user_names,", ",$cdr_user_name,");
if ( $admin_user_names == '*' ) {
$cdr_user_name = '';
} elseif ( isset($_REQUEST['action']) && $_REQUEST['action'] == 'logout' ) {
header('Status: 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Asterisk"');
exit;
} elseif ( $is_admin !== false ) {
$cdr_user_name = '';
}
}
И ещё есть необходимость сделать чтобы звонки как-то помечались: дозвонился человек или нет, и перезвонили ему потом или нети это доп скриптами обрабатываю при исходящих из колцентра
Например, все операторы разговаривали когда человек звонил, он немного в очереди покрутился и положил трубку. И вот если ему потом перезвонили или он сам таки дозвонился чтоб все его предыдущие звонки были отмечены, что контакт с абонентом был. А лучше отмечать красным те записи, которые на текущий момент так и не дозвонились.
И кстати, почему когда человек попал в очередь, а потом положил трубку, статус "Отвечено"? Он же до оператора не дозвонился. Может нужен какой-то другой статус если не удалось связаться?какая версия астериска?
### Формат хранения файлов записей Asterisk
## Если 1, то файлы записей должны распределяться скриптом по папкам в соответствии с датой "/var/calls/2015/2015-01/2015-01-01".
# Записи за сегодня находятся в "/var/calls", записи за прошедшие даты в папках в соответствии с датой "/var/calls/2015/2015-01/2015-01-01"
## Если 2, то файлы записей должны распределяться скриптом по папкам в соответствии с датой "/var/calls/2015/12/01".
# Записи за сегодня находятся в "/var/calls", записи за прошедшие даты в папках в соответствии с датой "/var/calls/2015/12/01"
## Если 3, то файлы записей должны распределяться по папкам Asterisk-ом в соответствии с датой "/var/calls/2015/2015-01/2015-01-01".
# Записи за все даты находятся в папках в соответствии с датой "/var/calls/2015/2015-01/2015-01-01"
## Если 4, то файлы записей должны распределяться по папкам Asterisk-ом в соответствии с датой "/var/calls/2015/12/01".
# Записи за все даты находятся в папках в соответствии с датой "/var/calls/2015/12/01"
## Если др. значение, то все записи хранятся в одной папке (/var/calls)
$system_storage_format = 3;
### Папка, где находятся записи Asterisk
$system_monitor_dir = '/var/calls'; // без слеша на конце
[macro-recording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?yes:no)
exten => s,n(yes),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},Europe/Kiev,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(curr_dir=${DIR_RECORDS}${STRFTIME(${EPOCH},Europe/Kiev,%Y)}/${STRFTIME(${EPOCH},Europe/Kiev,%Y-%m)}/${STRFTIME(${EPOCH},Europe/Kiev,%Y-%m-%d
)}/);
exten => s,n,Set(monopt=mkdir -p "${curr_dir}" && nice -n 19 /usr/local/bin/lame -b 32 --silent "${curr_dir}${fname}.wav" "${curr_dir}${fname}.mp3" && rm -f
"${curr_dir}${fname}.wav" && chmod o+r "${curr_dir}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${curr_dir}${fname}.wav,b,${monopt});
exten => s,n(no),Verbose(Exit record);
exten => s,1,Macro(recording,${CALLERID(num)},${EXTEN})
#!/bin/bash
ye=`date +%Y`
ym=`date +%m`
yd=`date +%d -d '1 day ago'`
ymd=`date +%Y-%m-%d -d '1 day ago'`
mkdir -p /var/calls/$ye/$ym/$yd/
mv /var/calls/*${ymd}* /var/calls/$ye/$ym/$yd/
macro recording (calling,called) {
if ("${RECORDING}" = "1"){
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)});
System(mkdir -p ${WAV}/${datedir});
Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${datedir}/${fname}.wav" "${MP3}/${datedir}/${fname}.mp3" && chmod o+r "${MP3}/${datedir}/${fname}.*");
Set(CDR(filename)=${fname}.mp3);
Set(CDR(recordingfile)=${fname}.wav);
Set(CDR(realdst)=${called});
MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt});
};
};
$recorded_file = $row[$system_column_name];
$mycalldate_ymd = substr($row['calldate'], 0, 10); // ymd
$mycalldate_ym = substr($row['calldate'], 0, 7); // ym
$mycalldate_y = substr($row['calldate'], 0, 4); // y
$mycalldate_m = substr($row['calldate'], 5, 2); // m
$mycalldate_d = substr($row['calldate'], 8, 2); // d
$mydate = date("$mycalldate_d.$mycalldate_m.$mycalldate_y");
// -----------------------------------------------
# Файл не найден
$tmpError = '<td class="record_col"><img class="img_notfound" src="img/record_notfound.png"></td>';
# Прослушивание и скачивание
//$tmpRec = '<td class="record_col"><audio src=\"records/$mycalldate_y/$mycalldate_m/$mydate/$recorded_file\" type=\"audio/wav\" controls=\"controls\"></td>';
# Только скачивание
$tmpDl = '<td class="record_col">
<div class="recordBox">
<a href="dl.php?f=[_file]"><img class="img_dl" src="img/record_dl.png"></a>
</div>
</td>
';
// -----------------------------------------------
# Получение имени файла и пути
if ($mycalldate_ymd < $mydate && $system_storage_format === 1) {
$rec['filename'] = "$mycalldate_y/$mycalldate_ym/$mycalldate_ymd/$recorded_file";
} else if ($mycalldate_ymd < $mydate && $system_storage_format === 2) {
$rec['filename'] = "$mycalldate_y/$mycalldate_m/$mycalldate_d/$recorded_file";
} else if ($system_storage_format === 3) {
$rec['filename'] = "$mycalldate_y/$mycalldate_m/$mycalldate_d/$recorded_file";
} else if ($system_storage_format === 4) {
$rec['filename'] = "$mycalldate_y/$mycalldate_m/$mydate/$recorded_file";
} else {
$rec['filename'] = $recorded_file;
}
$rec['path'] = $system_monitor_dir.'/'.$rec['filename'];
$rec['filesize'] = file_exists($rec['path']) ? filesize($rec['path'])/1024 : 0;
# аудио
if (file_exists($rec['path']) && $recorded_file && $rec['filesize'] >= $system_fsize_exists && preg_match('#(.*)\.'.$system_audio_format.'$#i', $rec['filename'])) {
echo " <td><audio src=\"records/$mycalldate_y/$mycalldate_m/$mydate/$recorded_file\" type=\"audio/wav\" controls=\"controls\"</td>";
$tmpRes = str_replace('[_file]', base64_encode($rec['filename']), $tmpDl);
А, и еще, не могу избавиться от колонки Описание.убери руками его да и все
Правка config.inc.php не помогает, в конфиге стоит - 0, для userfield(описание).
<th class="record_col">Описание</th>
<? if ($display_search['userfield'] == 1) { ?>
<tr>
<td><input <?php if (isset($_REQUEST['order']) && $_REQUEST['order'] == 'userfield') { echo 'checked="checked"'; } ?> type="radio" id="id_order_userfield" name="order" value="userfield"> <label for="id_order_userfield"><D0><9E><D0><BF><D0><B8><D1><81><D0><B0><D0><BD><D0><B8><D0><B5></label></td>
<td><input class="margin-left0" type="text" name="userfield" id="userfield" value="<?php if (isset($_REQUEST['userfield'])) { echo htmlspecialchars($_REQUEST['userfield']); } ?>">
<input <?php if ( isset($_REQUEST['userfield_neg'] ) && $_REQUEST['userfield_neg'] == 'true' ) { echo 'checked="checked"'; } ?> type="checkbox" name="userfield_neg" value="true" id="id_userfield_neg"> <label for="id_userfield_neg"><D0><9D><D0><B5></label>  
<input <?php if (empty($_REQUEST['userfield_mod']) || $_REQUEST['userfield_mod'] == 'begins_with') { echo 'checked="checked"'; } ?> type="radio" name="userfield_mod" value="begins_with" id="id_userfield_mod1"> <label for="id_userfield_mod1"><D0><9D><D0><B0><D1><87><D0><B8><D0><BD><D0><B0><D0><B5><D1><82><D1><81><D1><8F> <D0><BD><D0><B0></label>  
<input <?php if (isset($_REQUEST['userfield_mod']) && $_REQUEST['userfield_mod'] == 'contains') { echo 'checked="checked"'; } ?> type="radio" name="userfield_mod" value="contains" id="id_userfield_mod2"> <label for="id_userfield_mod2"><D0><A1><D0><BE><D0><B4><D0><B5><D1><80><D0><B6><D0><B8><D1><82></label>  
<input <?php if (isset($_REQUEST['userfield_mod']) && $_REQUEST['userfield_mod'] == 'ends_with') { echo 'checked="checked"'; } ?> type="radio" name="userfield_mod" value="ends_with" id="id_userfield_mod3"> <label for="id_userfield_mod3"><D0><9A><D0><BE><D0><BD><D1><87><D0><B0><D0><B5><D1><82><D1><81><D1><8F> <D0><BD><D0><B0></label>  
<input <?php if (isset($_REQUEST['userfield_mod']) && $_REQUEST['userfield_mod'] == 'exact') { echo 'checked="checked"'; } ?> type="radio" name="userfield_mod" value="exact" id="id_userfield_mod4"> <label for="id_userfield_mod4"><D0><A0><D0><B0><D0><B2><D0><BD><D0><BE></label>
</td>
</tr>
<? } ?>
short_open_tag boolean
Определяет, разрешается ли короткая форма записи (<? ?>) тегов PHP. Если вы хотите использовать PHP совместно с XML, вы можете отключить эту опцию, чтобы беспрепятственно использовать <?xml ?>. В противном случае, вы можете отобразить это при помощи PHP, например: <?php echo '<?xml version="1.0"?>'; ?>. Если же эта опция отключена, вы должны использовать длинную форму открывающего тега PHP (<?php ?>).
globals {
WAV=/var/calls; //Временный каталог с WAV
MP3=/var/calls; //Куда выгружать mp3 файлы
RECORDING=1; // Запись, 1 - включена.
};
macro recording (calling,called) {
if ("${RECORDING}" = "1"){
Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)});
System(mkdir -p ${WAV}/${datedir});
Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${WAV}/${datedir}/${fname}.wav" "${MP3}/${datedir}/${fname}.mp3" && chmod o+r "${MP3}/${datedir}/${fname}.*");
Set(CDR(filename)=${fname}.mp3);
Set(CDR(recordingfile)=${fname}.wav);
Set(CDR(realdst)=${called});
MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt});
};
};
$system_storage_format = 4;
PDO::errorInfo(): Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'channel LIKE 'sip%' ) LIMIT 100' at line 1 )
раскомментировал строчкикакие сточки?
goro, да, уважаемый goro, такой вариант есть.
Все просто, берете чистый ACDR и пилите его под себя, как это сделал я
Updated: 06 September 2016, 15:43:16
А еще можете попробовать мою новую систему - https://vk.com/fessaectan_reo?w=wall91572403_1300%2Fall