перевожу конфиги от AstPbx на версию 1.8 уперся в макрос и не до конца понимаю что он делает.
позиционируется как учебное пособие.... и нет комментариев в теле конфигов(
; Standard exten for users
[macro-stdexten];
exten => s,1,Set(__BLINDTRANSFER=${BLINDTRANSFER}) ; зачем запоминаем этот параметр
exten => s,n,Set(CF_TYPE=uncond) ;; зачем запоминаем этот параметр
exten => s,n,ExecIf($["${FROM_OUTSIDE}" != "1"]:Gosub(activate-user,${CALLERID(num)}),1) ; смотрим откуда пришли
; и вызываем макрос activate-user с парматрами, ${CALLERID(num)} - номер входящего...а для чего это сделали
; в нем проверили условие "cf_uncond_active - это для чего" деленное на экстеншэн "судя по всему от входящего номера"
;, и запустили макрос cf-status, только я его не увидел в конфиге, есть подозрение что он опрашивает sip клиента на предмет его статуса
exten => s,n,Gosub(check-meetme,${MACRO_EXTEN},1) ; в 1.8 в этих местах какой то затык и я не допонимаю его, а вобще здесь переход
; по метке check-meetme с параметром ${MACRO_EXTEN} и макрос check-meetme есть, не понятно.
exten => s,n,Gosub(check-cf,${MACRO_EXTEN},1)
exten => s,n,Gosub(check-dnd,${MACRO_EXTEN},1)
exten => s,n,Gosub(call-record,${MACRO_EXTEN},1)
exten => s,n,Gosub(check-simult,${MACRO_EXTEN},1)
exten => s,n,ExecIf($[ "${FROM_OUTSIDE}" != "1"]:Set(INDIAL_OPTS=${INDIAL_OPTS}${OUTDIAL_OPTS})); combine opts for internal calls
exten => s,n,ExecIf($[ "${FROM_OUTSIDE}" = "1"]:Playback(razgovor-mozhet-byt-zapisan))
exten => s,n,Set(DIAL_TIMEOUT=${DB(dial_timeout/${MACRO_EXTEN})})
exten => s,n,ExecIf($[ "${DIAL_TIMEOUT}" = "" ]:Set(DIAL_TIMEOUT=${INDIAL_TIMEOUT}))
exten => s,n,Dial(${ARG1}/${ARG2},${INDIAL_TIMEOUT},${INDIAL_OPTS})
exten => s,n,ExecIf($["${BLINDTRANSFER}" != ""]:Dial(${CUT(BLINDTRANSFER,-,1)},${INDIAL_TIMEOUT},${INDIAL_OPTS}))
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Set(CF_TYPE=onunavail)
exten => s-NOANSWER,2,Gosub(check-cf,${MACRO_EXTEN},1)
exten => s-NOANSWER,3,Voicemail(${ARG2},ju)
exten => s-NOANSWER,104,Answer
exten => s-NOANSWER,105,Wait(${AFTER_ANSWER_PAUSE})
exten => s-NOANSWER,106,Playback(abonent)
exten => s-NOANSWER,107,Playback(ne-otvechaet)
exten => s-NOANSWER,108,Hangup
exten => s-BUSY,1,Set(CF_TYPE=onbusy)
exten => s-BUSY,2,Gosub(check-cf,${MACRO_EXTEN},1)
exten => s-BUSY,3,Voicemail(${ARG2},bj)
exten => s-BUSY,104,Answer
exten => s-BUSY,105,Playtones(busy)
exten => s-BUSY,106,Wait(5)
exten => s-BUSY,107,Hangup
exten => s-CHANUNAVAIL,1,Set(CF_TYPE=onunavail)
exten => s-CHANUNAVAIL,n,Gosub(check-cf,${MACRO_EXTEN},1)
;exten => s-CHANUNAVAIL,n,Gosub(menu-user-unavail,s-${MACRO_EXTEN},1) - personal menu for user, disabled by default
exten => s-CHANUNAVAIL,n,Answer
exten => s-CHANUNAVAIL,n,Wait(${AFTER_ANSWER_PAUSE})
exten => s-CHANUNAVAIL,n(vm),Voicemail(${ARG2},ju)
exten => s-CHANUNAVAIL,n,Return
exten => s-CHANUNAVAIL,vm+101,Playback(abonent)
exten => s-CHANUNAVAIL,vm+102,Playback(ne-podkljuchen)
exten => s-CHANUNAVAIL,vm+103,Return
exten => _s-.,1,Goto(s-NOANSWER,1)
; Smart things we do for mindless users.
[activate-user]
exten => s,1,Return
exten => i,1,Return
exten => _[a-zA-Z].,1,Return
exten => _X.,1,ExecIf($["${DB(cf_uncond_active/${EXTEN})}" = "1"]:Macro(cf-status,${CALLERID(num)}),uncond,deactivate)
exten => _X.,n,Return
;зато есть макрос
[check-cf]
exten => _X.,1,Set(cf_number=${DB(cf_${CF_TYPE}_num/${EXTEN})})
exten => _X.,n,GotoIf($[ "${cf_number}" != ""]?cf-set)
exten => _X.,n,Return
exten => _X.,n(cf-set),GotoIf($[ "${DB(cf_${CF_TYPE}_active/${EXTEN})}" = "1"]?cf-active)
exten => _X.,n,Return
exten => _X.,n(cf-active),GotoIf($[ "${DB(cf_announce/${MACRO_EXTEN})}" = "1"]?announce:dial)
exten => _X.,n(announce),Answer
exten => _X.,n,Wait(${AFTER_ANSWER_PAUSE})
exten => _X.,n,Playback(pereadresacija-zvonka)
exten => _X.,n,Playback(vkljuchena)
exten => _X.,n,Playback(ozhidajte-soedinenija)
exten => _X.,n(dial),Goto(users,${cf_number},1)
; Check if my meetme room feature is active. EXTEN is user's number
[check-meetme]
exten => _X.,1,ExecIf($[ "${DB(meetme_active/${EXTEN})}" != "1" ]:Return)
exten => _X.,n,ExecIf($[ "${FROM_OUTSIDE}" = "1" ]:Return); We do not allow customers to get into personal conference
exten => _X.,n,ExecIf($[ "${EXTEN}" = "${CALLERID(num)}" ]:Set,mode=A)
exten => _X.,n,Set(pin=${DB(meetme_pin/${EXTEN})})
exten => _X.,n,GotoIf($[ "${pin}" != "" ]?pin-with:pin-less)
exten => _X.,n(pin-with),MeetMe(${EXTEN},DMPx${mode}w(600),${pin})
exten => _X.,n(pin-less),MeetMe(${EXTEN},dMx${mode}w(600))