Originated party leaves bridge after 30 seconds

I’m trying to initiate a call into Asterisk and then do multiple things.

  • Answer the incoming call (Play a welcome tone, confbridge-join)
  • Dial another party, inviting them to a ConfBridge
  • Continue, joining the same ConfBridge so the parties are bridged together.

I understand this is advanced and against the grain of Dialplan.
I started by looking for “continuing” through the dialplan without waiting for Dial() or ConfBridge to finish
That lead me here: Continue processing DialPlan during Dial() but prior to hangup
And then here: Send SIP INVITE to other clients when there is Conference call created using ConfBridge App

The later result has something that plausibly works. Here’s the dialplan:

; Demo
exten => 111,1,NoOp(Entered demo)
 same => n,Originate(PJSIP/${EXTEN},app,ConfBridge,${EXTEN})
 same => n,ConfBridge(${EXTEN})
 same => n,Hangup()

This works. Sort of. Both legs are established and the audio flows between all parties
After 30 seconds, the invited party using Originate leaves the bridge
I’m not sure why it’s leaving. I’ve tried setting a timeout on the Originate to something large and playing with the ‘a’ async option. No luck.

same => n,Originate(PJSIP/${EXTEN},app,ConfBridge,${EXTEN},,40000,a)

Is this worth pursuing? Is there an easier way to do what I’m imagining?

Leaving after 30 seconds is typically the result of bad NAT configurations causing ACKs to be lost.

Definitely no NAT issues in the way, this is a local setup within the same network.

Sigh, it was NAT. I setup a TURN relay for the call and it’s all working. I’m not sure why that’s different but now both parties stay in the call!