AutomationFlowsAI & RAG › Automated Customer Feedback Triage with Gemini, Jotform, Google Sheets &…

Automated Customer Feedback Triage with Gemini, Jotform, Google Sheets &…

Original n8n title: Automated Customer Feedback Triage with Gemini, Jotform, Google Sheets & Gmail Replies

ByRully Saputra @rullysaputra15 on n8n.io

Teams that collect product feedback with Jotform and want automated triage: instant alerts for urgent issues, knowledge-based replies to questions, and a clean backlog for suggestions.

Event trigger★★★★☆ complexityAI-powered18 nodesJot Form TriggerGoogle Gemini ChatSentiment AnalysisTelegramGmailGoogle Sheets ToolAgentChain Summarization
AI & RAG Trigger: Event Nodes: 18 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #9636 — we link there as the canonical source.

This workflow follows the Agent → Chainsummarization recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "REDACTED",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Jotform",
  "tags": [],
  "nodes": [
    {
      "id": "db688133-4596-47b2-9d63-5e91bc73753f",
      "name": "JotForm Trigger",
      "type": "n8n-nodes-base.jotFormTrigger",
      "position": [
        -224,
        -16
      ],
      "parameters": {
        "form": "REDACTED"
      },
      "credentials": {
        "jotFormApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9ebab0dd-5bac-443a-98ab-d30eff4b458a",
      "name": "Switch",
      "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": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "631e6076-06f9-44c7-b2d3-2b9ed406cc5f",
      "name": "Sentiment Analysis",
      "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": "Send to Support Group",
      "type": "n8n-nodes-base.telegram",
      "position": [
        912,
        -272
      ],
      "parameters": {
        "text": "=\ud83d\udea8Customer Angry\ud83d\udea8\n\nName: {{ $json.Name.first }} {{ $json.Name.last }}\nEmail: {{ $json['E-mail'] }}\n\nMessage: {{ $json['Describe Your Feedback:'] }}\n\nPlease reach out immediately \u2014 your SLA is only 6 hours.\n\n",
        "chatId": "REDACTED",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a0399c2f-8d4a-4ac5-ac55-7c086fd74f7b",
      "name": "Reply Customer",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1056,
        -32
      ],
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "723d81fc-924b-46d2-b146-3544470daaa0",
      "name": "Read Database",
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "5607dc4f-d50f-4425-824e-2462bf09ce20",
      "name": "QnA Agent",
      "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": "Summarize Suggestions",
      "type": "@n8n/n8n-nodes-langchain.chainSummarization",
      "position": [
        288,
        272
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 2.1
    },
    {
      "id": "97913d99-2fe8-4afa-97b6-39627337f11a",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        656,
        320
      ],
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "43158b87-1336-417d-bbd0-6245f6adaa8e",
      "name": "Add to Suggestions backlog",
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "4a67e4c3-13c7-497c-9ed4-bdf81123e0d2",
      "name": "Store to 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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "ab563cfb-ecef-4221-8496-dc5a2b8698ef",
      "name": "Sticky Note",
      "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\ud83d\udea8 Urgent/angry messages \u2192 instant Telegram alert to support.\n\n\u2753 Questions \u2192 an LLM Q&A agent pulls answers from a Google Sheets knowledge base, then Gmail sends a friendly HTML reply.\n\n\ud83d\udca1 Suggestions \u2192 auto-summary, Telegram heads-up, and logging into a Suggestions sheet.\n\n\ud83d\uddd2\ufe0f Comments \u2192 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": "Sticky Note1",
      "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, \u201cDescribe Your Feedback\u201d). Map these form fields in your trigger node so they\u2019re available to all branches."
      },
      "typeVersion": 1
    },
    {
      "id": "cfcb0f6c-8465-4669-8d87-d8aafd110312",
      "name": "Sticky Note2",
      "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": "Sticky Note3",
      "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": "Sticky Note4",
      "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,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8fce1e13-e7cb-4e2e-9d50-9e4c0fb8e927",
  "connections": {
    "Switch": {
      "main": [
        [
          {
            "node": "Sentiment Analysis",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "QnA Agent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Summarize Suggestions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "QnA Agent": {
      "main": [
        [
          {
            "node": "Reply Customer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Database": {
      "ai_tool": [
        [
          {
            "node": "QnA Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "JotForm Trigger": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sentiment Analysis": {
      "main": [
        [
          {
            "node": "Store to Comments Sheet",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Store to Comments Sheet",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send to Support Group",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a text message": {
      "main": [
        [
          {
            "node": "Add to Suggestions backlog",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send to Support Group": {
      "main": [
        [
          {
            "node": "Store to Comments Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarize Suggestions": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store to Comments Sheet": {
      "main": [
        []
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Sentiment Analysis",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "QnA Agent",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Summarize Suggestions",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Teams that collect product feedback with Jotform and want automated triage: instant alerts for urgent issues, knowledge-based replies to questions, and a clean backlog for suggestions.

Source: https://n8n.io/workflows/9636/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Workflow explaination video: https://youtu.be/z1grVuNOXMk

Jot Form Trigger, Agent, Google Gemini Chat +4
AI & RAG

This project is a template for building a complete academic virtual assistant using n8n. It connects to Telegram, answers frequently asked questions by querying MongoDB, keeps the community informed a

Telegram, MongoDB, Telegram Trigger +6
AI & RAG

&gt; AI-powered nutrition assistant for Telegram — log meals, set goals, and get personalized daily reports with Google Sheets integration.

Telegram, Google Gemini, Google Gemini Chat +7
AI & RAG

This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.

OpenAI Chat, Memory Buffer Window, Output Parser Structured +11
AI & RAG

Rizz AI is not just a chatbot; it's a full-featured, AI-powered CRM for your dating life.

Telegram, Google Gemini, Google Gemini Chat +5