Administrator TOOTAI
2018-Nov-27 09:49 UTC
[asterisk-users] PJSIP add header on forwarded call
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
On Tue, Nov 27, 2018, at 5:49 AM, Administrator TOOTAI wrote:> 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 ?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: www.digium.com & www.asterisk.org
Administrator TOOTAI
2018-Nov-27 12:13 UTC
[asterisk-users] PJSIP add header on forwarded call
Le 27/11/2018 à 12:13, Joshua C. Colp a écrit :> On Tue, Nov 27, 2018, at 5:49 AM, Administrator TOOTAI wrote:[...] >> >> [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[...]>> >> Why can't be PJSIP extra headers setted in this case ? > > 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 >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