How to divide internal and external incoming calls

Hello, dear colleagues!

We are using FreePBX with Asterisk 11.25.1 with no paid modules and support.
Here is the problem:
The routes of absolutely all calls are all the same, for ex., if i make a call from my internal phone number it goes pretty much the same route as if it is an external call form the city.

Is there any possible way to distinguish internal (obviousely - not so important to loose) calls and external calls which must be processed and not lost??

In short - i would like to “set a check into the checkbox” to “use simple call processing”, if you follow me…

Thank you.

First thing that comes to mind is to set distinctive ring, provided your phones support it, so you set one ringtone for external calls and another one for internal calls. Does that make sense for your situation?

Not quite, actually ))
The thing is that we are having hard times with the situation when not important internal call to a busy phone results in instant transfering to the secretary, which is not nessessary for INTERNAL calls ))
It seems that the station has to have some mechanismus )) to distinguish routes for internal and external calls to the same destination.
Eg. i call to my boss, but he is busy talking to some person, so my call must be dropped with busy signal to my line.
But if an external call comes to the same boss)) at the same time it must not be dropped but transfered to the secretary.
Its like the station has to know who is calling whom, if you follow me ))))
Thank you

In general, calls are not automatically transferred to another extension unless you have configured Find Me / Follow Me for the extensions. Could you please try to explain your current configuration?

Yeah, ok
every single call wich comes to the PBX goes as follow:
dialed number-> if not answered-> force follow me-> if not answered-> secretary group-> if not answered-> office magager-> terminated
dialed number-> if busy at any destination stated terminate with busy tone

what we want that if i dial 101 from 102 and there is no answer that dial must be terminated but not transfered.
if I dial 101 from, eg., my cellphone and there is no answer that dial must be transfered forth to the designated rout as I mentioned above.

May be my explanation is not quite clear, so i bag you pardon for that


p.s.: any internal num calls must have different routes from the ones come from outside…
internal num calls and outside num calls must difer))

I think I understand the concept.
If you are not willing to manually create/modify contexts, what you might want to do is disable all followme and transfers on each extension because those features apply at the extension level, no matter where the call is coming from. This way internal calls go from caller to callee, no transfers, no redirections.
For external calls, you can create ring groups or queues, depending on the way you want them to behave (I recommend to read ring group vs queue concepts) and set them as destination for the inbound routes. That way you have your “default” extension to extension call, but also you have the flexibility needed for external incoming calls. This is just a general overview, you will have to read a little and probably draw a diagram of the desired call flow in order to easily translate that into the specific inbound route configuration.
You can also go with Misc Destinations but that too might need more effort than queues/ring groups

Thank you, arielgrin ))
that might be it ))
I will try queues…


yeah, queues are good but thats not it ))

I can use the queue after IVR with some exten numbers, but if I call from outside and I know the exten number, I dial it while I am listening the IVR, the call behave itself like an internal call, and that is not exceptable.

I need something to teach the station to identify if its an external or an internal call, and if its an internal call - to behave one way or if its an external call to behave another way…

Please advise


Any advise, sugesstions??
i beleive someone has encountered the same task somewhere the other day…

You will have to use a custom context if you can’t find the way to do it with queues/ring groups.

One thing that comes to my mind is to use the incoming CallerID info to decide what to do with the call.

Ok, then the schema must be as follows:
On the no answer on incoming call we have to check if CID no more then 3 digits and in that case we have to terminate it.
But if the CID more then 3 digits we have to route it futher on…
It doesnt matter what we have in incoming route section (time conditions, IVR etc.)…
Most importaint is what to do with the call, if it finally comes to an exten number and its not answered!!
And here i stuck - I failed to find any possibility to appoint a CID lenth check condition anywhere in station menu…
How should I transfer and check the incoming CallerID info on the “no answer” stage of the route???
Please advise!!

You will have to do this manually by creating a custom context or adapting an existing one to your needs, but you will have to read and research for yourself about contexts and dial plans on asterisk. There is no way to do this through the FreePBX interface, at least not with the free package, not sure about commercial modules, but I might be wrong.

Thank you, arielgrin )) i hoped your answer wouldnt be as it was )))

I have figured that there is no way to use 2 “no answer” destinations, based upon CID lenth in the station GUI…
Poor me )))

But if I use CLI there would be no need for any GUIs )))

OK anyway… Is there any way to learn if we could buy such a commercial module for this FreePBX to solve our situation?))


ps: i am a little bit surprised, indeed, that i could consider myself the first person who got himself into such a situation )))

A few lines of custom dialplan and a Custom Destination will do it. Have your dialplan check for the length of ${CALLERID(number)}. If it is short, terminate the call. If it is long Return back to the Custom Destination and continue on the the Secretary.

Commercial modules can be seen here:

Probably quite easy to do it manually though, but you will have to get your hands a little dirty…

yeah, guys, thank you very much indeed ))
but as i mentioned before, if I start using CLI i wount be needing FreePBX gui )) and it was the strict request from my boss - to use GUI only )))

can i check for the length of ${CALLERID(number)} using the FreePBX GUI or do i have to use CLI and manual system files improving?)

thank you

You will be manually modifying conf files as long as you have to manipulate contexts and dial plans, no GUI for this. Special requirements will almost always need to be dealt with manually.

The terms here are important, because they mean specific things:

  • CLI is Command Line Interpreter. This can be a part of the GUI.
  • GUI is Graphical User Interface. This is the cartoon that we use to manage the system.
  • context is a program written to control the way calls are processed through the system.

They are (or can be considered) part of the same control interface that is FreePBX. You can edit the configuration files from the GUI, you can access the CLI from the GUI, you can access the CLI without using the GUI, and you can write contexts that control call flow without using the CLI ir the GUI.

Your boss telling you that you have to use the GUI has no meaning. You can access the CLI from the GUI. You can edit the configuration files from the GUI. You can access all of these things from the GUI, or not, depending on what you are trying to do.

well, thank you for your answers, but be sure i can understand everything you are telling me )

His demand was simple - use only gui in case i am leaving the company in order to easely find a “not expensive” replacement for my position)) well, like a grad student )) if you follow me )

but i guess i just have to break this and do it by CLI means anyway…

thank you again


FreePBX already has the ability to do this without the use of custom contexts.

The Inbound Routes module is where you decide on routes for external incoming calls. Any routing you set-up on the Inbound Route for a particular DID will apply only to external calls that dial that DID.
If you want a unique routing just for external calls and for some reason the inbound routes module is inadequate, you can use a Ring Group or Queue to set-up that routing instead.

Any routing you set-up at the extension level will apply both to internal and external calls. It sounds as if you should avoid using the follow-me/no answer options at the extension level since you don’t want the routing to apply to internal calls.

If you want a unique routing just for internal calls, you can set-up a Ring Group, with a unique number, with only a single extension as a member. Use that Ring Group # for internal calls and it will use the unique routing you set-up. If you want call internal calls from that extension to show that Ring Group number in the Caller ID, use the CID Num Alias field in the Extension Settings.