espace-paie-odentas/DEBUG_EMAIL_NOTIFICATIONS_TICKETS.md

169 lines
5 KiB
Markdown

# 🔍 Guide de débogage - Notifications Email Tickets
## ✅ Corrections appliquées
1. **Import Supabase** : Remplacé `createRouteHandlerClient` par `createSbServer` et `createSbServiceRole`
2. **Permissions** : Utilisation de `createSbServiceRole()` pour `getUserById()`
3. **Récupération du prénom** : Depuis `user_metadata.display_name` au lieu de `organization_members.first_name`
4. **Logs ajoutés** : Logs détaillés à chaque étape de l'envoi
## 📋 Comment tester
### 1. Ouvrir le terminal où tourne `npm run dev`
### 2. Envoyer un message depuis `/staff/tickets/[id]`
- Écrire un message
- **NE PAS** cocher "Note interne"
- Cliquer sur "Envoyer"
- Confirmer dans le modal
### 3. Surveiller les logs dans le terminal
Vous devriez voir ces logs dans l'ordre :
#### ✅ Logs attendus (succès)
```
📧 [POST messages] Envoi de notification email...
📧 [POST messages] Ticket: { id: 'xxx-xxx-xxx', created_by: 'yyy-yyy-yyy' }
📧 [POST messages] Creator user: { hasData: true, email: 'user@example.com', error: null }
📧 [POST messages] Staff profile: { hasData: true, email: 'staff@example.com', error: null }
📧 [POST messages] Envoi vers: user@example.com
📧 [POST messages] Données email: {
firstName: 'Jean',
staffName: 'Support Team',
ticketId: 'xxx-xxx-xxx',
ticketSubject: 'Mon problème'
}
🔍 [SES DEBUG] sendUniversalEmailV2 called with: {
type: 'support-reply',
toEmail: 'user@example.com',
subject: 'Nouvelle réponse à votre ticket: Mon problème'
}
✅ Email sent successfully: [MessageId]
✅ [POST messages] Notification email envoyée à user@example.com pour le ticket xxx-xxx-xxx
```
#### ❌ Logs d'erreur possibles
**Problème 1 : Utilisateur introuvable**
```
📧 [POST messages] Creator user: { hasData: false, email: undefined, error: [Error] }
❌ [POST messages] Email du créateur introuvable
```
**Solution** : L'utilisateur n'existe pas ou a été supprimé
**Problème 2 : Permissions insuffisantes**
```
❌ [POST messages] Erreur: AuthApiError: User not allowed
```
**Solution** : Vérifier que `SUPABASE_SERVICE_ROLE_KEY` est bien configurée
**Problème 3 : Email invalide**
```
🚨 [SES DEBUG] Invalid toEmail detected: { toEmail: '', type: 'string' }
```
**Solution** : L'utilisateur n'a pas d'email configuré
**Problème 4 : Erreur SES**
```
❌ [SES ERROR] Failed to send email: [Error message]
```
**Solution** : Problème avec AWS SES (quota, email non vérifié, etc.)
## 🔍 Vérifications supplémentaires
### Vérifier la variable d'environnement
```bash
# Dans le terminal
echo $SUPABASE_SERVICE_ROLE_KEY
```
Doit retourner une longue chaîne commençant par `eyJ...`
### Vérifier la configuration SES
```bash
# Vérifier que les variables AWS sont configurées
grep "AWS_" .env.local
```
Doit contenir :
```
AWS_REGION=eu-west-3
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_SES_FROM_EMAIL=...
```
### Tester l'envoi d'email directement
Vous pouvez créer un petit script de test dans `/scripts/test-email.ts` :
```typescript
import { sendSupportReplyEmail } from "@/lib/emailMigrationHelpers";
async function testEmail() {
try {
await sendSupportReplyEmail("votre-email@example.com", {
firstName: "Test",
ticketId: "test-123",
ticketSubject: "Test d'envoi",
staffName: "Équipe Test",
staffMessage: "Ceci est un message de test",
});
console.log("✅ Email de test envoyé !");
} catch (error) {
console.error("❌ Erreur:", error);
}
}
testEmail();
```
## 📧 Vérifier les emails envoyés
### Dans AWS SES Console
1. Aller sur https://console.aws.amazon.com/ses/
2. Région : **Europe (Paris) eu-west-3**
3. Menu : **Email sending****Statistics**
4. Vérifier les emails envoyés dans les dernières minutes
### Vérifier les bounces
Si l'email n'arrive pas :
- Vérifier les **Bounces** (rebonds) dans SES
- Vérifier les **Complaints** (plaintes)
- Vérifier que l'email destinataire n'est pas dans une liste noire
### Vérifier le spam
L'email peut arriver dans les spams. Vérifier :
- Dossier spam du destinataire
- Promotions (Gmail)
- Autres dossiers
## 🎯 Checklist complète
- [ ] Le serveur Next.js est redémarré
- [ ] Le message est envoyé SANS cocher "Note interne"
- [ ] Les logs `📧 [POST messages]` apparaissent dans le terminal
- [ ] `Creator user` a `hasData: true` et un email
- [ ] `sendUniversalEmailV2` est appelé
- [ ] Aucune erreur SES dans les logs
- [ ] L'email arrive dans la boîte de réception (ou spam) du destinataire
## 💡 Notes importantes
1. **Les notes internes ne déclenchent PAS d'email** (comportement normal)
2. **L'email est envoyé à l'adresse personnelle** de l'utilisateur (depuis `auth.users`)
3. **Le prénom vient de `display_name`** dans les métadonnées utilisateur
4. **Le nom du staff** vient aussi de `display_name` ou de l'email
---
**Si après toutes ces vérifications, l'email n'est toujours pas envoyé, partagez-moi les logs complets du terminal !**
*Guide créé le 14 octobre 2025*