Followme on external

This is for incoming external calls to simultaneously ring an external number (mobile phone) as well as extensions within a ring group. Ideally the behavior I would like to implement is that the ring group rings a set of local extensions on an external call and 5 seconds later also rings the external mobile number and whichever in the group answers gets the call or the call goes to voicemail if unanswered.

Tried sboily’s followme previously (and edited for changes from xivo-confgend to wazo-confgend), but without success. Also tried a custom line linked to a user to add to the ring group but without success. Is there another way to accomplish this and has anyone being successful adding followme/simultaneous ring with external endpoints as well as internal?

(Sboily’s follow me: https://github.com/sboily/wazo-confgend-driver-followme)

Hello, hum … i probably need to update that module! I’ll update it soon.

1 Like

@espresso4jb i just fix the module for the 20.13. So just update to the 0.0.3 version.

Loaded up the new module, everything appears to be in the right place, but followme is still failing -

[2020-10-05 22:29:49.1187] WARNING[9638][C-00000008]: app_dial.c:2576 dial_exec_full: Unable to create channel of type ‘PJSIP’ (cause 3 - No route to destination)
[Oct 5 22:29:49] – No devices or endpoints to dial (technology/resource)
[Oct 5 22:29:49] – Executing [s@user:43] Goto(“PJSIP/9dqckhfv-00000008”, “CHANUNAVAIL,1”) in new stack
[Oct 5 22:29:49] – Goto (user,CHANUNAVAIL,1)
[Oct 5 22:29:49] – Executing [CHANUNAVAIL@user:1] Set(“PJSIP/9dqckhfv-00000008”, “XIVO_FWD_TYPE=USER_CHANUNAVAIL”) in new stack
[Oct 5 22:29:49] – Executing [CHANUNAVAIL@user:2] FollowMe(“PJSIP/9dqckhfv-00000008”, “1c4070c1-c8b2-4cc7-99a2-ddbfcc3f4102”) in new stack
[2020-10-05 22:29:49.1199] WARNING[9638][C-00000008]: app_followme.c:1399 app_exec: Profile requested, 1c4070c1-c8b2-4cc7-99a2-ddbfcc3f4102, not found in the configuration.
[Oct 5 22:29:49] – Executing [CHANUNAVAIL@user:3] Goto(“PJSIP/9dqckhfv-00000008”, “forward_voicemail,1”) in new stack
[Oct 5 22:29:49] – Goto (user,forward_voicemail,1)

Appears to be linked to the profile not found error message, or at least this is where it exits the followme processing.

The block of code in app_followme.c of asterisk is as follows:

if (!f) {
	f = find_realtime(args.followmeid);
}

if (!f) {
	ast_log(LOG_WARNING, "Profile requested, %s, not found in the configuration.\n", args.followmeid);
	ast_free(targs);
	return 0;
}

The guess from the above is that it is not getting the parameters to provide to the followme app. The line has a mobile phone entry, so not sure why not passed through.

Hum, can you show me an output of:

wazo-confgen asterisk/followme.conf

I get no output on execution, it just returns me to the command line. If I look at the /var/log/wazo-confgend.log I see -

2020-10-06 08:54:17,260 [1992] (ERROR) (wazo_confgend.handler): 'AsteriskFrontend' object has no attribute 'followme_conf'
2020-10-06 08:54:17,261 [1992] (ERROR) (wazo_confgend.handler): No handler found for asterisk/followme.conf
2020-10-06 08:54:17,262 [1992] (INFO) (wazo_confgend.confgen): serving asterisk/followme.conf in 0.002 seconds

I removed the plug-in and reinstalled it in event there was an issue moving from 0.0.2 to 0.0.3, but had the same result.

Looks like you don’t have the good version. I know this issue and i fix it.

Much appreciate that - if you can give me a hint as to where the issue sits it would hopefully help me to ask more intelligent questions in the future or at least dig a little further. Thanks again.

I traced down the issue - a previous load of the followme plugin was cleaned up, but left a ‘confgend_driver_followme-0.1-py2.7.egg’ package file behind. Since that appears to be a later version than 0.0.3 it appears that broke the correct module loading. Removed the file and it loaded right up!

1 Like

Now that I fixed the issue I had with the correct followme module, it works fine if dialing or going to a direct extension (users mobile phone rings), but does not engage if part of a ring group. For testing I put that user as a fallback instead of voicemail, which partially worked, but only after the ring timeout and if not answered the call terminates as opposed to going to voicemail.

Followme is still useful on its own, but specifically for ringing external numbers on an incall as part of a ring group, is there a different/better way to approach this? I did try with a custom user with a Local/ - similarly it works standalone, but does not activate in a ring group.

Would like to know methods others may have used to successfully do something similar.

Nope i haven’t tested with group call. What’s the use case for ringroup? Follow me need to be for all users in the group?

Small installation and simple use case - one of the trunk lines rings 2 separate extensions in the building and the desire is to ring the mobile phone as well as the two extensions as the user is frequently away from the extensions.

The intent would be that it rings all of the lines and whichever answers first is connected or if it times out it goes to voicemail (so timeout has to be less than the mobile phone companies voicemail setting). Typically it takes 1-2 seconds to connect the followme / trunk anyway, but ideal would be “a couple rings” of the internal extensions and then simultaneous ring of the mobile phone so that not all calls are picked up on the mobile (with the additional outbound call).

Ring group appears to work effectively for the directly connected extensions, but will not connect a custom/Local nor does it initiate the outbound call on the followme line - but both of those extensions work standalone. In a previous installation based on XiVO it did function where the mobile rang simultaneously with the extensions in the ring group, but I have not been successful in getting that to work since upgrading (new install, not in place) the system.

Have you tried to use extension member instead user member in a ring group?

Voilà! I added the custom local extension and ran a test and it worked! I had always used users in the ring groups previously as opposed to extensions and it did not even cross my mind. I only ran the test remotely and monitoring the session, so will do some more testing to confirm all is as it should be but right now it looks pretty positive. :smiley:

Ran some tests and ran into an issue. The external number is called and does ring, but if it answers there is no audio in either direction. Most likely an RTP or NAT issue, but will need more testing. If dialed directly from inside it does work with audio.

If I use an extension with Followme on, the issue I run into is that it picks up the call and plays the message it is connecting the user while ringing the extensions and external line. If the external line answers and selects 1 to take the call, audio flows through, so that is a plus. Will do some more testing over the next couple days and see where I get to.

you need to check the SDP in your invite and check rtp set debug on on the asterisk CLI.

Still working on the SIP trace, but noted something else - I am running the ‘noanswer’ subroutine so that the call is not connected while ringing the extensions, but only on connection. If the regular extensions pick up, no problem - but if the mobile extension answers there is no audio in either direction.

If, however, I remove the noanswer subroutine so that the trunk is connected to the session while ringing, if the mobile extension answers there is audio in both directions. There are some old posts on this issue and people setting the fax flag - which effectively does the same thing, connects the trunk and starts the call while ringing the extensions.

Here is a log where all 3 numbers are ringing and the mobile phone answers and receives no audio and disconnects:

[Oct  8 22:22:51]     -- Executing [dial@outcall:7] Dial("Local/**mobile_number**@default-00000053;2", "PJSIP/**mobile_number**@flowroute,,o(**mobile_number**)") in new stack
[Oct  8 22:22:51]     -- Called PJSIP/**mobile_number**@flowroute
[Oct  8 22:22:51]     -- Local/715@default-00000051;1 connected line has changed. Saving it until answer for PJSIP/flowroute-0000005d
[Oct  8 22:22:53]        > 0x7f5c4009d6d0 -- Strict RTP learning after remote address set to: 23.29.23.43:26640
[Oct  8 22:22:53]     -- PJSIP/flowroute-00000060 is making progress passing it to Local/**mobile_number**@default-00000053;2
[Oct  8 22:22:53]     -- Local/**mobile_number**@default-00000053;1 is making progress passing it to Local/715@default-00000051;2
[Oct  8 22:22:53]     -- PJSIP/flowroute-00000060 is making progress passing it to Local/**mobile_number**@default-00000053;2
[Oct  8 22:22:53]     -- Local/**mobile_number**@default-00000053;1 is making progress passing it to Local/715@default-00000051;2
[Oct  8 22:22:54]   == Everyone is busy/congested at this time (1:1/0/0)
[Oct  8 22:22:54]     -- Executing [15f5345f-d33b-4259-be4b-1140cc48e2e0@usersharedlines:3] Hangup("Local/15f5345f-d33b-4259-be4b-1140cc48e2e0@usersharedlines-00000052;2", "") in new stack
[Oct  8 22:22:54]   == Spawn extension (usersharedlines, 15f5345f-d33b-4259-be4b-1140cc48e2e0, 3) exited non-zero on 'Local/15f5345f-d33b-4259-be4b-1140cc48e2e0@usersharedlines-00000052;2'
[Oct  8 22:22:54]     -- Nobody picked up in 3000 ms
[Oct  8 22:22:54]     -- PJSIP/flowroute-00000060 is ringing
[Oct  8 22:22:54]     -- Local/**mobile_number**@default-00000053;1 is ringing
[Oct  8 22:22:54]     -- PJSIP/flowroute-00000060 is ringing
[Oct  8 22:22:54]     -- Local/715@default-00000051;1 is ringing
wazo*CLI> pjsip set logger on
PJSIP Logging enabled
...
[Oct  8 22:23:03] <--- Received SIP response (778 bytes) from UDP:147.75.65.194:5060 --->
[Oct  8 22:23:03] SIP/2.0 200 OK
[Oct  8 22:23:03] From: "**inbound_callerid**" <sip:**inbound_number**@**wazo_server**>;tag=85bb724b-f278-4b44-a14d-31c654d37f9e
[Oct  8 22:23:03] To: <sip:**mobile_number**@us-east-nj.sip.flowroute.com>;tag=gK0b9eba8a
[Oct  8 22:23:03] Via: SIP/2.0/UDP **wazo_server**:5060;received=**wazo_publicip**;rport=5060;branch=z9hG4bKPjd2f8501d-07ef-4ed7-b4eb-4d0ec5ca6d06
[Oct  8 22:23:03] Call-ID: a0b2ffd0-c020-4fd9-8b65-44a2a6e1b72e
[Oct  8 22:23:03] CSeq: 2160 INVITE
[Oct  8 22:23:03] Record-Route: <sip:34.208.30.89:5060;lr>
[Oct  8 22:23:03] Record-Route: <sip:147.75.65.194:5060;lr>
[Oct  8 22:23:03] Contact: <sip:+**mobile_number**@23.29.23.36:5060>
[Oct  8 22:23:03] Session-Expires: 600;refresher=uas
[Oct  8 22:23:03] Content-Length:  170
[Oct  8 22:23:03] Content-Type: application/sdp
[Oct  8 22:23:03] Supported: timer
[Oct  8 22:23:03]
[Oct  8 22:23:03] v=0
[Oct  8 22:23:03] o=- 17130 5945 IN IP4 23.29.23.43
[Oct  8 22:23:03] s=-
[Oct  8 22:23:03] c=IN IP4 23.29.23.43
[Oct  8 22:23:03] t=0 0
[Oct  8 22:23:03] m=audio 26640 RTP/AVP 0 101
[Oct  8 22:23:03] a=rtpmap:101 telephone-event/8000
[Oct  8 22:23:03] a=fmtp:101 0-15
[Oct  8 22:23:03] a=maxptime:20
[Oct  8 22:23:03]
[Oct  8 22:23:03] <--- Transmitting SIP request (502 bytes) to UDP:147.75.65.194:5060 --->
[Oct  8 22:23:03] ACK sip:+**mobile_number**@23.29.23.36:5060 SIP/2.0
[Oct  8 22:23:03] Via: SIP/2.0/UDP **wazo_server**:5060;rport;branch=z9hG4bKPj8d9fe9f4-c653-413e-8243-c286765a7b19
[Oct  8 22:23:03] From: "**inbound_callerid**" <sip:**inbound_number**@**wazo_server**>;tag=85bb724b-f278-4b44-a14d-31c654d37f9e
[Oct  8 22:23:03] To: <sip:**mobile_number**@us-east-nj.sip.flowroute.com>;tag=gK0b9eba8a
[Oct  8 22:23:03] Call-ID: a0b2ffd0-c020-4fd9-8b65-44a2a6e1b72e
[Oct  8 22:23:03] CSeq: 2160 ACK
[Oct  8 22:23:03] Route: <sip:147.75.65.194:5060;lr>
[Oct  8 22:23:03] Route: <sip:34.208.30.89:5060;lr>
[Oct  8 22:23:03] Max-Forwards: 70
[Oct  8 22:23:03] User-Agent: Wazo PBX
[Oct  8 22:23:03] Content-Length:  0
[Oct  8 22:23:03]
[Oct  8 22:23:03]
[Oct  8 22:23:03]     -- PJSIP/flowroute-00000060 answered Local/**mobile_number**@default-00000053;2
[Oct  8 22:23:03]     -- Local/**mobile_number**@default-00000053;1 answered Local/715@default-00000051;2
[Oct  8 22:23:03]     -- Channel PJSIP/flowroute-00000060 joined 'simple_bridge' basic-bridge <91bfc8e7-0d65-421b-b0c9-8ac7293bf203>
[Oct  8 22:23:03]     -- Local/715@default-00000051;1 answered PJSIP/flowroute-0000005d
[Oct  8 22:23:03]     -- Channel Local/**mobile_number**@default-00000053;2 joined 'simple_bridge' basic-bridge <91bfc8e7-0d65-421b-b0c9-8ac7293bf203>
[Oct  8 22:23:03]     -- Channel Local/**mobile_number**@default-00000053;1 joined 'simple_bridge' basic-bridge <045258c7-e735-422c-be2a-868f2a2c1aae>
[Oct  8 22:23:03]   == Spawn extension (usersharedlines, 48a1abce-470c-4aa3-a3d0-deb476b30320, 2) exited non-zero on 'Local/48a1abce-470c-4aa3-a3d0-deb476b30320@usersharedlines-00000050;2'
[Oct  8 22:23:03] <--- Transmitting SIP request (482 bytes) to UDP:192.168.20.36:5060 --->
[Oct  8 22:23:03] CANCEL sip:9dqckhfv@192.168.20.36:5060 SIP/2.0
[Oct  8 22:23:03] Via: SIP/2.0/UDP **wazo_server**:5060;rport;branch=z9hG4bKPj1b469b15-8f73-4ec8-a8d9-61c09954c6b6
[Oct  8 22:23:03] From: "**inbound_callerid**" <sip:**inbound_number**@**wazo_server**>;tag=9ada384d-47fd-4e30-a187-42428fbd525f
[Oct  8 22:23:03] To: <sip:9dqckhfv@192.168.20.36>
[Oct  8 22:23:03] Call-ID: a1ef3aed-7e47-42c0-8545-f099fdc7fd4a
[Oct  8 22:23:03] CSeq: 31309 CANCEL
[Oct  8 22:23:03] Reason: SIP;cause=200;text="Call completed elsewhere"
[Oct  8 22:23:03] Reason: Q.850;cause=26
[Oct  8 22:23:03] Max-Forwards: 70
[Oct  8 22:23:03] User-Agent: Wazo PBX
[Oct  8 22:23:03] Content-Length:  0
[Oct  8 22:23:03]
[Oct  8 22:23:03]
[Oct  8 22:23:03]     -- Channel Local/715@default-00000051;2 joined 'simple_bridge' basic-bridge <045258c7-e735-422c-be2a-868f2a2c1aae>
[Oct  8 22:23:03]        > 0x7f5c3402cdd0 -- Strict RTP learning after remote address set to: 23.29.21.90:33862
[Oct  8 22:23:03] <--- Transmitting SIP response (1203 bytes) to UDP:147.75.65.194:5060 --->
[Oct  8 22:23:03] SIP/2.0 200 OK
[Oct  8 22:23:03] Via: SIP/2.0/UDP 147.75.65.194;rport=5060;received=147.75.65.194;branch=z9hG4bK7402.998c8d1f0249596c2d6eb6666a7d687d.0
[Oct  8 22:23:03] Via: SIP/2.0/UDP 54.71.6.127:5060;branch=z9hG4bK7402.5f070bcbb98785efe3b4a1dc42408c82.0
[Oct  8 22:23:03] Via: SIP/2.0/UDP 35.173.62.45:5060;branch=z9hG4bK7402.65b4732b1aec66a86fab9982de550fe7.0
[Oct  8 22:23:03] Via: SIP/2.0/UDP 23.29.21.86:5060;branch=z9hG4bK07Bb6ac7b169f8e1613
[Oct  8 22:23:03] Record-Route: <sip:147.75.65.194;lr>
[Oct  8 22:23:03] Record-Route: <sip:35.173.62.45;lr>
[Oct  8 22:23:03] Call-ID: 856100557_124991049@23.29.21.86
[Oct  8 22:23:03] From: "**inbound_callerid**" <sip:+**inbound_number**@fl.gg>;tag=gK073ea07e
[Oct  8 22:23:03] To: <sip:**wazo_trunk**@fl.gg>;tag=4b6c02b8-db7b-472d-b21a-80966b7a35e4
[Oct  8 22:23:03] CSeq: 13902 INVITE
[Oct  8 22:23:03] Server: Wazo PBX
[Oct  8 22:23:03] Allow: OPTIONS, REGISTER, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, MESSAGE, REFER
[Oct  8 22:23:03] Contact: <sip:**wazo_server**:5060>
[Oct  8 22:23:03] Supported: 100rel, timer, replaces, norefersub
[Oct  8 22:23:03] Session-Expires: 1800;refresher=uac
[Oct  8 22:23:03] Require: timer
[Oct  8 22:23:03] Content-Type: application/sdp
[Oct  8 22:23:03] Content-Length:   226
[Oct  8 22:23:03]
[Oct  8 22:23:03] v=0
[Oct  8 22:23:03] o=- 24258 9155 IN IP4 **wazo_server**
[Oct  8 22:23:03] s=Asterisk
[Oct  8 22:23:03] c=IN IP4 **wazo_server**
[Oct  8 22:23:03] t=0 0
[Oct  8 22:23:03] m=audio 19274 RTP/AVP 0 101
[Oct  8 22:23:03] a=rtpmap:0 PCMU/8000
[Oct  8 22:23:03] a=rtpmap:101 telephone-event/8000
[Oct  8 22:23:03] a=fmtp:101 0-16
[Oct  8 22:23:03] a=ptime:20
[Oct  8 22:23:03] a=maxptime:150
[Oct  8 22:23:03] a=sendrecv
[Oct  8 22:23:03]
[Oct  8 22:23:03]     -- Channel Local/715@default-00000051;1 joined 'simple_bridge' basic-bridge <a68a7da7-2649-4a0e-a0fe-92500563e171>
[Oct  8 22:23:03]     -- Channel PJSIP/flowroute-0000005d joined 'simple_bridge' basic-bridge <a68a7da7-2649-4a0e-a0fe-92500563e171>
[Oct  8 22:23:03] <--- Received SIP response (396 bytes) from UDP:192.168.20.36:5060 --->
[Oct  8 22:23:03] SIP/2.0 487 Request Terminated
[Oct  8 22:23:03] To: <sip:9dqckhfv@192.168.20.36>;tag=b816c4d9cba5b109i0
[Oct  8 22:23:03] From: "**inbound_callerid**" <sip:**inbound_number**@**wazo_server**>;tag=9ada384d-47fd-4e30-a187-42428fbd525f
[Oct  8 22:23:03] Call-ID: a1ef3aed-7e47-42c0-8545-f099fdc7fd4a
[Oct  8 22:23:03] CSeq: 31309 INVITE
[Oct  8 22:23:03] Via: SIP/2.0/UDP **wazo_server**:5060;branch=z9hG4bKPj1b469b15-8f73-4ec8-a8d9-61c09954c6b6
[Oct  8 22:23:03] Server: Cisco/SPA112-1.4.0(001)
[Oct  8 22:23:03] Content-Length: 0
[Oct  8 22:23:03]
[Oct  8 22:23:03]
[Oct  8 22:23:03] <--- Transmitting SIP request (420 bytes) to UDP:192.168.20.36:5060 --->
[Oct  8 22:23:03] ACK sip:9dqckhfv@192.168.20.36:5060 SIP/2.0
[Oct  8 22:23:03] Via: SIP/2.0/UDP **wazo_server**:5060;rport;branch=z9hG4bKPj1b469b15-8f73-4ec8-a8d9-61c09954c6b6
[Oct  8 22:23:03] From: "**inbound_callerid**" <sip:**inbound_number**@**wazo_server**>;tag=9ada384d-47fd-4e30-a187-42428fbd525f
[Oct  8 22:23:03] To: <sip:9dqckhfv@192.168.20.36>;tag=b816c4d9cba5b109i0
[Oct  8 22:23:03] Call-ID: a1ef3aed-7e47-42c0-8545-f099fdc7fd4a
[Oct  8 22:23:03] CSeq: 31309 ACK
[Oct  8 22:23:03] Max-Forwards: 70
[Oct  8 22:23:03] User-Agent: Wazo PBX
[Oct  8 22:23:03] Content-Length:  0
[Oct  8 22:23:03]
[Oct  8 22:23:03]
[Oct  8 22:23:03] <--- Received SIP response (380 bytes) from UDP:192.168.20.36:5060 --->
[Oct  8 22:23:03] SIP/2.0 200 OK
[Oct  8 22:23:03] To: <sip:9dqckhfv@192.168.20.36>;tag=b816c4d9cba5b109i0
[Oct  8 22:23:03] From: "**inbound_callerid**" <sip:**inbound_number**@**wazo_server**>;tag=9ada384d-47fd-4e30-a187-42428fbd525f
[Oct  8 22:23:03] Call-ID: a1ef3aed-7e47-42c0-8545-f099fdc7fd4a
[Oct  8 22:23:03] CSeq: 31309 CANCEL
[Oct  8 22:23:03] Via: SIP/2.0/UDP **wazo_server**:5060;branch=z9hG4bKPj1b469b15-8f73-4ec8-a8d9-61c09954c6b6
[Oct  8 22:23:03] Server: Cisco/SPA112-1.4.0(001)
[Oct  8 22:23:03] Content-Length: 0
[Oct  8 22:23:03]
[Oct  8 22:23:03]
[Oct  8 22:23:03] <--- Received SIP request (589 bytes) from UDP:147.75.65.194:5060 --->
[Oct  8 22:23:03] ACK sip:**wazo_server**:5060 SIP/2.0
[Oct  8 22:23:03] Record-Route: <sip:147.75.65.194;lr>
[Oct  8 22:23:03] Max-Forwards: 67
[Oct  8 22:23:03] Record-Route: <sip:35.173.62.45;lr>
[Oct  8 22:23:03] From: "**inbound_callerid**" <sip:+**inbound_number**@fl.gg>;tag=gK073ea07e
[Oct  8 22:23:03] To: <sip:**wazo_trunk**@fl.gg>;tag=4b6c02b8-db7b-472d-b21a-80966b7a35e4
[Oct  8 22:23:03] Via: SIP/2.0/UDP 147.75.65.194;branch=z9hG4bK7402.869d2dd3a9b13d9a2d6f783c30b4a6da.0
[Oct  8 22:23:03] Via: SIP/2.0/UDP 35.173.62.45:5060;branch=z9hG4bK7402.64bd5fdf829ece19b59387b268e93e81.0
[Oct  8 22:23:03] Via: SIP/2.0/UDP 23.29.21.86:5060;branch=z9hG4bK07Bb6c60ee399de5bfb
[Oct  8 22:23:03] Call-ID: 856100557_124991049@23.29.21.86
[Oct  8 22:23:03] CSeq: 13902 ACK
[Oct  8 22:23:03] Content-Length: 0
[Oct  8 22:23:03]
[Oct  8 22:23:03]
...
[Oct  8 22:23:09]
wazo*CLI> pjsip set logger off
PJSIP Logging disabled
[Oct  8 22:23:13]     -- Channel PJSIP/flowroute-00000060 left 'simple_bridge' basic-bridge <91bfc8e7-0d65-421b-b0c9-8ac7293bf203>
[Oct  8 22:23:13]     -- Channel Local/**mobile_number**@default-00000053;2 left 'simple_bridge' basic-bridge <91bfc8e7-0d65-421b-b0c9-8ac7293bf203>
[Oct  8 22:23:13]   == Spawn extension (outcall, dial, 7) exited non-zero on 'Local/**mobile_number**@default-00000053;2'
[Oct  8 22:23:13]     -- Channel Local/**mobile_number**@default-00000053;1 left 'simple_bridge' basic-bridge <045258c7-e735-422c-be2a-868f2a2c1aae>
[Oct  8 22:23:13]     -- Channel Local/715@default-00000051;2 left 'simple_bridge' basic-bridge <045258c7-e735-422c-be2a-868f2a2c1aae>
[Oct  8 22:23:13]   == Spawn extension (user, dial_from_group, 1) exited non-zero on 'Local/715@default-00000051;2'
[Oct  8 22:23:13]     -- Channel Local/715@default-00000051;1 left 'simple_bridge' basic-bridge <a68a7da7-2649-4a0e-a0fe-92500563e171>
[Oct  8 22:23:13]     -- Channel PJSIP/flowroute-0000005d left 'simple_bridge' basic-bridge <a68a7da7-2649-4a0e-a0fe-92500563e171>
[Oct  8 22:23:13]   == Spawn extension (group, s, 20) exited non-zero on 'PJSIP/flowroute-0000005d'
wazo*CLI>

My suspicion is the reason the audio is not passing between the two devices is that in setting up the connection the internal, non-routable IP address is passed over as opposed to the external address, so SIP establishes the bridge, but the RTP stream has nowhere to go and all day to get there. If that is the issue, how do I get the bridge connection to pass the correct/external address in the RTP setup?

Have you check with the rtp set debug command? If the ip address is non routable that because you have an issue with your nat configuration. You need to check in PJSIP transport (global settings) the configuration of your transport for the signalisation external address and the media external address.

I had tried that yesterday (setting local and external) and once I add external_media_address the effect is that the local extensions will ring once then disappear and the external number will not ring at all. At that point I am also unable to make outbound calls.

Running a packet dump I noticed a null IP address in the SDP/RTP setup stream which is likely the cause - but I don’t know what is causing it:

User-Agent: Wazo PBX
Content-Type: application/sdp
Content-Length: 223
v=0
o=- 907016743 907016743 **IN IP4 (null)**
s=Asterisk
c=IN **IP4 (null)**
t=0 0
m=audio 15356 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=maxptime:150
a=sendrecv