# 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= ``` ### ⚠️ 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= ``` ### Déploiement de la variable sur Vercel ```bash # Ajouter la variable d'environnement sur Vercel vercel env add LAMBDA_API_KEY # Saisir la valeur : # 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` = `` - 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*