Créer un noeud n8n personnalisé

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 :

  1. L’icône : twitch.svg, twitch.dark.svg
  2. Les métadonnées : Twitch.node.json
{
  "node": "n8n-nodes-twitch",
  "nodeVersion": "1.0",
  "codexVersion": "1.0",
  "categories": [],
  "resources": {
    "credentialDocumentation": [],
    "primaryDocumentation": []
  }
}
  1. Le code TypeScript : Twitch.node.ts

    • On exporte une classe Twitch qui implémente INodeType.
    • On ajoute une propriété description dans laquelle on définit les propriété de notre noeud.
    • On implémente la méthode trigger pour définir la logique de déclenchement de notre noeud.
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.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager