169 lines
5 KiB
Markdown
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*
|