Asterisk Dialplan
Определение глобальных переменных
Процедуры для записи звонков
; определяем переменные для имени файлов и CDR
[sub-definevar]
exten => s,1,Noop()
same => n,ExecIf($[!${LEN(${CALLTYPE})}]?Set(CALLTYPE=unknown))
same => n,Set(CALLERNUM=${CALLERID(num)})
same => n,Set(RECFILE=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLTYPE}-${CALLERNUM}-${CALLTO})
; Формат хранения YYYY / MM / DD
same => n,Set(FULLRECFILE=${PATH_RECORDS}/${STRFTIME(${EPOCH},,%G/%m/%d)}/${RECFILE})
; Тут может быть разная переменная
same => n,Set(CDR(recordfilename)=${FULLRECFILE}.mp3)
same => n,Return
[sub-mixmonitor]
; ${ARG1} - куда звоним, ${EXTEN}
exten => s,1,Noop()
same => n,Set(CALLTO=${ARG1})
same => n,Gosub(sub-definevar,s,1)
same => n,MixMonitor(${FULLRECFILE}.wav,W(1),lame -b 16 ${FULLRECFILE}.wav ${FULLRECFILE}.mp3 && rm ${FULLRECFILE}.wav && chmod -R 644 ${FULLRECFILE}.mp3)
same => n,Return
; Вызов...
exten => _ХXX.,1,Noop()
same => n,Set(CALLTYPE=out)
same => n,Gosub(sub-mixmonitor,s,1,(${EXTEN}) )
same => n,Dial(SIP/sipprovider/${EXTEN},180,Ttj)
Послать DTMF команду Открытие двери с аналогового телефона выполнялось набором #*9. 1504 - номер аналоговой АТС подключенный через FXO шлюз к Астериску.
Входящие N на 1 номер, разбираем SIP_HEADER(TO)
; Оператор передает 1 Extension, при звонках на 3 номера.
; по их инструкции это выглядит так:
; В sip : context=income-datagroup-wrapper
; Оригинал входящего SIP_HEADER(TO) = ''
[income-datagroup-wrapper]
exten => _X.,1,Set(NUM=${SIP_HEADER(TO):5})
same => n,Set(NUM=${CUT(NUM,@,1)})
same => n,Goto(income-datagroup,${NUM},1)
[income-datagroup]
exten => 0441112233,1,Noop()
same => n,Gosub(sub-incoming-office,${EXTEN},1)
exten => 0441113344,1,Noop()
same => n,Gosub(sub-incoming-callcenter,${EXTEN},1)
exten => 0441114455,1,Noop()
same => n,Gosub(sub-incoming-servicecenter,${EXTEN},1)
У этого же оператора не устанавливался CALLERID(num) пока в параметрах sip-а на удалил значение fromuser