====== Asterisk ====== ===== ENUM Macro ===== [macro-enum] exten => s,1,Set(CALLERID(number)=${PSTN-NUMBER}) exten => s,n,Set(counter=0) exten => s,n,Set(dstcount=${ENUMLOOKUP(+${ARG1},ALL,c)}) exten => s,n,GotoIf($["${counter}"<"${dstcount}"]?start:end) exten => s,n(start),Set(counter=$[${counter}+1]) exten => s,n,GotoIf($[${ENUMLOOKUP(+${ARG1},sip,${counter})}]?sip-dial:iax) exten => s,n(sip-dial),Dial(SIP/${ENUMLOOKUP(+${ARG1},sip,${counter})}) exten => s,n(iax),GotoIf($[${ENUMLOOKUP(+${ARG1},iax,${counter})}]?iax-dial:next) exten => s,n(iax-dial),Dial(IAX2/${ENUMLOOKUP(+${ARG1},iax,${counter})}) exten => s,n(next),GotoIf($["${counter}"<"${dstcount}"]?start:end) exten => s,n(end),NoOp("No valid ${ARG1} entries in e164.arpa") ===== Ĺ ablona konfigurace ===== * extension.conf [global] static=yes writeprotect=yes ; ** Variables ** ; =============== default_in_number => 00420XXXXXXXXX pstn_gateway => SIP/fayn default_phone => 200 ; ** Macros ** ;============= [macro-enum] exten => s,1,Set(CALLERID(number)=${default_in_number}) exten => s,n,Set(CALLERID(name)=${default_in_number}) exten => s,n,Set(counter=0) exten => s,n,Set(dstcount=${ENUMLOOKUP(+${ARG1},ALL,c)}) exten => s,n,GotoIf($["${counter}"<"${dstcount}"]?start:end) exten => s,n(start),Set(counter=$[${counter}+1]) exten => s,n,GotoIf($[${ENUMLOOKUP(+${ARG1},sip,${counter})}]?sip-dial:iax) exten => s,n(sip-dial),Dial(SIP/${ENUMLOOKUP(+${ARG1},sip,${counter})}) exten => s,n(iax),GotoIf($[${ENUMLOOKUP(+${ARG1},iax,${counter})}]?iax-dial:next) exten => s,n(iax-dial),Dial(IAX2/${ENUMLOOKUP(+${ARG1},iax,${counter})}) exten => s,n(next),GotoIf($["${counter}"<"${dstcount}"]?start:end) exten => s,n(end),NoOp("No valid ${ARG1} entries in e164.arpa") ; ** Loacal contexts ** ;====================== [local] include => users include => services include => tests include => pstn-out include => default-out ; ** Users' contexts ** ; ===================== [users] ; exceptions ; operator exten => 111,1,Goto(users,${default_phone},1) ; standard users exten => _2XX,1,Dial(SIP/${EXTEN}) ; ** Trunks ** ; ============ ; Least Cost Routing [default-out] ; Emergency exten => _112,1,Dial(${pstn_gateway}/${EXTEN:1}) exten => _150,1,Dial(${pstn_gateway}/${EXTEN:1}) exten => _155,1,Dial(${pstn_gateway}/${EXTEN:1}) exten => _156,1,Dial(${pstn_gateway}/${EXTEN:1}) exten => _158,1,Dial((${pstn_gateway}/${EXTEN:1}) ; International calls based on ENUM exten => _000N.,1,Macro(enum,${EXTEN:3}) exten => _000N.,n,Dial(${pstn_gateway}//${EXTEN:1}) ; National calls based on ENUM exten => _0NXXXXXXXX,1,Macro(enum,420${EXTEN:1}) exten => _0NXXXXXXXX,n,Dial(${pstn_gateway}/${EXTEN:1}) [pstn-in] exten => _XXXXXXXXX,1,Set(CALLERID(number)=0${CALLERID(number)}) exten => _XXXXXXXXX,1,Goto(users,${default_phone},1) [pstn-out] exten => _90.,1,Dial(${pstn_gateway}/${EXTEN:2}) ; ** Services and tests ** [services] ; Meetme conference system exten => _190,1,Answer() exten => _190,n,Wait(2) exten => _190,n,Meetme(,DpMx) ; Unix time exten => _191,1,Answer exten => _191,n,Wait(2) exten => _191,n,SayUnixTime(,,IMp) exten => _191,n,Hangup [tests] ; Heloworld exten => _180,1,Answer() exten => _180,n,Wait(2) exten => _180,n,Playback(hello-world) exten => _180,n,Hangup() ; Echo test exten => _181,1,Answer() exten => _181,n,Wait(2) exten => _181,n,Playback(demo-echotest) exten => _181,n,Echo() exten => _181,n,Playback(demo-echodone) exten => _181,n,Hangup() ; Music on hold exten => _182,1,Answer exten => _182,n,Wait(2) exten => _182,n,SetMusicOnHold(default) exten => _182,n,WaitMusicOnHold(300) exten => _182,n,Hangup * sip.conf [general] port=5060 bindaddr=192.168.1.1 canreinvite=no allowguest=no srvlookup=no context=reject jbenable=yes register => :@sip.provider.org/sip-provider ; ### SIP Trunks ### [sip-provider] type=friend username= secret= host=sip.provider.org dtmfmode=rfc2833 nat=yes context=pstn-in insecure=invite,port disallow=all allow=alaw ; ### SIP Users ### [200] type=friend host=dynamic secret=****** dtmfmode=rfc2833 nat=no context=local disallow=all allow=alaw