Aller au contenu principal
Retour aux projets
Production

Assistant IA de Relance Tickets ITSM

Systeme autonome de relance de tickets developpe en 6 mois solo. Workflow n8n de 66 nodes + 70 nodes par sub-workflow equipe. Cycle de 15 minutes, 0 intervention manuelle. Pipeline 6 etapes : Collect (iTop) → Enrich (Supabase) → Filter (matrice anti-spam 16 combinaisons) → Anonymize (RGPD) → Analyze (Vertex AI) → Notify (Teams). Routage intelligent selon disponibilite agent. En production sur tous les services.

n8n Google Vertex AI Microsoft Graph API Supabase PostgreSQL iTop ITSM OAuth 2.0 JavaScript
66
Nodes workflow principal
70
Nodes par sub-workflow
15min
Cycle d'execution
0
Intervention manuelle

Les managers ouvraient les tickets un par un. Les reunions d'equipe produisaient des updates deja obsoletes.

J'ai passe 6 mois a construire quelque chose de different : un systeme qui tourne toutes les 15 minutes, analyse chaque ticket ouvert, et envoie les relances a la bonne personne automatiquement.

Routage Intelligent 3 Branches

Le systeme detecte automatiquement l'etat du ticket et route en consequence

Assigne a un agent DM agent, CC manager
Assigne a l'equipe seulement Post dans le channel equipe
Agent absent (OOO) Escalade auto au manager

Insight cle : Chaque equipe a ses propres seuils, ses propres priorites, ses propres regles implicites. Un systeme qui ne reflete pas cette realite finit par etre ignore. C'est pourquoi chaque equipe a son propre sub-workflow de 70 nodes avec une configuration personnalisee.

Pipeline 6 Etapes : Collect → Enrich → Filter → Anonymize → Analyze → Notify

5 APIs. OAuth multi-provider. Webhooks. Tout fonctionne ensemble.

01
Collect
iTop REST
02
Enrich
Supabase
03
Filter
Anti-Spam
04
Anonymize
RGPD
05
Analyze
Vertex AI
06
Notify
Graph API

Collect

API REST iTop avec requetes OQL. Gere UserRequests et Incidents avec mapping dynamique des champs.

iTop RESTOQLPagination

Enrich

Schema PostgreSQL 42 colonnes pour tracker le cycle de vie complet du ticket. PostgREST pour requetes batch rapides.

SupabasePostgRESTUPSERTJSONB

Filter

Matrice statut × priorite. 4 statuts, 4 niveaux de priorite, 16 combinaisons, chacune avec sa propre logique de declenchement.

Anti-SpamPriority Matrix16 combinaisons

Anonymize

Moteur d'anonymisation complet avant chaque appel IA. Noms → AGENT_002, entreprises → ORG_001, IPs → IP_001.

RGPDRegex EngineMapping Table

Analyze

Gemini analyse le ticket anonymise. Detection des blocages, niveau de risque. L'IA prepare TOUJOURS 2 messages (agent + manager).

Vertex AIService AccountStructured Output

Notify

Messaging Teams, detection de presence, lookup hierarchie manager. Azure AD app avec permissions deleguees.

Graph APIOAuth 2.0Presence APIChat API

Matrice Anti-Spam : 16 Combinaisons

Le workflow tourne toutes les 15 minutes. Sans filtrage, chaque ticket serait relance des dizaines de fois par jour.

Exemples concrets

P1 non lu Relance apres 15 min
P1 attente client Relance apres 4 heures
P4 attente client Relance apres 10 jours
Agent absent Escalade auto au manager

Pourquoi 10 jours pour un P4 ? Un agent avec 15 tickets priorisera les P1. Relancer un P4 toutes les 4h ne cree que du bruit. Mais apres 10 jours, meme un P4 devient un probleme.

Cycle 15 Minutes

Cron trigger toutes les 15 minutes. Filtrage heures ouvrees.

Presence-Aware Routing

Verification disponibilite via Graph API. Si isOutOfOffice = true, escalade auto manager.

La decision qui a tout simplifie : l'IA prepare toujours 2 messages

L'agent IA prepare toujours deux messages en meme temps : un pour l'agent, un pour le manager. Pas parce que les deux sont toujours envoyes, mais parce que l'IA ne peut pas savoir au moment de l'analyse si l'agent est disponible ou absent. Cette verification se fait apres, via Microsoft Graph. Le workflow choisit ensuite quel message envoyer.

Pourquoi ca marche : Ca m'a economise enormement de logique conditionnelle cote IA. Parfois la bonne decision technique est de faire faire plus a l'IA pour que le reste du pipeline reste simple.

anonymization.js
// Avant anonymisation Contact: [email protected]\nServer 192.168.1.45 is down.\nJohn asked for update yesterday. // Apres anonymisation Contact: EMAIL_001\nServer IP_001 is down.\nPERSON_001 asked for update. // Table de mapping (interne) { "EMAIL_001": "[email protected]", "IP_001": "192.168.1.45", "PERSON_001": "John" }

Travail invisible : Ce travail invisible est ce qui a permis au projet de passer en production. Le moteur d'anonymisation, invisible pour l'utilisateur final, est ce qui a fait valider le projet en interne.

Bugs reels corriges sur 5 systemes integres

Bug: Serialisation des donnees
Timestamp stocke comme [object Object]
Les inserts SQL echouaient silencieusement. Cause : un node n8n retournait un objet wrapper au lieu du string ISO brut. Fix : generer le timestamp directement dans le node consommateur avec new Date().toISOString() au lieu de referencer la sortie du node amont.
Bug: Parsing reponse API
Detection dynamique du type de ticket
iTop retourne des structures de cles differentes pour Incidents vs UserRequests. Le meme workflow doit gerer les deux. Solution : detection dynamique avec prefix Incident:: d'abord, fallback vers UserRequest::, puis mapping des champs.
Bug: Memoire agent IA
Chatbot oubliant le contexte entre les tours
L'utilisateur demande "donne-moi le lien" mais l'agent a oublie quel ticket etait discute. Solution : parser l'historique des reponses IA, extraire le dernier ID de ticket mentionne via regex, injecter dans le system prompt avant chaque requete.
Bug: Auth Graph API
Verification presence retournant 403
L'app avait User.Read mais pas Presence.Read.All. Les permissions de l'app Azure AD necessitaient une mise a jour + consentement admin. Ajout de la gestion correcte des scopes et de la logique de refresh token.

Fonctionnalités Clés

Routage Intelligent 3 Branches

Assignation agent → DM + CC manager. Assignation equipe → channel equipe. Agent absent → escalade auto manager. Detection automatique de l'etat du ticket.

Matrice Anti-Spam 16 Combinaisons

4 statuts × 4 priorites. Chaque combinaison avec sa propre logique. P1 non lu = 15 min. P4 attente client = 10 jours. Adapte par equipe.

Architecture 2 Messages IA

L'IA prepare TOUJOURS un message agent ET un message manager. Le workflow choisit lequel envoyer selon la disponibilite. Simplifie la logique globale.

Anonymisation RGPD Complete

Moteur anonymisation avant chaque appel IA. Noms, emails, IPs, URLs masques avec codes uniques. Table de mapping pour re-identification.

Presence-Aware Routing

Verification disponibilite via Graph API avant envoi. Si isOutOfOffice = true, escalade automatique au manager. Aucune notification dans le vide.

Agent Chat avec Tickets

Agent conversationnel secondaire que les managers peuvent interroger directement : "Quels agents ont le plus de tickets en retard ?" Langage naturel vers SQL.

Stack Technique

n8n Orchestration

66 nodes workflow principal. 70 nodes par sub-workflow equipe. Code nodes pour logique complexe.

Google Vertex AI LLM

Gemini pour analyse ticket. Output JSON structure. Prompt engineering.

Microsoft Graph Integration

Messaging Teams. Presence API pour isOutOfOffice. Azure App Registration.

Supabase Database

PostgreSQL. Schema 42 colonnes pour tracking tickets. PostgREST pour batch queries.

iTop ITSM Source

API REST avec requetes OQL. UserRequests + Incidents. Mapping champs dynamique.

JavaScript Backend

Moteur anonymisation. Matrice anti-spam. Transformation donnees dans code nodes.

Résultats & Métriques

Performance Technique

66 nodes
Workflow Principal
Architecture complete
70 nodes
Sub-Workflow
Par equipe
15 min
Cycle
Execution periodique
0
Intervention
Entierement automatise

Impact Business

6 mois
Developpement
Projet solo
Tous services
Couverture
Interdata
16
Combinaisons
Matrice anti-spam
Active
Production
Depuis plusieurs mois

Sécurité & Conformité

Conforme
RGPD
Anonymisation avant IA
Applique
Zero-Trust
Aucune PII vers IA
5
APIs
OAuth multi-provider
42 cols
Schema DB
Tracabilite complete

Défis Techniques & Solutions

Serialisation Timestamp [object Object]

Problème
Les inserts SQL echouaient silencieusement. Le node n8n retournait un objet wrapper au lieu du string ISO brut.
Solution
Generer le timestamp directement dans le node consommateur avec new Date().toISOString() au lieu de referencer la sortie du node amont.

Detection Dynamique Incident vs UserRequest

Problème
iTop retourne des structures de cles differentes pour Incidents vs UserRequests. Le meme workflow doit gerer les deux.
Solution
Detection dynamique : check prefix Incident:: d'abord, fallback vers UserRequest::, puis mapping des champs en consequence.

Memoire Chatbot Entre les Tours

Problème
L'utilisateur demande "donne-moi le lien" mais l'agent a oublie quel ticket etait discute.
Solution
Parser l'historique des reponses IA, extraire le dernier ID de ticket via regex, injecter dans le system prompt avant chaque requete.

Erreur 403 Presence Graph API

Problème
L'app avait User.Read mais pas Presence.Read.All. La verification de presence echouait.
Solution
Mise a jour des permissions Azure AD + consentement admin. Ajout de la gestion correcte des scopes et refresh token.

Compétences Démontrées

Workflow Orchestration

n8n Multi-WorkflowSub-Workflow PatternCron Scheduling (15min)Switch RoutingError Handling

API Orchestration

5 APIs IntegreesOAuth Multi-ProviderRate LimitingBatch ProcessingWebhooks

AI/LLM Integration

Google Vertex AIPrompt EngineeringStructured JSON Output2-Message ArchitectureRe-identification

Privacy Engineering

RGPD AnonymisationPII DetectionMapping TablesZero-Trust AIAudit Trail

Debugging Multi-System

Data SerializationAPI Response ParsingAgent MemoryOAuth Permissions

Intéressé par ce projet ?

Contactez-moi pour discuter de projets similaires ou pour plus d'informations.