Приветствую. Есть такая задачка. Необходимо сделать отправку записанного разговора на мыло. Т.е. человек принимает звонок (все пишется), в процессе разговора понимает, что хочет его получить на мыло и жмет какую-нибудь кнопочку. После окончания разговора приходит мыло с файликом. Пытаюсь это сделать через featuresapplicationmapcustom.conf конструкцией вида
sendrecord => *3,self/callee,Macro,sendrec
Но завис на самом главном - непосредственно реализации макроса :) Чую, что должно быть что-то вроде
exten => s,n,System(uuencode ${MIXMON_DIR}${CALLFILENAME}.${MIXMON_FORMAT} ${CALLFILENAME}.${MIXMON_FORMAT} | sendmail email@domain)
Но как и куда это встроить придумать не могу. Система эластикс, сильно лезть руками и портить самообновляемость не хочется.
у меня работает так: в features.conf rec => *3,self,Macro,apprecord
[macro-apprecord]
exten => s,1,GotoIf($["${XAD}" = "0" | "${XAD}" = ""]?startrec:stoprec)
exten => s,n(startrec),Playback(beep)
exten => s,n,Set(XAD=1)
exten => s,n,Set(date=${STRFTIME(${EPOCH},,%Y%m%d%H%M)})
exten => s,n,Set(FILENAME=/var/spool/asterisk/monitor/${date}-${FAXExten}.wav;)
exten => s,n,MixMonitor(${FILENAME},b,/var/lib/asterisk/agi-bin/sendmonitor.sh ${FILENAME} ПОЧТА@КУДАНАДО);
exten => s,n,MacroExit
exten => s,n(stoprec),StopMonitor
exten => s,n,Set(XAD=0)
exten => s,n,Playback(beep)
exten => s,n,MacroExit
sendmonitor.sh:
fname=dirname $1
/basename $1 .wav
.mp3;
nice -n 19 lame -b 16 -m m -q 9-resample $1 $fname ;
subj=basename $1
sendEmail -f ПОЧТА@ОТКОГО -t $2 -u $subj -a $fname
if [ -f "$fname" ]
then
rm $1;
fi
вот так не?
sendrecord => *3,self/callee,System,/etc/asterisk/sendtoemail.sh ^{CDR(uniqueid)}
а в скрипте по uniqueid ищешь запись и посылаешь.
Чтобы в конце разговора получить его на почту, он должен либо с самого начала писаться, либо с середины (с момента нажатия). Рассмотрим оба варианта.
Все разговоры пишутся. После разговора проверяется флаг, отвечающий за отправку разговора на почту. При помощи featuremap можно выставлять этот флаг во время разговора. В конце разговора если не включена отправка на почту опционально удалять запись.
Разговор пишется с момента посылки DTMF. Я не знаю, как активировать запись на существующем канале, поэтому буду изобретать, Например можно создать динамическую конференцию с записью, а потом тихо через channelredirect туда перенаправлять существующий разговор. Либо, вызывать AMI команду, активирующую запись на канале. Мне кажется, это более правильно.
У первого способа по сравнению со вторым есть плюс - весь разговор. Бывает такое, записать хочешь, пишешь, а поздно, главные слова уже были сказаны. Но есть и минус - хочешь записать кусок разговора, а пишешь весь. Значит, делать надо оба способа :-)
Все разговоры пишутся по умолчанию. Получается человек говорит, а потом решает что эта запись нужна ему и на мыло (можно конечно его потом ручками в общем потоке выискивать, но это то). То, что в процессе надо выставить флаг, а потом его обработать я придумал :) Возникла загвоздка как бы без сильного руковмешательства это интегрировать в стандартный эластикс.
lash (Jul 20 '12)editБез рук не получится. Если не хочется лезть самому руками, найди, кто это сделает за деньги.
Задан: Jul 19 '12
Просмотрен: 2,210 раз
Обновлен: Jul 23 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.