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.