[asterisk-users] More efficient dial plan for a list of selective inbound numbers

Leif Madsen leif.madsen at asteriskdocs.org
Thu Apr 22 21:40:26 CDT 2010


bruce bruce wrote:
> I have a list of CLIDs prefixes that I want to use in a context.
> 
> Basically, I want to do this but the list of prefix numbers is much 
> longer. List of prefixes (556,557,557,989.....)
> 
> [custom-inbound]
> exten => _556,1,answer
> exten => _556,n,playback(beep)
> 
> exten => _557,1,answer
> exten => _557,n,playback(beep)
> 
> exten => _558,1,answer
> exten => _558,n,playback(beep)
> 
> exten => _989,1,answer
> exten => _989,n,playback(beep)
> 
> If there are like 100s of different prefixes, this list gets really big. 
> Not desired. How can I have a more efficient dialplan?

You could use a pattern match and then do a lookup in the database to see if the 
prefix exists:

[custom-inbound]
exten => _XXX,1,Verbose(2,Lookup prefix ${EXTEN})
exten => _XXX,n,Set(PREFIX=${EXTEN})
exten => _XXX,n,Set(PREFIX_EXISTS=${ODBC_GET_PREFIX(${PREFIX})})
exten => _XXX,n,GotoIf($["${PREFIX_EXISTS}" = "1"]?prefixAllowed,1:prefixDisallowed)

exten => prefixAllowed,1,Verbose(2,Prefix ${PREFIX} Allowed)
exten => prefixAllowed,n,Playback(beep)

exten => prefixDisallowed,1,Verbose(2,Prefix ${PREFIX} Disallowed)
exten => prefixDisallowed,n,Congestion()


func_odbc.conf

[GET_PREFIX]
dsn=<something setup in res_odbc.conf)
readsql=SELECT 1 FROM prefix_table WHERE prefix = '${ARG1}'


Or something like that (untested).

Leif.



More information about the asterisk-users mailing list