Aller au contenu

SimPhone — Simulation d'appels

SimPhone est une PWA qui simule un téléphone réaliste pour la formation en simulation médicale. Elle permet aux participants de recevoir et passer des appels dans le cadre d’un scénario (régulation SAMU, coordination inter-services, appel famille…).

Pendant une séance de simulation, les participants utilisent SimPhone sur leur smartphone pour communiquer comme dans un environnement hospitalier réel :

  • Appels entre participants : deux smartphones SimPhone connectés au même SimServer peuvent s’appeler via l’annuaire intégré
  • Conférence : ajout d’un tiers à un appel actif pour les situations de coordination multi-services
  • Annuaire professionnel : contacts pré-configurés (SAMU, Pompiers, Médecin régulateur, Chirurgien de garde, Réanimation, Labo, Imagerie)

Interface téléphone réaliste

Pavé numérique 12 touches, annuaire avec recherche, historique d’appels. Conçue pour être intuitive et immersive.

Audio bidirectionnel WebRTC

Audio temps réel via go2rtc (WHIP/WHEP). Suppression d’écho et réduction de bruit intégrées.

Appels et conférence

Appel 1-à-1 entre participants, mise en attente, reprise, et conférence à 3+ participants.

PWA installable

Installable sur le smartphone comme une app native. Fonctionne en mode portrait avec navigation par onglets.

┌────────────────────────────────────────────────────┐
│ SimServer (Docker) │
│ ┌─────────────┐ ┌───────────┐ │
│ │ FastAPI │ │ go2rtc │ │
│ │ PhoneManager │ │ (WebRTC) │ │
│ └──────┬──────┘ └─────┬─────┘ │
│ WebSocket WebRTC audio │
└─────────┬────────────────┬─────────────────────────┘
│ │
┌─────────▼──┐ ┌───────▼──────┐
│ SimPhone A │ │ SimPhone B │
│ (PWA) │ │ (PWA) │
└────────────┘ └──────────────┘

Flux audio 2 participants :

  • Phone A publie son micro vers go2rtc (WHIP) → Phone B reçoit (WHEP)
  • Phone B publie son micro vers go2rtc (WHIP) → Phone A reçoit (WHEP)

Flux conférence (3+ participants) :

  • Chaque participant publie vers son stream individuel
  • go2rtc crée un stream mixé phone-conf-{callId} agrégeant tous les flux
  • Chaque participant souscrit au stream conférence
CoucheTechnologie
FrontendVue.js 3 + TypeScript (PWA)
AudioWebRTC via go2rtc (WHIP/WHEP)
SignalingWebSocket (/ws/phone/{id})
StatePinia (persisté localStorage)
BackendFastAPI (PhoneManager + handlers)
i18nvue-i18n v10 (français/anglais)

SimPhone se connecte à SimServer via WebSocket. À la connexion :

  1. Le téléphone s’enregistre auprès du PhoneManager
  2. Le serveur attribue un numéro fictif (pool 01 50 00 10 01 à 01 50 00 10 10)
  3. Le serveur envoie l’annuaire des contacts disponibles
  4. Le téléphone est prêt à passer et recevoir des appels
Fenêtre de terminal
cd apps/phone && npm install # Installer les dépendances
cd apps/phone && npm run dev # Serveur de développement (localhost:5177)
cd apps/phone && npm run build # Build production
cd apps/phone && npm test # Tests unitaires

Ou via le Makefile racine :

Fenêtre de terminal
make dev-phone # SimPhone Vite dev (:5177)
make phone-test # Tests SimPhone
make phone-build # Build SimPhone

SimPhone est distribué sous licence GPLv3, comme les autres composants open source de l’écosystème KerSim.