Workflow n8n

Automatisation Slack avec n8n : gestion des messages et notes

Ce workflow n8n est conçu pour automatiser la gestion des messages sur Slack, en intégrant des fonctionnalités d'intelligence artificielle via OpenAI. Dans un contexte professionnel, ce type d'automatisation est particulièrement utile pour les équipes qui souhaitent optimiser leur communication interne et gérer efficacement les interactions avec les utilisateurs. Par exemple, une entreprise peut utiliser ce workflow pour répondre automatiquement aux messages directs, tout en enregistrant des notes importantes sur des 'sticky notes'. Le processus commence par un déclencheur Webhook qui vérifie les messages entrants. Ensuite, le modèle de chat OpenAI est utilisé pour analyser le contenu des messages et déterminer s'ils proviennent d'un bot ou d'un utilisateur. Si le message est valide, une réponse initiale est envoyée via Slack. Parallèlement, des notes peuvent être créées pour capturer des informations clés, permettant ainsi de garder une trace des échanges importants. Les messages initiaux peuvent également être supprimés après traitement pour éviter la confusion. Les bénéfices de cette automatisation n8n incluent une réduction significative du temps de réponse, une meilleure organisation des informations et une amélioration de la collaboration au sein des équipes. En intégrant des outils d'IA, ce workflow permet de personnaliser les interactions tout en garantissant une gestion fluide des communications. Tags clés : automatisation, Slack, OpenAI.

Catégorie: Webhook · Tags: automatisation, Slack, OpenAI, n8n, communication0

Vue d'ensemble du workflow n8n

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

Détail des nœuds du workflow n8n

  • Verify Webhook

    Ce noeud vérifie et répond à un webhook.

  • OpenAI Chat Model

    Ce noeud utilise le modèle de chat d'OpenAI pour générer des réponses.

  • No Operation, do nothing

    Ce noeud ne réalise aucune opération et ne fait rien.

  • Window Buffer Memory

    Ce noeud gère la mémoire tampon pour les sessions de chat.

  • Check if Bot

    Ce noeud vérifie si l'utilisateur est un bot en fonction de certaines conditions.

  • Send Initial Message

    Ce noeud envoie un message initial sur Slack.

  • Delete Initial Message

    Ce noeud supprime un message initial sur Slack.

  • Send Message

    Ce noeud envoie un message sur Slack.

  • Sticky Note

    Ce noeud crée une note autocollante avec des paramètres spécifiques.

  • Sticky Note1

    Ce noeud crée une autre note autocollante avec des paramètres spécifiques.

  • Sticky Note2

    Ce noeud crée une note autocollante supplémentaire avec des paramètres spécifiques.

  • Sticky Note3

    Ce noeud crée encore une note autocollante avec des paramètres spécifiques.

  • Sticky Note4

    Ce noeud crée une note autocollante avec des paramètres spécifiques.

  • Sticky Note5

    Ce noeud crée une note autocollante avec des paramètres spécifiques.

  • Sticky Note6

    Ce noeud crée une note autocollante avec des paramètres spécifiques.

  • Sticky Note7

    Ce noeud crée une note autocollante avec des paramètres spécifiques.

  • Sticky Note8

    Ce noeud crée une note autocollante avec des paramètres spécifiques.

  • Receive DMs

    Ce noeud reçoit des messages directs via un webhook.

  • Call Confluence Workflow Tool

    Ce noeud appelle un outil de workflow Confluence.

  • AI Agent

    Ce noeud utilise un agent AI pour traiter du texte avec des options spécifiques.

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

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "meta": {
    "instanceId": "cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"
  },
  "nodes": [
    {
      "id": "96ef3bfe-a493-4377-b090-6b2d02d87480",
      "name": "Verify Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1420,
        800
      ],
      "parameters": {
        "options": {
          "responseCode": 200,
          "responseHeaders": {
            "entries": [
              {
                "name": "Content-type",
                "value": "application/json"
              }
            ]
          }
        },
        "respondWith": "json",
        "responseBody": "={\"challenge\":\"{{ $json.body.challenge }}\"}"
      },
      "typeVersion": 1
    },
    {
      "id": "38db6da6-13bf-47a1-b5cb-f06403b309ac",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2120,
        1220
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "QpFZ2EiM3WGl6Zr3",
          "name": "Marketing OpenAI"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "139b606d-29ae-480d-bde7-458ef45dba01",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1840,
        700
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "64acd4c6-cd53-46e5-a29e-40884044b186",
      "name": "Window Buffer Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        2800,
        1220
      ],
      "parameters": {
        "sessionKey": "={{ $('Receive DMs').item.json[\"body\"][\"event\"][\"channel\"] }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 10
      },
      "typeVersion": 1.2
    },
    {
      "id": "e605864f-198e-4358-8333-50ed962d4e50",
      "name": "Check if Bot",
      "type": "n8n-nodes-base.if",
      "position": [
        1640,
        800
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "89ed1b2a-5e42-4196-989d-f7f81df04b6d",
              "operator": {
                "type": "string",
                "operation": "notExists",
                "singleValue": true
              },
              "leftValue": "={{ $json.body.event.user }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "8479c41e-b251-4f32-8daa-421969c4c8b3",
      "name": "Send Initial Message",
      "type": "n8n-nodes-base.slack",
      "position": [
        2140,
        820
      ],
      "parameters": {
        "text": "On it! Let me check Confluence to see if there are any relevant links to answer your question. ",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Receive DMs').item.json[\"body\"][\"event\"][\"channel\"] }}"
        },
        "otherOptions": {
          "botProfile": {
            "imageValues": {
              "icon_url": "https://avatars.slack-edge.com/2024-08-30/7671440019297_d6ce97ff3ab5a3abf9c1_72.jpg",
              "profilePhotoType": "image"
            }
          },
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "id": "OfRxDxHFIqk1q44a",
          "name": "helphub n8n labs auth"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "dcd325b1-1ee8-4133-9a6e-8b37bf20d056",
      "name": "Delete Initial Message",
      "type": "n8n-nodes-base.slack",
      "position": [
        2960,
        760
      ],
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Receive DMs').item.json[\"body\"][\"event\"][\"channel\"] }}"
        },
        "operation": "delete",
        "timestamp": "={{ $('Send Initial Message').item.json[\"message_timestamp\"] }}"
      },
      "credentials": {
        "slackApi": {
          "id": "OfRxDxHFIqk1q44a",
          "name": "helphub n8n labs auth"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "8d3ac15c-b0bc-459c-9523-685b7f498efb",
      "name": "Send Message",
      "type": "n8n-nodes-base.slack",
      "position": [
        3160,
        760
      ],
      "parameters": {
        "text": "={{ $('AI Agent').item.json.output.replace(/\\[(.+?)\\]\\((.+?)\\)/g, '<$2|$1>').replace(/\\*\\*(.+?)\\*\\*/g, '*$1*') }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Receive DMs').item.json[\"body\"][\"event\"][\"channel\"] }}"
        },
        "otherOptions": {
          "botProfile": {
            "imageValues": {
              "icon_url": "https://avatars.slack-edge.com/2024-08-30/7671440019297_d6ce97ff3ab5a3abf9c1_72.jpg",
              "profilePhotoType": "image"
            }
          },
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "id": "OfRxDxHFIqk1q44a",
          "name": "helphub n8n labs auth"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "02afa6b3-c528-4925-8b92-7b708b10e7ca",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1160,
        460
      ],
      "parameters": {
        "color": 7,
        "width": 414.5626477541374,
        "height": 516.5011820330969,
        "content": "![Imgur](https://i.imgur.com/iKyMV0N.png)\n## Webhook Trigger\nThe first node receives all messages from Slack API via Subscription Events API. You can find more information about setting up the subscription events API by [clicking here](https://api.slack.com/apis/connections/events-api). The second node responds to the periodic security challenges that Slack sends to ensure the N8n webhook is still active. "
      },
      "typeVersion": 1
    },
    {
      "id": "a8caa088-80dd-44a8-8c61-7a03a37de386",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1600,
        460
      ],
      "parameters": {
        "color": 7,
        "width": 403.49881796690335,
        "height": 517.6832151300242,
        "content": "![n8n](https://i.imgur.com/lKnBNnH.png)\n## Check for Bot Responses\nIf the message received is from a Bot instead of a real user, it will ignore the message."
      },
      "typeVersion": 1
    },
    {
      "id": "17b51014-4f9d-4650-963b-8d8d944869ea",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2900,
        460
      ],
      "parameters": {
        "color": 7,
        "width": 430.54373522458616,
        "height": 451.3947990543734,
        "content": "![Slack](https://i.imgur.com/iKyMV0N.png)\n## Delete Receipt and Send Response \nOnce the AI response is generated in response to the slack message, n8n delete's it's original *Message Received* message to avoid cluttering up the user's DMs, and then sends the final Slack message back to the user. "
      },
      "typeVersion": 1
    },
    {
      "id": "494a9ada-18e9-48a6-86a9-5e72cc797ddf",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2394.7517730496443,
        460
      ],
      "parameters": {
        "color": 7,
        "width": 488.1796690307332,
        "height": 723.5460992907797,
        "content": "![OpenAI](https://i.imgur.com/o89G0If.png)\n## Parse Response with AI Model \nThis workflow currently uses OpenAI to power it's responses, but you can open the AI Agent node below and set your own AI LLM using the n8n options offered. "
      },
      "typeVersion": 1
    },
    {
      "id": "31bc923f-c981-45fd-827d-cede2ec3f3c3",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2020,
        460
      ],
      "parameters": {
        "color": 7,
        "width": 356.5484633569741,
        "height": 516.5011820330968,
        "content": "![Slack](https://i.imgur.com/iKyMV0N.png)\n## Response Received\nOnce N8n sees that the messaged received is from a user, it will respond right away to acknowledge a message was received. You can edit the message by opening the node below. "
      },
      "typeVersion": 1
    },
    {
      "id": "e81d6b07-9ac0-4848-ab7f-57a588103ce5",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2980,
        1200
      ],
      "parameters": {
        "color": 7,
        "width": 951.1571908442271,
        "height": 467.66775526888296,
        "content": "![n8n](https://i.imgur.com/FWJX4km.png)\n## Build n8n workflow to query Knowledge Base\nBuilding your own tools for an AI Agent to use is simple and straightforward, but requires that you build a second workflow and then connect it to this one by inputting the workflow ID from the workflow URL in the *Custom n8n KB Tool* sub node. \n\nThis gives you the freedom to work with any tool, whether n8n has support for it or not. In this sample build, we have connected the AI agent to Confluence, which does not have a native built in n8n node. For this we use the HTTP request node and pointed it to Confluence's search api. It then returns a response that the AI agent uses to generate a final slack message response to the user. "
      },
      "typeVersion": 1
    },
    {
      "id": "890aeb96-1721-4cb4-a609-5409b30d5f6c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2320,
        1200
      ],
      "parameters": {
        "color": 7,
        "width": 644.582152697438,
        "height": 318.6662788502134,
        "content": "![n8n](https://i.imgur.com/lKnBNnH.png)\n\n## Remembers the last 5 messages that a user sent\nBecause we are passing the channel ID of the user to the memory module, n8n is storing the last 5 slack messages sent to it per slack channel. This means that it will remember all your users conversations separately from one another and not get confused by different requests from different users. You can increase the memory storage by using a different storage medium and increase the number of prompts and responses it should remember. "
      },
      "typeVersion": 1
    },
    {
      "id": "1fa61c12-70d1-4d7e-8564-a2a574804243",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1660,
        1200
      ],
      "parameters": {
        "color": 7,
        "width": 644.582152697438,
        "height": 318.6662788502134,
        "content": "![OpenAI](https://i.imgur.com/o89G0If.png)\n\n## Change the AI Agents LLM\nTo change the model used, simply delete the ChatGPT model and replace with a different supported model by hitting the plus sign under model in the AI Agent."
      },
      "typeVersion": 1
    },
    {
      "id": "fecd81da-4723-4886-8d6f-9729623028a9",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        460
      ],
      "parameters": {
        "width": 675.1724774900403,
        "height": 994.2389415638766,
        "content": "![n8n](https://i.imgur.com/lKnBNnH.png)\n# Streamline IT Inquiries with n8n & AI!\n\n## Introducing the IT Ops AI SlackBot Workflow---a sophisticated solution designed to automate and optimize the management of IT-related inquiries via Slack.\n\nWhen an employee messages the IT department slack app, the workflow kicks off with the \"Receive DMs\" node, which captures incoming messages and ensures a secure and active communication line by responding to Slack's webhook challenges.\n\n**How It Works:**\n\n-   Verify Webhook: Responds to slacks challenge and respond requests to ensure is still active.\n-   Check if bot: Checks whether the message sender is a bot to prevent unnecessary processing.\n-   Send Initial Message: Sends a quick confirmation, like \"On it!\", to let the user know their query is being handled.\n-   AI-Driven Responses: Employs the \"AI Agent\" node with OpenAI to craft relevant replies based on the conversation history maintained by the \"Window Buffer Memory\" node.\n-   Knowledge Integration tool: Uses a custom Knowledge Base tool to fetch pertinent information from confluence, enhancing the quality of responses.\n-   Cleanup and Reply: Deletes the initial acknowledgment to tidy up before sending the final detailed response back to the user.\n\n\n**Get Started:**\n-   Ensure your [Slack](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=n8n-nodes-base.slack) and [OpenAI](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=@n8n/n8n-nodes-langchain.lmChatOpenAi) integrations are properly set up.\n-   Customize the workflow to align with your IT department's protocols.\n\n\n**Need Help?**\n-   Join the discussion on our Forum or check out resources on Discord!\n\n\nDeploy this workflow to improve response times and enhance the efficiency of your IT support services."
      },
      "typeVersion": 1
    },
    {
      "id": "16b79887-8218-4056-8add-39ebee6166bd",
      "name": "Receive DMs",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1200,
        800
      ],
      "webhookId": "44c26a10-d54a-46ce-a522-5d83e8a854be",
      "parameters": {
        "path": "44c26a10-d54a-46ce-a522-5d83e8a854be",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "201b5399-6fff-48ca-81f0-a5cfc02c46d5",
      "name": "Call Confluence Workflow Tool",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        3380,
        1280
      ],
      "parameters": {
        "name": "confluence_kb_search",
        "workflowId": {
          "__rl": true,
          "mode": "list",
          "value": "Pxzc65WaCPn2yB5I",
          "cachedResultName": "KB Tool - Confluence KB"
        },
        "description": "Call this tool to search n8n-labs confluence knowledge base. The input should be the user prompt reduced into 1 to 3 keywords to use for a KB search. These words should be words that are most likely to be contained in the text of a KB article that is helpful based on the user prompt. The words should be the only response and they should just be separated by a space."
      },
      "typeVersion": 1.2
    },
    {
      "id": "41026e03-5844-4e57-86bf-fc7e586265a4",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2500,
        820
      ],
      "parameters": {
        "text": "={{ $('Receive DMs').item.json.body.event.text }}",
        "options": {
          "humanMessage": "TOOLS\n------\nAssistant can ask the user to use tools to look up information that may be helpful in answering the users original question. The tools the human can use are:\n\n{tools}\n\nIf no response is given for a given tool or the response is an error, then do not reference the tool results and instead ask for more context. \n\nThe tools currently search Notion and returns back a list of results. Please try to respond using the most relevant result URL to guide the user to the right answer. \n\nIf you are not sure, let the user know you were unable to find a notion page for them to help, but give them the top results that are relevant to their request.\n\nPlease summarize the results and return all the URLs exactly as you get them from the tool. Please format all links you send in this format: <url|name of url> \nAdditionally, here are other formatting layouts to use: \n_italic_ will produce italicized text\n*bold* will produce bold text\n~strike~ will produce strikethrough text\n\n{format_instructions}\n\nUSER'S INPUT\n--------------------\nHere is the user's input (remember to respond with a slack flavored (see above for more details) code snippet of a json blob with a single action, and NOTHING else):\n\n{{input}}\n",
          "maxIterations": 2,
          "systemMessage": "You are Knowledge Ninja, a specialized IT support tool developed to streamline interactions between employees and the IT department and the company knowledge base. \n\nDesigned with efficiency in mind, Knowledge Ninja is equipped to handle a variety of IT-related queries, from sales competition analysis to troubleshooting to more complex technical guidance.\n\nAs a dynamic knowledge tool, Knowledge Ninja utilizes a comprehensive internal knowledge base that can be tailored to your organization's specific IT infrastructure and policies. \n\nThis allows it to deliver precise and contextually relevant information swiftly, enhancing the support process.\n\nKnowledge Ninja is continuously updated to reflect the latest IT standards and practices, ensuring that the guidance it provides is both accurate and up-to-date. \n\nIts capabilities include understanding detailed queries, providing step-by-step troubleshooting instructions, and clarifying IT policies.\n\nPlease format all links you send in this format: <url|name of url> \nAdditionally, here are other formatting layouts to use: \n_italic_ will produce italicized text\n*bold* will produce bold text\n~strike~ will produce strikethrough text"
        },
        "promptType": "define"
      },
      "typeVersion": 1.5
    }
  ],
  "pinData": {},
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Delete Initial Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive DMs": {
      "main": [
        [
          {
            "node": "Verify Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if Bot": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Initial Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Webhook": {
      "main": [
        [
          {
            "node": "Check if Bot",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Send Initial Message": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Window Buffer Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Delete Initial Message": {
      "main": [
        [
          {
            "node": "Send Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call Confluence Workflow Tool": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}

Pour qui est ce workflow ?

Ce workflow s'adresse aux équipes de communication et aux départements marketing des entreprises de taille moyenne à grande, qui utilisent Slack comme outil de collaboration. Un niveau technique intermédiaire est recommandé pour la mise en œuvre et la personnalisation du workflow.

Problème résolu

Ce workflow résout le problème de la gestion manuelle des messages sur Slack, qui peut être chronophage et source d'erreurs. En automatisant les réponses et en organisant les informations via des notes, les utilisateurs gagnent du temps et améliorent leur efficacité. De plus, cela réduit le risque de perdre des informations importantes dans le flux de communication.

Étapes du workflow

Étape 1 : Le workflow est déclenché par un Webhook qui reçoit les messages entrants. Étape 2 : Le message est analysé par le modèle de chat OpenAI pour déterminer son origine. Étape 3 : Si le message provient d'un utilisateur, une réponse initiale est envoyée via Slack. Étape 4 : Des notes sont créées pour capturer les informations clés. Étape 5 : Les messages initiaux peuvent être supprimés pour éviter toute confusion. Étape 6 : Les interactions sont gérées par un agent IA qui peut également appeler d'autres outils si nécessaire.

Guide de personnalisation du workflow n8n

Pour personnaliser ce workflow, commencez par ajuster l'URL du Webhook pour qu'elle corresponde à votre configuration Slack. Vous pouvez également modifier les paramètres du modèle OpenAI pour adapter les réponses à votre ton de communication. Pensez à personnaliser les messages envoyés et à ajuster les couleurs et contenus des sticky notes selon vos besoins. Enfin, pour une intégration plus poussée, vous pouvez connecter d'autres outils comme Confluence pour enrichir vos échanges.