Send Call Recording to email
Базовый пример
[macro-mixmonitor] exten => s,1,Gosub(sub-record-check-custom1,s,1(out,${EXTEN},)) exten => s,n,Dial(${ARG1},,e) exten => h,1,System(mail -s "record-${CALLFILENAME}" -a /var/spool/asterisk/monitor/${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT} info@asterisk-pbx.ru < /home/txt) [from-ext1] exten => _1XX,1,Macro(mixmonitor,PJSIP/${EXTEN}) exten => _XXXXXXX,1,Macro(mixmonitor,SIP/siptrunk1/${EXTEN})
<fs large>Дополнительный пример</fs>
[from-exten-sip] exten => _XXXXXXX,1,Macro(mixmonitor-sip,${EXTEN},${CALLERID(all)}) [macro-mixmonitor-sip] exten => s,1,Gosub(sub-record-check-custom1,s,1(out,${EXTEN},)) exten => s,n,Set(_TITLE=${STRFTIME(${EPOCH},,%d.%m.%Y %H:%M:%S)}, EXT=${CALLERID(num)}, SRC=${CALLERID(name)}, DST=${ARG1}) exten => s,n,Set(_SPT=SIP/siptrunk) exten => s,n,Dial(${SPT}/${ARG1},,e) exten => s,n,NoOp( Dial Status: ${DIALSTATUS}) exten => s,n,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Hangup exten => s-CONGESTION,1,Congestion exten => s-CANCEL,1,Hangup exten => s-BUSY,1,Busy exten => s-CHANUNAVAIL,1,Hangup exten => h,1,System(mail -s "Outgoing Call Record ${TITLE}" -a /var/spool/asterisk/monitor/${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT} info@asterisk-pbx.ru < /home/info)
<fs large>Анонимные входящие вызовы</fs>
[from-guest] exten => _1XX,1,Macro(external,${EXTEN}) exten => _X.,1,Goto(app-blackhole,s,1) [macro-external] exten => s,1,Gosub(sub-record-check-custom1,s,1(out,${EXTEN},)) exten => s,n,Set(_DST=DST=${ARG1}) exten => s,n,Set(_TITLE=${STRFTIME(${EPOCH},,%d.%m.%Y %H:%M:%S)}, SRC=${CUT(CUT(SIP_HEADER(Via), ,2),:,1)}) exten = s,n,Set(_UA=${SIP_HEADER(User-Agent)}) exten = s,n,NoOp(${CUT(CUT(SIP_HEADER(FROM), ,2),:,1)}) exten => s,n,Dial(PJSIP/${ARG1},,e) exten => s,n,NoOp( Dial Status: ${DIALSTATUS}) exten => s,n,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Hangup exten => s-CONGESTION,1,Congestion exten => s-CANCEL,1,Hangup exten => s-BUSY,1,Busy exten => s-CHANUNAVAIL,1,Hangup exten => h,1,System(mail -s "Incoming Call Record ${TITLE}, ${UA}, ${DST}" -a /var/spool/asterisk/monitor/${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT} info@asterisk-pbx.ru < /home/txt)
<fs large>FreePBX совместимая запись разговоров.</fs>
[sub-record-check-custom1] exten => s,1,Set(REC_POLICY_MODE_SAVE=${REC_POLICY_MODE}) exten => s,n,GotoIf($["${BLINDTRANSFER}" = ""]?check) exten => s,n,ResetCDR() exten => s,n,GotoIf($["${REC_STATUS}" != "RECORDING"]?check) exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes) exten => s,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},a,${MIXMON_POST}) exten => s,n(check),Set(__MON_FMT=${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})}) exten => s,n,GotoIf($["${REC_STATUS}"!="RECORDING"]?next) exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT}) exten => s,n,Return() exten => s,n(next),ExecIf($[!${LEN(${ARG1})}]?Return()) exten => s,n,ExecIf($["${REC_POLICY_MODE}"="" & "${ARG3}"!=""]?Set(__REC_POLICY_MODE=${ARG3})) exten => s,n,GotoIf($["${REC_STATUS}"!=""]?${ARG1},1) exten => s,n,Set(__REC_STATUS=INITIALIZED) exten => s,n,Set(NOW=${EPOCH}) exten => s,n,Set(__DAY=${STRFTIME(${NOW},,%d)}) exten => s,n,Set(__MONTH=${STRFTIME(${NOW},,%m)}) exten => s,n,Set(__YEAR=${STRFTIME(${NOW},,%Y)}) exten => s,n,Set(__TIMESTR=${YEAR}${MONTH}${DAY}-${STRFTIME(${NOW},,%H%M%S)}) ;exten => s,n,Set(__FROMEXTEN=${IF($[${LEN(${AMPUSER})}]?${AMPUSER}:${IF($[${LEN(${REALCALLERIDNUM})}]?${REALCALLERIDNUM}:unknown)})}) exten => s,n,Set(__FROMEXTEN=${CALLERID(name)}) exten => s,n,Set(__CALLFILENAME=${ARG1}-${ARG2}-${FROMEXTEN}-${TIMESTR}-${UNIQUEID}) exten => s,n,Goto(${ARG1},1) ;exten => out,1,ExecIf($["${REC_POLICY_MODE}"=""]?Set(__REC_POLICY_MODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/external)})) ;статус записи вкл exten => out,1,ExecIf($["${REC_POLICY_MODE}"=""]?Set(__REC_POLICY_MODE=always)) exten => out,n,GosubIf($["${REC_POLICY_MODE}"="always"]?record,1(exten,${ARG2},${FROMEXTEN})) exten => out,n,Return() exten => record,1,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes) exten => record,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST}) exten => record,n,Set(__REC_STATUS=RECORDING) exten => record,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT}) exten => record,n,Return()
<spoiler>
[from-exten-sip2] exten => _XXXXXXX,1,Macro(mixmonitor-sip2,${EXTEN}) [macro-mixmonitor-sip2] exten => s,1,Gosub(sub-record-check-custom1,s,1(out,${EXTEN},)) exten => s,n,Set(_DST=DST=${ARG1}) exten => s,n,Set(_TRK=SIP/siptrunk) exten => s,n,ChanIsAvail(${TRK}1&${TRK}2&${TRK}3&${TRK}4) exten => s,n,Set(_TITLE=${STRFTIME(${EPOCH},,%d.%m.%Y %H:%M:%S)}, EXT=${CALLERID(num)}, SRC=${CUT(AVAILCHAN,,1)} ) exten => s,n,Dial(${CUT(AVAILCHAN,,1)}/${ARG1},,e) exten => s,n,NoOp( Dial Status: ${DIALSTATUS}) exten => s,n,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Hangup exten => s-CONGESTION,1,Congestion exten => s-CANCEL,1,Hangup exten => s-BUSY,1,Busy exten => s-CHANUNAVAIL,1,Hangup exten => h,1,System(mail -s "Outgoing Call Record ${TITLE}, ${DST}" -a /var/spool/asterisk/monitor/${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT} info@asterisk-pbx.ru < /home/info)
[from-exten-pjsip] exten => _XXXXXXX,1,Macro(mixmonitor-pjsip,${EXTEN},${CALLERID(all)}) [macro-mixmonitor-pjsip] exten => s,1,Gosub(sub-record-check-custom1,s,1(out,${EXTEN},)) exten => s,2,Set(_TITLE=${STRFTIME(${EPOCH},,%d.%m.%Y %H:%M:%S)}, EXT=${CALLERID(num)}, SRC=${CALLERID(name)}, DST=${ARG1}) exten => s,3,Dial(PJSIP/siptrunk${RAND(1,5)}/sip:${ARG1}@siptrunk.tld,,e) exten => s,4,NoOp( Dial Status: ${DIALSTATUS}) exten => s,5,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Hangup exten => s-CONGESTION,1,Congestion exten => s-CANCEL,1,Hangup exten => s-BUSY,1,Busy exten => s-CHANUNAVAIL,1,Goto(s,3) exten => h,1,System(mail -s "Outgoing Call Record ${TITLE}" -a /var/spool/asterisk/monitor/${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT} info@asterisk.pbx.ru < /home/info)
</spoiler>
Asterisk Dialplan advanced (Диалплан расширенный)
~~socialite~~