eptm_dashboard/data/docs/12-feedback.md
2026-05-12 15:30:28 +02:00

3.1 KiB

Feedback in-app (chat widget)

L'application embarque un widget de feedback permettant à n'importe quel utilisateur de signaler un bug ou de proposer une idée d'amélioration, sans quitter l'app.

Côté utilisateur

Bouton flottant (FAB)

Un bouton circulaire bleu flottant en bas-droite de l'écran (icône bulle), visible sur toutes les pages. Au clic, ouvre une modale chat.

Modale chat

  • Champ de type : Bug / Proposition (radio)
  • Champ message : textarea multiligne, auto-scroll en bas après chaque envoi
  • Bouton « Envoyer »
  • Historique : les messages précédents (envoyés par l'user) et les réponses admin sont affichés sous forme de bulles type chat

Notification visuelle

Si un admin a répondu mais que l'user n'a pas encore consulté, l'icône du FAB change de couleur (orange) pour indiquer un nouveau message.

Côté admin

Page /feedback

Liste de tous les feedbacks reçus, triés par date desc :

  • Statut : new (bleu) / in_progress (orange) / resolved (vert)
  • Type : Bug / Proposition
  • Auteur : nom complet + email
  • Message
  • Page d'origine (URL de l'app où l'user était au moment du clic)
  • Réponse admin (textarea)
  • 3 boutons d'envoi :
    • Envoyer uniquement : envoie le message à l'user (visible dans son chat) sans changer le statut
    • Envoyer + Marquer en cours : status → in_progress
    • Envoyer + Marquer résolu : status → resolved

Cliquer sur une ligne ouvre directement le panneau d'édition.

Email de notification

À la création d'un feedback, un email est envoyé à l'adresse configurée en /params → Configuration email → Email admin (feedback in-app). Si cette adresse est vide, aucun email n'est envoyé.

L'email contient :

  • Type + message
  • Page d'origine
  • Lien direct vers /feedback pour répondre

Réponse → email vers l'auteur

Quand l'admin clique sur « Envoyer + … », l'app :

  1. Met à jour FeedbackMessage.admin_response + response_sent_at
  2. Envoie un email à FeedbackMessage.user_email avec la réponse
  3. Met à jour le statut selon le bouton choisi
  4. Côté user, la réponse apparaît en bulle dans le chat à la prochaine ouverture

Modèle de données

Table FeedbackMessage (src/db.py) :

id, created_at, created_by (username), user_email, type ("bug"|"feature"),
message, context_url, status ("new"|"in_progress"|"resolved"),
admin_response, response_sent_at

Configuration

Tout est centralisé dans /params → Configuration email :

  • SMTP (hôte, port, login, password, sender) — partagé avec l'envoi de récap d'absences
  • Email admin (feedback in-app) — destinataire des notifs feedback

Notes techniques

  • Le titre de la modale est "Feedback" (anciennement « Aide & feedback EPTM », renommé après que Edge traduisait l'objet automatiquement).
  • Pour éviter la traduction auto du navigateur sur les textes critiques, l'app utilise :
    • <meta name="google" content="notranslate"> global
    • <html lang="fr"> + translate="no" injecté au boot
    • Classe notranslate + custom_attrs={"translate": "no"} sur les composants concernés