Confbridge dialout fails

Hi,

I was setting up conferences though confbridge on Asterisk 16.1.0 and ran into issue with adding participants to it.
I’m not sure if I’m doing something wrong here and configured it incorrectly or there is some kind of a bug. Your help would be much appreciated.

I’m using confbridge.conf:

[admin]
type=user
admin=yes
music_on_hold_when_empty=no
music_on_hold_class=default
end_marked=yes
announce_only_user=yes
announce_join_leave=no
dtmf_passthrough=yes

[conferences]
type=bridge

[fancymenu]
type=menu
1=toggle_mute
2=leave_conference
3=dialplan_exec(addcaller,1,1)
4=decrease_listening_volume
5=reset_listening_volume
6=increase_listening_volume
7=decrease_talking_volume
8=reset_talking_volume
9=increase_talking_volume
0=admin_kick_last

Simple dialplan to join conference.

[internal-conference]
exten => #100,1,Set(CONFNO=${CALLERID(num)})
 same => n,ConfBridge(${CONFNO}_conf,conferences,admin,fancymenu)

and to dialout participant - context addcaller called from within confbridge app:

[addcaller]
exten => 1,1,Read(numberToDial,vm-enter-num-to-call)
 same => n,Set(__DYNAMIC_FEATURES=confinvite)
 same => n,Dial(PJSIP/${numberToDial})

Then I want to talk to remote side and if he agrees - join him to the earlier created conference using features (confinvite):

[applicationmap]
confinvite => #,self,Gosub(confinvite,s,1)
[confinvite]
exten => s,1,ChannelRedirect(${BRIDGEPEER},conference,${CONFNO},1)
 same => n,ChannelRedirect(${CHANNEL(name)},internal-conference,#100,3)

333 can successfully create a conference(dialing #100), hit 3 and move to “addcaller” context, dial 222 and hear rings, but as soon as 222 answers 333 is returned to conference and 222 is hung in the solo channel on asterisk with silence on the other end. It’s like no bridge happens after 222 answers the call.

Here is console log for this:

[Mar  1 08:46:52]     -- Executing [#100@internal:1] Set("PJSIP/333-00000005", "CONFNO=333") in new stack
[Mar  1 08:46:52]     -- Executing [#100@internal:2] ConfBridge("PJSIP/333-00000005", "2333_conf,conferences,admin,fancymenu") in new stack
[Mar  1 08:46:52]        > 0x244ff90 -- Strict RTP learning after remote address set to: IP:8000
[Mar  1 08:46:52]        > 0x244ff90 -- Strict RTP switching to RTP target address IP:8000 as source
[Mar  1 08:46:52]     -- Channel CBAnn/333_conf-00000003;2 joined 'softmix' base-bridge <21c513cc-f8e4-4262-888e-45a218b79db7>
[Mar  1 08:46:52]     -- <PJSIP/333-00000005> Playing 'conf-onlyperson.gsm' (language 'en')
[Mar  1 08:46:56]     -- Channel PJSIP/333-00000005 joined 'softmix' base-bridge <21c513cc-f8e4-4262-888e-45a218b79db7>
[Mar  1 08:46:56]     -- <CBAnn/333_conf-00000003;1> Playing 'confbridge-join.gsm' (language 'en')
[Mar  1 08:46:57]     -- Executing [1@addcaller:1] Read("PJSIP/333-00000005", "numberToDial,vm-enter-num-to-call") in new stack
[Mar  1 08:46:57]     -- <PJSIP/333-00000005> Playing 'vm-enter-num-to-call.gsm' (language 'en')
[Mar  1 08:46:57]        > 0x244ff90 -- Strict RTP learning complete - Locking on source address IP:8000
[Mar  1 08:47:01]     -- User entered '222'
[Mar  1 08:47:01]     -- Executing [1@addcaller:2] Set("PJSIP/333-00000005", "__DYNAMIC_FEATURES=confinvite") in new stack
[Mar  1 08:47:01]     -- Executing [1@addcaller:3] Dial("PJSIP/333-00000005", "PJSIP/222") in new stack
[Mar  1 08:47:01]     -- Called PJSIP/222
[Mar  1 08:47:01]     -- PJSIP/222-00000006 is ringing
[Mar  1 08:47:01]     -- PJSIP/222-00000006 is ringing
[Mar  1 08:47:04]        > 0x7f02cc007500 -- Strict RTP learning after remote address set to: IP:8002
[Mar  1 08:47:04]     -- PJSIP/222-00000006 answered PJSIP/333-00000005
[Mar  1 08:47:04]     -- Channel PJSIP/222-00000006 joined 'simple_bridge' basic-bridge <cf7e0d33-4cd0-42dc-94de-34b62f9c8253>
[Mar  1 08:47:04]        > 0x7f02cc007500 -- Strict RTP switching to RTP target address IP:8002 as source
[Mar  1 08:47:04]   == Spawn extension (addcaller, 1, 3) exited non-zero on 'PJSIP/333-00000005'

Is this an expected behavior?
Asterisk version tested 16.0.0, 16.1.0, 16.2.1

Thanks!

If I recall, that is not supported. You can’t be in two bridges at once (the one from ConfBridge and the one from Dial) at once except if the bridge is aware of it (it’s not in this case).

Hello jcolp,

Will it work if i do ChannelRedirect instead of Dial like this:

same => n,ChannelRedirect({CHANNEL(name)},somecontext,{numberToDial},1)

I tested it and got the same result as soon as remote side picks up. Shouldn’t channel leave bridge on channelredirect?

You’d have to provide an actual full example with console output. I do believe there are people who have such a thing working, I just don’t remember how.

Sure, here it is:

[Mar 6 13:40:29] == Setting global variable ‘SIPDOMAIN’ to ‘PBX’
[Mar 6 13:40:29] – Executing [#100@conference:1] Set(“PJSIP/333-000000be”, “CONFNO=333”) in new stack
[Mar 6 13:40:29] – Executing [#100@conference:2] ResetCDR(“PJSIP/333-000000be”, “v”) in new stack
[Mar 6 13:40:29] – Executing [#100@conference:3] ConfBridge(“PJSIP/333-000000be”, “333_conf,conferences,admin,fancymenu”) in new stack
[Mar 6 13:40:29] > 0x7ff60422e820 – Strict RTP learning after remote address set to: PHONE_IP:8000
[Mar 6 13:40:29] > 0x7ff60422e820 – Strict RTP switching to RTP target address PHONE_IP:8000 as source
[Mar 6 13:40:29] – Channel CBAnn/333_conf-0000002f;2 joined ‘softmix’ base-bridge
[Mar 6 13:40:29] – <PJSIP/333-000000be> Playing ‘conf-onlyperson.gsm’ (language ‘en’)
[Mar 6 13:40:32] – Channel PJSIP/333-000000be joined ‘softmix’ base-bridge
[Mar 6 13:40:32] – <CBAnn/333_conf-0000002f;1> Playing ‘confbridge-join.gsm’ (language ‘en’)
[Mar 6 13:40:34] > 0x7ff60422e820 – Strict RTP learning complete - Locking on source address PHONE_IP:8000
[Mar 6 13:40:34] – Executing [1@addcaller:1] Read(“PJSIP/333-000000be”, “numberToDial,vm-enter-num-to-call”) in new stack
[Mar 6 13:40:34] – <PJSIP/333-000000be> Playing ‘vm-enter-num-to-call.gsm’ (language ‘en’)
[Mar 6 13:40:38] – User entered ‘222’
[Mar 6 13:40:38] – Executing [1@addcaller:2] Set(“PJSIP/333-000000be”, “__DYNAMIC_FEATURES=confinvite”) in new stack
[Mar 6 13:40:38] – Executing [1@addcaller:3] ChannelRedirect(“PJSIP/333-000000be”, “PJSIP/333-000000be,confdial,222,1”) in new stack
[Mar 6 13:40:38] – Executing [222@confdial:1] Dial(“PJSIP/333-000000be”, “PJSIP/222”) in new stack
[Mar 6 13:40:38] – Called PJSIP/222
[Mar 6 13:40:38] – PJSIP/222-000000bf is ringing
[Mar 6 13:40:38] – PJSIP/222-000000bf is ringing
[Mar 6 13:40:40] > 0x2a8f0f0 – Strict RTP learning after remote address set to: PHONE_IP:8002
[Mar 6 13:40:40] – PJSIP/222-000000bf answered PJSIP/333-000000be
[Mar 6 13:40:40] – Channel PJSIP/222-000000bf joined ‘simple_bridge’ basic-bridge
[Mar 6 13:40:40] > 0x2a8f0f0 – Strict RTP switching to RTP target address PHONE_IP:8002 as source
[Mar 6 13:40:40] == Spawn extension (confdial, 222, 1) exited non-zero on ‘PJSIP/333-000000be’
[Mar 6 13:40:45] > 0x2a8f0f0 – Strict RTP learning complete - Locking on source address PHONE_IP:8002

I have it working on Asterisk 11 and SIP with ChannelRedirect but since Asterisk 13 it was no longer the case. Considering that in 16 it is not working as well i assumed that may be something i don’t know about has changed.

Thanks!