I am not sure what the [c_2001] snippet you have posted has to do
with CallerID (which is concerned with outgoing calls).
To have it answer try this
exten => _X.,1,Answer
exten => _X.,2,Playback(tt-weasels)
exten => _X.,3,Hangup
to answer whatever number was dialled, regardless of pattern or length,
or a more specific pattern to answer only specific numbers.
‘s’ is the ‘start’ pattern for contexts you entered via a ‘goto’ – the
context specified in sip.conf (here c_2001) has to start with a match
for the dialled number, not with ‘s’ - at least that’s my experience.
To set a different CID number for external calls than for internal calls,
I would dial external and internal calls in two separate contexts, and in
the external context set the callerid number to the global variable.
This will overrule the originating extensions individual callerid which
you set in sip.conf.
So your first match should probably be for _9x to catch outside calls,
where you branch to your external context; in the internal context you
don’t set callerid, so the one from sip.conf is retained.
And if I did not understand your problem correctly please bear with me,
don’t badmouth either the people trying to help or Asterisk. There are
enough people who manage to get it to work with a little effort that failure to do so cannot simply be pinned on Asterisk.