[Asterisk-Users] DIALSTATUS missing an important condition?

chris vince chrisvince at hotmail.com
Sun Dec 12 01:09:23 MST 2004


I have recently built my first asterisk system and am very impressed with 
its capabilities.

However, I have run into one problem that hopefully someone can help me 
with.

I am trying to use the DIALSTATUS function to route incoming calls to the 
appropriate Voice Mail (busy or unavailable) or to an Unavailable Number 
recording if the number is not assigned.

However, I find that DIALSTATUS seems to generate an CHANUNAVAIL status for 
any 1 of 2 conditions:
1) the dialled user is not logged in (and hence no channel) or
2) the dialled user does not exist at all (ie the number is not assigned in 
sip.conf) (and hence no channel)

Obviously for condition 1 the call should be sent to VM unavailable, whereas 
for condition 2 I would like to send it to a "number you have dialled is not 
in service" recording - with no Voice Mail involved.

I have managed to get this scenario working but I don't think my solution is 
very elegant or even correct (although it seems to work).

Here are the relevant parts of my extensions.conf. My VM box numbers are 
exactly the same as the phone number so I only use ARG1 in the macro. (2000 
= 2000 etc.). I only have SIP phones at the moment and they are all 
allocated in the 20XX numbering range.

[altea_extensions]

;This is a "catchall" for any 4 digit number dialled starting with "20"
;Using it removes the need to provide a routing plan for each phone

exten => _20XX,1,ResponseTimeout,1	; Response Timeout for non working 
numbers
exten => _20XX,2,Macro(stdexten_sip,${EXTEN})	;send to macro for processing

;following is needed if an extension is unassigned (ie not datafilled) 
because
;DIALSTATUS cannot (?) differentiate between an unassigned # or 1 that is 
not answered or not logged in
;an unassigned (non working number) causes a timeout in the std-extn macro 
and it drops back here
;where I provide a "not in service" recording

exten => t,1,Macro(not_in_service)    ;send to "number not in service" 
recording
exten => t,2,Hangup

[macro-stdexten_sip]
; Standard extension macro for SIP phones (modified):
;   ${ARG1} = Dialled number
;
exten => s,1,Dial(SIP/${ARG1},20,tT)		; Ring the interface, 20 secs maximum
exten => s,2,Goto(s-${DIALSTATUS},1); Jump on Status 
(NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s-NOANSWER,1,Voicemail(u${ARG1})	; no answer = unavailable
exten => s-BUSY,1,Voicemail(b${ARG1})		; busy
exten => s-CHANUNAVAIL,1,Voicemail(u${ARG1})	;no channel (not logged in) = 
unavailable
exten => s-CONGESTION,1,Macro(120_ipm)	;Don't know what this is but will 
include anyway


Am I missing something here or should there be another condition such as 
"Unassigned"? Asterisk seems to know that the number is unassigned because 
it writes a "No such host" message into the log. Is there any way of 
trapping this message in Call Processing to route this call correctly?

Or am I getting to deep here and there's a real simple way to do it that 
I've missed?????

chris





More information about the asterisk-users mailing list