Workflow n8n

Automatisation Slack avec n8n : récupération d'infos GitHub

Ce workflow n8n a pour objectif d'automatiser la récupération d'informations utilisateur depuis GitHub et de les envoyer sur Slack. Il est particulièrement utile pour les équipes de développement qui souhaitent centraliser les notifications et les mises à jour concernant les utilisateurs de leur projet GitHub. Grâce à cette automatisation n8n, les équipes peuvent gagner du temps et améliorer leur communication en évitant les recherches manuelles d'informations. Le workflow commence par un déclencheur de type Webhook, qui permet de recevoir des requêtes HTTP. Ensuite, il utilise un nœud GraphQL pour interroger l'API de GitHub et récupérer les données utilisateur nécessaires. Les informations obtenues sont ensuite traitées par un nœud Function, qui permet d'adapter les données au format souhaité avant de les envoyer. Enfin, un nœud Slack envoie les informations formatées dans un canal spécifique, facilitant ainsi le partage d'informations au sein de l'équipe. Cette automatisation apporte une valeur ajoutée significative en réduisant les délais de communication et en centralisant les informations pertinentes dans un seul canal accessible à tous les membres de l'équipe.

Tags clés :automatisationSlackGitHubn8ncommunication
Catégorie: Webhook · Tags: automatisation, Slack, GitHub, n8n, communication0

Workflow n8n Slack, GitHub, communication : vue d'ensemble

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

Workflow n8n Slack, GitHub, communication : détail des nœuds

  • Webhook

    Ce noeud reçoit des requêtes HTTP via un webhook.

  • GraphQL

    Ce noeud exécute une requête GraphQL vers un endpoint spécifié.

  • Function

    Ce noeud exécute un code JavaScript personnalisé pour traiter des données.

  • Slack

    Ce noeud envoie un message sur un canal Slack avec des options supplémentaires.

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

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "id": "5",
  "name": "Slack-GitHub User Info",
  "nodes": [
    {
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        300,
        300
      ],
      "webhookId": "dacd64a7-a83e-4492-b8fe-363453906d0d",
      "parameters": {
        "path": "dacd64a7-a83e-4492-b8fe-363453906d0d",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "name": "GraphQL",
      "type": "n8n-nodes-base.graphql",
      "position": [
        500,
        300
      ],
      "parameters": {
        "query": "=query {\nuser(login:\"{{$node[\"Webhook\"].json[\"body\"][\"text\"]}}\"){\nname\ncompany\nlocation\navatarUrl\nemail\npullRequests(last: 25) {\nedges {\nnode {\ncommits(last:25) {\nnodes {\ncommit {\nauthor {\nemail\nname\n}\n}\n}\n}\n}\n}\n}\n}\n}",
        "endpoint": "https://api.github.com/graphql",
        "requestFormat": "json",
        "responseFormat": "string",
        "headerParametersUi": {
          "parameter": [
            {
              "name": "User-Agent",
              "value": "n8n"
            },
            {
              "name": "Authorization",
              "value": "bearer <Personal Token>"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Function",
      "type": "n8n-nodes-base.function",
      "position": [
        700,
        300
      ],
      "parameters": {
        "functionCode": "let emails = [];\nlet tempEmails = [];\nconst name = $node[\"GraphQL\"].json[\"data\"][\"data\"][\"user\"][\"name\"];\nconst publicEmail = $node[\"GraphQL\"].json[\"data\"][\"data\"][\"user\"][\"email\"];\nconst username = $node[\"Webhook\"].json[\"body\"][\"text\"];\nconst nameRegex = new RegExp(name,\"g\")\n\nif(publicEmail){\n// if public email address exists, push it to the tempEmails array\n  tempEmails.push(publicEmail)\n}\n\n// looping through the pull requests\nfor(const edge of items[0].json.data.data.user.pullRequests.edges){\n // looping through the commits\n  for(node of edge.node.commits.nodes){\n\n    // Checks the name associated with the email address\n    if(nameRegex.test(node.commit.author.name)|| node.commit.author.name == username) {\n     // if name equals to contributors name or username, push the email address in tempEmails\n      tempEmails.push(node.commit.author.email)\n    }\n  }\n}\n\n// Remove duplicates\nemails = [...new Set(tempEmails)]\n\n// RegEx Pattern for email address generated by GitHub\nlet re = /^\\w+(.)*@users.noreply.github.com/\n\n// Remove the email addresses Generated by GitHub\nemails = emails.filter(email => !re.test(email))\n\n\nreturn [{json:{emails,}}]\n"
      },
      "typeVersion": 1
    },
    {
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        900,
        300
      ],
      "parameters": {
        "channel": "={{$node[\"Webhook\"].json[\"body\"][\"channel_id\"]}}",
        "attachments": [
          {
            "title": "=GitHub Details for: {{$node[\"Webhook\"].json[\"body\"][\"text\"]}}"
          },
          {
            "text": "=*Name:*  {{$node[\"GraphQL\"].json[\"data\"][\"data\"][\"user\"][\"name\"]}}\n*Email:* {{$node[\"Function\"].json[\"emails\"].join(', ')}}\n*Company:* {{$node[\"GraphQL\"].json[\"data\"][\"data\"][\"user\"][\"company\"]}}\n*Location:* {{$node[\"GraphQL\"].json[\"data\"][\"data\"][\"user\"][\"location\"]}}"
          },
          {
            "thumb_url": "={{$node[\"GraphQL\"].json[\"data\"][\"data\"][\"user\"][\"avatarUrl\"]}}"
          }
        ],
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": "Slack OAuth2"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {},
  "connections": {
    "GraphQL": {
      "main": [
        [
          {
            "node": "Function",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "GraphQL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Function": {
      "main": [
        [
          {
            "node": "Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Slack, GitHub, communication : pour qui est ce workflow ?

Ce workflow s'adresse principalement aux équipes de développement et aux entreprises qui utilisent GitHub et Slack pour la gestion de projets. Il est idéal pour les organisations de taille moyenne à grande, qui cherchent à améliorer leur efficacité opérationnelle et leur communication interne. Un niveau technique intermédiaire est recommandé pour la mise en place et la personnalisation du workflow.

Workflow n8n Slack, GitHub, communication : problème résolu

Ce workflow résout le problème de la dispersion des informations entre différentes plateformes. Les équipes de développement passent souvent beaucoup de temps à chercher des informations sur les utilisateurs dans GitHub, ce qui peut entraîner des retards dans la communication et la prise de décision. En automatisant ce processus, les utilisateurs peuvent recevoir des mises à jour en temps réel sur Slack, réduisant ainsi le temps perdu et améliorant la réactivité de l'équipe face aux changements. Cela permet également de minimiser les risques d'erreurs humaines lors de la transmission d'informations.

Workflow n8n Slack, GitHub, communication : étapes du workflow

Étape 1 : Le workflow est déclenché par un Webhook, qui reçoit une requête HTTP.

  • Étape 1 : Les données sont ensuite envoyées à un nœud GraphQL, qui interroge l'API de GitHub pour récupérer les informations utilisateur.
  • Étape 2 : Les données obtenues sont traitées par un nœud Function, permettant de les formater selon les besoins.
  • Étape 3 : Enfin, les informations formatées sont envoyées à un canal Slack via un nœud Slack, facilitant ainsi leur partage avec l'équipe.

Workflow n8n Slack, GitHub, communication : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier l'URL du Webhook pour l'adapter à vos besoins spécifiques. Dans le nœud GraphQL, ajustez la requête pour récupérer les informations utilisateur pertinentes selon vos critères. Vous pouvez également personnaliser le format des données dans le nœud Function pour qu'elles soient présentées de manière optimale sur Slack. Enfin, n'oubliez pas de spécifier le canal Slack dans le nœud correspondant pour diriger les notifications vers le bon endroit. Assurez-vous également de configurer les paramètres d'authentification nécessaires pour accéder à l'API de GitHub.