I use a self hosted XMPP stack with ejabberd as server and conversations.im for mobile apps. I have audio and video calls and tons of features built into xmpp. There is a huge selection of apps for all platforms.
XMPP is a battle tested protocol that all major messaging apps use underneath.
I used Matrix a few years ago for a full year. I dropped it and never came back. It is a bloated solution to a problem that was already solved by xmpp.
I programmed a bot that is shared with a private room that provides commands such as archiving websites with archiveit or yt videos with TubeArchivist
I am planning however to migrate from Ejabberd to Prosody as I would like to easilly hack on the source code or extensions and Ejabberd is Erlang with a very rigid stack.