Files
g9-migration/g9-migration/BRIDGE-WHATSAPP.md
T

4.3 KiB

BRIDGE WHATSAPP ↔ MATRIX (T-W — étude, 0 installation)

Contexte décidé 12/10 : WhatsApp est indispensable (famille, amis, travail) et ne sera pas remplacé. Matrix = complément du foyer. Ce document dit ce qu'un pont apporte, ce qu'il ne donne pas, et ce qui est interdit. Aucune installation sur le numéro familial.

1. L'outil

Point Fait
Projet mautrix-whatsapp (Tulir / mautrix), basé sur whatsmeow
Licence AGPL-3.0 (compatible avec la règle « OSS + chemin de sortie » de la table rase)
Mécanisme protocole WhatsApp Web multi-device : le serveur tient une session liée par QR code
Contrainte téléphone WhatsApp impose que le téléphone se connecte au moins tous les 12 jours, sinon la session est coupée → re-link (QR) à refaire
État DB (messages, préférences) + session (clés de liaison) + médias = brique stateful
Chiffrement côté Matrix : E2EE gérable ; côté WhatsApp : la session standard, tes correspondants ne voient que WhatsApp

2. Ce que le pont apporte / ce qu'il ne donne pas

Apporte Ne donne pas
Miroir des conversations WhatsApp dans Element (MP, groupes, médias), historique importable un canal commun : un groupe WhatsApp et un salon Matrix ne « se parlent » pas proprement (les membres WhatsApp ne voient pas Matrix)
Répondre depuis Element la fin de WhatsApp : WhatsApp reste la source
Lecture centralisée (1 client pour la famille + les alertes ops) la garantie de disponibilité : pont cassé = perte de l'affichage, pas des messages
Base pour qu'Effi (assistante) lisse/résume des MP si tu l'autorises la conformité : un client non officiel est contraire aux ToS WhatsApp

3. Risques à nommer (le point qui décide tout)

Risque Détail Conséquence pour nous
Bannissement du numéro WhatsApp détecte les clients non officiels ; le risque est réel et non nul ton numéro familial est « indispensable » → interdiction : jamais le numéro principal sur un pont
Session qui expire > 12 jours sans connexion du téléphone = déconnexion re-link manuel = maintenance que tu veux éliminer
Stateful fragile session + DB + médias ; montée de version du protocole WhatsApp non maîtrisée épingler par digest, exclure de Watchtower, backup session+DB dans restic
Confidentialité les MP passent par un daemon sur le G9 + stockage local à accepter explicitement (choix de périmètre)
Surface d'attaque brique de plus, exposée = non (interne), mais lit un compte de communication pas d'exposition WAN ; pas d'automatisation d'envoi

4. Interdits écrits (T-W.3)

  1. Numéro familial principal : jamais relié à un pont.
  2. Alertes ops sur WhatsApp : le canal d'alerte reste Matrix (S8.4), pas WhatsApp.
  3. Aucune automatisation qui envoie des messages WhatsApp (n8n/IA) : lecture seulement, si pilote validé.
  4. Aucune exposition WAN du pont ; aucune ouverture ufw pour lui.

5. Si un jour GO utilisateur (pilote borné)

Étape Contenu
1 numéro secondaire isolé (numero dédié, vide, hors famille)
2 conteneur épinglé par digest, label watchtower.enable=false, DB + session dans /data/docker/whatsapp/
3 session + DB dans les snapshots restic (vérifié)
4 7 jours de miroir stable (pas de re-link, pas de perte de messages)
5 re-link testé (déconnexion volontaire → QR → reprise)
6 rollback documenté : docker compose -f compose/whatsapp/docker-compose.yml down (aucune donnée famille concernée)
7 journal + grille S14 (décision, raison, coût constaté)

6. Verdict de l'étude

  • Utile si l'objectif est « lire au même endroit » (Element = foyer + alertes) et que le pilote reste sur un numéro secondaire.
  • Pas utile si l'objectif est de quitter WhatsApp : le pont ne fait pas ça.
  • Coût de maintenance : session (QR/12 jours) + DB + médias = exactement le type de charge que tu veux supprimer. Le pont ajoute de la maintenance pour un gain de confort.
  • Recommandation : étude validée, pilote non déclenché ; on en reparle quand Element tourne pour le foyer et que les alertes ops sont stables (tâche MATRICE FAMILLE), jamais avant.