[asterisk-users] how to get the status of failed call files

Richard Lyman pchammer at dynx.net
Thu Feb 1 09:40:32 MST 2007


Rich Doughty wrote:
> Richard Lyman wrote:
>> Rich Doughty wrote:
>>> i am creating call files, and catching successfully the ones that don't
>>> connect in a 'failed' extension. can anyone tell me how to find out the
>>> reason for the failure (ie busy, no answer).
>>>
>>> ${DIALSTATUS} doesn't appear to get set (presumably because Dial() 
>>> isn't
>>> used) and channel_status doesn't seem to be any good.
>>>
>>> thanks in advance.
>>>
>> the event you received for OriginateFailure has a 'Reason: ' code.
>>
>> that code breaks down as
>>
>> 0 = UNKNOWN FAILURE or DISCONNECT
>> 3 = AST_CONTROL_RINGING (no answer)
>> 5 = AST_CONTROL_BUSY
>> 1 = AST_CONTROL_HANGUP
>> 8 = AST_CONTROL_CONGESTION
>
> i didn't originate the call with manager, but with a call file, so i 
> can't
> get manager events. i there any other way of finding this out?
>
>
if DIALSTATUS or HANGUPCAUSE don't have what you need then you will need 
to mod pbx.c

look for a section of code that looks like this

                        /* create a fake channel and execute the 
"failed" extension (if it exists) within the requested cont
                        /* check if "failed" exists */
                        if (ast_exists_extension(chan, context, 
"failed", 1, NULL)) {
                                chan = ast_channel_alloc(0);
                                if (chan) {
                                        ast_copy_string(chan->name, 
"OutgoingSpoolFailed", sizeof(chan->name));
                                        if (!ast_strlen_zero(context))
                                                
ast_copy_string(chan->context, context, sizeof(chan->context));
                                        ast_copy_string(chan->exten, 
"failed", sizeof(chan->exten));
                                        chan->priority = 1;
                                        ast_set_variables(chan, vars);
insert pbx_builtin_var here -->
                                        ast_pbx_run(chan);

since DIALSTATUS and HANGUPCAUSE are both protected, you will probably 
have to create another such as FAILEDCODE.

i hope this helps.



More information about the asterisk-users mailing list