Workflow d'analyse du sentiment des avis Google

Avancé

Ceci est unAI Summarization, Multimodal AIworkflow d'automatisation du domainecontenant 25 nœuds.Utilise principalement des nœuds comme Set, Code, Slack, Filter, Agent. Analyser les avis Google Business et envoyer un rapport de sentiment dans Slack avec Gemini

Prérequis
  • Token Bot Slack ou URL Webhook
  • Clé API Google Gemini
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "peemlQQi9udHOyNH",
  "meta": {
    "instanceId": "bbc3fa3cd7d64d8ff0c4877d98dee68ce7dadacc5e089546680c915b3e5a212b",
    "templateCredsSetupCompleted": true
  },
  "name": "Google review Sentiment analysis workflow",
  "tags": [],
  "nodes": [
    {
      "id": "3f44e182-92ad-4e47-9eab-4ffc6c9a3dfa",
      "name": "Obtenir plusieurs avis",
      "type": "n8n-nodes-base.googleBusinessProfile",
      "position": [
        -272,
        -80
      ],
      "parameters": {
        "limit": 1000,
        "account": {
          "__rl": true,
          "mode": "name",
          "value": "="
        },
        "location": {
          "__rl": true,
          "mode": "name",
          "value": "="
        },
        "resource": "review",
        "operation": "getAll",
        "requestOptions": {}
      },
      "typeVersion": 1
    },
    {
      "id": "29592644-4922-4095-a608-fc369882a249",
      "name": "Analyse de Sentiment",
      "type": "@n8n/n8n-nodes-langchain.sentimentAnalysis",
      "position": [
        368,
        -96
      ],
      "parameters": {
        "options": {
          "batching": {
            "batchSize": 20,
            "delayBetweenBatches": 60000
          },
          "categories": "Positive, Neutral, Negative",
          "enableAutoFixing": true,
          "systemPromptTemplate": "=You are a highly intelligent and accurate sentiment analyzer.  \n\nYou will receive multiple JSON objects, each containing:  \n- Comment: \"{{ $json.Comment }}\"  \n- Rating: \"{{ $json.Raiting }}\"  \n- Date: \"{{ $json.Date }}\"  \n\nRules for analysis:  \n- If Comment = \"no comment\", ignore the comment and analyze sentiment only from the rating.  \n- If Comment has text, analyze sentiment based on both the comment and rating together.  \n- Use the Date field to group sentiments by month and identify trends.  \n\nYour tasks:  \n1. Classify the overall sentiment trends into one of the following categories: {categories}.  \n2. Group the results by month (based on the Date field) and provide the sentiment distribution for each month.  \n3. For each month, give a short explanation of why the sentiment appears that way (e.g., common themes in comments, tone, or rating alignment).  \n4. Provide a consolidated summary of sentiment across the entire dataset, including the key reasons driving the results.  ",
          "includeDetailedResults": true
        },
        "inputText": "={{ $json.Comment }}{{ $json.Raiting }}{{ $json.Date }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "692ed10b-947e-4386-9707-0c2ce1e307f9",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1056,
        -224
      ],
      "parameters": {
        "options": {
          "maxOutputTokens": 5000
        },
        "modelName": "models/gemini-2.0-flash"
      },
      "typeVersion": 1
    },
    {
      "id": "713c6715-380d-4adf-a681-092765116409",
      "name": "Déclencheur Planifié",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -688,
        -80
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "months"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "20e79d80-cdce-4cae-ab1f-6ff44565731b",
      "name": "Agent IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1040,
        -432
      ],
      "parameters": {
        "text": "=You are an AI assistant that consolidates customer feedback consisting of comments, ratings, and sentiment analysis metadata. \n\nINPUT DATA:\n{{ $json.feedback }}\n\nTASK:\n1. Review all feedback entries together.\n   - Ignore entries where \"Comment\" = \"no comment\".\n   - Convert \"Raiting\" into numeric stars (FIVE = 5, FOUR = 4, etc.).\n   - Use \"sentimentAnalysis\" to confirm tone and consistency.\n   - Consider \"Date\" to identify any trends or changes over time.\n\n2. Produce ONE single consolidated report in **valid JSON format** with the following structure:\n\n{\n  \"overallSentiment\": \"string\",        // e.g. \"Positive\", \"Negative\", \"Mixed\"\n  \"averageRating\": number,             // average numeric rating\n  \"highlights\": [ \"string\", ... ],     // list of positive aspects\n  \"weaknessesConcerns\": [ \"string\", ... ], // list of concerns/issues\n  \"timeTrend\": \"string\",               // description of sentiment or rating trend over time\n  \"finalSummary\": \"string\"             // concise conclusion\n}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "97dce654-beb7-46f3-9d4c-9f4768b72324",
      "name": "Agent IA1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1040,
        -128
      ],
      "parameters": {
        "text": "=You are an AI assistant that consolidates customer feedback consisting of comments, ratings, and sentiment analysis metadata. \n\nINPUT DATA:\n{{ $json.feedback }}\n\nTASK:\n1. Review all feedback entries together.\n   - Ignore entries where \"Comment\" = \"no comment\".\n   - Convert \"Raiting\" into numeric stars (FIVE = 5, FOUR = 4, etc.).\n   - Use \"sentimentAnalysis\" to confirm tone and consistency.\n   - Consider \"Date\" to identify any trends or changes over time.\n\n2. Produce ONE single consolidated report in **valid JSON format** with the following structure:\n\n{\n  \"overallSentiment\": \"string\",        // e.g. \"Positive\", \"Negative\", \"Mixed\"\n  \"averageRating\": number,             // average numeric rating\n  \"highlights\": [ \"string\", ... ],     // list of positive aspects\n  \"weaknessesConcerns\": [ \"string\", ... ], // list of concerns/issues\n  \"timeTrend\": \"string\",               // description of sentiment or rating trend over time\n  \"finalSummary\": \"string\"             // concise conclusion\n}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "bfc5447b-fd82-4c44-af66-0d2b60f75280",
      "name": "Agent IA2",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1056,
        112
      ],
      "parameters": {
        "text": "=You are an AI assistant that consolidates customer feedback consisting of comments, ratings, and sentiment analysis metadata. \n\nINPUT DATA:\n{{ $json.feedback }}\n\nTASK:\n1. Review all feedback entries together.\n   - Ignore entries where \"Comment\" = \"no comment\".\n   - Convert \"Raiting\" into numeric stars (FIVE = 5, FOUR = 4, etc.).\n   - Use \"sentimentAnalysis\" to confirm tone and consistency.\n   - Consider \"Date\" to identify any trends or changes over time.\n\n2. Produce ONE single consolidated report in **valid JSON format** with the following structure:\n\n{\n  \"overallSentiment\": \"string\",        // e.g. \"Positive\", \"Negative\", \"Mixed\"\n  \"averageRating\": number,             // average numeric rating\n  \"highlights\": [ \"string\", ... ],     // list of positive aspects\n  \"weaknessesConcerns\": [ \"string\", ... ], // list of concerns/issues\n  \"timeTrend\": \"string\",               // description of sentiment or rating trend over time\n  \"finalSummary\": \"string\"             // concise conclusion\n}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "f95e4642-38b6-48ea-bf53-5de3175a7846",
      "name": "Google Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        368,
        112
      ],
      "parameters": {
        "options": {
          "maxOutputTokens": 5000
        },
        "modelName": "models/gemini-2.0-flash"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "WGFHFP25iuAU2TH9",
          "name": "Google Gemini(PaLM) Api account 2"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8606a252-49af-472d-a47c-559be628fe60",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -512,
        -288
      ],
      "parameters": {
        "width": 752,
        "height": 432,
        "content": "## Reading Google review\n**Reading google review from the google business profile**"
      },
      "typeVersion": 1
    },
    {
      "id": "eb49d865-7578-4969-b505-b643caa3f29d",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        288,
        -288
      ],
      "parameters": {
        "width": 400,
        "height": 544,
        "content": "## Run sentiment analysis on google review\n**Based on the google review data a sentiment analysis run on top of the google review using Gemini model.**"
      },
      "typeVersion": 1
    },
    {
      "id": "17a9299c-5c99-466e-ae6a-895c29b25106",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -624
      ],
      "parameters": {
        "width": 640,
        "height": 896,
        "content": "## Summarize the sentiment analysis report using AI model\n**After the sentiment of each review is analysed consolidating the overall sentiment and restructure the output.**"
      },
      "typeVersion": 1
    },
    {
      "id": "4b087a3b-d891-4f9a-97d1-be57259afb19",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        -656
      ],
      "parameters": {
        "width": 448,
        "height": 928,
        "content": "## Sent notification to slack channel\n\n**Restructure the data to slack block and send to slack channel.**"
      },
      "typeVersion": 1
    },
    {
      "id": "091e5606-4e04-4fe3-b2df-0625f32d6beb",
      "name": "Note adhésive5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        -816
      ],
      "parameters": {
        "width": 512,
        "height": 448,
        "content": "\n## Google review Sentiment analysis workflow\n\n\n**What it does**\n- Read Google review from the google business profile\n- Run sentimental analysis on the review for a defined period.\n- Send notification to slack channel.\n\n**Requirement**\n- Google business profile with approved project by  Google.\n- Enable google business profile API service.\n- Gemini model with necessary credentials\n\n\n**Setup Instructions:**\n- Setup google business profile and enable Google Business Profile API.\n- Read google review using owner name and location.\n- Setup slack account to send notification from workflow.\n- Configure the time period of the review using set time period node\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b4506c66-8619-4eef-aed0-f4a9363af457",
      "name": "Définir la période",
      "type": "n8n-nodes-base.set",
      "position": [
        -480,
        -80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "6acde8ee-5eeb-451c-a491-ed4a19c7b765",
              "name": "period",
              "type": "string",
              "value": "year"
            },
            {
              "id": "f5212cc6-8ed1-45de-ac3b-ff839822bed2",
              "name": "time",
              "type": "string",
              "value": "3"
            }
          ]
        }
      },
      "executeOnce": true,
      "typeVersion": 3.4
    },
    {
      "id": "f284db6b-8852-427a-be86-e30961871f97",
      "name": "Filtrer les avis selon la période",
      "type": "n8n-nodes-base.filter",
      "position": [
        -96,
        -80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2dd5772a-efc9-46ac-9054-c5a7de0abdc9",
              "operator": {
                "type": "dateTime",
                "operation": "after"
              },
              "leftValue": "={{ $json.updateTime }}",
              "rightValue": "={{ $today.minus({ [ $('Set time period').item.json.period ]: $('Set time period').item.json.time }).toISO() }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "c775ac9e-4367-463d-b3d0-45e3d7bc648f",
      "name": "Mapper le commentaire et la note",
      "type": "n8n-nodes-base.set",
      "position": [
        112,
        -80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4ad19e64-07ad-4351-a696-d2d0026aaa31",
              "name": "Comment",
              "type": "string",
              "value": "={{ $json.comment ?? \"no comment\" }}"
            },
            {
              "id": "ac2932fb-6a62-4179-98d3-5d66a9738ee8",
              "name": "Raiting",
              "type": "string",
              "value": "={{ $json.starRating ?? \"0\" }}"
            },
            {
              "id": "fcadfd58-3d78-44e3-9e95-a24cbdaec614",
              "name": "Date",
              "type": "string",
              "value": "={{ $json.updateTime }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "719cdaa0-f962-45da-91a4-34492f92119e",
      "name": "Convertir en chaîne json",
      "type": "n8n-nodes-base.code",
      "position": [
        816,
        -336
      ],
      "parameters": {
        "jsCode": "return [\n  {\n    json: {\n      feedback: JSON.stringify($input.all().map(item => item.json), null, 2)\n    }\n  }\n];"
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "68f2cf3c-4b21-4004-b8d4-3399d8c1bafa",
      "name": "Convertir en chaîne json1",
      "type": "n8n-nodes-base.code",
      "position": [
        816,
        -96
      ],
      "parameters": {
        "jsCode": "return [\n  {\n    json: {\n      feedback: JSON.stringify($input.all().map(item => item.json), null, 2)\n    }\n  }\n];"
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "046f17c6-c024-4b62-b16f-6d6ccdfeaad2",
      "name": "Convertir en chaîne json2",
      "type": "n8n-nodes-base.code",
      "position": [
        816,
        112
      ],
      "parameters": {
        "jsCode": "return [\n  {\n    json: {\n      feedback: JSON.stringify($input.all().map(item => item.json), null, 2)\n    }\n  }\n];"
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "cad3406f-e05d-4c9c-ae13-aa9d877286e3",
      "name": "Restructurer les données positives en bloc slack",
      "type": "n8n-nodes-base.code",
      "position": [
        1456,
        -432
      ],
      "parameters": {
        "jsCode": "// Extract JSON string from $json.output (remove ```json ... ```)\nlet raw = $json.output.replace(/```json|```/g, \"\").trim();\n\n// Parse JSON\nlet data;\ntry {\n  data = JSON.parse(raw);\n} catch (e) {\n  throw new Error(\"Invalid JSON format in output: \" + e.message);\n}\n\n// Slack blocks array\nconst blocks = [\n  {\n    type: \"header\",\n    text: {\n      type: \"plain_text\",\n      text: \"📊 Customer Feedback Report\",\n      emoji: true\n    }\n  }\n];\n\n// Overall Sentiment\nif (data.overallSentiment) {\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Overall Sentiment:* ${data.overallSentiment}` }\n  });\n}\n\n// Average Rating\nif (data.averageRating) {\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Average Rating:* ${data.averageRating} ⭐` }\n  });\n}\n\n// Highlights\nif (data.highlights && data.highlights.length > 0) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: \"*Highlights:*\" }\n  });\n\n  data.highlights.forEach(h => {\n    blocks.push({\n      type: \"section\",\n      text: { type: \"mrkdwn\", text: `• ${h}` }\n    });\n  });\n}\n\n// Weaknesses/Concerns\nif (data.weaknessesConcerns && data.weaknessesConcerns.length > 0) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: \"*Weaknesses / Concerns:*\" }\n  });\n\n  data.weaknessesConcerns.forEach(w => {\n    blocks.push({\n      type: \"section\",\n      text: { type: \"mrkdwn\", text: `• ${w}` }\n    });\n  });\n}\n\n// Time Trend\nif (data.timeTrend) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Time Trend:* ${data.timeTrend}` }\n  });\n}\n\n// Final Summary\nif (data.finalSummary) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Final Summary:* ${data.finalSummary}` }\n  });\n}\n\n// Return Slack-ready JSON\nreturn [\n  {\n    json: {\n      blocks\n    }\n  }\n];\n"
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "e734a3e0-5b2e-4930-a61a-c81a9263d34a",
      "name": "Restructurer les données neutres en bloc slack",
      "type": "n8n-nodes-base.code",
      "position": [
        1440,
        -128
      ],
      "parameters": {
        "jsCode": "// Extract JSON string from $json.output (remove ```json ... ```)\nlet raw = $json.output.replace(/```json|```/g, \"\").trim();\n\n// Parse JSON\nlet data;\ntry {\n  data = JSON.parse(raw);\n} catch (e) {\n  throw new Error(\"Invalid JSON format in output: \" + e.message);\n}\n\n// Slack blocks array\nconst blocks = [\n  {\n    type: \"header\",\n    text: {\n      type: \"plain_text\",\n      text: \"📊 Customer Feedback Report\",\n      emoji: true\n    }\n  }\n];\n\n// Overall Sentiment\nif (data.overallSentiment) {\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Overall Sentiment:* ${data.overallSentiment}` }\n  });\n}\n\n// Average Rating\nif (data.averageRating) {\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Average Rating:* ${data.averageRating} ⭐` }\n  });\n}\n\n// Highlights\nif (data.highlights && data.highlights.length > 0) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: \"*Highlights:*\" }\n  });\n\n  data.highlights.forEach(h => {\n    blocks.push({\n      type: \"section\",\n      text: { type: \"mrkdwn\", text: `• ${h}` }\n    });\n  });\n}\n\n// Weaknesses/Concerns\nif (data.weaknessesConcerns && data.weaknessesConcerns.length > 0) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: \"*Weaknesses / Concerns:*\" }\n  });\n\n  data.weaknessesConcerns.forEach(w => {\n    blocks.push({\n      type: \"section\",\n      text: { type: \"mrkdwn\", text: `• ${w}` }\n    });\n  });\n}\n\n// Time Trend\nif (data.timeTrend) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Time Trend:* ${data.timeTrend}` }\n  });\n}\n\n// Final Summary\nif (data.finalSummary) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Final Summary:* ${data.finalSummary}` }\n  });\n}\n\n// Return Slack-ready JSON\nreturn [\n  {\n    json: {\n      blocks\n    }\n  }\n];\n"
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "bf8ebac2-b4f9-43ea-8ec0-ab2a018760c2",
      "name": "Restructurer les données négatives en bloc slack",
      "type": "n8n-nodes-base.code",
      "position": [
        1456,
        112
      ],
      "parameters": {
        "jsCode": "// Extract JSON string from $json.output (remove ```json ... ```)\nlet raw = $json.output.replace(/```json|```/g, \"\").trim();\n\n// Parse JSON\nlet data;\ntry {\n  data = JSON.parse(raw);\n} catch (e) {\n  throw new Error(\"Invalid JSON format in output: \" + e.message);\n}\n\n// Slack blocks array\nconst blocks = [\n  {\n    type: \"header\",\n    text: {\n      type: \"plain_text\",\n      text: \"📊 Customer Feedback Report\",\n      emoji: true\n    }\n  }\n];\n\n// Overall Sentiment\nif (data.overallSentiment) {\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Overall Sentiment:* ${data.overallSentiment}` }\n  });\n}\n\n// Average Rating\nif (data.averageRating) {\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Average Rating:* ${data.averageRating} ⭐` }\n  });\n}\n\n// Highlights\nif (data.highlights && data.highlights.length > 0) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: \"*Highlights:*\" }\n  });\n\n  data.highlights.forEach(h => {\n    blocks.push({\n      type: \"section\",\n      text: { type: \"mrkdwn\", text: `• ${h}` }\n    });\n  });\n}\n\n// Weaknesses/Concerns\nif (data.weaknessesConcerns && data.weaknessesConcerns.length > 0) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: \"*Weaknesses / Concerns:*\" }\n  });\n\n  data.weaknessesConcerns.forEach(w => {\n    blocks.push({\n      type: \"section\",\n      text: { type: \"mrkdwn\", text: `• ${w}` }\n    });\n  });\n}\n\n// Time Trend\nif (data.timeTrend) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Time Trend:* ${data.timeTrend}` }\n  });\n}\n\n// Final Summary\nif (data.finalSummary) {\n  blocks.push({ type: \"divider\" });\n  blocks.push({\n    type: \"section\",\n    text: { type: \"mrkdwn\", text: `*Final Summary:* ${data.finalSummary}` }\n  });\n}\n\n// Return Slack-ready JSON\nreturn [\n  {\n    json: {\n      blocks\n    }\n  }\n];\n"
      },
      "executeOnce": true,
      "retryOnFail": false,
      "typeVersion": 2
    },
    {
      "id": "8e8b11a1-1531-4f0d-90f6-5025e04a173e",
      "name": "Envoyer un message au canal slack si l'analyse est positive",
      "type": "n8n-nodes-base.slack",
      "position": [
        1664,
        -432
      ],
      "webhookId": "e3c8bfca-cc86-4c09-923a-0e40bf18d3e5",
      "parameters": {
        "select": "channel",
        "blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09DQ7EJ57A",
          "cachedResultName": "sentiment-analysis-report"
        },
        "messageType": "block",
        "otherOptions": {
          "includeLinkToWorkflow": false
        },
        "authentication": "oAuth2"
      },
      "typeVersion": 2.3
    },
    {
      "id": "58b3519a-3484-4d0a-bf16-69fcd3c3cb9f",
      "name": "Envoyer un message au canal slack si l'analyse est neutre",
      "type": "n8n-nodes-base.slack",
      "position": [
        1680,
        -128
      ],
      "webhookId": "e3c8bfca-cc86-4c09-923a-0e40bf18d3e5",
      "parameters": {
        "select": "channel",
        "blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09DQ7EJ57A",
          "cachedResultName": "sentiment-analysis-report"
        },
        "messageType": "block",
        "otherOptions": {
          "includeLinkToWorkflow": false
        },
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "27RfzQEAlPHYU6tj",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "6b05d854-689d-473b-a02d-631293ff3817",
      "name": "Envoyer un message au canal slack si l'analyse est négative",
      "type": "n8n-nodes-base.slack",
      "position": [
        1680,
        112
      ],
      "webhookId": "e3c8bfca-cc86-4c09-923a-0e40bf18d3e5",
      "parameters": {
        "select": "channel",
        "blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09DQ7EJ57A",
          "cachedResultName": "sentiment-analysis-report"
        },
        "messageType": "block",
        "otherOptions": {
          "includeLinkToWorkflow": false
        },
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "27RfzQEAlPHYU6tj",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "9d0aab67-a72b-43f9-a8c3-e7b8c7aa7be3",
  "connections": {
    "20e79d80-cdce-4cae-ab1f-6ff44565731b": {
      "main": [
        [
          {
            "node": "cad3406f-e05d-4c9c-ae13-aa9d877286e3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "97dce654-beb7-46f3-9d4c-9f4768b72324": {
      "main": [
        [
          {
            "node": "e734a3e0-5b2e-4930-a61a-c81a9263d34a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bfc5447b-fd82-4c44-af66-0d2b60f75280": {
      "main": [
        [
          {
            "node": "bf8ebac2-b4f9-43ea-8ec0-ab2a018760c2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b4506c66-8619-4eef-aed0-f4a9363af457": {
      "main": [
        [
          {
            "node": "3f44e182-92ad-4e47-9eab-4ffc6c9a3dfa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3f44e182-92ad-4e47-9eab-4ffc6c9a3dfa": {
      "main": [
        [
          {
            "node": "f284db6b-8852-427a-be86-e30961871f97",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "713c6715-380d-4adf-a681-092765116409": {
      "main": [
        [
          {
            "node": "b4506c66-8619-4eef-aed0-f4a9363af457",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "29592644-4922-4095-a608-fc369882a249": {
      "main": [
        [
          {
            "node": "719cdaa0-f962-45da-91a4-34492f92119e",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "68f2cf3c-4b21-4004-b8d4-3399d8c1bafa",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "046f17c6-c024-4b62-b16f-6d6ccdfeaad2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "719cdaa0-f962-45da-91a4-34492f92119e": {
      "main": [
        [
          {
            "node": "20e79d80-cdce-4cae-ab1f-6ff44565731b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "68f2cf3c-4b21-4004-b8d4-3399d8c1bafa": {
      "main": [
        [
          {
            "node": "97dce654-beb7-46f3-9d4c-9f4768b72324",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "046f17c6-c024-4b62-b16f-6d6ccdfeaad2": {
      "main": [
        [
          {
            "node": "bfc5447b-fd82-4c44-af66-0d2b60f75280",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "692ed10b-947e-4386-9707-0c2ce1e307f9": {
      "ai_languageModel": [
        [
          {
            "node": "20e79d80-cdce-4cae-ab1f-6ff44565731b",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "97dce654-beb7-46f3-9d4c-9f4768b72324",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "bfc5447b-fd82-4c44-af66-0d2b60f75280",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "f95e4642-38b6-48ea-bf53-5de3175a7846": {
      "ai_languageModel": [
        [
          {
            "node": "29592644-4922-4095-a608-fc369882a249",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "c775ac9e-4367-463d-b3d0-45e3d7bc648f": {
      "main": [
        [
          {
            "node": "29592644-4922-4095-a608-fc369882a249",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f284db6b-8852-427a-be86-e30961871f97": {
      "main": [
        [
          {
            "node": "c775ac9e-4367-463d-b3d0-45e3d7bc648f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e734a3e0-5b2e-4930-a61a-c81a9263d34a": {
      "main": [
        [
          {
            "node": "58b3519a-3484-4d0a-bf16-69fcd3c3cb9f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bf8ebac2-b4f9-43ea-8ec0-ab2a018760c2": {
      "main": [
        [
          {
            "node": "6b05d854-689d-473b-a02d-631293ff3817",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cad3406f-e05d-4c9c-ae13-aa9d877286e3": {
      "main": [
        [
          {
            "node": "8e8b11a1-1531-4f0d-90f6-5025e04a173e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Résumé IA, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds25
Catégorie2
Types de nœuds10
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
Sayone Technologies

Sayone Technologies

@sayonetech

SayOne Technologies is a digital transformation and IT services company headquartered in India, with a strong focus on web, mobile, and AI-driven solutions for the retail tech space. With over a decade of experience, SayOne partners with global businesses to build scalable applications, optimize inventory and operations using next-gen AI, and deliver customer-centric digital products.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34