Workflow n8n

Automatisation n8n : gestion des nouveaux abonnés sur Discord

Ce workflow n8n a pour objectif d'automatiser la gestion des nouveaux abonnés sur une plateforme de communication comme Discord. Dans un contexte où les entreprises cherchent à engager leur communauté, ce workflow permet de suivre et d'interagir avec les nouveaux abonnés de manière efficace. Par exemple, il peut être utilisé par des équipes marketing ou des gestionnaires de communauté pour s'assurer que chaque nouvel abonné reçoit un message de bienvenue personnalisé.

  • Étape 1 : le workflow est déclenché toutes les 60 minutes grâce à un nœud de planification.
  • Étape 2 : il crée une session HTTP pour se connecter à l'API de Discord.
  • Étape 3 : il liste les abonnés actuels, puis extrait les nouveaux abonnés à partir d'un fichier.
  • Étape 4 : les nouveaux abonnés sont traités un par un dans une boucle, où un message de bienvenue est défini et envoyé via l'API.
  • Étape 5 : les informations sur les abonnés sont sauvegardées dans un fichier pour un suivi ultérieur. Les bénéfices de cette automatisation n8n incluent une interaction rapide et personnalisée avec les abonnés, réduisant ainsi le temps de gestion manuelle et augmentant l'engagement des utilisateurs.
Tags clés :automatisationDiscordgestion des abonnésn8nengagement client
Catégorie: Scheduled · Tags: automatisation, Discord, gestion des abonnés, n8n, engagement client0

Workflow n8n Discord, gestion des abonnés, engagement client : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n Discord, gestion des abonnés, engagement client : détail des nœuds

  • Create Session

    Ce noeud crée une session en effectuant une requête HTTP avec les paramètres spécifiés.

  • List followers

    Ce noeud liste les abonnés en effectuant une requête HTTP avec les paramètres appropriés.

  • Convert to File

    Ce noeud convertit des données en fichier selon l'opération spécifiée.

  • Extract from File

    Ce noeud extrait des données d'un fichier selon l'opération définie.

  • Split Out

    Ce noeud permet de séparer des données en fonction d'un champ spécifié.

  • Loop Over Items

    Ce noeud traite les éléments en les parcourant par lots selon les options définies.

  • Wait

    Ce noeud introduit une pause dans le workflow pour un temps défini.

  • Find new followers

    Ce noeud exécute un code JavaScript pour trouver de nouveaux abonnés.

  • Read followers from file

    Ce noeud lit les abonnés à partir d'un fichier selon les options spécifiées.

  • Save followers to file

    Ce noeud enregistre les abonnés dans un fichier selon l'opération définie.

  • Define welcome message

    Ce noeud définit un message de bienvenue en utilisant des affectations spécifiées.

  • Sticky Note2

    Ce noeud crée une note autocollante avec le contenu et les dimensions spécifiées.

  • Sticky Note3

    Ce noeud crée une autre note autocollante avec le contenu et les dimensions spécifiées.

  • Send message

    Ce noeud envoie un message en effectuant une requête HTTP avec le corps JSON spécifié.

  • Get conversation ID

    Ce noeud récupère l'ID de conversation en effectuant une requête HTTP avec les paramètres appropriés.

  • Sticky Note

    Ce noeud crée une note autocollante avec une couleur, des dimensions et un contenu spécifiés.

  • Sticky Note1

    Ce noeud crée une note autocollante avec les dimensions et le contenu spécifiés.

  • Each 60 minutes

    Ce noeud déclenche le workflow toutes les 60 minutes selon la règle définie.

  • No Operation, do nothing

    Ce noeud ne réalise aucune opération, servant de point de passage dans le workflow.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "nodes": [
    {
      "id": "6aa059e4-e78f-4bbd-a707-994a39840f97",
      "name": "Create Session",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -520,
        240
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/com.atproto.server.createSession",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "identifier",
              "value": "youruser.bsky.social"
            },
            {
              "name": "password",
              "value": "your-app-passord-here"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.1
    },
    {
      "id": "143e37b0-de79-4329-99a2-51484c9609a8",
      "name": "List followers",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -280,
        240
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/app.bsky.graph.getFollowers",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          },
          "pagination": {
            "pagination": {
              "parameters": {
                "parameters": [
                  {
                    "name": "cursor",
                    "value": "={{ $response.body.cursor }}"
                  }
                ]
              },
              "maxRequests": 2,
              "requestInterval": 250,
              "limitPagesFetched": true
            }
          }
        },
        "sendQuery": true,
        "sendHeaders": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "actor",
              "value": "={{ $json.did }}"
            },
            {
              "name": "limit",
              "value": "100"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $item(\"0\").$node[\"Create Session\"].json[\"accessJwt\"] }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f1436a63-a23f-4082-9209-12c21a26ad91",
      "name": "Convert to File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        100,
        620
      ],
      "parameters": {
        "options": {
          "fileName": "followers-basuracero.json"
        },
        "operation": "toJson"
      },
      "typeVersion": 1.1
    },
    {
      "id": "f8beea47-6f36-4dfb-b2e7-bf94adb63e66",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        100,
        240
      ],
      "parameters": {
        "options": {},
        "operation": "fromJson"
      },
      "typeVersion": 1
    },
    {
      "id": "41658372-3054-4909-850b-3bffd1b1b79c",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        520,
        240
      ],
      "parameters": {
        "options": {
          "destinationFieldName": "did"
        },
        "fieldToSplitOut": "newDids"
      },
      "typeVersion": 1
    },
    {
      "id": "c94aa8e9-06db-4b24-a20a-5615b7129023",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        740,
        240
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "4d1c6a2f-3acd-4783-96d4-693ced06fd97",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -100,
        620
      ],
      "webhookId": "b1608475-db84-4f23-acd6-d003f5094afd",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "e4125cb8-8eb5-4cf0-b00d-e7ce4ec8236e",
      "name": "Find new followers",
      "type": "n8n-nodes-base.code",
      "position": [
        280,
        240
      ],
      "parameters": {
        "jsCode": "// Datos de entrada\nconst listFollowers = $('List followers').all()[0].json.followers;\nconst extractFromFile = $('Extract from File').all()[0].json.data[0].followers;\n\n// Verificar que tenemos acceso a los datos\nconsole.log('listFollowers length:', Array.isArray(listFollowers) ? listFollowers.length : 'no es array');\nconsole.log('extractFromFile length:', Array.isArray(extractFromFile) ? extractFromFile.length : 'no es array');\n\n// Mostrar algunos ejemplos de cada lista\nconsole.log('Ejemplo de listFollowers:', listFollowers?.slice(0, 2));\nconsole.log('Ejemplo de extractFromFile:', extractFromFile?.slice(0, 2));\n\n// Crear conjunto de DIDs del archivo extraído\nconst existingDids = new Set(extractFromFile?.map(item => item.did) || []);\nconsole.log('DIDs existentes:', Array.from(existingDids).slice(0, 5));\n\n// Filtrar listFollowers\nconst newFollowers = listFollowers?.filter(follower => !existingDids.has(follower.did)) || [];\n\nreturn {\n  json: {\n    debug: {\n      listFollowersCount: listFollowers?.length || 0,\n      extractFromFileCount: extractFromFile?.length || 0,\n      existingDidsCount: existingDids.size,\n      newFollowersCount: newFollowers.length\n    },\n    newFollowers,\n    newDids: newFollowers.map(follower => follower.did),\n    count: newFollowers.length\n  }\n}"
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "a28accb5-ee47-431f-83e4-376425e9899e",
      "name": "Read followers from file",
      "type": "n8n-nodes-base.readWriteFile",
      "position": [
        -80,
        240
      ],
      "parameters": {
        "options": {},
        "fileSelector": "=followers-{{ $('Create Session').item.json.handle }}.json"
      },
      "typeVersion": 1
    },
    {
      "id": "aa2ab5e1-eb6f-4657-9a9a-66417ffa421e",
      "name": "Save followers to file",
      "type": "n8n-nodes-base.readWriteFile",
      "position": [
        280,
        620
      ],
      "parameters": {
        "options": {
          "append": false
        },
        "fileName": "=followers-{{ $('Create Session').item.json.handle }}.json",
        "operation": "write"
      },
      "typeVersion": 1
    },
    {
      "id": "9a4fb5e5-f2f6-4aa1-846e-8d6460ad7765",
      "name": "Define welcome message",
      "type": "n8n-nodes-base.set",
      "position": [
        980,
        260
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "afe7fe9b-3bd4-4429-afe9-81e5fe934e07",
              "name": "text",
              "type": "string",
              "value": "Hello, thanks for your follow. You can read more about my over my site:"
            },
            {
              "id": "97590cd1-9d85-442b-baa3-bad849ff9be0",
              "name": "link",
              "type": "string",
              "value": "https://yoursite.com"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "594ce66f-acbd-4c31-806c-382aa9a98ed0",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        160
      ],
      "parameters": {
        "width": 230,
        "height": 266,
        "content": "### 2. Define your welcome message and link here"
      },
      "typeVersion": 1
    },
    {
      "id": "c24a7971-11a7-4164-9f2d-78335264f250",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        460
      ],
      "parameters": {
        "width": 231,
        "height": 338,
        "content": "### 3. **Important** \n\nYou need to manually run \"Save followers to file\" once before the first time so you populate your list of existing followers"
      },
      "typeVersion": 1
    },
    {
      "id": "c6e766cf-a118-4db0-8e3c-32662c40737b",
      "name": "Send message",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1360,
        260
      ],
      "parameters": {
        "url": "={{ $item(\"0\").$node[\"Create Session\"].json.didDoc.service[0].serviceEndpoint }}/xrpc/chat.bsky.convo.sendMessage",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"convoId\" : \"{{ $json.convo.id }}\",\n  \"message\" : {\n    \"text\" : \"{{ $('Define welcome message').item.json.text }}\\n\\n{{ $('Define welcome message').item.json.link }}\",\n    \"facets\" : [\n     {\n      \"index\" : {\n        \"byteStart\": {{ $('Define welcome message').item.json.text.length }},\n        \"byteEnd\": {{ $('Define welcome message').item.json.text.length + 3 + $('Define welcome message').item.json.link.length}}\n      },\n      \"features\": [\n          {\n            \"$type\": \"app.bsky.richtext.facet#link\",\n            \"uri\": \"{{ $('Define welcome message').item.json.link }}\"\n          }\n        ]\n      }\n    ]\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $item(\"0\").$node[\"Create Session\"].json[\"accessJwt\"] }}"
            },
            {
              "name": "Atproto-Proxy",
              "value": "did:web:api.bsky.chat#bsky_chat"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "33aa7e0c-58fe-4527-a94e-49bec0e06325",
      "name": "Get conversation ID",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1200,
        260
      ],
      "parameters": {
        "url": "={{ $item(\"0\").$node[\"Create Session\"].json.didDoc.service[0].serviceEndpoint }}/xrpc/chat.bsky.convo.getConvoForMembers",
        "options": {},
        "sendQuery": true,
        "sendHeaders": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "members",
              "value": "={{ $('Split Out').item.json.did }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $item(\"0\").$node[\"Create Session\"].json[\"accessJwt\"] }}"
            },
            {
              "name": "Atproto-Proxy",
              "value": "did:web:api.bsky.chat#bsky_chat"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "066f1d0d-319a-4676-9c0a-5b00d206ffd2",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -100
      ],
      "parameters": {
        "color": 5,
        "width": 479,
        "height": 307,
        "content": "## Send a welcome private message to your new BlueSky followers\n\nThis flow will save your current followers in a file and check for new ones on the next execution, sending them the Defined message an link as a private message.\n\nOnce messages are sent, the new list of followers will be saved into the file.\n\n**Important: Follow the yellow notes in order before enabling the full flow for the first time**"
      },
      "typeVersion": 1
    },
    {
      "id": "a61e301e-a0ca-48e9-9a46-05975662aa90",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        40
      ],
      "parameters": {
        "width": 181,
        "height": 364,
        "content": "### 1. Define your Bluesky user and app password first\n\nThe App password should have access to private messages"
      },
      "typeVersion": 1
    },
    {
      "id": "1b1dcd74-7a71-49e4-99e8-c079b692aca5",
      "name": "Each 60 minutes",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -720,
        240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 60
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6acf153c-cdc6-42c1-85f9-2692c8777eef",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        520,
        620
      ],
      "parameters": {},
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send message": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Session": {
      "main": [
        [
          {
            "node": "List followers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "List followers": {
      "main": [
        [
          {
            "node": "Read followers from file",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Save followers to file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Each 60 minutes": {
      "main": [
        [
          {
            "node": "Create Session",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Define welcome message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Find new followers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find new followers": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get conversation ID": {
      "main": [
        [
          {
            "node": "Send message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Define welcome message": {
      "main": [
        [
          {
            "node": "Get conversation ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save followers to file": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read followers from file": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Discord, gestion des abonnés, engagement client : pour qui est ce workflow ?

Ce workflow s'adresse principalement aux équipes marketing et aux gestionnaires de communauté qui utilisent Discord pour interagir avec leur audience. Il est idéal pour les entreprises de taille petite à moyenne qui souhaitent automatiser leurs processus d'engagement client sans nécessiter de compétences techniques avancées.

Workflow n8n Discord, gestion des abonnés, engagement client : problème résolu

Ce workflow résout le problème de la gestion manuelle des nouveaux abonnés sur Discord, qui peut être chronophage et sujet à des erreurs. En automatisant ce processus, il élimine les frustrations liées à la perte d'opportunités d'engagement et garantit que chaque nouvel abonné reçoit un message de bienvenue, renforçant ainsi la relation avec la communauté. L'utilisateur obtient un système fluide qui lui permet de se concentrer sur des tâches à plus forte valeur ajoutée.

Workflow n8n Discord, gestion des abonnés, engagement client : étapes du workflow

Étape 1 : le workflow est déclenché toutes les 60 minutes.

  • Étape 1 : il crée une session HTTP pour se connecter à l'API de Discord.
  • Étape 2 : il liste les abonnés actuels.
  • Étape 3 : il extrait les nouveaux abonnés à partir d'un fichier.
  • Étape 4 : chaque nouvel abonné est traité dans une boucle, où un message de bienvenue est défini et envoyé.
  • Étape 5 : les informations sur les abonnés sont sauvegardées dans un fichier pour un suivi ultérieur.

Workflow n8n Discord, gestion des abonnés, engagement client : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier l'URL de l'API Discord dans le nœud 'Create Session' ainsi que les paramètres du message de bienvenue dans le nœud 'Define welcome message'. Il est également possible de changer le nom du fichier utilisé pour sauvegarder les abonnés dans le nœud 'Save followers to file'. Pour une intégration avec d'autres outils, envisagez d'ajouter des nœuds supplémentaires pour envoyer des notifications via d'autres plateformes ou pour enrichir les données des abonnés. Assurez-vous de sécuriser les clés API et de monitorer le flux pour détecter toute anomalie.