Asterisk: How to control who call call outside office

Using asterisk how do i control what extensions call call outside and which cant
Who is Participating?
Are you using Asterisk directly or something like Trixbox?

There are two way to do it.
One way is to have two contents (as in the context= lines in the sip.conf file). Then in extensions.conf you have all internal calls defined within an [internal] context and external ones defined as [external] for example.
Then say for example the two contexts used by the phones are extallowed and extdenied you would have the following in the extensions.conf :-

include=> internal

include=> internal
include=> external

That way denied phones jump to the [extdenied] section of the configuration and from there only the internal calls section of the configuration is included so they can only make internal calls.
The 2nd way which might be a bit easier for you to understand if you are not familair with contexts is to use an internal database lookup. For example :-

You might previously have had :-

exten => _9.,1,Dial(ZAP/g1/$EXTEN:1},60,Tr)

You could change this to :-

exten => _9.,1,Set(DENYEXT=${DB(denyexternal/${CALLERIDNUM})})
exten => _9.,n,GotoIf($[ "${DENYEXT}" = "yes" ]?deny)
exten => _9.,n,Dial(ZAP/g1/$EXTEN:1},60,Tr)
exten => _9.,n,Hangup
exten => _9.,n(deny),Answer
exten => _9.,n,Wait(1)
exten => _9.,n,Playback(externaldenied)
exten => _9.,n,Wait(10)
exten => _9.,n,Hangup

With this alteration for every external call a lookup is performed on the internal database and if an entry exists and is set to 'yes' then that extension is denied and a message is played (you will need to record your own or use a suitable one that comes with the system).

To deny a phone which has the extension number 1234 you would enter the following line from the asterisk consode:-
database put denyext 1234 yes

The advantage with this method is that it is more universal as you dont have to muck around with contexts and you dont need to edit and reload the configuration to make a change. You could for example expand on the code to allow the phones which are denied external access to actually dial certain external numbers (emergency services for example).
Sorry the database command should have been :-
database put denyexternal 1234 yes
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.