PJSIP Add Header On Forwarded Call

Home » Asterisk Users » PJSIP Add Header On Forwarded Call
Asterisk Users 4 Comments

Hi list,

to manage an external queue agent the only solution I found is to connect a local account and redirect calls to this account using forward features from the phone (SNOM). The problem I face is that before calling the agent I would like to set extra header. Dialplan to call external agent is this one with (Gosub):

[TOOTAiAudio]
;
; Call our gateway

exten = s,1,Set(PJSIP_HEADER(add,X-TOOTAiAudio-CALLED)=${ARG1})
 same = n,Dial(PJSIP/${ARG1}@TOOTAiAudio,,T)
 same = n,Return

exten = h,1,NoOp()
 same = n,NoOp(Hangup Cause: ${HANGUPCAUSE})
 same = n,NoOp(Dial status : ${DIALSTATUS})
 same = n,NoOp(X-TOOTAiAudio=${PJSIP_HEADER(read,X-TOOTAiAudio-CALLED)})
 same = n,Return

When a local phone call extension 115 (the one where calls to external agent are forwarded), everything is working well. But if I call the account from a queue I get

[Nov 27 09:54:08] ERROR[12758][C-0000005f]: res_pjsip_header_funcs.c:513
func_write_header: This function requires a PJSIP channel

Output of queue is

deblix9*CLI> queue show q301
q301 has 0 calls (max unlimited) in ‘ringall’ strategy (6s holdtime, 47s talktime), W:0, C:25, A:3, SL:100.0%, SL2:100.0% within 60s
   Members:
      PJSIP/PPermis115 (ringinuse disabled) (dynamic) (Not in use) has taken 8 calls (last was 706 secs ago)
   No Callers

where PPermis115 is the local account on a phone who forward calls to extension 115.

Why can’t be PJSIP extra headers setted in this case ?

Thanks for any hint

Reagrds


Daniel

4 thoughts on - PJSIP Add Header On Forwarded Call

  • As documented on the wiki[1] the PJSIP_HEADER dialplan function has to be executed on the PJSIP channel itself, not the calling channel. You need to use a pre-dial handler and invoke it there.

    [1] https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Function_PJSIP_HEADER


    Joshua C. Colp Digium – A Sangoma Company | Senior Software Developer
    445 Jan Davis Drive NW – Huntsville, AL 35806 – US
    Check us out at: http://www.digium.com & http://www.asterisk.org

  • Le 27/11/2018 à 12:13, Joshua C. Colp a écrit :
    […]

    Thanks Joshua, that worked. As you see above I want to have the value of headers when call is ended. Problem is that on h extension the channel already gone.

    Is there a solution to archieve this ?


    Daniel

  • Is there a reason you can’t use a normal dialplan variable instead? Otherwise I don’t believe PJSIP_HEADER will retrieve such information regardless, it’s for querying headers on an incoming INVITE.


    Joshua C. Colp Digium – A Sangoma Company | Senior Software Developer
    445 Jan Davis Drive NW – Huntsville, AL 35806 – US
    Check us out at: http://www.digium.com & http://www.asterisk.org

  • Le 27/11/2018 à 13:18, Joshua C. Colp a écrit :

    That’s what I do at this time. I thought I could bypass this by retriving the output of headers

    Otherwise I don’t believe PJSIP_HEADER will retrieve such information regardless, it’s for querying headers on an incoming INVITE.

    Ok, thanks for your help.


    Daniel