Jotform
Ceci est uncontenant 18 nœuds.Utilise principalement des nœuds comme Gmail, Switch, Telegram, GoogleSheets, JotFormTrigger. Tri automatisé des commentaires clients avec Gemini, Jotform, Google Sheets et Gmail réponse
- •Compte Google et informations d'identification Gmail API
- •Token Bot Telegram
- •Informations d'identification Google Sheets API
- •Clé API Google Gemini
Nœuds utilisés (18)
Catégorie
{
"id": "REDACTED",
"meta": {
"instanceId": "REDACTED",
"templateCredsSetupCompleted": true
},
"name": "Jotform",
"tags": [],
"nodes": [
{
"id": "db688133-4596-47b2-9d63-5e91bc73753f",
"name": "Déclencheur JotForm",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
-224,
-16
],
"webhookId": "REDACTED",
"parameters": {
"form": "REDACTED"
},
"credentials": {
"jotFormApi": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 1
},
{
"id": "9ebab0dd-5bac-443a-98ab-d30eff4b458a",
"name": "Commutateur",
"type": "n8n-nodes-base.switch",
"position": [
16,
-32
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "comments",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8868d5a6-f386-4f9d-bb65-b4373617bbf6",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json['Feedback Type'].toLowerCase() }}",
"rightValue": "comments"
}
]
},
"renameOutput": true
},
{
"outputKey": "questions",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "6a821715-e994-4e85-8da3-9ba3b8e98bb5",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json['Feedback Type'].toLowerCase() }}",
"rightValue": "questions"
}
]
},
"renameOutput": true
},
{
"outputKey": "suggestions",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3eca34e9-2a95-424c-bfe7-2e2aa6092492",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json['Feedback Type'].toLowerCase() }}",
"rightValue": "suggestions"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.3
},
{
"id": "efa026b3-0b2e-4ee7-8074-493902a91265",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
336,
-176
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 1
},
{
"id": "75bd3135-b303-4fed-95e4-50c2f8950f1a",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
480,
544
],
"parameters": {
"options": {
"temperature": 0.4
}
},
"credentials": {
"googlePalmApi": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 1
},
{
"id": "631e6076-06f9-44c7-b2d3-2b9ed406cc5f",
"name": "Analyse de Sentiment",
"type": "@n8n/n8n-nodes-langchain.sentimentAnalysis",
"position": [
368,
-448
],
"parameters": {
"options": {},
"inputText": "={{ $json['Describe Your Feedback:'] }}"
},
"typeVersion": 1.1
},
{
"id": "6b25a8c3-85c3-422b-8128-416afe44b98a",
"name": "Envoyer au Groupe Support",
"type": "n8n-nodes-base.telegram",
"position": [
912,
-272
],
"webhookId": "REDACTED",
"parameters": {
"text": "=🚨Customer Angry🚨\n\nName: {{ $json.Name.first }} {{ $json.Name.last }}\nEmail: {{ $json['E-mail'] }}\n\nMessage: {{ $json['Describe Your Feedback:'] }}\n\nPlease reach out immediately — your SLA is only 6 hours.\n\n",
"chatId": "REDACTED",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 1.2
},
{
"id": "a0399c2f-8d4a-4ac5-ac55-7c086fd74f7b",
"name": "Répondre au Client",
"type": "n8n-nodes-base.gmail",
"position": [
1056,
-32
],
"webhookId": "REDACTED",
"parameters": {
"sendTo": "={{ $('Switch').item.json['E-mail'] }}",
"message": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>AquaPure Smart Bottle Response</title>\n <style>\n body {\n font-family: Arial, Helvetica, sans-serif;\n background-color: #f6f8fa;\n color: #333;\n margin: 0;\n padding: 0;\n }\n .email-container {\n max-width: 600px;\n margin: 30px auto;\n background: #ffffff;\n padding: 24px;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.05);\n }\n p {\n line-height: 1.6;\n margin: 0 0 12px;\n }\n .question, .answer {\n background-color: #f1f5f9;\n padding: 12px;\n border-radius: 6px;\n margin-bottom: 16px;\n }\n .footer {\n margin-top: 24px;\n font-size: 14px;\n color: #666;\n }\n </style>\n</head>\n<body>\n <div class=\"email-container\">\n <p>\n Dear {{ $('Switch').item.json.Name.first }} {{ $('Switch').item.json.Name.last }},\n </p>\n\n <p>Thank you for your interest in <strong>AquaPure Smart Bottle</strong>.</p>\n\n <div class=\"question\">\n <strong>Question:</strong><br>\n {{ $('Switch').item.json['Describe Your Feedback:'] }}\n </div>\n\n <div class=\"answer\">\n <strong>Answer:</strong><br>\n {{ $json.output }}\n </div>\n\n <p class=\"footer\">\n Best regards,<br>\n <strong>Jotform</strong>\n </p>\n </div>\n</body>\n</html>",
"options": {},
"subject": "=AquaPure Smart Bottle - {{ $('Switch').item.json['Describe Your Feedback:'] }}"
},
"credentials": {
"gmailOAuth2": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 2.1
},
{
"id": "723d81fc-924b-46d2-b146-3544470daaa0",
"name": "Lire la Base de Données",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
848,
112
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "REDACTED",
"cachedResultName": "qna"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "REDACTED"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 4.7
},
{
"id": "5607dc4f-d50f-4425-824e-2462bf09ce20",
"name": "Agent QnA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
624,
-32
],
"parameters": {
"text": "=user: {{ $json['Describe Your Feedback:'] }}",
"options": {
"systemMessage": "=# Role\n- you're a helpful assistant to answer user question\n- always respond in warm tone\n\n# Context\n- you must read the google sheets for getting the answer\n- paraphrase the result so user can easily understand\n\n# Important restrictions\n- keep polite and use a proper language"
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "5162281b-fe6d-454d-88a4-7667b3b8d5c8",
"name": "Résumer les Suggestions",
"type": "@n8n/n8n-nodes-langchain.chainSummarization",
"position": [
288,
272
],
"parameters": {
"options": {}
},
"typeVersion": 2.1
},
{
"id": "97913d99-2fe8-4afa-97b6-39627337f11a",
"name": "Envoyer un SMS",
"type": "n8n-nodes-base.telegram",
"position": [
656,
320
],
"webhookId": "REDACTED",
"parameters": {
"text": "=Suggestions from {{ $('Switch').item.json.Name.first }} {{ $('Switch').item.json.Name.last }}\nEmail: {{ $('Switch').item.json['E-mail'] }}\n\nSummary: {{ $json.output.text }}\n\nFull: {{ $('Switch').item.json['Describe Your Feedback:'] }}",
"chatId": "REDACTED",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 1.2
},
{
"id": "43158b87-1336-417d-bbd0-6245f6adaa8e",
"name": "Ajouter au Backlog Suggestions",
"type": "n8n-nodes-base.googleSheets",
"position": [
880,
320
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Switch').item.json.Name.first }} {{ $('Switch').item.json.Name.last }}",
"Email": "={{ $('Switch').item.json['E-mail'] }}",
"Summary": "={{ $('Summarize Suggestions').item.json.output.text }}",
"Suggestions": "={{ $('Switch').item.json['Describe Your Feedback:'] }}",
"Created Date": "={{ DateTime.now().format('yyyy-MM-dd') }}"
},
"schema": [
{
"id": "Created Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Created Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"type": "string",
"display": true,
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Suggestions",
"type": "string",
"display": true,
"required": false,
"displayName": "Suggestions",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2139811359,
"cachedResultUrl": "REDACTED",
"cachedResultName": "suggestions"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "REDACTED"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 4.7
},
{
"id": "4a67e4c3-13c7-497c-9ed4-bdf81123e0d2",
"name": "Stocker dans Comments Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1072,
-448
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $json.Name.first }} {{ $json.Name.last }}",
"Email": "={{ $json['E-mail'] }}",
"Comments": "={{ $json['Describe Your Feedback:'] }}",
"Sentiment": "={{ $json.sentimentAnalysis.category }}",
"Created Date": "={{ DateTime.now().format('yyyy-MM-dd') }}"
},
"schema": [
{
"id": "Created Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Created Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Sentiment",
"type": "string",
"display": true,
"required": false,
"displayName": "Sentiment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Comments",
"type": "string",
"display": true,
"required": false,
"displayName": "Comments",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {
"useAppend": false
},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 903321638,
"cachedResultUrl": "REDACTED",
"cachedResultName": "comments"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "REDACTED",
"cachedResultUrl": "REDACTED",
"cachedResultName": "database"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "REDACTED",
"name": "REDACTED"
}
},
"typeVersion": 4.7
},
{
"id": "ab563cfb-ecef-4221-8496-dc5a2b8698ef",
"name": "Note Adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
-560
],
"parameters": {
"width": 624,
"height": 368,
"content": "## Jotform feedback triage & auto-reply system\n\nThis workflow turns Jotform submissions into an automated triage pipeline:\n\nClassifies feedback (comment / question / suggestion) and runs sentiment.\n\n🚨 Urgent/angry messages → instant Telegram alert to support.\n\n❓ Questions → an LLM Q&A agent pulls answers from a Google Sheets knowledge base, then Gmail sends a friendly HTML reply.\n\n💡 Suggestions → auto-summary, Telegram heads-up, and logging into a Suggestions sheet.\n\n🗒️ Comments → appended to a Comments sheet for reporting.\nSetup tips: Rename nodes, keep credentials in node creds (not hard-coded), and store user-config variables in one Set node. Remove any personal IDs before sharing."
},
"typeVersion": 1
},
{
"id": "5b8aa98c-defd-400b-925d-9e4fef08d4fc",
"name": "Note Adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-560,
160
],
"parameters": {
"color": 7,
"width": 368,
"height": 208,
"content": "## New submission from Jotform\n\nStarts when a new Jotform entry arrives (Name, E-mail, “Describe Your Feedback”). Map these form fields in your trigger node so they’re available to all branches."
},
"typeVersion": 1
},
{
"id": "cfcb0f6c-8465-4669-8d87-d8aafd110312",
"name": "Note Adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1312,
-96
],
"parameters": {
"color": 7,
"width": 544,
"height": 320,
"content": "## Answer with Q&A agent + email reply\n\nRead Database (Google Sheets Tool) loads your Q&A table (FAQ) for grounding. Point documentId + sheetName to your knowledge base. \n\nQnA Agent (LangChain) generates a paraphrased, user-friendly answer using the sheet as context. \n\nReply Customer (Gmail) sends a styled HTML email with the answer and the original question snippet. Replace the branding/text as needed. "
},
"typeVersion": 1
},
{
"id": "7a738f93-72bd-4293-a412-63d55c8f1fa3",
"name": "Note Adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1024,
496
],
"parameters": {
"color": 7,
"width": 544,
"height": 320,
"content": "## Summarize + alert + log\n\nSummarize Suggestions condenses the idea into an executive summary. \n\nTelegram heads-up posts the summary + full text to your product/channel chat. \n\nAppend to Suggestions (Google Sheets) writes Summary, Suggestion, Email, Name, Created Date. Update the sheet URL/ID and column mapping if your schema differs. \n"
},
"typeVersion": 1
},
{
"id": "64d78b26-1e32-481f-ab8b-7639f296f2a6",
"name": "Note Adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
544,
-704
],
"parameters": {
"color": 7,
"width": 512,
"height": 144,
"content": "## Log for reporting\n\nAppends general comments to your Comments sheet with Name, Email, Sentiment, and the raw message. Use this for dashboards or periodic reviews."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "8fce1e13-e7cb-4e2e-9d50-9e4c0fb8e927",
"connections": {
"9ebab0dd-5bac-443a-98ab-d30eff4b458a": {
"main": [
[
{
"node": "631e6076-06f9-44c7-b2d3-2b9ed406cc5f",
"type": "main",
"index": 0
}
],
[
{
"node": "5607dc4f-d50f-4425-824e-2462bf09ce20",
"type": "main",
"index": 0
}
],
[
{
"node": "5162281b-fe6d-454d-88a4-7667b3b8d5c8",
"type": "main",
"index": 0
}
]
]
},
"5607dc4f-d50f-4425-824e-2462bf09ce20": {
"main": [
[
{
"node": "a0399c2f-8d4a-4ac5-ac55-7c086fd74f7b",
"type": "main",
"index": 0
}
]
]
},
"723d81fc-924b-46d2-b146-3544470daaa0": {
"ai_tool": [
[
{
"node": "5607dc4f-d50f-4425-824e-2462bf09ce20",
"type": "ai_tool",
"index": 0
}
]
]
},
"db688133-4596-47b2-9d63-5e91bc73753f": {
"main": [
[
{
"node": "9ebab0dd-5bac-443a-98ab-d30eff4b458a",
"type": "main",
"index": 0
}
]
]
},
"631e6076-06f9-44c7-b2d3-2b9ed406cc5f": {
"main": [
[
{
"node": "4a67e4c3-13c7-497c-9ed4-bdf81123e0d2",
"type": "main",
"index": 0
}
],
[
{
"node": "4a67e4c3-13c7-497c-9ed4-bdf81123e0d2",
"type": "main",
"index": 0
}
],
[
{
"node": "6b25a8c3-85c3-422b-8128-416afe44b98a",
"type": "main",
"index": 0
}
]
]
},
"97913d99-2fe8-4afa-97b6-39627337f11a": {
"main": [
[
{
"node": "43158b87-1336-417d-bbd0-6245f6adaa8e",
"type": "main",
"index": 0
}
]
]
},
"6b25a8c3-85c3-422b-8128-416afe44b98a": {
"main": [
[
{
"node": "4a67e4c3-13c7-497c-9ed4-bdf81123e0d2",
"type": "main",
"index": 0
}
]
]
},
"5162281b-fe6d-454d-88a4-7667b3b8d5c8": {
"main": [
[
{
"node": "97913d99-2fe8-4afa-97b6-39627337f11a",
"type": "main",
"index": 0
}
]
]
},
"4a67e4c3-13c7-497c-9ed4-bdf81123e0d2": {
"main": [
[]
]
},
"efa026b3-0b2e-4ee7-8074-493902a91265": {
"ai_languageModel": [
[
{
"node": "631e6076-06f9-44c7-b2d3-2b9ed406cc5f",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"75bd3135-b303-4fed-95e4-50c2f8950f1a": {
"ai_languageModel": [
[
{
"node": "5607dc4f-d50f-4425-824e-2462bf09ce20",
"type": "ai_languageModel",
"index": 0
},
{
"node": "5162281b-fe6d-454d-88a4-7667b3b8d5c8",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}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é
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
Rully Saputra
@rullysaputra15Specializing in software engineering with over 5 years of hands-on experience. In addition to my expertise in web development, I also have experience in creating Hybrid mobile apps.
Partager ce workflow