357 lines
9.9 KiB
Markdown
357 lines
9.9 KiB
Markdown
# Configuration Lambda → Espace Paie : Email Signature Salarié
|
|
|
|
## 📋 Vue d'ensemble
|
|
|
|
Cette documentation détaille la configuration nécessaire pour faire communiquer la Lambda AWS `postDocuSealSalarie` avec l'Espace Paie pour l'envoi d'emails de signature aux salariés.
|
|
|
|
### Architecture
|
|
|
|
```
|
|
DocuSeal Webhook → Lambda postDocuSealSalarie → API Espace Paie → Système Email Universel v2 → AWS SES
|
|
↓
|
|
Logs emails (Supabase)
|
|
```
|
|
|
|
### Avantages de cette architecture
|
|
|
|
✅ **Centralisation** : Tous les emails passent par le système universel v2
|
|
✅ **Logs automatiques** : Tous les envois sont enregistrés dans `email_logs`
|
|
✅ **Cohérence** : Même template et même système que les autres emails
|
|
✅ **Maintenance simplifiée** : Un seul endroit pour gérer les emails
|
|
✅ **Debugging facilité** : Logs accessibles dans l'interface Staff
|
|
|
|
---
|
|
|
|
## 🔧 Configuration AWS Lambda
|
|
|
|
### Variables d'environnement à ajouter/modifier
|
|
|
|
Dans la configuration de la Lambda `postDocuSealSalarie` :
|
|
|
|
```env
|
|
# Existantes (à conserver)
|
|
DOCUSEAL_API_TOKEN=xxxxx
|
|
SUPABASE_URL=https://xxxxx.supabase.co
|
|
SUPABASE_SERVICE_ROLE=xxxxx
|
|
ZAPIER_WEBHOOK_URL=https://hooks.zapier.com/xxxxx
|
|
|
|
# NOUVELLES variables à ajouter
|
|
ESPACE_PAIE_URL=https://paie.odentas.fr
|
|
ESPACE_PAIE_API_KEY=<générer une clé secrète forte>
|
|
```
|
|
|
|
### ⚠️ Variables à SUPPRIMER
|
|
|
|
Les variables suivantes ne sont plus nécessaires car l'envoi d'email est géré par l'Espace Paie :
|
|
|
|
```env
|
|
# À SUPPRIMER
|
|
AWS_SES_FROM=paie@odentas.fr
|
|
S3_BUCKET_NAME_EMAILS=odentas-emails
|
|
AIRTABLE_API_KEY=xxxxx
|
|
```
|
|
|
|
### Génération de l'API Key
|
|
|
|
Pour générer une API Key sécurisée :
|
|
|
|
```bash
|
|
# Méthode 1 : OpenSSL
|
|
openssl rand -hex 32
|
|
|
|
# Méthode 2 : Node.js
|
|
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
|
|
|
# Méthode 3 : Python
|
|
python3 -c "import secrets; print(secrets.token_hex(32))"
|
|
```
|
|
|
|
**Important** : Utilisez la même clé dans AWS Lambda et dans l'Espace Paie.
|
|
|
|
---
|
|
|
|
## 🌐 Configuration Espace Paie
|
|
|
|
### Variables d'environnement à ajouter
|
|
|
|
Dans `.env.local` (dev) et dans Vercel (production) :
|
|
|
|
```env
|
|
# API Key pour authentifier les appels depuis la Lambda
|
|
LAMBDA_API_KEY=<même clé que ESPACE_PAIE_API_KEY de la Lambda>
|
|
```
|
|
|
|
### Déploiement de la variable sur Vercel
|
|
|
|
```bash
|
|
# Ajouter la variable d'environnement sur Vercel
|
|
vercel env add LAMBDA_API_KEY
|
|
|
|
# Saisir la valeur : <la même que dans AWS Lambda>
|
|
# Environnements : Production, Preview, Development
|
|
|
|
# Redéployer pour prendre en compte la nouvelle variable
|
|
vercel --prod
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 Fichiers modifiés/créés
|
|
|
|
### 1. Espace Paie (Next.js)
|
|
|
|
#### ✨ Nouveau fichier créé
|
|
- **`app/api/emails/signature-salarie/route.ts`**
|
|
- Route API POST pour recevoir les demandes d'envoi d'email
|
|
- Authentification par API Key
|
|
- Utilise `sendUniversalEmailV2()`
|
|
- Logs automatiques dans `email_logs`
|
|
|
|
#### 📝 Fichiers modifiés
|
|
- **`lib/emailTemplateService.ts`**
|
|
- Ajout du type `'signature-request-salarie'` dans `EmailTypeV2`
|
|
- Ajout des champs `matricule` et `typecontrat` dans `EmailDataV2`
|
|
- Configuration du template email avec cartes info et détails
|
|
|
|
- **`lib/cleanEnv.ts`**
|
|
- Ajout de `LAMBDA_API_KEY` dans l'objet `ENV`
|
|
|
|
### 2. Lambda AWS
|
|
|
|
#### 📝 Fichier modifié
|
|
- **`index.js`** (version mise à jour fournie : `LAMBDA_SIGNATURE_SALARIE_UPDATED.js`)
|
|
- ❌ Suppression de `sendSignatureEmail()` (envoi direct SES)
|
|
- ❌ Suppression de `uploadEmailToS3()` (stockage S3)
|
|
- ❌ Suppression de `logToAirtable()` (logging Airtable)
|
|
- ❌ Suppression de `generateEmailHtml()` (template HTML)
|
|
- ✅ Ajout de l'appel API vers l'Espace Paie
|
|
- ✅ Headers d'authentification avec API Key
|
|
- ✅ Gestion d'erreurs améliorée
|
|
|
|
---
|
|
|
|
## 🚀 Déploiement
|
|
|
|
### Étape 1 : Déployer l'Espace Paie
|
|
|
|
```bash
|
|
# En local, vérifier que la variable existe
|
|
grep LAMBDA_API_KEY .env.local
|
|
|
|
# Si absente, l'ajouter
|
|
echo "LAMBDA_API_KEY=votre_cle_secrete_ici" >> .env.local
|
|
|
|
# Sur Vercel (production)
|
|
vercel env add LAMBDA_API_KEY
|
|
# Puis redéployer
|
|
vercel --prod
|
|
```
|
|
|
|
### Étape 2 : Mettre à jour la Lambda AWS
|
|
|
|
1. **Via AWS Console** :
|
|
- Aller dans AWS Lambda → `postDocuSealSalarie`
|
|
- Onglet "Configuration" → "Environment variables"
|
|
- Ajouter :
|
|
- `ESPACE_PAIE_URL` = `https://paie.odentas.fr`
|
|
- `ESPACE_PAIE_API_KEY` = `<votre clé générée>`
|
|
- Supprimer les anciennes variables (optionnel mais recommandé)
|
|
|
|
2. **Mettre à jour le code** :
|
|
- Remplacer le contenu de `index.js` par celui de `LAMBDA_SIGNATURE_SALARIE_UPDATED.js`
|
|
- Cliquer sur "Deploy"
|
|
|
|
### Étape 3 : Tester
|
|
|
|
```bash
|
|
# Test depuis la Lambda (déclencher un webhook DocuSeal)
|
|
# Vérifier les logs CloudWatch pour :
|
|
# - "📤 Appel de l'API Espace Paie pour envoi email..."
|
|
# - "✅ E-mail envoyé via l'API Espace Paie"
|
|
|
|
# Vérifier dans l'Espace Paie
|
|
# - Aller sur /staff/email-logs
|
|
# - Chercher le type "signature-request-salarie"
|
|
# - Vérifier le statut "sent"
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 Debug & Monitoring
|
|
|
|
### Logs Lambda (CloudWatch)
|
|
|
|
```
|
|
📤 Appel de l'API Espace Paie pour envoi email...
|
|
✅ E-mail envoyé via l'API Espace Paie: { success: true, messageId: '...' }
|
|
```
|
|
|
|
### Logs Espace Paie (Console serveur)
|
|
|
|
```
|
|
=== API Email Signature Salarié ===
|
|
✅ Authentication successful
|
|
📦 Données reçues: { employeeEmail: '...', reference: '...', ... }
|
|
📧 Préparation de l'envoi de l'email: { to: '...', type: 'signature-request-salarie' }
|
|
✅ Email envoyé avec succès: { messageId: '...', recipient: '...', reference: '...' }
|
|
```
|
|
|
|
### Vérification dans l'interface
|
|
|
|
1. **Interface Staff** : `/staff/email-logs`
|
|
- Filtrer par type : `signature-request-salarie`
|
|
- Vérifier le statut et le contenu HTML
|
|
|
|
2. **Base de données** : Table `email_logs`
|
|
```sql
|
|
SELECT * FROM email_logs
|
|
WHERE email_type = 'signature-request-salarie'
|
|
ORDER BY created_at DESC
|
|
LIMIT 10;
|
|
```
|
|
|
|
---
|
|
|
|
## 🛡️ Sécurité
|
|
|
|
### API Key
|
|
|
|
- ✅ Utilisez une clé de minimum 32 caractères hexadécimaux (256 bits)
|
|
- ✅ Ne commitez JAMAIS la clé dans le code
|
|
- ✅ Utilisez des variables d'environnement différentes par environnement
|
|
- ✅ Renouvelez la clé périodiquement (tous les 6 mois)
|
|
|
|
### HTTPS
|
|
|
|
- ✅ L'API Espace Paie doit être en HTTPS uniquement
|
|
- ✅ Vérifiez le certificat SSL (fait automatiquement par axios)
|
|
|
|
### Rate Limiting
|
|
|
|
À considérer pour le futur :
|
|
- Limiter le nombre de requêtes par minute depuis une IP
|
|
- Implémenter un système de throttling
|
|
|
|
---
|
|
|
|
## 📊 Données envoyées
|
|
|
|
### Payload de la Lambda vers l'API
|
|
|
|
```json
|
|
{
|
|
"employeeEmail": "salarie@example.com",
|
|
"signatureLink": "https://paie.odentas.fr/signature-salarie/?docuseal_id=abc123",
|
|
"reference": "CDDU-2025-001",
|
|
"firstName": "Jean",
|
|
"organizationName": "Théâtre National",
|
|
"matricule": "SAL001",
|
|
"typecontrat": "CDDU",
|
|
"startDate": "15/01/2025",
|
|
"profession": "Comédien",
|
|
"productionName": "Le Mariage de Figaro",
|
|
"organizationId": "uuid-org",
|
|
"contractId": "uuid-contract"
|
|
}
|
|
```
|
|
|
|
### Réponse de l'API
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"messageId": "01000192...",
|
|
"recipient": "salarie@example.com",
|
|
"reference": "CDDU-2025-001"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## ❌ Gestion des erreurs
|
|
|
|
### Erreurs possibles
|
|
|
|
| Code | Erreur | Cause | Solution |
|
|
|------|--------|-------|----------|
|
|
| 401 | Unauthorized | API Key invalide ou manquante | Vérifier `LAMBDA_API_KEY` et `ESPACE_PAIE_API_KEY` |
|
|
| 400 | Bad Request | Champs requis manquants | Vérifier le payload envoyé |
|
|
| 500 | Server Error | Erreur lors de l'envoi SES | Vérifier les credentials AWS SES |
|
|
| 500 | Configuration Error | `LAMBDA_API_KEY` non définie | Ajouter la variable dans Vercel |
|
|
|
|
### En cas d'échec
|
|
|
|
La Lambda retourne une erreur 500 mais **ne bloque pas** :
|
|
- Le contrat reste signé par l'employeur dans Supabase
|
|
- Le webhook Zapier est appelé quand même
|
|
- L'erreur est loggée dans CloudWatch
|
|
|
|
---
|
|
|
|
## 🔄 Rollback
|
|
|
|
Si vous devez revenir en arrière :
|
|
|
|
1. **Restaurer l'ancien code Lambda**
|
|
- Utiliser le fichier `/tmp/aws-toolkit-vscode/lambda/eu-west-3/postDocuSealSalarie/index.js`
|
|
|
|
2. **Rétablir les variables d'environnement**
|
|
- Réajouter `AWS_SES_FROM`, `S3_BUCKET_NAME_EMAILS`, `AIRTABLE_API_KEY`
|
|
- Supprimer `ESPACE_PAIE_URL` et `ESPACE_PAIE_API_KEY`
|
|
|
|
3. **L'Espace Paie reste compatible**
|
|
- La route API peut rester en place (elle ne sera simplement pas appelée)
|
|
- Le nouveau type d'email `signature-request-salarie` ne causera pas d'erreur
|
|
|
|
---
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Système Email Universel v2](./EMAIL_TEMPLATE_SYSTEM.md)
|
|
- [Logs Emails](./DEBUG_EMAIL_LOGS.md)
|
|
- [DocuSeal API](https://docs.docuseal.co/)
|
|
- [AWS Lambda Configuration](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html)
|
|
|
|
---
|
|
|
|
## ✅ Checklist de déploiement
|
|
|
|
### Avant déploiement
|
|
|
|
- [ ] Générer une API Key sécurisée (32 caractères hex minimum)
|
|
- [ ] Tester localement la route API avec un faux payload
|
|
- [ ] Vérifier que le template email s'affiche correctement
|
|
|
|
### Espace Paie
|
|
|
|
- [ ] Ajouter `LAMBDA_API_KEY` dans `.env.local`
|
|
- [ ] Ajouter `LAMBDA_API_KEY` sur Vercel (tous les environnements)
|
|
- [ ] Déployer sur Vercel
|
|
- [ ] Vérifier que la route `/api/emails/signature-salarie` répond
|
|
|
|
### Lambda AWS
|
|
|
|
- [ ] Ajouter `ESPACE_PAIE_URL` dans les variables d'env
|
|
- [ ] Ajouter `ESPACE_PAIE_API_KEY` dans les variables d'env (même valeur que `LAMBDA_API_KEY`)
|
|
- [ ] Mettre à jour le code de la Lambda
|
|
- [ ] Déployer
|
|
|
|
### Tests
|
|
|
|
- [ ] Déclencher un webhook DocuSeal (signature employeur)
|
|
- [ ] Vérifier les logs CloudWatch de la Lambda
|
|
- [ ] Vérifier les logs de l'API Espace Paie
|
|
- [ ] Vérifier que l'email a été reçu par le salarié
|
|
- [ ] Vérifier l'entrée dans `/staff/email-logs`
|
|
- [ ] Vérifier le contenu HTML de l'email
|
|
|
|
### Post-déploiement
|
|
|
|
- [ ] Monitorer les logs pendant 24h
|
|
- [ ] Vérifier le taux de succès des emails
|
|
- [ ] Documenter tout problème rencontré
|
|
- [ ] Célébrer ! 🎉
|
|
|
|
---
|
|
|
|
*Dernière mise à jour : 15 octobre 2025*
|