n8n est super pratique pour automatiser tout un tas de tâches, mais parfois les nœuds intégrés ne suffisent pas. Dans cet article, on va voir comment créer un nœud personnalisé, étape par étape, avec un exemple concret : un trigger qui se connecte à Twitch et déclenche un workflow à chaque nouveau message. Si besoin n'hésitez pas à compléter cette vidéo avec la documentation de n8n
Pour commencer
Pas besoin de partir de zéro : n8n propose un starter kit. On va l’utiliser comme base pour notre nœud Twitch.
git clone https://github.com/n8n-io/n8n-nodes-starter.git Twitch-Node
cd Twitch-Node
Structure du projet
Nous allons surtout nous intérésser au dossier nodes qui contient un exemple de noeud que l'on peut utiliser en exemple. Dans notre cas nous auront besoin de créer les fichiers suivants :
- L’icône :
twitch.svg,twitch.dark.svg - Les métadonnées :
Twitch.node.json
{
"node": "n8n-nodes-twitch",
"nodeVersion": "1.0",
"codexVersion": "1.0",
"categories": [],
"resources": {
"credentialDocumentation": [],
"primaryDocumentation": []
}
}
-
Le code TypeScript :
Twitch.node.ts- On exporte une classe
Twitchqui implémenteINodeType. - On ajoute une propriété
descriptiondans laquelle on définit les propriété de notre noeud. - On implémente la méthode
triggerpour définir la logique de déclenchement de notre noeud.
- On exporte une classe
import {
INodeType,
INodeTypeDescription,
ITriggerFunctions,
ITriggerResponse,
} from "n8n-workflow";
import { Client } from "tmi.js";
export class Twitch implements INodeType {
description: INodeTypeDescription = {
displayName: "Twitch",
name: "twitch",
icon: { light: "file:twitch.svg", dark: "file:twitch.dark.svg" },
group: ["trigger"],
version: 1,
description: "Read twitch chat and act on new message",
properties: [
{
displayName: "Twitch user",
name: "username",
type: "string",
default: "grafikart",
required: true,
description: "User to retrieve message from",
},
],
inputs: [],
outputs: ["main"],
defaults: {
name: "Twitch",
},
};
async trigger(
this: ITriggerFunctions
): Promise<ITriggerResponse | undefined> {
const username = this.getNodeParameter("username", "") as string;
const client = new Client({
channels: [username],
});
await client.connect();
client.on("message", (channel, tags, message, self) => {
this.emit([
this.helpers.returnJsonArray([
{
channel: channel,
user: channel,
message: message,
tags: tags,
timestamp: new Date().toISOString(),
},
]),
]);
});
return {
closeFunction: async () => {
await client.disconnect();
},
};
}
}
Tester son nœud
Par défaut n8n cherche les nœuds personnalisés dans le dossier ~/.n8n/custom.
Si ce dossier n'existe pas chez vous vous devrez le créer et initialiser un package.json à l'intérieur.
mkdir -p ~/.n8n/custom
cd ~/.n8n/custom
npm init -y
Ensuite, il faudra y installer le nœud que l'on a créé. Vu que l'on souhaite tester un nœud en local il faudra utiliser le système de lien.
Dans le projet de notre noeud :
bun run build # ou npm run build
npm link
Puis dans ~/.n8n/custom on peut importer la dépendance :
npm link n8n-nodes-twitch
On peut ensuite redémarrer notre serveur n8n et notre nouveau nœud devrait apparaitre.