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

80 lines
3.1 KiB
Markdown

# 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