Salut à tous et bienvenue dans la Partie 2 de notre aventure pour construire un agent IA avec n8n ! Dans le premier article, nous avons posé des bases solides :
- Installation de n8n via Docker.
- Configuration du nœud
AI Agent
avec un modèle IA via OpenRouter. - Test de la communication basique avec notre IA.
On avait donc un “cerveau” prêt à réfléchir. Maintenant, il est temps de lui donner des outils pour agir et accomplir sa mission !
Pour rappel, notre objectif est de créer un assistant personnel qui, sur simple demande via Telegram, peut analyser une URL suspecte que l’on croise (surtout en mobilité !) et nous donner un verdict rapide ainsi que des conseils. Un peu comme un majordome virtuel spécialisé en cybersécurité !
Pour y arriver, notre agent a besoin d’accéder à des outils externes. La première pièce essentielle de ce puzzle, c’est un service capable d’évaluer la réputation d’une URL. Et pour ça, l’outil roi est sans conteste VirusTotal.
Intégration de VirusTotal : Donner des yeux (et un cerveau analytique) à notre Workflow
Pour ceux qui découvriraient VirusTotal, c’est une plateforme en ligne (appartenant à Google) absolument géniale qui permet d’analyser fichiers et URLs. Elle soumet ce que vous lui donnez à des dizaines de moteurs antivirus et autres outils d’analyse de sécurité, puis vous présente un rapport consolidé.
Par exemple, voici le résultat d’une analyse d’URL sur leur site :
Le “score” (ici 42/95) indique combien de moteurs de sécurité ont classé l’URL comme malveillante. Plus le chiffre du haut est élevé, plus il y a de chances que le site soit dangereux. C’est un incontournable dans le monde de la cybersécurité.
Adapter notre approche : Agent IA vs Workflow Linéaire
Idéalement, avec le concept d’“Agent IA”, on aimerait que notre nœud AI Agent
puisse directement appeler un outil “VirusTotal” quand il reçoit une URL. C’était mon plan initial.
MAIS (et c’est important) : Lors de mes tests, j’ai constaté que le nœud AI Agent
de n8n (à l’heure actuelle) avait du mal à considérer le nœud VirusTotal (ou même un nœud HTTP Request configuré pour appeler l’API VT) comme un “outil” qu’il pouvait utiliser de manière autonome. Il refusait de coopérer comme je l’espérais ! 🤷♂️
Pas de panique ! C’est souvent ça l’informatique : on s’adapte. J’ai donc opté pour une approche légèrement différente, mais tout aussi efficace : un workflow plus linéaire. L’idée :
- L’URL arrive (pour l’instant via un chat de test, plus tard via Telegram).
- Elle passe d’abord par les nœuds n8n dédiés à VirusTotal pour être analysée.
- Le résultat de l’analyse VirusTotal est ensuite envoyé au nœud
AI Agent
. - L’Agent IA n’a plus qu’à lire ce rapport JSON et à le résumer/interpréter pour nous donner ses recommandations.
Ça fonctionne très bien, mais c’est bon de savoir pourquoi on a fait ce choix technique. C’est moins un agent “décideur” et plus une chaîne de traitement avec une IA à la fin pour la partie “compréhension et conseil”.
Prérequis : Obtenir une Clé API VirusTotal
Avant de configurer les nœuds dans n8n, il nous faut un moyen de nous authentifier auprès de VirusTotal. Comme beaucoup de services, VT utilise une clé API. La bonne nouvelle, c’est qu’on peut en obtenir une gratuitement, même si elle vient avec certaines limitations (nombre d’appels par minute/jour, suffisant pour notre usage perso).
Voici comment faire :
-
Allez sur le site de VirusTotal et créez un compte (ou connectez-vous si vous en avez déjà un).
-
Une fois connecté, cliquez sur votre icône de profil en haut à droite, puis sélectionnez
API Key
dans le menu déroulant. -
Sur la page API, vous verrez votre clé API personnelle. Copiez-la précieusement !
Cette clé, on va l’utiliser dans n8n pour que nos nœuds VirusTotal puissent faire des requêtes en notre nom.
Configuration des Nœuds VirusTotal dans n8n
Ok, maintenant qu’on a notre clé API et qu’on est clairs sur l’approche linéaire, configurons nos nœuds VirusTotal dans n8n. Il en faut deux : un pour lancer l’analyse, un autre pour récupérer les résultats.
Étape 1 : Configurer les Credentials dans n8n
Avant même de configurer les opérations, enregistrons notre clé API VirusTotal dans n8n pour pouvoir la réutiliser facilement.
-
Ajoutez un nœud “VirusTotal” à votre workflow (clic sur
+
, cherchez “VirusTotal”). -
Dans le panneau de configuration qui s’ouvre, repérez la section
Credentials for VirusTotal
. Cliquez sur- Create New -
. -
Une petite fenêtre apparaît. Donnez un nom reconnaissable à cette clé (ex: “Ma Clé VirusTotal”) et collez la clé API que vous venez de copier depuis le site de VirusTotal dans le champ
API Key
. -
Cliquez sur Save.
Voilà ! n8n connaît maintenant votre clé et vous pourrez la sélectionner directement dans tous les nœuds VirusTotal que vous utiliserez.
Étape 2 : Lancer l’analyse VirusTotal (1er Nœud - POST Request)
Maintenant, configurons notre premier nœud VirusTotal pour qu’il soumette l’URL à VirusTotal pour analyse. C’est une requête POST vers https://www.virustotal.com/api/v3/urls
.
-
Assurez-vous que le nœud VirusTotal est bien sur votre canvas.
-
Dans sa configuration :
- Credentials for VirusTotal : Sélectionnez la clé que vous venez d’enregistrer (“Ma Clé VirusTotal”).
- Resource : Choisissez
URL
. - Operation : Choisissez
Scan URL
. (Cela configure implicitement la méthode en POST et l’URL de l’API correctement).
-
Configurer le Corps de la Requête (Body) - C’EST LA PARTIE IMPORTANTE !
- Juste en dessous des options principales, activez l’interrupteur
Send Body
. - Pour
Body Content Type
, sélectionnezForm-Data
. C’est ce que l’API VirusTotal attend pour cette requête. - Dans la section
Body Parameters
qui apparaît :- Cliquez sur
Add Parameter
. - Dans
Name
, tapez exactementurl
(en minuscules). - Dans
Value
, c’est ici qu’on va mettre l’URL à analyser, récupérée depuis notre chat de test. Utilisez l’expression{{ $json.chatInput }}
(ou glissez-déposez la variablechatInput
depuis le panneau INPUT à gauche). Cette expression prend simplement le texte que l’utilisateur a envoyé dans le chat.
- Cliquez sur
C’est exactement ce que montre cette capture d’écran :
- Juste en dessous des options principales, activez l’interrupteur
Ce premier nœud va donc envoyer une requête POST à VirusTotal avec l’URL à analyser dans le corps Form-Data
et récupérer un ID d’analyse unique en retour.
Étape 3 : Récupérer le résultat de l’analyse (2ème Nœud - GET Request)
L’analyse VT n’étant pas instantanée, il nous faut un deuxième nœud pour aller chercher le rapport une fois qu’il est prêt. C’est une requête GET.
-
Ajoutez un autre nœud “VirusTotal”. (Astuce : vous pouvez copier/coller le premier nœud et juste modifier sa configuration).
-
Dans la configuration de ce deuxième nœud :
- Credentials for VirusTotal : Sélectionnez à nouveau votre clé enregistrée.
- Resource : Choisissez
Analysis
(ouURL Report
, vérifiez le nom exact). - Operation : Choisissez
Get Report
(ouGet Analysis
). - Analysis ID : C’est le champ clé ! Il faut lui passer l’ID renvoyé par le premier nœud VirusTotal (le nœud POST). Utilisez une expression JSONata qui pointe vers cet ID. Si votre premier nœud s’appelle “VirusTotal”, ça ressemblera à
{{ $node["VirusTotal"].json.data.id }}
. Utilisez le sélecteur d’expression pour trouver facilement la bonne variable.
- Pour ce nœud GET, pas besoin de configurer le
Body
.
Étape 4 : Relier le tout (pour l’instant)
Connectez vos nœuds dans cet ordre : Nœud de Démarrage (Chat Input pour le test) -> Premier Nœud VT (Scan URL - POST) -> Deuxième Nœud VT (Get Report - GET).
Maintenant, la sortie du deuxième nœud VirusTotal contient le rapport JSON complet de l’analyse. C’est ce trésor qu’on va donner à manger à notre Agent IA.
Dire à l’Agent IA quoi faire avec le Rapport
Il suffit maintenant de connecter la sortie du nœud “Get Report” à l’entrée du nœud “AI Agent” que nous avions configuré dans la Partie 1. L’agent recevra donc le JSON complet de VirusTotal comme donnée d’entrée (input data
).
Il faut juste adapter un tout petit peu le début de notre super prompt pour qu’il colle à cette réalité :
You will receive a URL analysis report in JSON format AS INPUT.
Your task is to provide the user with a clear and simplified summary of the key information about this URL, including:
Its reputation (benign, suspicious, malicious, etc.).
Detection engines that flagged it.
Any suspicious activities associated with it (e.g., phishing, malware, scam).
Any other relevant data extracted from the report.
Then, provide practical recommendations on how the user can protect themselves from potential threats linked to this URL. Your advice should be precise and actionable (e.g., avoid visiting the site, block it at the DNS level, use browser security extensions, etc.).
Be concise and direct, avoiding unnecessary jargon.
You response will be fully written in the French language
Ce prompt reste excellent et dit précisément à l’IA comment traiter le JSON qu’elle reçoit.
Le Test Final !
Maintenant, on peut lancer le chat de test, lui envoyer une URL (pourquoi pas une bien louche trouvée sur URLHaus comme dans mon test), et voir la magie opérer !
Comme on le voit dans la vidéo, le workflow se déroule : l’URL est envoyée, analysée par les deux nœuds VT, le résultat JSON est passé à l’IA, et l’IA nous sort un résumé et des conseils clairs en français, basés sur le prompt !
Voici le genre de résultat qu’on obtient (testé avec une URL d’URLHaus) :
Voici un résumé de l'analyse de l'URL fournie :
Résumé de l'Analyse VirusTotal
Réputation : Cette URL est considérée comme malveillante.
Détections : Sur 97 moteurs de sécurité analysés, 7 ont signalé cette URL comme problématique :
6 moteurs l'ont classée comme malveillante (Lionic, BitDefender, ESET, Fortinet, G-Data, URLhaus).
1 moteur l'a classée comme suspicieuse (URLQuery).
Activités Suspectes : Plusieurs détections indiquent que l'URL est associée à des logiciels malveillants (malware).
Autres Informations : Bien que la majorité des moteurs n'aient pas détecté de menace (61 l'ont jugée inoffensive et 29 n'avaient pas d'avis), les détections positives par des moteurs de sécurité réputés suffisent à considérer cette URL comme dangereuse.
Recommandations de Sécurité
Compte tenu des résultats, il est fortement recommandé de NE PAS visiter cette URL. Voici des mesures concrètes pour vous protéger :
Évitez l'accès : Ne cliquez sur aucun lien pointant vers cette URL, que ce soit dans un email, sur un site web ou via une messagerie.
Bloquez l'URL : Si possible, utilisez les fonctionnalités de votre logiciel de sécurité (antivirus, pare-feu) ou des extensions de navigateur spécialisées pour bloquer l'accès à cette adresse.
Maintenez vos outils à jour : Assurez-vous que votre système d'exploitation, votre navigateur et votre logiciel antivirus sont à jour avec les derniers correctifs de sécurité.
Utilisez des extensions de sécurité : Envisagez d'utiliser des extensions de navigateur qui bloquent les sites malveillants connus, les publicités intrusives et les scripts potentiellement dangereux.
Restez vigilant : Soyez toujours prudent avec les liens et les pièces jointes, surtout s'ils proviennent de sources inconnues ou non sollicitées.
En résumé, traitez cette URL comme une menace confirmée et prenez les mesures nécessaires pour éviter toute interaction avec elle.
Franchement, c’est super complet et efficace, non ? Notre IA fait un excellent boulot pour transformer le JSON brut de VirusTotal en conseils pratiques !
Conclusion
Et voilà ! Notre workflow a fait un sacré bond en avant.
Qu’est-ce qu’il manque pour atteindre notre objectif final ? Remplacer notre simple “Chat Input” de test par une véritable intégration Telegram ! C’est exactement ce qu’on fera dans la Partie 3 : créer le bot Telegram, configurer le trigger n8n, et boucler la boucle pour rendre notre agent utilisable depuis notre téléphone.
Merci d’avoir suivi cette partie technique jusqu’au bout ! Si vous avez des questions ou si vous voulez partager vos propres expériences avec n8n et l’IA, retrouvez-moi sur LinkedIn. À très vite pour la dernière étape !