Extraction automatique du sujet et du sentiment des réponses Jotform avec Google Gemini

Intermédiaire

Ceci est uncontenant 14 nœuds.Utilise principalement des nœuds comme Code, Merge, Aggregate, GoogleSheets, JotFormTrigger. Extraction automatique du sujet et du sentiment des réponses Jotform avec Google Gemini

Prérequis
  • Informations d'identification Google Sheets API
  • Clé API Google Gemini

Catégorie

-
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": "s9tAZpHcsRFJjK3A",
  "meta": {
    "instanceId": "885b4fb4a6a9c2cb5621429a7b972df0d05bb724c20ac7dac7171b62f1c7ef40",
    "templateCredsSetupCompleted": true
  },
  "name": "Automatic Topic & Sentiment Extraction from Jotform Responses with Google Gemini",
  "tags": [
    {
      "id": "ddPkw7Hg5dZhQu2w",
      "name": "AI",
      "createdAt": "2025-04-13T05:38:08.053Z",
      "updatedAt": "2025-04-13T05:38:08.053Z"
    },
    {
      "id": "ZOwtAMLepQaGW76t",
      "name": "Building Blocks",
      "createdAt": "2025-04-13T15:23:40.462Z",
      "updatedAt": "2025-04-13T15:23:40.462Z"
    },
    {
      "id": "Kujft2FOjmOVQAmJ",
      "name": "Engineering",
      "createdAt": "2025-04-09T01:31:00.558Z",
      "updatedAt": "2025-04-09T01:31:00.558Z"
    }
  ],
  "nodes": [
    {
      "id": "36ae4c6f-049d-475c-af85-9cca6affc769",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -32,
        320
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.0-flash-exp"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "YeO7dHZnuGBVQKVZ",
          "name": "Google Gemini(PaLM) Api account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8c3ecf36-96e7-4dfc-9ec2-0cf2d0425139",
      "name": "Analyseur de Sentiments",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        0,
        104
      ],
      "parameters": {
        "text": "=Perform sentiment analysis of the following {{ $json.body }} \n",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "You are an expert sentiment analyzer"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "8fdec511-d900-41a4-bf79-295a620f0b4e",
      "name": "Analyseur de Sortie Structurée",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        208,
        320
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Feedback Sentiment Output Schema\",\n  \"description\": \"Schema for parsing AI sentiment analysis results from customer feedback submissions.\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"customer_name\": {\n      \"type\": \"string\",\n      \"description\": \"Name of the customer submitting feedback.\"\n    },\n    \"customer_email\": {\n      \"type\": \"string\",\n      \"description\": \"Email of the customer submitting feedback.\"\n    },\n    \"feedback_text\": {\n      \"type\": \"string\",\n      \"description\": \"Raw feedback text provided by the customer.\"\n    },\n    \"sentiment\": {\n      \"type\": \"string\",\n      \"enum\": [\"positive\", \"neutral\", \"negative\"],\n      \"description\": \"Predicted sentiment label of the feedback.\"\n    },\n    \"confidence_score\": {\n      \"type\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 1,\n      \"description\": \"Model confidence score for the sentiment classification (0-1).\"\n    },\n    \"key_phrases\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" },\n      \"description\": \"Important keywords or topics extracted from the feedback.\"\n    },\n    \"summary\": {\n      \"type\": \"string\",\n      \"description\": \"A short AI-generated summary of the feedback.\"\n    },\n    \"alert_priority\": {\n      \"type\": \"string\",\n      \"enum\": [\"high\", \"medium\", \"low\"],\n      \"description\": \"Priority level for team alerting based on sentiment and urgency.\"\n    },\n    \"timestamp\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"description\": \"Time when the feedback was received.\"\n    }\n  },\n  \"additionalProperties\": false\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "ec24ab03-ffdd-412b-a66f-4b3d6bb04edd",
      "name": "Ajouter ou mettre à jour une ligne dans la feuille",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        880,
        -112
      ],
      "parameters": {
        "columns": {
          "value": {
            "topics_keywords": "={{ $json.output[0].toJsonString() }}",
            "feedback_analysis": "={{ $json.output.toJsonString() }}"
          },
          "schema": [
            {
              "id": "feedback_analysis",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "feedback_analysis",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "topics_keywords",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "topics_keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "feedback_analysis"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/13iJ2sOSaCEekzRNrhkUirZX2llBnpwGi3gdhI4PWIFM/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "13iJ2sOSaCEekzRNrhkUirZX2llBnpwGi3gdhI4PWIFM",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/13iJ2sOSaCEekzRNrhkUirZX2llBnpwGi3gdhI4PWIFM/edit?usp=drivesdk",
          "cachedResultName": "Jotform Feedback"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "Zjoxh2BUZ6VXGQhA",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "b3dbc129-bd64-420b-969b-9bec6a11f4d1",
      "name": "Note Adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -608,
        -416
      ],
      "parameters": {
        "color": 7,
        "width": 352,
        "height": 272,
        "content": "![Logo](https://www.jotform.com/resources/assets/logo-nb/min/jotform-logo-white-400x200.png)\n\nUses Google Gemini AI for the sentiment analysis and topics + keyword extraction of Jotform content"
      },
      "typeVersion": 1
    },
    {
      "id": "83b6913b-ff18-46c0-ba3e-b2c0d5fddedf",
      "name": "Formater les Données du Formulaire",
      "type": "n8n-nodes-base.code",
      "position": [
        -352,
        -96
      ],
      "parameters": {
        "jsCode": "const outputString = JSON.stringify($input.first().json, null, 2);\nreturn [\n    {\n      json: {\n        body: outputString\n      }\n    }\n  ];"
      },
      "typeVersion": 2
    },
    {
      "id": "78ffe47a-7836-45ed-a3b1-73f9ccff41d6",
      "name": "Sujets et Mots-clés",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        0,
        -400
      ],
      "parameters": {
        "text": "=Perform sentiment analysis of the following {{ $json.body }} \n",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "You are an expert sentiment analyzer"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "41b0cfcb-fa81-4c52-96a7-e6581bb057be",
      "name": "Google Gemini Chat Model pour Sujets et Mots-clés",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -16,
        -176
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.0-flash-exp"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "YeO7dHZnuGBVQKVZ",
          "name": "Google Gemini(PaLM) Api account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5f5c238d-9705-4017-bdb8-0f6b1adbba15",
      "name": "Analyseur de Sortie Structurée pour Sujets et Mots-clés",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        176,
        -176
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"title\": \"SurveyTopicKeywordExtraction\",\n  \"description\": \"Schema for extracting topics, keywords, and sentiment insights from Jotform survey responses.\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"topics\": {\n      \"type\": \"array\",\n      \"description\": \"High-level themes or categories extracted from the survey answers.\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"topic\": {\n            \"type\": \"string\",\n            \"description\": \"Descriptive name of the topic, e.g., 'Customer Support Experience'.\"\n          },\n          \"summary\": {\n            \"type\": \"string\",\n            \"description\": \"Short summary describing this topic based on the responses.\"\n          },\n          \"keywords\": {\n            \"type\": \"array\",\n            \"description\": \"List of key terms or phrases related to this topic.\",\n            \"items\": {\n              \"type\": \"string\"\n            }\n          },\n          \"sentiment\": {\n            \"type\": \"string\",\n            \"enum\": [\"positive\", \"negative\", \"neutral\", \"mixed\"],\n            \"description\": \"Overall sentiment associated with this topic.\"\n          },\n          \"importance_score\": {\n            \"type\": \"number\",\n            \"minimum\": 0,\n            \"maximum\": 1,\n            \"description\": \"Relative importance or weight of this topic (0-1 scale).\"\n          }\n        },\n        \"required\": [\"topic\", \"keywords\"]\n      }\n    },\n    \"global_keywords\": {\n      \"type\": \"array\",\n      \"description\": \"Top-level keywords or phrases representing the overall survey themes.\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"insights\": {\n      \"type\": \"array\",\n      \"description\": \"Key takeaways or AI-generated insights derived from the data mining.\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"generated_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"description\": \"Timestamp of when this analysis was generated.\"\n    }\n  }\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "041a9363-5f09-46ed-9cd4-4cc17dbe60c8",
      "name": "Déclencheur JotForm",
      "type": "n8n-nodes-base.jotFormTrigger",
      "position": [
        -576,
        -96
      ],
      "webhookId": "bddebb80-2e71-43e6-941e-4d599f70d0e6",
      "parameters": {
        "form": "252797914459475"
      },
      "credentials": {
        "jotFormApi": {
          "id": "IcptK658rWIj1G45",
          "name": "JotForm account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4981c2c9-a760-43d4-ad81-dc60f545bffb",
      "name": "Fusionner",
      "type": "n8n-nodes-base.merge",
      "position": [
        464,
        -112
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "e6ec2964-d484-4d8f-9c92-515ad9904cd0",
      "name": "Agréger",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        672,
        -112
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "output"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "95125c3d-1fc8-4339-a91c-f4f7527fb2de",
      "name": "Note Adhésive 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        -464
      ],
      "parameters": {
        "color": 4,
        "width": 528,
        "height": 432,
        "content": "## Topics and Keyword Extraction using Google Gemini"
      },
      "typeVersion": 1
    },
    {
      "id": "95fc87ef-b095-41d0-9ce1-9a7ef11facc6",
      "name": "Note Adhésive 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        0
      ],
      "parameters": {
        "color": 4,
        "width": 528,
        "height": 464,
        "content": "## Sentiment Analysis using Google Gemini"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6f6e2249-0884-47a8-af5e-bcc4bac7a61c",
  "connections": {
    "4981c2c9-a760-43d4-ad81-dc60f545bffb": {
      "main": [
        [
          {
            "node": "e6ec2964-d484-4d8f-9c92-515ad9904cd0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e6ec2964-d484-4d8f-9c92-515ad9904cd0": {
      "main": [
        [
          {
            "node": "ec24ab03-ffdd-412b-a66f-4b3d6bb04edd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "041a9363-5f09-46ed-9cd4-4cc17dbe60c8": {
      "main": [
        [
          {
            "node": "83b6913b-ff18-46c0-ba3e-b2c0d5fddedf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "78ffe47a-7836-45ed-a3b1-73f9ccff41d6": {
      "main": [
        [
          {
            "node": "4981c2c9-a760-43d4-ad81-dc60f545bffb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8c3ecf36-96e7-4dfc-9ec2-0cf2d0425139": {
      "main": [
        [
          {
            "node": "4981c2c9-a760-43d4-ad81-dc60f545bffb",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "83b6913b-ff18-46c0-ba3e-b2c0d5fddedf": {
      "main": [
        [
          {
            "node": "8c3ecf36-96e7-4dfc-9ec2-0cf2d0425139",
            "type": "main",
            "index": 0
          },
          {
            "node": "78ffe47a-7836-45ed-a3b1-73f9ccff41d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "36ae4c6f-049d-475c-af85-9cca6affc769": {
      "ai_languageModel": [
        [
          {
            "node": "8c3ecf36-96e7-4dfc-9ec2-0cf2d0425139",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "8fdec511-d900-41a4-bf79-295a620f0b4e": {
      "ai_outputParser": [
        [
          {
            "node": "8c3ecf36-96e7-4dfc-9ec2-0cf2d0425139",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "ec24ab03-ffdd-412b-a66f-4b3d6bb04edd": {
      "main": [
        []
      ]
    },
    "5f5c238d-9705-4017-bdb8-0f6b1adbba15": {
      "ai_outputParser": [
        [
          {
            "node": "78ffe47a-7836-45ed-a3b1-73f9ccff41d6",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "41b0cfcb-fa81-4c52-96a7-e6581bb057be": {
      "ai_languageModel": [
        [
          {
            "node": "78ffe47a-7836-45ed-a3b1-73f9ccff41d6",
            "type": "ai_languageModel",
            "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é ?

Intermédiaire

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.

Workflows recommandés

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds14
Catégorie-
Types de nœuds9
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Ranjan Dailata

Ranjan Dailata

@ranjancse

A Professional based out of India specialized in handling AI-powered automations. Contact me at ranjancse@gmail.com

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34