Confirm the symptom
Separate a missing BYE from a user-interface delay. Calls & Reports should show whether both FreeSWITCH legs ended and which side supplied the final hangup cause.
Inspect dialog routing
A re-INVITE or UPDATE can change the media path without changing who must receive the final BYE.
- Check Contact, Via, Route and Record-Route values on the established dialog.
- Verify that NAT rewriting does not replace a reachable endpoint address with loopback or a private address.
- Confirm that the PBX stays in the signaling path for both legs.