Documentation Technique - Analyse de Sentiment des Retours Clients Zendesk
Version : 1.0 Date : Janvier 2026 Auteur : Utilia AI Compatibilité : n8n v1.0+
Vue d’ensemble
Objectif du workflow
Ce workflow automatise l’analyse de sentiment des tickets Zendesk en utilisant l’intelligence artificielle d’OpenAI. Il permet aux équipes support de comprendre rapidement la tonalité globale des retours clients sans lecture manuelle de chaque ticket.
Le processus récupère les tickets d’une période configurable, analyse le sentiment de chaque message via GPT-4o-mini, puis exporte les résultats dans Google Sheets avec des statistiques agrégées.
Cas d’usage
Équipes Support Client
- Identifier rapidement les tickets négatifs prioritaires
- Suivre l’évolution de la satisfaction client dans le temps
- Détecter les pics de mécontentement après des incidents
Customer Success Managers
- Générer des rapports hebdomadaires de sentiment
- Préparer les revues de compte avec des données quantifiées
- Mesurer l’impact des actions d’amélioration
Direction et Management
- Obtenir une vue d’ensemble de la satisfaction client
- Comparer les tendances mois par mois
- Justifier les investissements en support client
Prérequis techniques
Compte n8n
- Version Cloud (cloud.n8n.io) ou self-hosted v1.0+
- Plan gratuit suffisant pour ce workflow
Zendesk
- Compte avec accès API activé
- Permissions de lecture sur les tickets
- Token d’API ou OAuth configuré
OpenAI
- Compte avec crédits disponibles
- Clé API générée
- Modèle GPT-4o-mini recommandé (coût optimisé)
Google Sheets
- Compte Google avec accès API
- OAuth2 configuré dans n8n
- Spreadsheet créé avec deux feuilles : « Ticket Analysis » et « Summary »
Connaissances recommandées
- Bases n8n (nodes, connections, executions)
- Notions de base sur les APIs REST
- Compréhension du format JSON
Architecture du workflow
Schéma de flux
┌─────────────────────────────────────────┐
│ Start Analysis (Trigger) │
└────────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Set Parameters (daysBack, dates) │
└────────────────────┬────────────────────┘
│
┌───────────┴───────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Get Zendesk │ │ Mock Zendesk │
│ Tickets │ │ Data │
│ (disabled) │ │ (testing) │
└────────┬────────┘ └────────┬────────┘
│ │
└───────────┬───────────┘
│
▼
┌─────────────────────────────────────────┐
│ Filter Recent Tickets (date) │
└────────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Sanitize Input (remove HTML/XSS) │
└────────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Split In Batches (50 tickets/batch) │
└────────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ OpenAI GPT-4o (LLM provider) │
│ ↓ ai_languageModel │
│ Analyze Sentiment │
└────────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Format Results (structure output) │
└────────────────────┬────────────────────┘
│
┌───────────┴───────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Append Ticket │ │ Aggregate │
│ Analysis │ │ All Results │
│ (Sheets) │ │ │
└─────────────────┘ └────────┬────────┘
│
▼
┌─────────────────────┐
│ Generate Summary │
│ Stats │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Append Summary │
│ (Sheets) │
└─────────────────────┘
Nodes principaux et leur rôle
Phase 1 : Entrée et Configuration
Start Analysis (Manual Trigger)
- Fonction : Déclenche l’exécution du workflow à la demande
- Paramètres : Aucun
- Note : Peut être remplacé par un Schedule Trigger pour automatisation
Set Parameters (Set)
- Fonction : Configure les variables globales
- Paramètres clés :
daysBack: Nombre de jours à analyser (défaut : 7)startDate: Date de début calculée automatiquementanalysisDate: Timestamp de l’analyse
Phase 2 : Récupération des Données
Get Zendesk Tickets (Zendesk)
- Fonction : Récupère tous les tickets depuis l’API Zendesk
- Paramètres :
- Operation : Get All
- Limit : 500
- Sort By : created_at (DESC)
- Note : Désactivé par défaut, activer après configuration credentials
Mock Zendesk Data (Code)
- Fonction : Fournit des données de test
- Usage : Permet de tester le workflow sans credentials Zendesk
Filter Recent Tickets (Filter)
- Fonction : Ne conserve que les tickets de la période configurée
- Condition :
created_at > startDate
Sanitize Input (Code)
- Fonction : Nettoie les données entrantes
- Sécurité : Supprime les balises HTML et scripts potentiellement dangereux
Phase 3 : Analyse IA
Split In Batches (Split In Batches)
- Fonction : Divise les tickets en lots de 50
- Optimisation : Évite les timeouts et OOM sur grands volumes
OpenAI GPT-4o (LM Chat OpenAI)
- Fonction : Fournit le modèle de langage
- Paramètres :
- Model : gpt-4o-mini
- Temperature : 0 (résultats déterministes)
- Connexion : ai_languageModel vers Analyze Sentiment
Analyze Sentiment (Sentiment Analysis)
- Fonction : Catégorise le sentiment de chaque ticket
- Input : description ou subject du ticket
- Output : sentiment, sentimentConfidence, detailedResults
- Catégories : Very Positive, Positive, Neutral, Negative, Very Negative
Phase 4 : Formatage et Export
Format Results (Set)
- Fonction : Structure les données pour l’export
- Mapping : Combine données Zendesk + résultat sentiment
Aggregate All Results (Aggregate)
- Fonction : Regroupe tous les tickets en un seul item
- Usage : Prépare les données pour le calcul des statistiques
Generate Summary Stats (Code)
- Fonction : Calcule les métriques globales
- Output : total_tickets, compteurs par catégorie, positive_rate, negative_rate
Append to Sentiment Report (Google Sheets)
- Fonction : Ajoute chaque ticket dans la feuille « Ticket Analysis »
- Mode : Append (ajoute à la suite)
Append Summary Stats (Google Sheets)
- Fonction : Ajoute les statistiques dans la feuille « Summary »
- Usage : Crée un historique des analyses
Configuration technique
Paramètres à ajuster
1. Période d’analyse (Node « Set Parameters »)
{
"daysBack": 7
}
Modifiez daysBack pour analyser une période différente :
- 1 : Dernier jour uniquement
- 7 : Dernière semaine (défaut)
- 30 : Dernier mois
2. Limite de tickets (Node « Get Zendesk Tickets »)
| Paramètre | Défaut | Recommandé | Description |
|---|---|---|---|
limit | 500 | 500-1000 | Nombre max de tickets récupérés |
Conseil : Augmentez progressivement si vous avez beaucoup de tickets.
3. Taille des lots (Node « Split In Batches »)
| Paramètre | Défaut | Recommandé | Description |
|---|---|---|---|
batchSize | 50 | 30-50 | Tickets par lot pour l’analyse IA |
Conseil : Réduisez si vous rencontrez des erreurs de rate limit OpenAI.
Credentials requises
Zendesk API
- Créer une credential de type « Zendesk API »
- Configurer :
- Subdomain : votre-entreprise.zendesk.com
- Email : votre email Zendesk
- API Token : généré dans Admin > Channels > API
- Assigner au node « Get Zendesk Tickets »
OpenAI API
- Créer une credential de type « OpenAI API »
- Configurer :
- API Key : clé générée sur platform.openai.com
- Assigner au node « OpenAI GPT-4o »
Google Sheets OAuth2
- Créer une credential de type « Google Sheets OAuth2 »
- Autoriser les scopes :
spreadsheets(lecture/écriture) - Configurer le Document ID dans les nodes Google Sheets
- Assigner aux nodes « Append to Sentiment Report » et « Append Summary Stats »
Logique de traitement détaillée
Étape 1 : Configuration des paramètres
Input : Aucun (déclenchement manuel)
Action :
- Calcul de
startDate: date actuelle moinsdaysBackjours - Génération de
analysisDate: timestamp formaté
Output :
{
"daysBack": 7,
"startDate": "2026-01-18T00:00:00.000Z",
"analysisDate": "2026-01-25 14:30"
}
Étape 2 : Récupération et filtrage des tickets
Input : Paramètres de la période
Action :
- Appel API Zendesk (GET /api/v2/tickets)
- Tri par date de création décroissante
- Filtrage : conservation uniquement des tickets avec
created_at > startDate
Output : Liste de tickets filtrés avec id, subject, description, created_at, status, priority
Étape 3 : Nettoyage des données
Input : Tickets bruts de Zendesk
Action :
- Suppression des balises
<script>et leur contenu - Suppression de toutes les balises HTML
- Décodage des entités HTML ( , &, etc.)
- Trim des espaces
Code JavaScript :
const sanitize = (str) => {
if (!str) return '';
return String(str)
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
.replace(/<[^>]*>/g, '')
.replace(/ /g, ' ')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.trim();
};
Output : Tickets avec subject et description nettoyés
Étape 4 : Analyse du sentiment
Input : Texte nettoyé (description ou subject)
Action :
- Envoi au modèle GPT-4o-mini via le node Sentiment Analysis
- Le modèle analyse le ton et l’émotion du texte
- Classification en 5 catégories
Catégories de sentiment :
- Very Positive : Client très satisfait, remerciements
- Positive : Feedback positif, satisfaction
- Neutral : Question technique, demande d’information
- Negative : Insatisfaction, plainte modérée
- Very Negative : Colère, menace, urgence critique
Output :
{
"sentiment": "Negative",
"sentimentConfidence": "0.85"
}
Étape 5 : Calcul des statistiques
Input : Tableau de tous les résultats d’analyse
Action :
- Comptage par catégorie de sentiment
- Calcul des pourcentages positif/négatif
Code JavaScript :
const stats = {
total_tickets: allData.length,
very_positive: 0,
positive: 0,
neutral: 0,
negative: 0,
very_negative: 0
};
allData.forEach(item => {
const sentiment = (item.sentiment || '').toLowerCase();
if (sentiment.includes('very positive')) stats.very_positive++;
else if (sentiment.includes('positive')) stats.positive++;
else if (sentiment.includes('very negative')) stats.very_negative++;
else if (sentiment.includes('negative')) stats.negative++;
else stats.neutral++;
});
stats.positive_rate = Math.round(
((stats.very_positive + stats.positive) / stats.total_tickets) * 100
) + '%';
Output : Statistiques agrégées avec compteurs et pourcentages
Optimisations possibles
Performance
Batch size adaptatif
// Dans Set Parameters, ajuster selon le volume
const ticketCount = $input.first().json.estimatedCount;
const batchSize = ticketCount > 500 ? 30 : 50;
Cache des résultats
- Paramètre : Settings > Save Data Success Execution
- Défaut : All
- Permet de rejouer les données sans rappeler les APIs
Gestion des erreurs
Retry automatique (Node « OpenAI GPT-4o »)
- Settings > Retry On Fail : Activé
- Max Tries : 3
- Wait Between Tries : 2000 ms
Continue on Error (Node « Analyze Sentiment »)
- onError : continueRegularOutput
- Évite l’arrêt du workflow si un ticket échoue
Scalabilité
Pour les grands volumes (> 1000 tickets/analyse) :
- Réduire le batch size à 20-30
- Ajouter un node Wait (1000ms) entre les batches
- Envisager une exécution planifiée par tranches horaires
Limitations et considérations
Limitations techniques
| Aspect | Limite | Contournement |
|---|---|---|
| Tickets/exécution | ~500-1000 | Exécutions multiples par période |
| Rate limit Zendesk | 400 req/min | Respecté par défaut |
| Rate limit OpenAI | Variable selon plan | Réduire batch size |
| Coût OpenAI | ~$0.0002/ticket | Surveiller la consommation |
Considérations légales
RGPD
- Les tickets peuvent contenir des données personnelles
- Assurez-vous d’avoir une base légale pour le traitement
- Les données transitent par OpenAI (vérifier leur politique de confidentialité)
Conditions d’utilisation Zendesk
- L’API est soumise aux limites de votre plan
- Respecter les quotas pour éviter la suspension
Best practices
Sécurité
- Ne jamais exposer les credentials dans le workflow partagé
- Utiliser des comptes de service avec permissions minimales
- Activer l’audit log n8n pour traçabilité
Maintenance
- Vérifier mensuellement les credentials (expiration tokens)
- Surveiller les coûts OpenAI
- Archiver les anciens rapports Google Sheets
Métriques de performance
KPIs à suivre
Volume
- Nombre de tickets analysés par exécution
- Taux de succès des analyses (tickets traités / tickets récupérés)
Qualité
- Précision perçue du sentiment (validation manuelle d’échantillons)
- Taux de sentiment « Neutral » (si trop élevé, ajuster le prompt)
Benchmarks attendus
Par exécution :
- Tickets traités : 50-200
- Durée moyenne : 2-5 minutes
- Coût OpenAI : $0.01-0.05
Par mois (usage standard) :
- Analyses : 4-8 (hebdomadaires)
- Tickets totaux : 400-1600
- Gain de temps : 15-25h
- ROI estimé : 120-200 %
Dépannage
Problème : Erreur « Zendesk API authentication failed »
Symptômes : Le node Zendesk retourne une erreur 401 ou 403
Causes possibles :
- Token API expiré ou révoqué
- Mauvais subdomain configuré
- Permissions insuffisantes
Solutions :
- Régénérer le token dans Admin > Channels > API
- Vérifier le format : subdomain sans .zendesk.com
- S’assurer que l’utilisateur a accès aux tickets
Problème : Erreur « OpenAI rate limit exceeded »
Symptômes : Erreur 429 après plusieurs analyses
Causes possibles :
- Trop de requêtes simultanées
- Quota de tokens atteint
Solutions :
- Réduire le batch size à 20-30
- Activer Retry On Fail avec délai de 5000ms
- Vérifier votre quota sur platform.openai.com/usage
Problème : Résultats de sentiment incohérents
Symptômes : Tickets positifs classés négatifs ou inversement
Causes possibles :
- Temperature trop élevée
- Tickets avec du sarcasme ou ironie
- Texte trop court pour l’analyse
Solutions :
- Vérifier que Temperature = 0 dans OpenAI GPT-4o
- Ajouter un filtrage des tickets trop courts (< 10 caractères)
- Envisager un modèle plus puissant (gpt-4o) pour les cas complexes
Problème : Google Sheets « Spreadsheet not found »
Symptômes : Erreur lors de l’append vers Sheets
Causes possibles :
- Document ID incorrect
- Feuille non existante
- Permissions insuffisantes
Solutions :
- Copier l’ID depuis l’URL du spreadsheet (entre /d/ et /edit)
- Créer les feuilles « Ticket Analysis » et « Summary »
- Partager le document avec le compte de service OAuth
Problème : Workflow timeout sur grands volumes
Symptômes : Exécution interrompue après plusieurs minutes
Causes possibles :
- Trop de tickets à traiter
- Batch size trop grand
Solutions :
- Réduire la période d’analyse (daysBack)
- Augmenter le timeout dans Settings > Execution Timeout
- Diviser en plusieurs exécutions planifiées
Ressources
Documentation n8n
- Zendesk : https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.zendesk/
- Google Sheets : https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/
- Sentiment Analysis : https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.sentimentanalysis/
Outils complémentaires
- Zendesk API Explorer : https://developer.zendesk.com/api-reference/
- OpenAI Playground : https://platform.openai.com/playground
Support
Besoin d’aide pour implémenter ce workflow ?
Contactez Utilia AI :
- Email : hello@utilia-ai.com
- Site web : https://utilia-ai.fr
Services proposés :
- Installation et configuration du workflow
- Personnalisation avancée (autres helpdesks, langues, catégories)
- Formation n8n
- Développement workflows sur-mesure
Document vivant : Cette documentation sera mise à jour selon les évolutions n8n et les retours utilisateurs.
Version actuelle : 1.0 - Janvier 2026