GoWeBaKnowledge Center

THE UNIFIED PLATFORM BIBLE — ADDENDUM 09

WebaCom · WebaCall — Sauvegarde média et appels vidéo — Juillet 2026

Version : 1.0
Date : 7 juillet 2026
Auteur : Alain Bessette, CFO/Product Owner, ABI Conglomerate
Domaine : GoWeBa.com
Statut : Addendum stratégique officiel — Spécification contraignante
Contraintes : ZÉRO perte de données · ZÉRO force-reset · ZÉRO interruption de service


⚠️ AVIS CRITIQUE
Cet addendum a la MÊME autorité que la Partie 1, la Partie 2 et tous les addendums précédents.
Toutes les fonctionnalités décrites sont déployées en production et sauvegardées en checkpoint.
Aucune modification de schéma incompatible n'a été effectuée.

📋 TABLE DES MATIÈRES

  1. Vue d'ensemble
  2. Phase I-5g — Sauvegarder les médias dans WebaDrive
  3. Phase J — WebaCall avec Jitsi Meet
  4. Architecture technique
  5. Fichiers principaux modifiés
  6. Feuille de route — Évolution vers Twilio

<a id="overview"></a>

SECTION 1 : VUE D'ENSEMBLE

Cet addendum documente deux nouvelles fonctionnalités majeures livrées le 7 juillet 2026, renforçant le module WebaCom (messagerie d'équipe) :

FonctionnalitéPhaseDescription
Sauvegarde média → WebaDriveI-5gTout contenu partagé dans WebaCom (photos, vidéos, audio, fichiers) peut être sauvegardé en un clic dans WebaDrive
WebaCall (Jitsi Meet)JAppels audio et vidéo intégrés dans les conversations (DM + canaux) via Jitsi Meet

Principes de conception

  • Zéro téléchargement : La sauvegarde vers WebaDrive utilise la copie S3 intra-bucket (aucun téléchargement/re-upload)
  • Déterminisme : Les salles Jitsi sont générées à partir d'un hash SHA-256 de l'ID de conversation — même conversation = même salle
  • Trilingue : Toutes les interfaces supportent le français, l'anglais et l'espagnol
  • Aucune modification de schéma : Les deux fonctionnalités utilisent les champs existants (contentType, metadata Json)

<a id="save-to-drive"></a>

SECTION 2 : PHASE I-5g — SAUVEGARDER LES MÉDIAS DANS WEBADRIVE

2.1 Problème résolu

Les utilisateurs partagent régulièrement des photos, vidéos, messages audio et fichiers dans WebaCom. Avant cette phase, ces médias restaient confinés dans la conversation sans possibilité de les organiser dans WebaDrive pour une consultation ultérieure ou un classement.

2.2 Solution implémentée

Un bouton « Sauvegarder » apparaît sur chaque type de média partagé dans les conversations WebaCom. En un clic, le fichier est copié dans un dossier système « WebaCom » automatiquement créé dans WebaDrive de l'utilisateur.

2.3 Fonctionnalités détaillées

2.3.1 API Backend

Route : POST /api/webacom/media/save-to-drive

ParamètreTypeDescription
cloudStoragePathstringChemin S3 du fichier source
fileNamestringNom du fichier à sauvegarder
mimeTypestringType MIME du fichier
fileSizenumber?Taille en octets (optionnel, récupéré via HeadObject si absent)

Comportement :

  • Authentification requise (requireAuth() + getOrgScope())
  • Création automatique du dossier système « WebaCom » (type SYSTEM_DEFAULT, couleur cyan, icône MessageCircle)
  • Copie S3 intra-bucket via CopyObjectCommand — aucun téléchargement réseau
  • Détection de doublons (vérifie description contains 'webacom-source:{path}' avant création)
  • Création d'un enregistrement FileAsset avec traçabilité de la source
  • Gestion sérialisée de BigInt pour sizeBytes

2.3.2 Utilitaires de stockage ajoutés

Deux nouvelles fonctions dans lib/storage.ts :

FonctionDescription
copyObjectInS3(sourceKey, destKey)Copie S3 intra-bucket — aucun transfert réseau
headObject(key)Récupère taille + type MIME sans télécharger le contenu

2.3.3 Interface utilisateur

Le bouton de sauvegarde apparaît sur quatre types de contenu dans les bulles de messages WebaCom :

Type de contenuPosition du boutonParticularité
ImagesBouton pill sous le nom de fichierÀ côté du bouton de téléchargement
Fichiers (PDF, DOC, etc.)Bouton pill sous le nom de fichierÀ côté du bouton de téléchargement
VidéosBouton pill dans la rangée d'actionsÀ côté de « Transcrire »
AudioBouton pill dans la rangée d'actionsÀ côté de « Transcrire »

3 états visuels :

ÉtatIcôneTexteStyle
PrêtHardDriveDownloadSauvegarder / Save to Drive / GuardarNormal
En coursSpinnerSauvegarde... / Saving... / Guardando...Animé
TerminéCheckSauvegardé / Saved / GuardadoVert ✓

Noms de fichiers auto-générés : Pour les vidéos/audio sans fileName dans les métadonnées, des noms descriptifs sont générés automatiquement (ex. video_abc123.mp4, audio_abc123.webm).


<a id="webacall"></a>

SECTION 3 : PHASE J — WEBACALL AVEC JITSI MEET

3.1 Problème résolu

Les membres d'une organisation communiquent via WebaCom (texte, audio, vidéo, fichiers), mais n'avaient pas de moyen intégré de lancer un appel vocal ou vidéo directement depuis une conversation.

3.2 Solution implémentée

WebaCall intègre Jitsi Meet (plateforme open-source de visioconférence) directement dans WebaCom. Deux boutons d'appel (audio + vidéo) apparaissent dans l'en-tête de chaque conversation, et une carte d'appel riche est affichée dans le fil de messages.

3.3 Fonctionnalités détaillées

3.3.1 Boutons d'appel dans l'en-tête du chat

BoutonIcôneActionPosition
Appel audioPhone (bleu)Lance un appel audio JitsiEn-tête, avant l'indicateur SSE
Appel vidéoVideo (vert)Lance un appel vidéo JitsiEn-tête, avant l'indicateur SSE

Comportement :

  • Disponible sur tous les types de conversation : DM (1-à-1) et Canaux (groupe)
  • Support inter-organisations (conversations isCrossOrg)
  • Spinner de chargement pendant l'initialisation
  • Ouvre Jitsi Meet dans un nouvel onglet du navigateur

3.3.2 API Backend

Route : POST /api/webacom/conversations/[id]/call

ParamètreTypeDescription
callType'audio' | 'video'Type d'appel à démarrer

Algorithme :

  1. Authentification (requireAuth() + getOrgScope())
  2. Vérification d'appartenance à la conversation (supporte cross-org)
  3. Génération du nom de salle déterministe :
    SHA-256(conversationId) → premiers 12 caractères → "GoWeBa-{hash12}"
    
  4. Création d'un message WebaComMessage avec :
    • contentType = 'call'
    • metadata = { jitsiUrl, roomName, callType, startedBy, startedByName, startedAt }
  5. Mise à jour du preview de conversation + compteurs non-lus
  6. Retour du message créé + URL Jitsi

URL de la salle : https://meet.jit.si/GoWeBa-{hash12}

Propriété clé : Le nom de salle est déterministe — la même conversation génère toujours la même salle. Les participants peuvent quitter et rejoindre à tout moment.

3.3.3 Carte d'appel dans les messages

Lorsqu'un appel est lancé, une carte riche apparaît dans le fil de messages :

ÉlémentAudioVidéo
IcônePhoneCall dans cercle bleuVideo dans cercle vert
TitreAppel audio / Audio call / Llamada de audioAppel vidéo / Video call / Videollamada
Sous-titreDémarré par [nom]Démarré par [nom]
ActionBouton « Rejoindre » avec icône ExternalLinkBouton « Rejoindre » avec icône ExternalLink

La carte est stylisée de manière cohérente avec les cartes de partage d'email (email_share) :

  • Bordure arrondie avec hover
  • Couleurs adaptatives (différentes si envoyé par moi vs reçu)
  • Lien cliquable vers la salle Jitsi

3.3.4 Capacités de Jitsi Meet

FonctionnalitéSupportéNotes
Appels 1-à-1Via DM
Appels de groupeVia canaux — jusqu'à 75+ participants
Audio seulementCaméra désactivable côté Jitsi
Vidéo HDRésolution adaptative selon bande passante
Partage d'écranFonctionnalité native de Jitsi
Chat intégréChat interne de Jitsi (en parallèle de WebaCom)
ChiffrementTLS + SRTP (chiffrement de bout en bout optionnel)
EnregistrementNon disponible sur les serveurs publics Jitsi
TranscriptionNon disponible sur les serveurs publics Jitsi

<a id="architecture"></a>

SECTION 4 : ARCHITECTURE TECHNIQUE

4.1 Aucune modification de schéma

Les deux fonctionnalités ont été implémentées sans aucune modification du schéma Prisma. Elles exploitent les champs existants du modèle WebaComMessage :

ChampTypeUtilisation
contentTypeString @default("text")Nouvelles valeurs : 'call' (WebaCall)
metadataJson?Métadonnées structurées : URL Jitsi, type d'appel, etc.

La sauvegarde WebaDrive crée des enregistrements FileAsset (modèle existant) et des dossiers StorageFolder (type SYSTEM_DEFAULT existant).

4.2 Sécurité

  • Toutes les API nécessitent une authentification (requireAuth())
  • Vérification d'appartenance à la conversation avant toute action
  • Support des conversations inter-organisations (isCrossOrg)
  • Détection de doublons pour la sauvegarde WebaDrive
  • Copie S3 intra-bucket (pas d'exposition de données en transit)

4.3 Performance

  • Copie S3 intra-bucket : Aucun téléchargement/re-upload — transfert serveur-à-serveur instantané
  • headObject() : Récupère taille et type MIME sans télécharger le contenu
  • Hash SHA-256 déterministe : Calcul instantané, pas de recherche en base de données pour le nom de salle

<a id="fichiers"></a>

SECTION 5 : FICHIERS PRINCIPAUX MODIFIÉS

5.1 Phase I-5g — Sauvegarde média

FichierActionDescription
lib/storage.tsModifiéAjout copyObjectInS3(), headObject(), imports CopyObjectCommand, HeadObjectCommand
app/api/webacom/media/save-to-drive/route.tsNouveauAPI de sauvegarde vers WebaDrive
app/(app)/webacom/webacom-client.tsxModifiéBoutons « Sauvegarder » sur images, fichiers, vidéos, audio

5.2 Phase J — WebaCall

FichierActionDescription
app/api/webacom/conversations/[id]/call/route.tsNouveauAPI d'initiation d'appel Jitsi
app/(app)/webacom/webacom-client.tsxModifiéBoutons d'appel en-tête, carte d'appel riche, fonction startCall()

5.3 Icônes Lucide-React ajoutées

IcôneModuleUtilisation
HardDriveDownloadI-5gBouton sauvegarde WebaDrive
PhoneJBouton appel audio
PhoneCallJIcône carte d'appel audio

<a id="roadmap"></a>

SECTION 6 : FEUILLE DE ROUTE — ÉVOLUTION VERS TWILIO

WebaCall utilise actuellement Jitsi Meet (serveurs publics gratuits) comme solution de visioconférence. L'architecture est conçue pour évoluer vers Twilio lorsque le besoin de fonctionnalités avancées se confirmera.

6.1 Phase J actuelle (Jitsi Meet)

AspectStatut
Appels audio/vidéo 1-à-1 et groupe✅ Déployé
Partage d'écran✅ Via Jitsi
Carte d'appel dans WebaCom✅ Déployé
CoûtGratuit

6.2 Phase J-v2 prévue (Twilio)

FonctionnalitéDescription
Enregistrement des appelsSauvegarde automatique dans WebaDrive
Transcription automatiquePipeline existant (I-5a) réutilisé : /api/webacom/media/transcribe
TraductionPipeline existant (I-5a) réutilisé : /api/webacom/media/translate
Historique completLog détaillé des appels avec durée, participants, statut
Numéros de téléphoneAppels PSTN via les lignes Twilio existantes

Note : GoWeBa utilise déjà Twilio pour la téléphonie et les SMS, et SendGrid pour les emails. La migration vers Twilio pour la visioconférence s'inscrit dans la stratégie de consolidation sur une plateforme unifiée Twilio/SendGrid.


📝 HISTORIQUE DES VERSIONS

VersionDateChangements
1.07 juillet 2026Version initiale — Phase I-5g + Phase J

Fin de l'Addendum 09 — WebaCom · WebaCall — Juillet 2026

© 2024–2026 GOWEBA INC. — Make it Simple, Make it Possible, Make it Real.