I think HANGUPCAUSE is channel agnostic. See: core show function HANGUPCAUSE Some thing like this IIRC: Set(my_cause=${HANGUPCAUSE(${CHANNEL(name)},tech)}) Remember the incoming leg of the call and the outgoing leg of the call are different channels. Make sure you are giving HANGUPCAUSE the correct channel. On 06/09/2018 02:01 PM, Khalil Khamlichi wrote:> It seems very weird to me that we cannot access sip code of a call > from pjsip which information is actually returned from the provider, > so it is available to asterisk, why does asterisk hide it ? > On Sat, Jun 9, 2018 at 5:08 PM Khalil Khamlichi > <khamlichi.khalil at gmail.com> wrote: >> >> Hi, >> >> Is there any way I can get exact sip status from pjsip after a dial ? >> or all we can >> get is asterisk hangup causes ? >> >> Thanks in advance. >> >> KKh >-- http://help.nyigc.net/
Khalil Khamlichi
2018-Jun-09 19:10 UTC
[asterisk-users] getting real sip status after dial
Thanks for your response Eric, Here is some testing code, as you can see ${HANGUPCAUSE(${ARG1},tech)} is empty if number is not found (HANGUPCAUSE=1) or if sip request times-out (HANGUPCAUSE=0) (a dead far end for example) so I had to check value HANGUPCAUSE and filter out zero and one before moving on. where all I need is simply the sip code returned from the server that even softphones are able to give me. [autodial_out] exten => _X.,1,NoOP( testing manager dial out ) same => n,Dial(PJSIP/${EXTEN}@${TRUNK},25,b(autodial_out^setup_hup_handler^1)g) same => n,Hangup() exten => setup_hup_handler,1,Set(CHANNEL(hangup_handler_push)=hdlr1,s,1(${CHANNEL})) same => n,Return() [hdlr1] exten => s,1,NoOp(START==============================================================================) same => n,Set(HANGUPCAUSE_STRING=${HANGUPCAUSE_KEYS()}) same => n,Set(ASTcause=${HANGUPCAUSE}) same => n,Set(GO=Found) same => n,GotoIf($[${ASTcause}=0]?NotFound0:Check2) same => n(Check2),GotoIf($[${ASTcause}=1]?NotFound1:Found) same => n(Found),Set(SIPcause=${HANGUPCAUSE(${ARG1},tech)}) same => n,Goto(End) same => n(NotFound0),Set(SIPcause=SIP 500 Server Internal Error) same => n,Goto(End) same => n(NotFound1),Set(SIPcause=SIP 404 Not Found) same => n,Goto(End) same => n(End),Set(============================ ${SIPcause} / ${ASTcause} =======================END) same => n,Return() On Sat, Jun 9, 2018 at 7:02 PM Eric Wieling <ewieling at nyigc.com> wrote:> > I think HANGUPCAUSE is channel agnostic. > > See: core show function HANGUPCAUSE > > Some thing like this IIRC: > Set(my_cause=${HANGUPCAUSE(${CHANNEL(name)},tech)}) > > Remember the incoming leg of the call and the outgoing leg of the call > are different channels. Make sure you are giving HANGUPCAUSE the > correct channel. > > On 06/09/2018 02:01 PM, Khalil Khamlichi wrote: > > It seems very weird to me that we cannot access sip code of a call > > from pjsip which information is actually returned from the provider, > > so it is available to asterisk, why does asterisk hide it ? > > On Sat, Jun 9, 2018 at 5:08 PM Khalil Khamlichi > > <khamlichi.khalil at gmail.com> wrote: > >> > >> Hi, > >> > >> Is there any way I can get exact sip status from pjsip after a dial ? > >> or all we can > >> get is asterisk hangup causes ? > >> > >> Thanks in advance. > >> > >> KKh > > > > -- > http://help.nyigc.net/
My actual dialplan hangupcause handling is in AGI and AEL, so the dialplan below has not been tested. Don't use HANGUPCAUSE_KEYS, the order of the channels varies. Save the channel name while the dialplan is in the predial handler like below. MASTER_CHANNEL is used to avoid silly issues with the scope of the out_chan variable. [test] exten => _X.,1,Set(CHANNEL(hangup_handler_push)=caller_hangup,s,1) same => n,Dial(SIP/my-peer/12125551212,30,b(test_pre_dial^s^1)) [test_pre_dial] ; while in the handler save the channel exten => _X.,1,Set(MASTER_CHANNEL(out_chan)=${CHANNEL{name}) same => n,Return You should be able to use the caller hangup handler to get tech hangupcauses like "SIP 480 Temporarily Unavailable". [caller_hangup] exten => s,1,Noop(HANGUPCAUSE(${MASTER_CHANNEL(out_chan)},tech)='${HANGUPCAUSE(${MASTER_CHANNEL(out_chan)},tech)}') exten => n,Return On 06/09/2018 03:10 PM, Khalil Khamlichi wrote:> Thanks for your response Eric, > > Here is some testing code, as you can see ${HANGUPCAUSE(${ARG1},tech)} > is empty if number is not found (HANGUPCAUSE=1) or if sip request > times-out (HANGUPCAUSE=0) (a dead far end for example) so I had to > check value HANGUPCAUSE and filter out zero and one before moving on. > where all I need is simply the sip code returned from the server that > even softphones are able to give me. > > > [autodial_out] > exten => _X.,1,NoOP( testing manager dial out ) > same => n,Dial(PJSIP/${EXTEN}@${TRUNK},25,b(autodial_out^setup_hup_handler^1)g) > same => n,Hangup() > > > exten => setup_hup_handler,1,Set(CHANNEL(hangup_handler_push)=hdlr1,s,1(${CHANNEL})) > same => n,Return() > > > [hdlr1] > exten => s,1,NoOp(START==============================================================================) > same => n,Set(HANGUPCAUSE_STRING=${HANGUPCAUSE_KEYS()}) > same => n,Set(ASTcause=${HANGUPCAUSE}) > same => n,Set(GO=Found) > same => n,GotoIf($[${ASTcause}=0]?NotFound0:Check2) > same => n(Check2),GotoIf($[${ASTcause}=1]?NotFound1:Found) > same => n(Found),Set(SIPcause=${HANGUPCAUSE(${ARG1},tech)}) > same => n,Goto(End) > same => n(NotFound0),Set(SIPcause=SIP 500 Server Internal Error) > same => n,Goto(End) > same => n(NotFound1),Set(SIPcause=SIP 404 Not Found) > same => n,Goto(End) > same => n(End),Set(============================ ${SIPcause} / > ${ASTcause} =======================END) > same => n,Return() > > > On Sat, Jun 9, 2018 at 7:02 PM Eric Wieling <ewieling at nyigc.com> wrote: >> >> I think HANGUPCAUSE is channel agnostic. >> >> See: core show function HANGUPCAUSE >> >> Some thing like this IIRC: >> Set(my_cause=${HANGUPCAUSE(${CHANNEL(name)},tech)}) >> >> Remember the incoming leg of the call and the outgoing leg of the call >> are different channels. Make sure you are giving HANGUPCAUSE the >> correct channel. >> >> On 06/09/2018 02:01 PM, Khalil Khamlichi wrote: >>> It seems very weird to me that we cannot access sip code of a call >>> from pjsip which information is actually returned from the provider, >>> so it is available to asterisk, why does asterisk hide it ? >>> On Sat, Jun 9, 2018 at 5:08 PM Khalil Khamlichi >>> <khamlichi.khalil at gmail.com> wrote: >>>> >>>> Hi, >>>> >>>> Is there any way I can get exact sip status from pjsip after a dial ? >>>> or all we can >>>> get is asterisk hangup causes ? >>>> >>>> Thanks in advance. >>>> >>>> KKh >>> >> >> -- >> http://help.nyigc.net/-- http://help.nyigc.net/