AutomationFlowsAI & RAG › Customer Support Agent

Customer Support Agent

Customer support agent. Uses httpRequest, googleSheets, memoryBufferWindow, googleSheetsTool. Event-driven trigger; 19 nodes.

Event trigger★★★★☆ complexityAI-powered19 nodesHTTP RequestGoogle SheetsMemory Buffer WindowGoogle Sheets ToolAgentSlack TriggerSlackGoogle Gemini Chat
AI & RAG Trigger: Event Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Agent → Google Sheets 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
{
  "updatedAt": "2025-08-27T08:08:31.000Z",
  "createdAt": "2025-04-12T06:22:38.751Z",
  "id": "juZkIaDQw6qQYX7j",
  "name": "Customer support agent",
  "active": false,
  "isArchived": true,
  "nodes": [
    {
      "parameters": {
        "content": "## \ud83d\udfe1 STEP 1 \u2013 Incoming WhatsApp Message\nListens for new WhatsApp messages.\nIf the message starts with train:, it triggers the product training flow.\nOtherwise, it goes to the customer support flow.\n**WhatsApp Business Cloud node** : [Here](https://www.notion.so/automatisation/WHATSAPP-WORKFLOW-1c63d6550fd980559679e7535938a68d?pvs=4#1c63d6550fd980f9a2a5e25a3654da82)",
        "height": 440,
        "width": 400
      },
      "id": "c385ffe6-3399-41f8-8e64-545e29c719ce",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        580,
        900
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "## \ud83d\udd35 STEP 3 \u2013 Customer Support Flow\nTriggered when the message **does NOT start with `train:`**.\n\n1. **AI Analyzes the Message**  \n   Understands the customer's question or problem.\n\n2. **Fetch Product Data if Needed**  \n   Reads relevant product info from Google Sheets.\n\n3. **Detect Issues Automatically**  \n   Identifies if the user is facing a specific issue.\n\n4. **Suggest Solutions**  \n   Proposes a helpful, clear response to solve the issue.\n\n5. **Log Customer Problems**  \n   Saves the problem, suggested solution, and category.\n\n6. **Respond to the User**  \n   Sends a professional and helpful WhatsApp reply.",
        "height": 420,
        "width": 1180,
        "color": 6
      },
      "id": "a376e1c8-ceb0-431b-83d6-a47f87a7a27a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1020,
        1200
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "## \ud83d\udd34 STEP 2 \u2013 Product Data Training (Triggered by train:)\nTriggered when the message starts with `train:`.\n**OpenAI API keys** : [Here](https://platform.openai.com/api-keys)\n\n\n\n\n\n\n\n\n\n\n\n\n1. **Extract URL from Message**  \n   Uses regex to detect and extract the product link.\n\n2. **Fetch HTML Content**  \n   Sends an HTTP request to retrieve the full page content.\n\n3. **Clean HTML Data**  \n   Strips HTML tags, scripts, and formats the text.\n\n4. **Save Raw Product Info**  \n   Appends the cleaned content and URL into Google Sheets.\n\n5. **AI: Enhance Product Details**  \n   - Extracts Product Name  \n   - Detects Price (subscription or one-time)  \n   - Identifies Product Topic  \n   - Generates FAQs\n\n6. **Update Product Sheet**  \n   Enriches the row in Sheets with structured product data.\n",
        "height": 660,
        "width": 1180,
        "color": 3
      },
      "id": "635d7ec0-0cea-419a-b456-aa66df4f4ebf",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1020,
        520
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "id": "9865cb5b-33da-490c-afc3-186457d5b564",
                    "operator": {
                      "type": "string",
                      "operation": "startsWith"
                    },
                    "leftValue": "={{ $json.messages[0].text.body }}{{ $json.text }}",
                    "rightValue": "train:"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "train"
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "id": "5a9a1fee-b408-469f-a08c-e8d690fc9792",
                    "operator": {
                      "type": "string",
                      "operation": "notStartsWith"
                    },
                    "leftValue": "={{ $json.text }}",
                    "rightValue": "train:"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "text"
            }
          ]
        },
        "options": {}
      },
      "id": "af79034a-e3bd-4d23-ad4e-6817edf80942",
      "name": "Check If Training",
      "type": "n8n-nodes-base.switch",
      "position": [
        800,
        1140
      ],
      "typeVersion": 3.2
    },
    {
      "parameters": {
        "jsCode": "// R\u00e9cup\u00e9rer le texte \u00e0 analyser depuis l'input\nconst texteExemple = $input.first().json.messages[0].text.body;\n\n// Expression r\u00e9guli\u00e8re modifi\u00e9e pour capturer les URL avec ou sans protocole\nconst regex = /((?:https?:\\/\\/)?(?:www\\.)?[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}(?:\\/\\S*)?)/g;\n\n// Extraction des URL \u00e0 partir du texte\nconst matches = texteExemple.match(regex) || [];\n\n// Si des URL ont \u00e9t\u00e9 trouv\u00e9es, on les mappe en objets\nif (matches.length > 0) {\n    const output = matches.map(url => ({ url }));\n    return output;\n} else {\n    // Si aucune URL n'est trouv\u00e9e, on retourne les items d'entr\u00e9e pour que le workflow continue\n    return $input.all();\n}\n"
      },
      "id": "930a045f-dd4d-43cd-90b6-6c746b8a5859",
      "name": "Extract URL from Text",
      "type": "n8n-nodes-base.code",
      "position": [
        1060,
        600
      ],
      "typeVersion": 2
    },
    {
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        }
      },
      "id": "50b52452-a604-4c02-869f-5370363730e6",
      "name": "Fetch HTML Page",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1220,
        600
      ],
      "typeVersion": 4.2
    },
    {
      "parameters": {
        "jsCode": "// Exemple : r\u00e9cup\u00e9ration du contenu HTML depuis le premier item\n// Si vous avez un champ nomm\u00e9 \"html\" dans un noeud pr\u00e9c\u00e9dent.\nconst htmlContent = $input.first().json.html;\n\n// Fonction de nettoyage du HTML\nfunction nettoyerHTML(input) {\n  if (typeof input !== 'string') {\n    throw new Error(\"Expected HTML content as a string.\");\n  }\n  let cleanedText = input;\n\n  // 1. Retirer les liens <a> et leur contenu\n  cleanedText = cleanedText.replace(/<a[^>]*>.*?<\\/a>/gs, '');\n\n  // 2. Retirer <script>, <style>, commentaires, etc.\n  cleanedText = cleanedText.replace(/<script[^>]*>.*?<\\/script>/gs, '');\n  cleanedText = cleanedText.replace(/<style[^>]*>.*?<\\/style>/gs, '');\n  cleanedText = cleanedText.replace(/<!--[\\s\\S]*?-->/g, '');\n\n  // 3. Ins\u00e9rer des retours \u00e0 la ligne pour certaines balises\n  cleanedText = cleanedText.replace(/<h[1-6][^>]*>/gi, '\\n');\n  cleanedText = cleanedText.replace(/<\\/h[1-6]>/gi, '\\n');\n  cleanedText = cleanedText.replace(/<p[^>]*>/gi, '\\n');\n  cleanedText = cleanedText.replace(/<\\/p>/gi, '\\n');\n  cleanedText = cleanedText.replace(/<ul[^>]*>/gi, '\\n');\n  cleanedText = cleanedText.replace(/<\\/ul>/gi, '\\n');\n  cleanedText = cleanedText.replace(/<ol[^>]*>/gi, '\\n');\n  cleanedText = cleanedText.replace(/<\\/ol>/gi, '\\n');\n  cleanedText = cleanedText.replace(/<li[^>]*>/gi, '- ');\n  cleanedText = cleanedText.replace(/<\\/li>/gi, '\\n');\n\n  // 4. Supprimer toutes les balises HTML restantes\n  cleanedText = cleanedText.replace(/<[^>]+>/g, '');\n\n  // 5. Supprimer (ou ajuster) les caract\u00e8res sp\u00e9ciaux\n  cleanedText = cleanedText.replace(/[^\\w\\s\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff]+/g, '');\n\n  // 6. Normaliser les espaces multiples et trim\n  cleanedText = cleanedText.replace(/\\s+/g, ' ').trim();\n\n  return cleanedText;\n}\n\n// Nettoyage\nconst result = nettoyerHTML($input.first().json.data);\n\n// Retour d'un tableau contenant l'objet final\nreturn [\n  {\n    json: {\n      cleanedText: result\n    }\n  }\n];\n"
      },
      "id": "9aabac21-cec4-437d-8bd3-7ad018be057a",
      "name": "Clean HTML Content",
      "type": "n8n-nodes-base.code",
      "position": [
        1380,
        600
      ],
      "typeVersion": 2
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1U9GTxknzoPnja4s8ffOAUdMbntB6huji95xfBAZ4_v8",
          "mode": "list",
          "cachedResultName": "n8n",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U9GTxknzoPnja4s8ffOAUdMbntB6huji95xfBAZ4_v8/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 689245338,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1wa41S888Ya3sqEkBdzYiDq-5FOu_V30BOe-toX_78xQ/edit#gid=689245338",
          "cachedResultName": "Products"
        },
        "columns": {
          "value": {
            "Product Link": "={{ $('Extract URL from Text').item.json.url }}",
            "Product Description": "={{ $json.cleanedText }}"
          },
          "schema": [
            {
              "id": "Product Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Topic",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Topic",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "d4445cd6-d652-43f9-8eec-6b21d94b11c3",
      "name": "Save Raw Product Info",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1560,
        600
      ],
      "typeVersion": 4.5,
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Incoming Message Trigger').item.json.messages[0].id }}",
        "contextWindowLength": 50
      },
      "id": "b959ce7a-9cac-41c4-8d74-6ddeefbddd76",
      "name": "Short-Term Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        1820,
        880
      ],
      "typeVersion": 1.3
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1wa41S888Ya3sqEkBdzYiDq-5FOu_V30BOe-toX_78xQ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1wa41S888Ya3sqEkBdzYiDq-5FOu_V30BOe-toX_78xQ/edit?usp=drivesdk",
          "cachedResultName": "Product Sales - AI Agent WhatsApp"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 689245338,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1wa41S888Ya3sqEkBdzYiDq-5FOu_V30BOe-toX_78xQ/edit#gid=689245338",
          "cachedResultName": "Products"
        },
        "columns": {
          "value": {
            "F&Q": "={{ $fromAI(\"product_faq\", \"these are the most common questions users might have about the product, including answers if available\") }}\n",
            "Product Link": "={{ $fromAI(\"product_url\",\"this is the website link of the product\") }}",
            "Product Name": "={{ $fromAI(\"product_name\",\"this is the name of the product\") }}",
            "Product Price": "={{ $fromAI(\"product_price\",\"this is the price of the product\") }}",
            "Product Topic": "={{ $fromAI(\"product_topic\",\"this is the topic of the product that specifies what it is for, who it is for and what the key benefits are\") }}"
          },
          "schema": [
            {
              "id": "Product Link",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Product Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Description",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Product Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Topic",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Product Topic",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "F&Q",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "F&Q",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Product Link"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "dac235c2-223f-44c0-a548-1326c5f95a56",
      "name": "Update Product Sheet",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        2000,
        880
      ],
      "typeVersion": 4.5,
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "You are a helpful and intelligent customer support assistant.\n\nYou have access to a Google Sheets tool that allows you to read any content from a specific sheet to gather necessary information.\nNever mention to the user that you accessed Google Sheets to retrieve any data.\n\nYour main responsibilities:\n\nUnderstand the user\u2019s request or issue.\n\nIf the user is asking about a product, retrieve the relevant product name, price, and details as needed.\n\nDetermine whether the product price is a subscription or a one-time payment, based on the description.\n\nIf you detect that the user is facing a problem:\n\nIdentify and describe the problem clearly.\n\nPropose a practical and helpful solution.\n\nLog this interaction by adding a new row to the Google Sheet with the following columns:\n\nProblem\n\nSuggested Solution\n\nCategory (e.g., payment, login, access, delivery, technical issue, etc.)\n\nBe professional, concise, and empathetic in your responses.\nAlways aim to resolve the issue or provide the next best action."
        }
      },
      "id": "4c87231d-11f5-4abf-b52b-1f4a1954aff3",
      "name": "AI Agent -  Customer Support Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1700,
        1220
      ],
      "typeVersion": 1.7
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=My product description :  {{ $json['Product Description'] }}\n\nMy product link : {{ $json['Product Link'] }}",
        "options": {
          "systemMessage": "You are a helpful and intelligent assistant.\n\nYou receive the text content of a product page.\n\nYour tasks are:\n\nExtract the product name.\n\nExtract the product price, and determine whether it is a subscription or a one-time payment.\n\nIdentify the product topic.\n\nExtract the most frequently asked questions (FAQs) related to the product.\n\nYou have access to a Google Sheets tool that allows you to update specific columns and cells.\n\nAlways add the following data to the same row as the product URL in the Google Sheet:\n\nProduct Name\n\nProduct Price (with subscription/one-time label)\n\nProduct Topic\n\nFAQs\n\nBe accurate, structured, and consistent when filling in the sheet.\nDo not mention Google Sheets in your responses."
        }
      },
      "id": "71e8388f-2e74-43fb-ade6-0f6fdcc144d3",
      "name": "AI Agent - Enhance Product Details",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1740,
        600
      ],
      "typeVersion": 1.8
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $json.text }}",
        "contextWindowLength": 50
      },
      "id": "13b4959a-7997-43b2-99bd-f3d1a8b19bf9",
      "name": "Conversation Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        1720,
        1480
      ],
      "typeVersion": 1.3
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "1U9GTxknzoPnja4s8ffOAUdMbntB6huji95xfBAZ4_v8",
          "mode": "list",
          "cachedResultName": "n8n",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U9GTxknzoPnja4s8ffOAUdMbntB6huji95xfBAZ4_v8/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U9GTxknzoPnja4s8ffOAUdMbntB6huji95xfBAZ4_v8/edit#gid=0"
        },
        "options": {}
      },
      "id": "28b1cbd0-0f49-46aa-888e-48bde88ae563",
      "name": "Read Product Sheet",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        1880,
        1480
      ],
      "typeVersion": 4.5,
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1U9GTxknzoPnja4s8ffOAUdMbntB6huji95xfBAZ4_v8",
          "mode": "list",
          "cachedResultName": "n8n",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U9GTxknzoPnja4s8ffOAUdMbntB6huji95xfBAZ4_v8/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U9GTxknzoPnja4s8ffOAUdMbntB6huji95xfBAZ4_v8/edit#gid=0"
        },
        "columns": {
          "value": {
            "Category": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Category', ``, 'string') }}",
            "Solution": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Solution', ``, 'string') }}",
            "Support Problem": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Support_Problem', ``, 'string') }}"
          },
          "schema": [
            {
              "id": "Support Problem",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Support Problem",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Solution",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Solution",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Category",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "cce356ca-61dd-4e05-bd0c-9326554f6320",
      "name": "Log Customer Issues",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        2060,
        1480
      ],
      "typeVersion": 4.5,
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "trigger": [
          "app_mention"
        ],
        "channelId": {
          "__rl": true,
          "value": "C08M07QTQ77",
          "mode": "list",
          "cachedResultName": "test"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.slackTrigger",
      "typeVersion": 1,
      "position": [
        380,
        1140
      ],
      "id": "bb82a61f-7ad5-4f8e-be77-1bd3441012d6",
      "name": "Slack Trigger",
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "C08M07QTQ77",
          "mode": "list",
          "cachedResultName": "test"
        },
        "text": "={{ $json.output }}",
        "otherOptions": {
          "includeLinkToWorkflow": false,
          "thread_ts": {
            "replyValues": {
              "thread_ts": "={{ $('Get message').item.json.event_ts }}",
              "reply_broadcast": true
            }
          },
          "mrkdwn": true,
          "unfurl_links": true
        }
      },
      "id": "c7e61aa1-2b59-4c4a-8c00-4440693f8ec9",
      "name": "Send message",
      "type": "n8n-nodes-base.slack",
      "position": [
        2360,
        840
      ],
      "typeVersion": 2.3,
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "modelName": "models/gemini-2.0-flash",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        1620,
        920
      ],
      "id": "d053f9cd-9e34-4bfd-a3e9-5e0846859058",
      "name": "Google Gemini Chat Model",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "modelName": "models/gemini-2.0-flash-exp",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        1560,
        1460
      ],
      "id": "fbeef102-c6b4-42c6-ba8d-e9b8afa02fe3",
      "name": "Google Gemini Chat Model1",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Fetch HTML Page": {
      "main": [
        [
          {
            "node": "Clean HTML Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Training": {
      "main": [
        [
          {
            "node": "Extract URL from Text",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "AI Agent -  Customer Support Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Short-Term Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent - Enhance Product Details",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Clean HTML Content": {
      "main": [
        [
          {
            "node": "Save Raw Product Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Product Sheet": {
      "ai_tool": [
        [
          {
            "node": "AI Agent -  Customer Support Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Conversation Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent -  Customer Support Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Log Customer Issues": {
      "ai_tool": [
        [
          {
            "node": "AI Agent -  Customer Support Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Update Product Sheet": {
      "ai_tool": [
        [
          {
            "node": "AI Agent - Enhance Product Details",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Extract URL from Text": {
      "main": [
        [
          {
            "node": "Fetch HTML Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Raw Product Info": {
      "main": [
        [
          {
            "node": "AI Agent - Enhance Product Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent -  Customer Support Agent": {
      "main": [
        [
          {
            "node": "Send message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent - Enhance Product Details": {
      "main": [
        [
          {
            "node": "Send message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack Trigger": {
      "main": [
        [
          {
            "node": "Check If Training",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent - Enhance Product Details",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent -  Customer Support Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "staticData": null,
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "versionId": "e43513d8-d970-476a-b8b6-102e34a87da6",
  "activeVersionId": null,
  "triggerCount": 0,
  "shared": [
    {
      "updatedAt": "2025-04-12T06:22:38.756Z",
      "createdAt": "2025-04-12T06:22:38.756Z",
      "role": "workflow:owner",
      "workflowId": "juZkIaDQw6qQYX7j",
      "projectId": "ZX30KUrzrE1L7qmM"
    }
  ],
  "activeVersion": null,
  "tags": []
}

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

Customer support agent. Uses httpRequest, googleSheets, memoryBufferWindow, googleSheetsTool. Event-driven trigger; 19 nodes.

Source: https://github.com/dhimankamal/n8n/blob/e254c46eb609a944cf9d857b76cdce2ce26e1671/2025-12-26T00:00:42.004%2B05:30/customer-support-agent.json — 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

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

WhatsApp AI Assistant for Clinic Appointment Booking Automate your entire appointment lifecycle with an intelligent AI assistant that lives on WhatsApp. This workflow empowers any clinic or independen

Google Gemini Chat, WhatsApp Trigger, Memory Buffer Window +9
AI & RAG

Chat with a multi-agent system to write a blog. The orchestrator advances through research, headlines, hooks, outline, intro, draft, and final polish–one phase per reply—outputting options and asking

Agent, Tool Workflow, Memory Buffer Window +9
AI & RAG

Streamline your HR recruitment process with this intelligent automation that reads candidate emails and resumes, analyzes them using GPT-4, and automatically shortlists or rejects applicants based on

Gmail, Gmail Trigger, HTTP Request +7
AI & RAG

This template provides a complete, two-part automation system for exam preparation providers, educators, or content creators to automatically generate unique Multiple-Choice Questions (MCQs) on a spec

Google Sheets, HTTP Request, Google Sheets Trigger +4