Im Überblick
Im Titelbild seht ihr meine aktuelle Element-App auf dem Desktop. Die Nummerierung bedeutet:
- meine WhatsApp-Chats
- meine Discord-Chats
- ein anderer Matrix-Server
- meine Signal-Chats
Ganz trivial ist das nicht aufzusetzen, war aber auch für mich ohne Ausbildung im IT-Bereich machbar. Grundsätzlich benötigt ihr dafür zunächst einen eigenen Matrix-Server. Anschliessend benötigt ihr für jeden Messenger eine eigene Bridge. Auf matrix.org/ecosystem/bridges sind zum Zeitpunkt dieses Artikels ganze 28 Bridges aufgelistet, die ihr anbinden könnt.
Die Bridge arbeitet dann als Bot auf eurem Matrix-Server, der für euch Nachrichten postet und sich über den Client mit Kommandos (eingeschränkt) steuern lässt. Das Set-up ist immer ziemlich gleich. Im Folgenden stelle ich das sehr abgekürzt dar. Bei mir ist alles als Docker aufgesetzt. Offenbar gibt es auch eine Möglichkeit mit (virtuellen) Maschinen, die ich aber nicht ausprobiert habe.
Der Matrix-Server
Zunächst habe ich über Docker einen Matrix-Server aufgesetzt. Der Code mit Link zur Dokumentation ist auf Github zu finden. Ich nehme nicht an der Federation teil, es kann sich also sonst niemand einen Account anlegen, und ich halte keine Daten, die ich nicht selbst verwende. Vielleicht ein Projekt für später …
Per Default wird eine SQLite-Datenbank angelegt, die Daten werden also in einem .db-File gespeichert. Gemäss Dokumentation ist das für den Eigengebrauch völlig ausreichend. Ich habe mir trotzdem eine Postgresql 18-DB angelegt, die auch von allen Bridges genutzt wird.
Beispiel: Signal-Bridge
Jede Bridge läuft als eigener Docker-Container. Nach dem ersten Run erzeugt der Container eine config.yaml und beendet sich wieder. Diese config.yaml muss dann manuell bearbeitet werden. Hier war der erste grössere Stolperstein. Lest die Dokumentation wirklich sehr, sehr genau. Kleinste Fehler können dazu führen, dass die Bridge nicht funktioniert. Sofern ihr eine externe Postgres-DB benutzt, müsst ihr noch eine (leere) Datenbank anlegen.
Anschliessend den Container wieder starten, er beendet sich wieder und erzeugt eine registration.yaml. Wurde die Datei nicht erzeugt, habt ihr in der config.yaml einen Fehler gemacht. Hier helfen euch die Logs weiter.
In der registration.yaml findet ihr zwei Tokens, die ihr in die config.yaml einfügen müsst (die Platzhalter dafür sind in der config.yaml bereits vorhanden). Zusätzlich müsst ihr die registration.yaml dem Matrix-Container zugänglich machen. Ich habe sie einfach ins entsprechende Verzeichnis kopiert. In Matrix findet ihr eine homeserver.yaml, wo ihr dieses Registration-File referenzieren müsst. Bei mir sieht das so aus:
`app_service_config_files:
- `/data/signal-registration.yaml
- `/data/whatsapp-registration.yaml
- `/data/discord-registration.yaml
Ihr könnt den Inhalt der registration.yaml auch direkt in die homeserver.yaml einfügen, macht die homeserver.yaml aber für mich persönlich schwerer lesbar.
Dann Matrix-Container neu starten, Bridge starten, und es läuft! Zumindest theoretisch – ich brauchte dann doch mehrere Anläufe, bis alle Fehler behoben waren.
Zuletzt geht ihr in den Matrix-Client eurer Wahl (bei mir: Element), loggt euch ein und startet einen neuen Chat mit ‚@signalbot:domain‘. Im Chat gebt ihr ‚login‘ ein. Der Bot sollte euch jetzt einen QR-Code anzeigen, den ihr über eure Signal-App auf dem Handy einscannen müsst.
Fertig!
Element-mobile und die Benachrichtigungen
In der Mobile-App von Element werden euch alle Chats, unabhängig von der Quelle, nach „zuletzt genutzt“ sortiert angezeigt. Super! Bei mir ist das aktuell ein wilder Mix aus Element-, Discord-, Signal-, und WhatsApp-Nachrichten:
Ziel erreicht: Abgesehen vom Chat-Titel erkennt ihr hier nicht mehr, über welchen Messenger ihr gerade kommuniziert. Schreibt euch jemand an, müsst ihr die „Einladung“ von eurem Bot einmalig bestätigen. Ob man auch direkt aus Element jemanden anschreiben kann, mit dem man so noch nie geschrieben hat, habe ich noch nicht herausgefunden.
Neues Rabbit-Hole: Benachrichtungen
Deutlich mehr Zeit als für das Aufsetzen von Matrix und sämtlichen Bridges habe ich für die Notifications auf das Smartphone verwendet. Technisch betrachtet ist das ein ganz eigener Dienst, der mit der Element-App erst einmal nichts zu tun hat. Apple-Geräte nutzen einen eigenen, geschlossenen Standard. Hier ist es offenbar (noch?) nicht möglich, Notifications einzurichten.
Android-Geräte nutzen in aller Regel einen Google-Standard für Push, der auch von freien Apps genutzt werden kann. Das scheint die einfachste Variante zu sein, mit der ich mich aber nicht näher beschäftigt habe. Ich wollte auch das ohne Google hinbekommen. Das Thema an sich ist aber riesig und ich habe es nicht im Ansatz verstanden.
Nun denn, ich habe zusätzlich einen Container für 'ntfy' aufgesetzt. Matrix sendet neue Nachrichten an ntfy, ntfy schickt eine Benachrichtigung an mein Smartphone (Google Pixel 9a mit GrapheneOS). Auf dem Smartphone ist dazu ebenfalls eine ntfy-App notwendig, die vom Betriebssystem als Push-Dienst erkannt wird. An dieser Stelle habe ich über 10 Stunden gebraucht, bis es wirklich funktioniert hat. Die Dokumentationen sind für mein Wissen einfach deutlich zu „schmal“. Des Rätsels Lösung am Ende: Es fehlte mir eine Umgebungsvariable NTFY_AUTH_ACCESS, weshalb ntfy sämtlichen Anfragen abgeblockt hat. Zudem gut zu wissen: ntfy verlangt zwingend SSL, auch wenn die Kommunikation im eigenen LAN bleibt.
Der Vorteil: In ntfy kann ich nun sehr feingranular einstellen, wie ich benachrichtigt werden will (Vorschaubilder, Vorschautext, Menge an Benachrichtungen, die zusammengefasst werden sollen, Timeouts für ungelesene Nachrichten usw.). Für welchen Kanal ich generell Benachrichtigungen möchte, kann ich wie gewohnt direkt in der Element-App auswählen.
Warnhinweise und Fazit
Da nichts im Leben perfekt ist, gibt es bei einem solchen Set-up einige Dinge zu beachten:
Stabilität
Manche Bridges sind noch nicht in einer Version 1.0 veröffentlicht. Durch die vielen Konfigurationen und die stundenlange Bastelei habe ich derzeit noch etwas Zweifel, wie stabil das Ganze läuft, oder ob mir das Set-up bei jedem Update um die Ohren fliegt. Dafür fehlt mir noch die Erfahrung. Zumindest nach dem, was ich gelesen habe, sei das aber kein wirkliches Problem.
Sicherheit
Sofern ihr Matrix über eine Domain exponiert, solltet ihr euch darüber im Klaren sein, welche Sicherheitsmassnahmen ihr treffen müsst. Botnetze sind auch im Fediverse ein grosses Problem. Achtet zudem auf den Speicherplatz: Je nachdem, wo und wie lange ihr Bilder und Videos speichert und wie eure Aufräumroutine ist (alles konfigurierbar), können sich in kurzer Zeit sehr viele Daten ansammeln, die euren Speicher füllen. Nach meiner Erfahrung ist das primär ein Thema, wenn ihr z. B. andere Matrix-Spaces verbindet.
Souveränität
Wir möchten ja Matrix nutzen, weil wir frei über unsere Daten entscheiden wollen. Weil wir nicht abhängig von einem einzigen Hoster sein wollen. Gerade bei WhatsApp und Discord basiert das eigentliche Geschäftsmodell auf der Auswertung von (Meta-)Daten. Mit unseren Bridges teilen wir natürlich auch diese Daten mit den entsprechenden Unternehmen. Am Ende ist es ein Trade-off, den jeder für sich selbst beurteilen muss. Für mich persönlich bedeutet die Nutzung der Bridge keinen zusätzlichen Souveränitätsverlust gegenüber der regulären App-Nutzung.
Funktionalität
Soweit ich bisher erlebt habe, funktionieren alle meine Anwendungsfälle problemlos: chatten, Bilder teilen, Emojis, Nachrichten mit Emojis kommentieren. Je nach Bridge gibt es aber Einschränkungen, beispielsweise dass Videoanrufe nicht unterstützt werden. Ihr könnt z. B. auf WhatsApp-Status eurer Freunde, die alle in einem einzigen Chat angezeigt werden, nicht mit Emojis reagieren. Falls ihr derartige, etwas „speziellere“ Funktionen benötigt, unbedingt vorher prüfen, ob das unterstützt wird.
Fazit
Ich bin extrem zufrieden (und ja: ein bisschen stolz) mit diesem Set-up. Endlich brauche ich all die verschiedenen Apps nur noch, wenn ich einen neuen Chat anfangen will (also sehr selten). Einfach ultrakomfortabel!
Quellen:
Übersicht Bridges: https://matrix.org/ecosystem/bridges
Matrix-Server auf Github: https://github.com/element-hq/synapse
Github Ntfy: https://github.com/binwiederhier/ntfy


Schöner Artikel - lieben Dank für den Anstoss.
Ich trage mich schon seit Längerem mit dem Gedanken, das Bridging verschiedener Messaging Dienste zu versuchen, habe das aber bisher nicht priorisiert.
Ich nutze verschiedene Betriebssystem und Rechner/Laptops sowie Handys und bin da sehr schnell (insb. bei WhatsApp) am Limit der zu verbindenden Geräte und muss ständig tauschen. Bringt mir da ein Bridging über einen eigenen Matrix-Server einen Vorteil, indem hier nur die Bridge auf dem Matrix-Server als Client mit z.B. WhatsApp verbunden ist und ich mit den Matrix-Apps auf verschiedenen Geräten auf diesen Client zugreifen kann?
Genau, mit dieser Lösung ist die Bridge der einzige Client, den du authentifizieren musst. Die Chat-Dienste "sehen" immer nur dieses eine Geröt. Anschliessend kannst du prinzipiell beliebig viele Matrix-Clients verbinden.
https://github.com/spantaleev/matrix-docker-ansible-deploy Wenn man sich in Ansible einarbeitet, kann man mit diesem Ansible Playbook einen Docker Matrixserver mit allem drum und dran vergleichsweise schnell und stabil installieren, konfigurieren und updaten. Alles ist sinnvoll voreingestellt, kann bei bedarf aber individualisiert werden. Eine neue Bridge dauert 5-10 Minten (Idee -> lauffähig) und ist bei mir schon ein paar Jahre ohne Probleme in Betrieb.
Ansible ist ein Tool zur automatischen Server Verwaltung.
Danke für diesen Hinweis, Chris!
Lustigerweise hatte ich gerade kurz vor dem Erscheinen dieses Artikels einen Anlauf genommen, den Synapse-Server in meinem Homelab zum Laufen zu bekommen. Prinzipiell läuft der auch, aber ich müsste dazu mein bisheriges Konzept des zentralen Geoblockings in Caddy über den Haufen werfen und Geoblocking auf allen anderen Containern individuell einrichten. Das tue ich mir dann doch nicht an.
Aber auf einer anderen Maschine mit einer anderen IP wäre das noch möglich. Da käme mir die Ansible-Lösung sehr gelegen.
Guter Hinweis, darüber bin ich auch gestolpert. Soll wirklich ziemlich gut sein, ergibt eher ein "grosses Ganzes" als meine Docker-ception :)
Oder man nutzt https://frei.chat/ Ich fand die Pflege mit der Zeit sehr aufwändig und irgendwann ging dendrite nicht mehr weil die Entwicklung eingestellt wurde
Hi, mit dem Setup brauch ich aber trotzdem erst einmal einen WA-Account, einen Signal-Account, usw., oder?
Richtig. Die Bridges sind eben "Brücken" zwischen einem Matrix-Account und einem WA-/Signal-/etc-Account. Im Fall von WA geht dann auch noch die Verschlüsselung verloren, das muss man auch wirklich wollen.
Ein sehr interessantes Projekt und ein wirklich gut gemachter Beitrag. Vielen Dank! So wie ich es verstehe, brauchst du dafür natürlich immer ein separat registriertes Konto bei jedem einzelnen Messenger. Kann schnell eine zusätzliche Stolperfalle sein, wenn sich die APIs verändern. Funktionieren denn alle gängigen Formatierungen (Fett, kursiv, Emojis) oder das Weiterleiten / Forwarding von Nachrichten messengerübreifend? Kannst du beispielsweise eine Nachricht gleichzeitig an 3 verschiedene Nutzer in 3 unterschiedlichen Messengern versenden oder musst du dem Vorgang drei mal wiederholen? Und kann jemand erklären wie es sich dann mit der E2E Ende-Zu-Ende Verschlüsselung in diesem Fall verhält?
Besten Dank! Schön zu hören dass das Thema interessant ist für dich. Richtig, du brauchst für jeden Messenger auch ein "reguläres" Konto. Du kannst prinzipiell z.B. in Element einen Gruppenchat mit 5 Mailadressen, 2 Signal-Kontakten und einer Whatsapp-Gruppe etstellen. Alles was du postest geht dann über sämtliche Kanäle raus. Wär vielleicht was für den "Massenversand" in einem Verein oder so. Aber ich hab das noch nie versucht, mach dich am besten noch woanders schlau darüber.
Ach vergiss doch das Gefrickel. Die Bridges brechen regelmäßig und das macht so keinen Spaß, weil es nicht dauerhaft stabil läuft.
Hier kann man einen solchen Multi Messenger Server ab 5 Euro mieten https://etke.cc/
Wohl eher „ab 10 €“, denn ohne das Bridges-Paket, das 5 € extra kostet, wäre es kein Multi-Messenger-Server.
Also ich betreibe ein ntfy ohne Domain und SSL um Nachrichten von HomeAssistant zu erhalten, ohne die energiehungrige App zu benötigen. Ich vermute, dass ich SSL und eine Domain benötige um die ntfy Integration von Element nutzen zu können, da erhalte ich eine Fehlermeldung, wenn ich die Verbindung teste.