Asterisk Dialplan

Определение глобальных переменных

; Используем в записи звонков
[globals]
PATH_RECORDS=/var/records

Процедуры для записи звонков

; определяем переменные для имени файлов и 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 шлюз к Астериску.

; Открытие двери 
exten => _999,1,Noop()
 same => n,Dial(SIP/1504,5,D(#*9))

Входящие 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

Обрезать 13-значный номер

; Приведение номера звонящего к 10-значному значению
; Но только для префикса +38
; +380501113344 -> 0501113344
[sub-callernum13to10]
exten => _X.,1,ExecIf($[ $[${LEN(CALLERID(num))}=13] & $["${CALLERID(num):0:3}"="+38"] ]?Set(CALLERID(num)=${CALLERID(num):3}) )
 same => n,Return