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