Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I had the following code in my extensions.conf file:


Now I want to change this code to set the CallerID and number based on the user/extension that is making the call. In fact I have four(4) users/extensions in my sip.conf and only one of them (the one I use for business) is supposed to send a different caller id/number.

Everything is in the same context (for simplicity) since all lines need to be able to pick up an incoming call. The only difference is when line1 needs to make a call, it has to send a different caller id/number and use a different provider.

This is what I have so far:

exten => _NXXNXXXXXX,1,Set(line=${SIP_HEADER(From)})
exten => _NXXNXXXXXX,n,Verbose(line variable is <${line}>)
exten => _NXXNXXXXXX,n,Set(CALLERID(name)=${IF($[ ${line} = line1 ]?${COMPANY_NAME}:${FAMILY_NAME})})
exten => _NXXNXXXXXX,n,Set(CALLERID(num)=${IF($[ ${line} = line1 ]?${COMPANY_NUMBER}:${FAMILY_NUMBER})})
exten => _NXXNXXXXXX,n,Dial(${IF($[ ${line} = line1]?SIP/${EXTEN}@${COMPANY_PROVIDER}:SIP/${EXTEN}@${FAMILY_PROVIDER})})

I really don't know if this is correct and I'm afraid to commit these changes to my extensions.conf before validating.

Any help will be greatly appreciated.

share|improve this question
Are you using a GUI such a FreePBX on this Asterisk box? – dkwiebe Nov 16 '12 at 22:14
No, I'm using a terminal to make all these changes. – adaptive Nov 17 '12 at 23:13

As per the VoIP Info Wiki you can specify the callerid information on SIP extensions on a per extension basis like this:

callerid="Tuomas Tammisalo" <1000>

UPDATE: You can access the CDR variables on the call has started. "${CDR(src)}" would give you the source extension of the call.

share|improve this answer
Thanks for the insightful response. However, I still need the functionality to detect the caller because, I send different caller Ids depending on which destination it is. I have several inbound numbers for different regions. – adaptive Nov 19 '12 at 14:20
Does ${CDR(src)} give you what you're looking for? – dkwiebe Nov 22 '12 at 19:10
Unfortunately, no. I was able to get it from ${CALLERID(num)} – adaptive Jun 6 '13 at 17:29
up vote 0 down vote accepted

After some investigation, I found out that I can get the information I need from ${CALLERID(num)}.

So, this is what I did:

exten => _NXXNXXXXXX,1,Set(line=${CALLERID(num)})
same => n,Verbose(line variable is <${line}>)
same => n,GotoIf($["${line}" = "line1"]?business-out,${EXTEN},1:family-out,${EXTEN},1)



Hope that helps someone

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.