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
/feedbackpour répondre
Réponse → email vers l'auteur
Quand l'admin clique sur « Envoyer + … », l'app :
- Met à jour
FeedbackMessage.admin_response+response_sent_at - Envoie un email à
FeedbackMessage.user_emailavec la réponse - Met à jour le statut selon le bouton choisi
- 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