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

Астериск удаление пустой аудиозаписи

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

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

Астериск удаление пустой аудиозаписи

Сообщение testvtigercrm123 » 10 июл 2019, 12:46

Добрый день, натолкните на мысль, как можно реализовать удаление пустой звуковой записи через астериск. Пробовал if в разные места вставлять, все равно пишет. Я конечно, могу это и в кроне через скрипт по размеру файла удалять, но хотелось бы через астер. По логу в принципе видно, что запись он создает в самом конце, а удалить пытается раньше, натолкните на верный путь решения данной проблемы средствами астериск.

extensions.ael


Код: выделить все
globals {
WAV=/var/www/bitrix_portal/callme/records/wav; //Временный каталог с WAV
MP3=/var/www/bitrix_portal/callme/records/mp3; //Куда выгружать mp3 файлы
URLRECORDS=https://callme.example.com/records/mp3;
RECORDING=1; // Запись, 1 - включена.
};

macro recording(calling,called) {
   if ("${RECORDING}" = "1"){
   Set(fname=${UNIQUEID}_${STRFTIME(${EPOCH},,%d.%m.%Y_%H-%M)}-from.${calling}-to.${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}/${datedir}/${fname}.wav" && chmod o+rwx "${MP3}/${datedir}/${fname}.mp3");

   Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3);
   Set(CDR(filename)=${fname}.mp3);
   Set(CDR(recordingfile)=${fname}.wav);
   Set(CDR(realdst)=${called});
   MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt});
   if ("${CDR(billsec)}" = "0"){
       StopMixMonitor();
            System(rm -f "${MP3}/${datedir}/${fname}.mp3");
   };
    };


};

context incoming {
222222 => {
&recording(${CALLERID(number)},${EXTEN});
Dial(SIP/999,10,t);
Set(CallMeDISPOSITION=${CDR(disposition)});
Set(CallMeDURATION=${CDR(billsec)});
Hangup();
}

h => {
Set(CDR_PROP(disable)=true);
Set(CallMeDURATION=${CDR(billsec)});
ExecIF(${ISNULL(${CallMeDISPOSITION})}?Set(CallMeDISPOSITION=${CDR(disposition)}):NoOP(=== CallMeDISPOSITION already was set ===));
ExecIF($[ ${CallMeDURATION} = 0 ]?StopMixMonitor():Log(NOTICE,Duration > 0));
System(rm -f "${MP3}/${datedir}/${fname}.mp3");
    if ("${CallMeDURATION}" = "0"){
        StopMixMonitor(${MIXMONITORIDVARIABLE});
        System(rm -f "${MP3}/${datedir}/${fname}.mp3");
    };
System(curl -s https://callme.examle.com/CallMeOut.php --data action=sendcall2b24 --data call_id=${CallMeCALL_ID} --data-urlencode FullFname=${FullFname} --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition=${CallMeDISPOSITION});     

}


};


log звонка
Код: выделить все
== Using SIP RTP CoS mark 5
-- Executing [222222@incoming:1] Gosub("SIP/trunk-zadarma-000001bf", "recording,~~s~~,1(79602222222,222222)") in new stack
-- Executing [~~s~~@recording:1] MSet("SIP/trunk-zadarma-000001bf", "LOCAL(calling)=79602222222") in new stack
-- Executing [~~s~~@recording:2] MSet("SIP/trunk-zadarma-000001bf", "LOCAL(called)=222222") in new stack
-- Executing [~~s~~@recording:3] GotoIf("SIP/trunk-zadarma-000001bf", "1?4:18") in new stack
-- Goto (recording,~~s~~,4)
-- Executing [~~s~~@recording:4] Set("SIP/trunk-zadarma-000001bf", "fname=1562746898.669_10.07.2019_11-21-from.79602222222-to.222222") in new stack

-- Executing [~~s~~@recording:5] Set("SIP/trunk-zadarma-000001bf", "datedir=2019/07/10") in new stack

-- Executing [~~s~~@recording:6] System("SIP/trunk-zadarma-000001bf", "mkdir -p /var/www/bitrix_portal/callme/records/mp3/2019/07/10") in new stack

-- Executing [~~s~~@recording:7] System("SIP/trunk-zadarma-000001bf", "mkdir -p /var/www/bitrix_portal/callme/records/wav/2019/07/10") in new stack

-- Executing [~~s~~@recording:8] Set("SIP/trunk-zadarma-000001bf", "monopt=nice -n 19 /usr/bin/lame -b 32  --silent "/var/www/bitrix_portal/callme/records/wav/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.wav"  "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3" && rm -f "/var/www/bitrix_portal/callme/records/wav/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.wav" && chmod o+rwx "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3"") in new stack

-- Executing [~~s~~@recording:9] Set("SIP/trunk-zadarma-000001bf", "FullFname=https://callme.example.com/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3") in new stack

-- Executing [~~s~~@recording:10] Set("SIP/trunk-zadarma-000001bf", "CDR(filename)=1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3") in new stack

-- Executing [~~s~~@recording:11] Set("SIP/trunk-zadarma-000001bf", "CDR(recordingfile)=1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.wav") in new stack

-- Executing [~~s~~@recording:12] Set("SIP/trunk-zadarma-000001bf", "CDR(realdst)=222222") in new stack

-- Executing [~~s~~@recording:13] MixMonitor("SIP/trunk-zadarma-000001bf", "/var/www/bitrix_portal/callme/records/wav/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.wav,b,nice -n 19 /usr/bin/lame -b 32  --silent "/var/www/bitrix_portal/callme/records/wav/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.wav"  "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3" && rm -f "/var/www/bitrix_portal/callme/records/wav/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.wav" && chmod o+rwx "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3"") in new stack
== Begin MixMonitor Recording SIP/trunk-zadarma-000001bf

-- Executing [~~s~~@recording:14] GotoIf("SIP/trunk-zadarma-000001bf", "1?15:17") in new stack
-- Goto (recording,~~s~~,15)
-- Executing [~~s~~@recording:15] StopMixMonitor("SIP/trunk-zadarma-000001bf", "") in new stack
== MixMonitor close filestream (mixed)

-- Executing [~~s~~@recording:16] System("SIP/trunk-zadarma-000001bf", "rm -f "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3"") in new stack

-- Executing [~~s~~@recording:17] NoOp("SIP/trunk-zadarma-000001bf", "Finish if_if_recording_284_285") in new stack
-- Executing [~~s~~@recording:18] NoOp("SIP/trunk-zadarma-000001bf", "Finish if_recording_284") in new stack
-- Executing [~~s~~@recording:19] Return("SIP/trunk-zadarma-000001bf", "") in new stack
-- Executing [222222@incoming:2] ExecIf("SIP/trunk-zadarma-000001bf", "?Set(CALLERID(name)=):NoOp()") in new stack
-- Executing [222222@incoming:3] Dial("SIP/trunk-zadarma-000001bf", "SIP/999,10,t") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/999
== Manager 'callme' logged on from 127.0.0.1
== Manager 'callme' logged off from 127.0.0.1
-- SIP/999-000001c0 is ringing
-- Nobody picked up in 10000 ms
-- Executing [222222@incoming:4] Set("SIP/trunk-zadarma-000001bf", "CallMeDISPOSITION=NO ANSWER") in new stack
-- Executing [222222@incoming:5] Set("SIP/trunk-zadarma-000001bf", "CallMeDURATION=0") in new stack
-- Executing [222222@incoming:6] Hangup("SIP/trunk-zadarma-000001bf", "") in new stack
== Spawn extension (incoming, 222222, 6) exited non-zero on 'SIP/trunk-zadarma-000001bf'



-- Executing [h@incoming:1] Set("SIP/trunk-zadarma-000001bf", "CDR_PROP(disable)=true") in new stack
-- Executing [h@incoming:2] Set("SIP/trunk-zadarma-000001bf", "CallMeDURATION=0") in new stack
-- Executing [h@incoming:3] ExecIf("SIP/trunk-zadarma-000001bf", "0?Set(CallMeDISPOSITION=NO ANSWER):NoOP(=== CallMeDISPOSITION already was set ===)") in new stack

-- Executing [h@incoming:4] ExecIf("SIP/trunk-zadarma-000001bf", "1?StopMixMonitor():Log(NOTICE,Duration > 0)") in new stack

-- Executing [h@incoming:5] System("SIP/trunk-zadarma-000001bf", "rm -f "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3"") in new stack
-- Executing [h@incoming:6] GotoIf("SIP/trunk-zadarma-000001bf", "1?7:9") in new stack
-- Goto (incoming,h,7)
-- Executing [h@incoming:7] StopMixMonitor("SIP/trunk-zadarma-000001bf", "") in new stack

-- Executing [h@incoming:8] System("SIP/trunk-zadarma-000001bf", "rm -f "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3"") in new stack
-- Executing [h@incoming:9] NoOp("SIP/trunk-zadarma-000001bf", "Finish if_incoming_286") in new stack

-- Executing [h@incoming:10] System("SIP/trunk-zadarma-000001bf", "curl -s https://callme.example.com/CallMeOut.php --data action=sendcall2b24 --data call_id= --data-urlencode FullFname=https://callme.example.com/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3 --data CallIntNum= --data CallDuration=0 --data-urlencode CallDisposition=NO ANSWER") in new stack



== Executing [nice -n 19 /usr/bin/lame -b 32  --silent "/var/www/bitrix_portal/callme/records/wav/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.wav"  "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3" && rm -f "/var/www/bitrix_portal/callme/records/wav/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.wav" && chmod o+rwx "/var/www/bitrix_portal/callme/records/mp3/2019/07/10/1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3"]

== End MixMonitor Recording SIP/trunk-zadarma-000001bf



созданная пустая запись

Код: выделить все
-rw-r--rwx 1 asterisk asterisk     864 Jul 10 11:21 1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

Re: Астериск удаление пустой аудиозаписи

Сообщение zzuz » 10 июл 2019, 14:38

Напишите отдельный скрипт для анализа и конвертации и дальнейшего удаления пустой записи, если это необходимо, и засуньте его в поствыполнение ${monopt} вместо той каши , что Вы туда вписали.
То есть выполнили MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt}); , где monopt="script.sh ${fname}" , а вот в script.sh уже и lame и rm и прочие процедуры.
Линия24 - Системы Массового Телефонного Обслуживания
Аватар пользователя
zzuz
 
Сообщений: 1658
Зарегистрирован: 21 сен 2010, 13:33

Re: Астериск удаление пустой аудиозаписи

Сообщение Repz » 10 июл 2019, 14:45

создать файло /tmp/123.txt owner asterisk
System(rm -f "/tmp/123.txt");
если все удалится, отключать конвертацию lame и пробовать грохать wav.
testvtigercrm123 писал(а):-rw-r--rwx 1 asterisk asterisk     864 Jul 10 11:21 1562746898.669_10.07.2019_11-21-from.79602222222-to.222222.mp3

это не пустой файл, пустой это 44 байта -rw-r--r-- 1 root root 44 Jul 2 14:32 in-74952347404-1001-20190702-143208-1562067128.168974.wav
Repz
 
Сообщений: 169
Зарегистрирован: 04 мар 2015, 12:35

Re: Астериск удаление пустой аудиозаписи

Сообщение testvtigercrm123 » 10 июл 2019, 14:49

Хорошо, логичное решение. Только это не моя каша=)
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

Re: Астериск удаление пустой аудиозаписи

Сообщение testvtigercrm123 » 16 июл 2019, 13:03

Напишите отдельный скрипт для анализа и конвертации и дальнейшего удаления пустой записи

я вот не пойму как MixMonitor действует, по идее должен после окончания записи выполнять действие.

сделал так
кусок extensions.ael :
Код: выделить все
macro recording(calling,called) {
    if ("${RECORDING}" = "1"){
                Set(fname=${UNIQUEID}_${STRFTIME(${EPOCH},,%d.%m.%Y_%H-%M)}-from.${calling}-to.${called});
                Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)});
                System(mkdir -p ${MP3}/${datedir});
                System(mkdir -p ${WAV}/${datedir});
                Set(miniopt=${SHELL(/etc/asterisk/script/recording.sh ${datedir} ${fname})});
                Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3);
                Set(CDR(filename)=${fname}.mp3);
                Set(CDR(recordingfile)=${fname}.wav);
                Set(CDR(realdst)=${called});
                MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${miniopt});
        };
   return;
};


дебаг скрипт
Код: выделить все
wav="/var/www/bitrix_portal/callme/records/wav"
mp3="/var/www/bitrix_portal/callme/records/mp3"
datedr="$1"
filename="$2"
fullpath_wav="${wav}/${datedr}/${filename}"
fullpath_mp3="${mp3}/${datedr}/${filename}"
convert_command=$(/usr/bin/nice -n 19 /usr/bin/lame -b 32 --silent ${fullpath_wav}.wav ${fullpath_mp3}.mp3)
check_size=$(du -b ${fullpath_mp3}.mp3)

echo "$(date)" > /tmp/asterisk-del
echo "$fullpath_wav" >> /tmp/asterisk-del
echo "$fullpath_mp3" >> /tmp/asterisk-del
echo "${convert_command}"
echo "$check_size" >> /tmp/asterisk-del
exit 0


так вот, если я получается заменю переменную filename на уже созданную запись, т.е.
Код: выделить все
filename="1563265301.107_16.07.2019_11-21-from.79602222222-to.222222"

то он нормально делает

/tmp/asterisk-del
Код: выделить все
Tue Jul 16 11:33:38 MSK 2019
/var/www/bitrix_portal/callme/records/wav/2019/07/16/1563265301.107_16.07.2019_11-21-from.79602222222-to.222222
/var/www/bitrix_portal/callme/records/mp3/2019/07/16/1563265301.107_16.07.2019_11-21-from.79602222222-to.222222
864     /var/www/bitrix_portal/callme/records/mp3/2019/07/16/1563265301.107_16.07.2019_11-21-from.79602222222-to.222222.mp3


а вот если оставлю в таком виде, в каком он есть, то он не делает конвертацию, в чем загвоздка?

Код: выделить все
Tue Jul 16 11:34:53 MSK 2019
/var/www/bitrix_portal/callme/records/wav/2019/07/16/1563266093.113_16.07.2019_11-34-from.79602222222-to.222222
/var/www/bitrix_portal/callme/records/mp3/2019/07/16/1563266093.113_16.07.2019_11-34-from.79602222222-to.222222
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

Re: Астериск удаление пустой аудиозаписи

Сообщение zzuz » 16 июл 2019, 14:33

Что по вашему должна делать процедура
Код: выделить все
Set(miniopt=${SHELL(/etc/asterisk/script/recording.sh ${datedir} ${fname})});
??
Линия24 - Системы Массового Телефонного Обслуживания
Аватар пользователя
zzuz
 
Сообщений: 1658
Зарегистрирован: 21 сен 2010, 13:33

Re: Астериск удаление пустой аудиозаписи

Сообщение testvtigercrm123 » 16 июл 2019, 15:15

Что по вашему должна делать процедура

ну я понимаю что она должна возвращать значение, но иным путем мне не удалось передать аргументы скрипту, только через ${SHELL} т.е.
Код: выделить все
Set(miniopt=System(/etc/asterisk/script/recording.sh ${datedir} ${fname}));

или
Код: выделить все
Set(miniopt=/etc/asterisk/script/recording.sh ${datedir} ${fname});

не передает скрипту аргументы $1 $2, как посоветуете тогда сделать?

хм, хотя сейчас проверил вроде стал передовать, если что дополню
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

Re: Астериск удаление пустой аудиозаписи

Сообщение testvtigercrm123 » 16 июл 2019, 15:50

Код: выделить все
Set(miniopt=/etc/asterisk/script/recording.sh ${datedir} ${fname});


рабочий вариант, готов поклясться, что вчера он аргументы не передавал, простите за тупой вопрос :)
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

Re: Астериск удаление пустой аудиозаписи

Сообщение zzuz » 16 июл 2019, 17:53

Вы проигнорировали явное указание
То есть выполнили MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt}); , где monopt="script.sh ${fname}" , а вот в script.sh уже и lame и rm и прочие процедуры.
.
Дальнейший диалплан рисуется по той же схеме , что и в первоначальном варианте ,видимо утверждение
Только это не моя каша=)
не является достоверным.
Линия24 - Системы Массового Телефонного Обслуживания
Аватар пользователя
zzuz
 
Сообщений: 1658
Зарегистрирован: 21 сен 2010, 13:33

Re: Астериск удаление пустой аудиозаписи

Сообщение testvtigercrm123 » 16 июл 2019, 18:01

является, вот человек который приводил примеры)
https://habr.com/ru/post/349316/
testvtigercrm123
 
Сообщений: 34
Зарегистрирован: 13 июн 2019, 15:18

След.

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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 20

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