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 => <id>:<pass>@sip.provider.org/sip-provider

; ### SIP Trunks ###

[sip-provider]
type=friend
username=<id>
secret=<pass>
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

 
telefonie/asterisk.txt · Poslední úprava: 2013/06/07 13:04 (upraveno mimo DokuWiki)     Nahoru