Introduction
Documentation Persona
Persona est un assistant de newsletters personnalisées piloté par IA, orchestré avec n8n. Il gère les abonnements utilisateurs, récupère des actualités depuis une API externe, réécrit les articles via un agent IA et envoie des digests HTML par email — entièrement automatisé.
Cette documentation couvre l'architecture technique, les workflows n8n, les endpoints exposés et les règles de conformité RGPD. Pour démarrer rapidement, voir la section Quick Start.
Architecture générale
Le système repose sur 10 workflows n8n organisés en couches : utilitaires bas niveau (chiffrement, CRUD), orchestrateurs (envoi, cron), et interface utilisateur (agent conversationnel, webhooks publics).
┌─────────────────────────────────────────────────────┐
│ Interface utilisateur │
│ persona v5 (chat IA) Web-Action (webhooks) │
└────────────────┬────────────────────────┬───────────┘
│ │
┌────────────────▼────────────────────────▼───────────┐
│ Orchestration & Envoi │
│ send_article cron_exec │
└────────────────┬────────────────────────────────────┘
│
┌────────────────▼────────────────────────────────────┐
│ CRUD & Utilitaires │
│ Create Read Update Delete Cipher Update_last │
└─────────────────────────────────────────────────────┘
│
┌────────────────▼────────────────────────────────────┐
│ Stockage │
│ /data/users.json │
└─────────────────────────────────────────────────────┘
Quick Start
Démarrer en 3 étapes
Configurer les variables d'environnement
Créez un fichier .env à la racine du projet avec vos clés API (voir section Variables d'env.). Ne committez jamais ce fichier.
Lancer le projet
Exécutez le script de lancement. n8n démarre et expose l'interface sur http://localhost:5678.
./launch.sh
Publier les workflows dans l'ordre
Depuis l'interface n8n, importez et activez chaque workflow en respectant l'ordre de déploiement. Commencez par les utilitaires, terminez par l'agent conversationnel.
Après activation, vérifiez vos credentials dans n8n : SMTP (Gmail), NewsAPI et Mistral doivent être configurés avant d'activer cron_exec et send_article.
Configuration
Variables d'environnement
Toutes les clés sensibles sont lues depuis un fichier .env à la racine. Ne commitez jamais de valeurs réelles dans le dépôt.
| Variable | Rôle | Utilisé par |
|---|---|---|
NEWSAPI_KEY |
Clé d'accès à l'API d'actualités externe | send_article |
GMAIL_CLIENT_ID |
Identifiant SMTP pour l'envoi d'emails | send_article |
GMAIL_CLIENT_SECRET |
Mot de passe SMTP associé | send_article |
MISTRAL_API_KEY |
Clé API Mistral Cloud pour la réécriture IA et l'agent conversationnel | persona v5, send_article |
APP_BASE_URL |
URL de base pour construire les liens de désinscription dans les emails | send_article |
GMAIL_CLIENT_ID=your-smtp-username GMAIL_CLIENT_SECRET=your-smtp-password NEWSAPI_KEY=your-newsapi-key MISTRAL_API_KEY=your-mistral-api-key APP_BASE_URL=http://localhost:5678
Ne commitez jamais le fichier .env dans le dépôt. Ajoutez-le à votre .gitignore. En production, utilisez un gestionnaire de secrets (Vault, AWS Secrets Manager, etc.).
Architecture
Workflows n8n
Le système est composé de 10 workflows indépendants. Les workflows CRUD et utilitaires sont appelés via executeWorkflow par les orchestrateurs.
| Nom | ID | Déclencheur | Rôle |
|---|---|---|---|
| Cipher | BB3QoHjZhOYCSmYu |
callable |
Hache un mot de passe via le nœud Crypto. Ne jamais stocker de mot de passe en clair. |
| Create user | D3HNZJlWEQupnNru |
callable |
Reçoit Username, Email, Preferences, Frequency, Password. Ajoute un utilisateur dans /data/users.json avec active:true. |
| Read user | Yw10tKsRK0j4beLL |
callable |
Retourne un objet utilisateur par email. Renvoie une erreur structurée si introuvable. |
| Update user | mivmZEfJvdHL9n5r |
callable |
Authentifie par hash de mot de passe, puis met à jour username, preferences, frequency ou active. |
| Delete user | L0x1p9f5FysDXC0z |
callable |
Vérifie Username + Password, supprime le record de users.json. |
| Update_last_send_mail | iQsokv9fEpbNGrGD |
callable |
Met à jour le timestamp last_mail_send pour un email donné. |
| send_article | SCG5t05Scd1c1ttd |
callable |
Appelle NewsAPI, filtre les sources fiables, réécrit avec Mistral, formate un digest HTML et envoie par SMTP. |
| cron_exec | dz5RUPZprG8yRVxL |
cron |
Lit les utilisateurs actifs, vérifie la fréquence vs last_mail_send, déclenche send_article pour chaque utilisateur éligible. |
| Web-Action | zSqqKM5IGXrBQNIk |
webhook |
Expose /unsubscribe-user et /delete-user. Délègue à Read + Update/Delete selon l'action. |
| persona v5 | U5UHl0EDL1GaUdhR |
chat trigger |
Agent conversationnel Mistral avec mémoire tampon. Expose les outils CRUD et Cipher. Demande confirmation avant toute action destructive. |
Flux d'envoi — send_article
Ce workflow est le cœur du système. Voici le pipeline complet :
- 1 Réception de
email,usernameetpreferences[]en entrée. - 2 Appel à NewsAPI pour chaque préférence (thème).
- 3 Fusion et déduplication des articles récupérés.
- 4 Filtrage sur le catalogue de sources vérifiées.
- 5 Réécriture des snippets par l'agent Mistral avec le ton défini par l'utilisateur.
- 6 Formatage d'un digest HTML responsive.
- 7 Envoi via credential SMTP, puis appel à
Update_last_send_mail.
Déploiement
Ordre de publication des workflows
Les workflows appelés (executeWorkflow) doivent être actifs avant leurs appelants. Respectez cet ordre impérativement.
Cipher BB3QoHjZhOYCSmYu
Utilitaire de hachage. Doit exister en premier car tous les flux de création/mise à jour en dépendent.
Create user D3HNZJlWEQupnNru
Inscription d'un nouvel utilisateur.
Read user Yw10tKsRK0j4beLL
Requis par Update, Delete et Web-Action.
Update user mivmZEfJvdHL9n5r
Modification des préférences et de l'état actif.
Delete user L0x1p9f5FysDXC0z
Suppression authentifiée d'un compte.
Update_last_send_mail iQsokv9fEpbNGrGD
Suivi des envois. Requis par send_article et cron_exec.
send_article SCG5t05Scd1c1ttd
Pipeline d'envoi complet. Assurez-vous que SMTP, NewsAPI et Mistral sont configurés.
cron_exec dz5RUPZprG8yRVxL
Planificateur automatique. N'activer qu'une fois send_article testé.
Web-Action zSqqKM5IGXrBQNIk
Webhooks publics utilisés dans les footers d'emails.
persona v5 U5UHl0EDL1GaUdhR
Agent conversationnel. Dernier à activer, dépend de tous les workflows CRUD.
Référence API
Endpoints publics (Web-Action)
Le workflow Web-Action expose deux webhooks utilisés dans les footers des newsletters envoyées.
POST /unsubscribe-user
Désactive un compte utilisateur (active: false) sans le supprimer. L'utilisateur ne recevra plus de digest.
{
"email": "utilisateur@example.com",
"password": "mot-de-passe-haché"
}
POST /delete-user
Supprime définitivement le compte et toutes les données associées de users.json.
{
"username": "nom-utilisateur",
"password": "mot-de-passe-haché"
}
Ces endpoints sont publics. La vérification d'identité est assurée par le hash du mot de passe. Pour la production, ajoutez une couche d'authentification supplémentaire (token signé dans le lien email).
Agent IA
Persona v5 — Agent conversationnel
L'agent persona v5 est le point d'entrée conversationnel du système. Il utilise Mistral Cloud avec un tampon mémoire pour maintenir le contexte entre les tours de conversation.
Outils exposés à l'agent
- tool Create user — inscription d'un nouveau compte (demande confirmation avant d'appeler).
- tool Read user — consultation du profil par email.
- tool Update user — modification avec authentification préalable obligatoire.
- tool Delete user — suppression avec double confirmation et authentification.
- tool Cipher — hachage du mot de passe avant stockage.
Règles imposées à l'agent
L'agent ne doit jamais révéler les mots de passe — ni en clair, ni hachés. Il demande toujours confirmation avant une action destructive. Toute mise à jour nécessite une authentification préalable.
Données & Conformité
RGPD & gestion des données
Les données personnelles sont stockées dans /data/users.json avec une approche de minimisation stricte.
Données stockées
Uniquement les champs nécessaires au service : username, email, preferences, frequency, password (haché), active, last_mail_send.
Contrôle d'accès
Toutes les opérations de lecture/modification exigent une vérification par hash de mot de passe. L'agent IA demande confirmation avant toute action.
Droit à l'oubli
Les endpoints /unsubscribe-user et /delete-user permettent aux utilisateurs de stopper les envois ou de supprimer entièrement leur compte.
Mots de passe
Jamais stockés en clair. Le workflow Cipher (nœud Crypto n8n) est le seul point de hachage. Les logs et l'agent ne doivent jamais exposer les mots de passe.
Fichiers contenant des données personnelles
- 📄
/data/users.json— données utilisateurs (email, préférences, hash) - 📄
/data/worflows.json— métadonnées des workflows n8n - 📄
/n8n_data/— données d'exécution n8n (logs d'exécution, storage interne)
Sécurité
Bonnes pratiques
Secrets et credentials
Ne créez pas de sauvegardes hors-dépôt contenant des secrets en clair. Si vous exportez des backups n8n, assurez-vous qu'ils sont chiffrés et à accès restreint.
- ✓ Stockez les secrets dans
.env(jamais commité) ou un store dédié (Vault, cloud secrets). - ✓ Faites tourner régulièrement les clés API (NewsAPI, Mistral, SMTP).
- ✓ Limitez les scopes des comptes SMTP et API au minimum nécessaire.
- ✓ N'incluez jamais de vraies valeurs dans
README.mdou dans le dépôt. - ✓ En production, remplacez
APP_BASE_URL=http://localhost:5678par votre domaine réel avec HTTPS.
Endpoints publics
Les webhooks /unsubscribe-user et /delete-user sont exposés publiquement. En production, sécurisez-les avec un token signé (JWT ou HMAC) intégré dans les liens du footer email.
{{ APP_BASE_URL }}/unsubscribe-user?token={{ signed_token }} # Le token contient email + expiration, signé avec un secret HMAC