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).

Architecture
┌─────────────────────────────────────────────────────┐
│                  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

1

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.

2

Lancer le projet

Exécutez le script de lancement. n8n démarre et expose l'interface sur http://localhost:5678.

bash
./launch.sh
3

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
.env — exemple (placeholders)
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, username et preferences[] 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.

1

Cipher BB3QoHjZhOYCSmYu

Utilitaire de hachage. Doit exister en premier car tous les flux de création/mise à jour en dépendent.

2

Create user D3HNZJlWEQupnNru

Inscription d'un nouvel utilisateur.

3

Read user Yw10tKsRK0j4beLL

Requis par Update, Delete et Web-Action.

4

Update user mivmZEfJvdHL9n5r

Modification des préférences et de l'état actif.

5

Delete user L0x1p9f5FysDXC0z

Suppression authentifiée d'un compte.

6

Update_last_send_mail iQsokv9fEpbNGrGD

Suivi des envois. Requis par send_article et cron_exec.

7

send_article SCG5t05Scd1c1ttd

Pipeline d'envoi complet. Assurez-vous que SMTP, NewsAPI et Mistral sont configurés.

8

cron_exec dz5RUPZprG8yRVxL

Planificateur automatique. N'activer qu'une fois send_article testé.

9

Web-Action zSqqKM5IGXrBQNIk

Webhooks publics utilisés dans les footers d'emails.

10

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.

JSON — payload
{
  "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.

JSON — payload
{
  "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.md ou dans le dépôt.
  • En production, remplacez APP_BASE_URL=http://localhost:5678 par 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.

Exemple — lien sécurisé dans l'email

{{ APP_BASE_URL }}/unsubscribe-user?token={{ signed_token }}

# Le token contient email + expiration, signé avec un secret HMAC