Stephen Davies
2018-10-30 19:02:10 UTC
Hi,
I'm looking to see if I've missed something - if not I think there is an
ARI limitation worth thinking about.
app_dial offers a flag "I" which is supposed to block propagation of
connected line updates through the dial bridge. Is there anything like
this that I can do when setting up and managing a bridge with ARI?
My problem is like so: I have an incoming call from an "external" source
to a DDI. I want to send that source a Remote-Party-Id containing the DDI
dialled an a name like "ABC Corp". And I don't want that to change even
with subsequent transfers etc.
I've got this working for the initial incoming call. My problem comes when
the dialled phone does a transfer - specifically I've need testing with
attended transfer.
(An attended transfer starts with the transferer initiating an "enquiry
call". So two bridges. On the REFER Asterisk does an attended transfer
with type "link" and inserts a Local channel pair between the two bridges,
replacing the two channels to the transferring phone.
At this point Asterisk sends the original caller a connected line update
saying that "you are now talking to 201 Abu". And tells the target phone
"you are now talking to the external caller".
Which is true, no doubt, but in this case I want to block the connected
line update being sent to the original caller.
Is there any way in the ARI API? I can't find it.
In related news, I tried to "isolate" my external caller by passing the
incoming call through a Local channel with the I option on the dial. To
create a point where the connected line update with be blocked. My
reasoning is then that the Attended transfer can do what it wants to the
channels in the bridge, but the flag in the dial will isolate the original
calling channel My ARI app can directly tinker with the channel if I do
want to adjust the connected line info - but its 100% under my control.
So I made my dialplan do this:
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@from-drachtio:1] Goto("PJSIP/drachtio-sip1-00000045",
"to-stasis-ariapp,2710900XXXX,1") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx_builtins.c: Goto
(to-stasis-ariapp,2710900XXXX,1)
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp:1] Set("PJSIP/drachtio-sip1-00000045",
"app=ariapp") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp:2] ExecIf("PJSIP/drachtio-sip1-00000045",
"0?Set(app=ariapp)") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp:3] Set("PJSIP/drachtio-sip1-00000045",
"direction=inbound") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp:4] GotoIf("PJSIP/drachtio-sip1-00000045",
"1?to-stasis-ariapp-via-local,2710900XXXX,1") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx_builtins.c: Goto
(to-stasis-ariapp-via-local,2710900XXXX,1)
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp-via-local:1]
NoOp("PJSIP/drachtio-sip1-00000045", "Routing inbound call "0878XXXXXX"
<0878XXXXXX> -> 2710900XXXX via Local channel to block connected line
updates") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp-via-local:2]
Dial("PJSIP/drachtio-sip1-00000045",
"Local/***@to-stasis-ariapp-inbound/n,,I") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] app_dial.c: Called
Local/***@to-stasis-ariapp-inbound/n
[Oct 30 17:51:21] VERBOSE[20291][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp-inbound:1]
NoOp("Local/***@to-stasis-ariapp-inbound-00000006;2", "Routing
inbound call "0878XXXXXX" <0878XXXXXX> -> 2710900XXXX other side of local
channel") in new stack
[Oct 30 17:51:21] VERBOSE[20291][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp-inbound:2]
Stasis("Local/***@to-stasis-ariapp-inbound-00000006;2",
"ariapp,"0878XXXXXX <0878XXXXXX>,2710900XXXX,inbound") in new stack
So what's interesting about this is that is does prevent connected line
updates during the initial setup of the call:
[Oct 30 17:51:24] VERBOSE[20289][C-00000015] app_dial.c: Connected line
update to PJSIP/drachtio-sip1-00000045 prevented.
However the attended transfer still results in a connected-line update
being sent put to the calling channel through the dial into the Local
channel despite the I flag.
My Asterisk is "Asterisk GIT-master-9189c26M" - which is a master branch
from shortly before 16 was released.
Thanks for any pointers.
Steve Davies
I'm looking to see if I've missed something - if not I think there is an
ARI limitation worth thinking about.
app_dial offers a flag "I" which is supposed to block propagation of
connected line updates through the dial bridge. Is there anything like
this that I can do when setting up and managing a bridge with ARI?
My problem is like so: I have an incoming call from an "external" source
to a DDI. I want to send that source a Remote-Party-Id containing the DDI
dialled an a name like "ABC Corp". And I don't want that to change even
with subsequent transfers etc.
I've got this working for the initial incoming call. My problem comes when
the dialled phone does a transfer - specifically I've need testing with
attended transfer.
(An attended transfer starts with the transferer initiating an "enquiry
call". So two bridges. On the REFER Asterisk does an attended transfer
with type "link" and inserts a Local channel pair between the two bridges,
replacing the two channels to the transferring phone.
At this point Asterisk sends the original caller a connected line update
saying that "you are now talking to 201 Abu". And tells the target phone
"you are now talking to the external caller".
Which is true, no doubt, but in this case I want to block the connected
line update being sent to the original caller.
Is there any way in the ARI API? I can't find it.
In related news, I tried to "isolate" my external caller by passing the
incoming call through a Local channel with the I option on the dial. To
create a point where the connected line update with be blocked. My
reasoning is then that the Attended transfer can do what it wants to the
channels in the bridge, but the flag in the dial will isolate the original
calling channel My ARI app can directly tinker with the channel if I do
want to adjust the connected line info - but its 100% under my control.
So I made my dialplan do this:
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@from-drachtio:1] Goto("PJSIP/drachtio-sip1-00000045",
"to-stasis-ariapp,2710900XXXX,1") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx_builtins.c: Goto
(to-stasis-ariapp,2710900XXXX,1)
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp:1] Set("PJSIP/drachtio-sip1-00000045",
"app=ariapp") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp:2] ExecIf("PJSIP/drachtio-sip1-00000045",
"0?Set(app=ariapp)") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp:3] Set("PJSIP/drachtio-sip1-00000045",
"direction=inbound") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp:4] GotoIf("PJSIP/drachtio-sip1-00000045",
"1?to-stasis-ariapp-via-local,2710900XXXX,1") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx_builtins.c: Goto
(to-stasis-ariapp-via-local,2710900XXXX,1)
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp-via-local:1]
NoOp("PJSIP/drachtio-sip1-00000045", "Routing inbound call "0878XXXXXX"
<0878XXXXXX> -> 2710900XXXX via Local channel to block connected line
updates") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp-via-local:2]
Dial("PJSIP/drachtio-sip1-00000045",
"Local/***@to-stasis-ariapp-inbound/n,,I") in new stack
[Oct 30 17:51:21] VERBOSE[20289][C-00000015] app_dial.c: Called
Local/***@to-stasis-ariapp-inbound/n
[Oct 30 17:51:21] VERBOSE[20291][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp-inbound:1]
NoOp("Local/***@to-stasis-ariapp-inbound-00000006;2", "Routing
inbound call "0878XXXXXX" <0878XXXXXX> -> 2710900XXXX other side of local
channel") in new stack
[Oct 30 17:51:21] VERBOSE[20291][C-00000015] pbx.c: Executing
[***@to-stasis-ariapp-inbound:2]
Stasis("Local/***@to-stasis-ariapp-inbound-00000006;2",
"ariapp,"0878XXXXXX <0878XXXXXX>,2710900XXXX,inbound") in new stack
So what's interesting about this is that is does prevent connected line
updates during the initial setup of the call:
[Oct 30 17:51:24] VERBOSE[20289][C-00000015] app_dial.c: Connected line
update to PJSIP/drachtio-sip1-00000045 prevented.
However the attended transfer still results in a connected-line update
being sent put to the calling channel through the dial into the Local
channel despite the I flag.
My Asterisk is "Asterisk GIT-master-9189c26M" - which is a master branch
from shortly before 16 was released.
Thanks for any pointers.
Steve Davies