AutomationFlowsEmail & Gmail › Multi-channel Customer Support with WhatsApp, Email & AI

Multi-channel Customer Support with WhatsApp, Email & AI

Original n8n title: Automate Multi-channel Customer Support with Whatsapp, Email & AI Translation

ByOneclick AI Squad @oneclick-ai on n8n.io

AI-Powered Multi-language Customer Support

Event trigger★★★★☆ complexity13 nodesWhatsApp TriggerEmail Read ImapGoogle TranslateGoogle SheetsEmail SendWhatsApp
Email & Gmail Trigger: Event Nodes: 13 Complexity: ★★★★☆ Added:

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

This workflow follows the Emailreadimap → Emailsend 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": "z73TMqpaMzylBZqT",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Multi-language Customer Support Automation",
  "tags": [],
  "nodes": [
    {
      "id": "f1e842e5-c61a-45ef-8669-d81805fd8c1d",
      "name": "WhatsApp Trigger",
      "type": "n8n-nodes-base.whatsAppTrigger",
      "position": [
        -1620,
        600
      ],
      "parameters": {
        "options": {},
        "updates": [
          "messages"
        ]
      },
      "credentials": {
        "whatsAppTriggerApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6ecfadcb-aa27-4850-8c83-a91a9d7db388",
      "name": "Email Trigger (IMAP)",
      "type": "n8n-nodes-base.emailReadImap",
      "position": [
        -1620,
        800
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "imap": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "d5aa938b-2ab7-454b-9855-e82bdade20be",
      "name": "Data Normalizer & Validator",
      "type": "n8n-nodes-base.code",
      "position": [
        -1400,
        700
      ],
      "parameters": {
        "jsCode": "// Normalize input data from different sources\nconst inputData = $input.first().json;\nlet messageText = '';\nlet sourceType = '';\nlet sourceId = '';\nlet timestamp = new Date().toISOString();\n\n// Handle WhatsApp input\nif (inputData.messages) {\n  messageText = inputData.messages[0]?.text?.body || '';\n  sourceType = 'whatsapp';\n  sourceId = inputData.messages[0]?.from || 'unknown';\n} \n// Handle Email input\nelse if (inputData.subject || inputData.text) {\n  messageText = inputData.text || inputData.subject || '';\n  sourceType = 'email';\n  sourceId = inputData.from || 'unknown';\n}\n// Handle direct text input\nelse if (inputData.text) {\n  messageText = inputData.text;\n  sourceType = 'direct';\n  sourceId = 'system';\n} else {\n  messageText = JSON.stringify(inputData);\n  sourceType = 'unknown';\n  sourceId = 'system';\n}\n\n// Basic validation\nif (!messageText || messageText.trim().length === 0) {\n  throw new Error('No message content found in input');\n}\n\nif (messageText.length > 5000) {\n  messageText = messageText.substring(0, 5000) + '... [truncated]';\n}\n\nreturn {\n  json: {\n    originalMessage: messageText,\n    sourceType: sourceType,\n    sourceId: sourceId,\n    timestamp: timestamp,\n    messageLength: messageText.length\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "75a79ce9-993a-4bab-b99a-0945539179e1",
      "name": "Smart Language Translator",
      "type": "n8n-nodes-base.googleTranslate",
      "position": [
        -1180,
        700
      ],
      "parameters": {
        "text": "={{ $json.originalMessage }}",
        "translateTo": "en",
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "a13ebe33-15f1-42cb-a9c3-1684d12c0f3c",
      "name": "Enhanced Summary & Priority Processor",
      "type": "n8n-nodes-base.code",
      "position": [
        -960,
        700
      ],
      "parameters": {
        "jsCode": "// Enhanced summarization with multiple algorithms\nconst input = $input.first().json;\nconst detectedLang = input.detectedSourceLanguage || 'unknown';\nconst translatedText = input.translatedText || input.originalMessage;\nconst sourceType = $('Data Normalizer & Validator').first().json.sourceType;\nconst sourceId = $('Data Normalizer & Validator').first().json.sourceId;\nconst timestamp = $('Data Normalizer & Validator').first().json.timestamp;\n\n// Advanced summarization function\nfunction generateSummary(text, maxLength = 150) {\n  if (!text || text.length <= maxLength) return text;\n  \n  // Extract key information\n  const sentences = text.split(/[.!?]+/).filter(s => s.trim().length > 0);\n  \n  if (sentences.length <= 2) {\n    return text.substring(0, maxLength) + (text.length > maxLength ? '...' : '');\n  }\n  \n  // Prioritize first and last sentences, plus any with keywords\n  const keywords = ['urgent', 'help', 'problem', 'issue', 'support', 'error', 'bug', 'complaint'];\n  const importantSentences = [];\n  \n  // Always include first sentence\n  if (sentences[0]) importantSentences.push(sentences[0].trim());\n  \n  // Add sentences with keywords\n  sentences.forEach(sentence => {\n    if (keywords.some(keyword => sentence.toLowerCase().includes(keyword))) {\n      if (!importantSentences.includes(sentence.trim())) {\n        importantSentences.push(sentence.trim());\n      }\n    }\n  });\n  \n  // Add last sentence if different from first\n  const lastSentence = sentences[sentences.length - 1].trim();\n  if (lastSentence !== sentences[0].trim() && !importantSentences.includes(lastSentence)) {\n    importantSentences.push(lastSentence);\n  }\n  \n  let summary = importantSentences.join('. ');\n  \n  if (summary.length > maxLength) {\n    summary = summary.substring(0, maxLength - 3) + '...';\n  }\n  \n  return summary;\n}\n\n// Determine priority based on content\nfunction getPriority(text) {\n  const urgentKeywords = ['urgent', 'emergency', 'asap', 'immediately', 'critical'];\n  const highKeywords = ['problem', 'issue', 'error', 'bug', 'complaint', 'help'];\n  \n  const lowerText = text.toLowerCase();\n  \n  if (urgentKeywords.some(keyword => lowerText.includes(keyword))) {\n    return 'HIGH';\n  } else if (highKeywords.some(keyword => lowerText.includes(keyword))) {\n    return 'MEDIUM';\n  }\n  return 'LOW';\n}\n\n// Generate enhanced summary\nconst summary = generateSummary(translatedText);\nconst priority = getPriority(translatedText);\nconst wordCount = translatedText.split(/\\s+/).length;\n\n// Prepare structured output\nconst processedData = {\n  // Core data\n  originalLanguage: detectedLang,\n  translatedText: translatedText,\n  summary: summary,\n  priority: priority,\n  \n  // Metadata\n  sourceType: sourceType,\n  sourceId: sourceId,\n  timestamp: timestamp,\n  wordCount: wordCount,\n  \n  // For notifications\n  emailSubject: `[${priority}] Customer Message from ${sourceType.toUpperCase()} - ${detectedLang.toUpperCase()}`,\n  notificationText: `Priority: ${priority}\\nSource: ${sourceType.toUpperCase()}\\nLanguage: ${detectedLang.toUpperCase()}\\nSummary: ${summary}`,\n  \n  // For logging\n  logEntry: {\n    timestamp: timestamp,\n    source: sourceType,\n    sourceId: sourceId,\n    originalLanguage: detectedLang,\n    priority: priority,\n    wordCount: wordCount,\n    summary: summary\n  }\n};\n\nreturn { json: processedData };"
      },
      "typeVersion": 2
    },
    {
      "id": "3fadf1aa-43dc-45e9-8615-f26eb51a5d7d",
      "name": "Log to Database",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -520,
        300
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": "Customer_Messages_Log",
        "documentId": "your-google-sheets-id",
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "5c755da5-ffba-49f9-ade4-f543f1f55443",
      "name": "Admin Email Notification",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        -520,
        500
      ],
      "parameters": {
        "options": {},
        "subject": "={{ $json.emailSubject }}",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "0a71c247-4c04-41d9-9fed-efff40527ff1",
      "name": "Admin WhatsApp Alert",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        -520,
        1100
      ],
      "parameters": {
        "textBody": "\ud83d\udea8 Customer Support Alert\\n{{ $json.notificationText }}\\n\\nFull message: {{ $json.translatedText }}",
        "operation": "send",
        "phoneNumberId": "your-phone-id",
        "additionalFields": {},
        "recipientPhoneNumber": "admin-phone-number"
      },
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9301c937-35ea-4233-a960-b89b36f58b02",
      "name": "Check Message Source",
      "type": "n8n-nodes-base.if",
      "position": [
        -740,
        800
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "condition-source-whatsapp",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.sourceType }}",
              "rightValue": "whatsapp"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "79eae5b4-2216-4016-a19c-717f6422c4ce",
      "name": "Customer WhatsApp Auto-Response",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        -520,
        700
      ],
      "parameters": {
        "textBody": "Thank you for contacting us! We've received your message and our team will respond within 24 hours. Your message has been translated and forwarded to our support team.\\n\\nReference ID: {{ $json.timestamp }}",
        "operation": "send",
        "phoneNumberId": "your-phone-id",
        "additionalFields": {},
        "recipientPhoneNumber": "={{ $('Data Normalizer & Validator').first().json.sourceId }}"
      },
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "317f765d-07e2-49ec-8f7b-bc7a79f85860",
      "name": "Customer Email Auto-Response",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        -520,
        900
      ],
      "parameters": {
        "options": {},
        "subject": "We've received your message - Reference #{{ $json.timestamp }}",
        "toEmail": "={{ $('Data Normalizer & Validator').first().json.sourceId }}",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "7ea5edd9-2989-4757-bbb4-47d8c04d772f",
      "name": "Workflow Completion & Metrics",
      "type": "n8n-nodes-base.code",
      "position": [
        -300,
        700
      ],
      "parameters": {
        "jsCode": "// Final completion and metrics calculation\nconst startTime = new Date($('Data Normalizer & Validator').first().json.timestamp);\nconst endTime = new Date();\nconst processingTime = endTime - startTime;\n\nconst metrics = {\n  processingTimeMs: processingTime,\n  totalStepsCompleted: 8,\n  sourceType: $('Enhanced Summary & Priority Processor').first().json.sourceType,\n  priority: $('Enhanced Summary & Priority Processor').first().json.priority,\n  originalLanguage: $('Enhanced Summary & Priority Processor').first().json.originalLanguage,\n  wordCount: $('Enhanced Summary & Priority Processor').first().json.wordCount,\n  timestamp: endTime.toISOString(),\n  status: 'COMPLETED',\n  workflowVersion: '2.0'\n};\n\nconsole.log('Workflow completed successfully:', metrics);\n\nreturn {\n  json: {\n    success: true,\n    message: 'Multi-language customer support workflow completed successfully',\n    metrics: metrics,\n    summary: `Processed ${metrics.sourceType} message in ${metrics.originalLanguage}, translated to English, priority: ${metrics.priority}, completed in ${processingTime}ms`\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "ad8bf732-9d89-4d1b-a7b1-94ed5209ca55",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2100,
        140
      ],
      "parameters": {
        "color": 3,
        "width": 540,
        "height": 420,
        "content": "### What this workflow does:\nAutomatically handles customer messages in any language by translating them to English, creating smart summaries, sending admin notifications, logging everything, and responding professionally to customers.\n\n### Why businesses need it:\n\nHandle global customers without language barriers\nNever miss important messages with priority detection\nSave 80% of manual work with automation\nKeep complete records for compliance/analytics\nProvide professional customer experience.\n\n### How to implement:\nSetup process with clear instructions for connecting accounts, setting up credentials, and activating the workflow."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "30770594-2dbc-4593-9d2b-fd457f215ed1",
  "connections": {
    "Log to Database": {
      "main": [
        [
          {
            "node": "Workflow Completion & Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "WhatsApp Trigger": {
      "main": [
        [
          {
            "node": "Data Normalizer & Validator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Admin WhatsApp Alert": {
      "main": [
        [
          {
            "node": "Workflow Completion & Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Message Source": {
      "main": [
        [
          {
            "node": "Customer WhatsApp Auto-Response",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Customer Email Auto-Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email Trigger (IMAP)": {
      "main": [
        [
          {
            "node": "Data Normalizer & Validator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Admin Email Notification": {
      "main": [
        [
          {
            "node": "Workflow Completion & Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Smart Language Translator": {
      "main": [
        [
          {
            "node": "Enhanced Summary & Priority Processor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Normalizer & Validator": {
      "main": [
        [
          {
            "node": "Smart Language Translator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Customer Email Auto-Response": {
      "main": [
        [
          {
            "node": "Workflow Completion & Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Customer WhatsApp Auto-Response": {
      "main": [
        [
          {
            "node": "Workflow Completion & Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enhanced Summary & Priority Processor": {
      "main": [
        [
          {
            "node": "Log to Database",
            "type": "main",
            "index": 0
          },
          {
            "node": "Admin Email Notification",
            "type": "main",
            "index": 0
          },
          {
            "node": "Admin WhatsApp Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Check Message Source",
            "type": "main",
            "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

AI-Powered Multi-language Customer Support

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

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

Email AI Auto-responder. Summerize and send email. Uses emailReadImap, emailSend, httpRequest, googleDrive. Event-driven trigger; 78 nodes.

Email Read Imap, Email Send, HTTP Request +2
Email & Gmail

Email AI Auto-responder. Summerize and send email. Uses emailReadImap, emailSend, httpRequest, googleDrive. Event-driven trigger; 78 nodes.

Email Read Imap, Email Send, HTTP Request +2
Email & Gmail

Email AI Auto-responder. Summerize and send email. Uses emailReadImap, emailSend, httpRequest, googleDrive. Event-driven trigger; 26 nodes.

Email Read Imap, Email Send, HTTP Request +1
Email & Gmail

Email AI Auto-responder. Summerize and send email. Uses emailReadImap, emailSend, httpRequest, googleDrive. Event-driven trigger; 26 nodes.

Email Read Imap, Email Send, HTTP Request +1
Email & Gmail

This n8n template demonstrates how to create an automated construction progress notification system for real estate companies. The workflow triggers daily at 8:00 AM IST to check a Google Sheet for co

Google Sheets, WhatsApp, Email Send