This workflow follows the Emailsend → 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 →
{
"name": "\uc720\uc800 \ubb38\uc758 \uc790\ub3d9 \ubd84\ub958/\uc751\ub300 (IF Node)",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "inquiry",
"responseMode": "responseNode",
"options": {}
},
"id": "1",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1.1,
"position": [
240,
400
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "user",
"name": "user",
"value": "={{ $json.body.user || $json.user || 'unknown@example.com' }}",
"type": "string"
},
{
"id": "content",
"name": "content",
"value": "={{ $json.body.content || $json.content || '' }}",
"type": "string"
},
{
"id": "type",
"name": "type",
"value": "={{ ($json.body.type || $json.type || 'general').toLowerCase() }}",
"type": "string"
},
{
"id": "is_repeat",
"name": "is_repeat",
"value": "={{ $json.body.is_repeat || $json.is_repeat || false }}",
"type": "boolean"
},
{
"id": "received_at",
"name": "received_at",
"value": "={{ $now.toISO() }}",
"type": "string"
}
]
},
"options": {}
},
"id": "2",
"name": "Set (Norm)",
"type": "n8n-nodes-base.set",
"typeVersion": 3.3,
"position": [
460,
400
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict"
},
"conditions": [
{
"id": "cond1",
"leftValue": "={{ $json.type }}",
"rightValue": "payment",
"operator": {
"type": "string",
"operation": "equals"
}
},
{
"id": "cond2",
"leftValue": "={{ $json.type }}",
"rightValue": "subscription",
"operator": {
"type": "string",
"operation": "equals"
}
},
{
"id": "cond3",
"leftValue": "={{ $json.is_repeat }}",
"rightValue": true,
"operator": {
"type": "boolean",
"operation": "equals"
}
}
],
"combinator": "or"
},
"options": {}
},
"id": "3",
"name": "IF (Critical Check)",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
680,
300
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "level",
"name": "level",
"value": "critical",
"type": "string"
}
]
},
"options": {}
},
"id": "4",
"name": "Set (Set_Crit)",
"type": "n8n-nodes-base.set",
"typeVersion": 3.3,
"position": [
900,
200
]
},
{
"parameters": {
"resource": "text",
"model": {
"__rl": true,
"value": "gpt-5-mini",
"mode": "list",
"cachedResultName": "gpt-5-mini"
},
"prompt": {
"__rl": true,
"value": "=\ub2f9\uc2e0\uc740 \uace0\uac1d \ubb38\uc758\uc758 \uc911\uc694\ub3c4\ub97c \ud310\ub2e8\ud558\ub294 \uc804\ubb38\uac00\uc785\ub2c8\ub2e4.\n\n\ub2e4\uc74c \ubb38\uc758\ub97c \ubd84\uc11d\ud558\uc5ec \uc801\uc808\ud55c \ub808\ubca8\uc744 \ud310\uc815\ud558\uc138\uc694:\n\n**\ubb38\uc758 \uc720\ud615**: {{ $json.type }}\n**\ubb38\uc758 \ub0b4\uc6a9**: {{ $json.content }}\n\n\ub808\ubca8 \uae30\uc900:\n- critical: \uc989\uac01 \ub300\uc751 \ud544\uc694 (\uc11c\ube44\uc2a4 \uc911\ub2e8, \ub370\uc774\ud130 \uc190\uc2e4, \ubcf4\uc548 \ubb38\uc81c)\n- error: \uc8fc\uc694 \uae30\ub2a5 \uc624\ub958 (\ud575\uc2ec \uae30\ub2a5 \ubd88\uac00, \ubc18\ubcf5 \uc624\ub958)\n- warning: \ubd80\ubd84 \uc81c\ud55c (\uc77c\ubd80 \uae30\ub2a5 \ubb38\uc81c, \uc131\ub2a5 \uc800\ud558)\n- info: \uc77c\ubc18 \ubb38\uc758 (\uc0ac\uc6a9\ubc95, \uae30\ub2a5 \uc694\uccad, \uc9c8\ubb38)\n\nJSON \ud615\uc2dd\uc73c\ub85c \uc751\ub2f5:\n{\"level\": \"critical|error|warning|info\"}",
"mode": "id"
},
"options": {
"temperature": 0.3,
"responseFormat": "json_object"
}
},
"id": "5",
"name": "AI Agent (AI_Level)",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.4,
"position": [
900,
400
],
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 1000
},
{
"parameters": {
"resource": "text",
"model": {
"__rl": true,
"value": "gpt-5-mini",
"mode": "list",
"cachedResultName": "gpt-5-mini"
},
"prompt": {
"__rl": true,
"value": "=\ub2e4\uc74c \uace0\uac1d \ubb38\uc758\ub97c 40\uc790 \uc774\ub0b4\ub85c \uc694\uc57d\ud558\uc138\uc694:\n\n{{ $json.content }}\n\n\uc694\uc57d \uc6d0\uce59:\n- \ud575\uc2ec \ubb38\uc81c\ub9cc \uac04\uacb0\ud558\uac8c\n- \ubb38\uc758 \uc5b8\uc5b4 \uadf8\ub300\ub85c \uc0ac\uc6a9\n- 40\uc790 \uc5c4\uc218\n\nJSON \ud615\uc2dd:\n{\"summary\": \"\uc694\uc57d \ub0b4\uc6a9\"}",
"mode": "id"
},
"options": {
"temperature": 0.5,
"responseFormat": "json_object"
}
},
"id": "6",
"name": "AI Agent (AI_Sum)",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.4,
"position": [
680,
500
],
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 1000
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict"
},
"conditions": [
{
"id": "len1",
"leftValue": "={{ ($json.content || '').length }}",
"rightValue": 200,
"operator": {
"type": "number",
"operation": "smallerEqual"
}
}
],
"combinator": "and"
},
"options": {}
},
"id": "17",
"name": "IF (Translate Length <=200)",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
680,
620
]
},
{
"parameters": {
"authentication": "serviceAccount",
"operation": "translateText",
"text": "={{ $json.content }}",
"translateTo": "ko",
"options": {}
},
"id": "7",
"name": "Google Translate (Trans)",
"type": "n8n-nodes-base.googleTranslate",
"typeVersion": 1,
"position": [
680,
700
],
"credentials": {
"googleApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"resource": "text",
"model": {
"__rl": true,
"value": "gpt-5-mini",
"mode": "list",
"cachedResultName": "gpt-5-mini"
},
"prompt": {
"__rl": true,
"value": "=\ub2f9\uc2e0\uc740 \ubc88\uc5ed \uc804\ubb38\uac00\uc785\ub2c8\ub2e4.\n\n\uc544\ub798 \uace0\uac1d \ubb38\uc758 \ub0b4\uc6a9\uc744 **\ud55c\uad6d\uc5b4\ub85c \ubc88\uc5ed**\ud558\uace0, \uc6d0\ubb38\uc758 \uc5b8\uc5b4\ub97c ISO \ucf54\ub4dc(\uac00\ub2a5\ud558\uba74 2\uae00\uc790, \ud544\uc694 \uc2dc \uc9c0\uc5ed \ud3ec\ud568 \uc608: zh-cn)\ub85c \ucd94\uc815\ud558\uc138\uc694.\n\n\ubb38\uc758 \ub0b4\uc6a9:\n{{ $json.content }}\n\nJSON \ud615\uc2dd\uc73c\ub85c\ub9cc \uc751\ub2f5:\n{\"translatedText\": \"\ubc88\uc5ed\ubb38\", \"detectedSourceLanguage\": \"en|ko|ja|zh-cn|...\"}",
"mode": "id"
},
"options": {
"temperature": 0.2,
"responseFormat": "json_object"
}
},
"id": "18",
"name": "AI Agent (AI_Trans)",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.4,
"position": [
900,
840
],
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 1000
},
{
"parameters": {
"jsCode": "// OpenAI \ubc88\uc5ed \uacb0\uacfc\ub97c Google Translate \ucd9c\ub825 \ud615\ud0dc\ub85c \uc815\uaddc\ud654\n// \uae30\ub300 \uc785\ub825: $json.message.content = {\"translatedText\":..., \"detectedSourceLanguage\":...}\n\nlet translatedText = '';\nlet detectedSourceLanguage = '';\n\nif ($json?.message?.content) {\n try {\n const parsed = JSON.parse($json.message.content);\n translatedText = parsed.translatedText || parsed.translation || '';\n detectedSourceLanguage = parsed.detectedSourceLanguage || parsed.language || '';\n } catch (e) {\n // JSON \ud30c\uc2f1 \uc2e4\ud328 \uc2dc \uc6d0\ubb38(\uace0\uac1d \ubb38\uc758 \ub0b4\uc6a9)\uc744 \uadf8\ub300\ub85c \uc0ac\uc6a9\n translatedText = $json.content || '';\n detectedSourceLanguage = '';\n }\n}\n\nreturn [{\n json: {\n translatedText: translatedText,\n detectedSourceLanguage: detectedSourceLanguage\n }\n}];"
},
"id": "19",
"name": "Code (Trans Normalize)",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1120,
840
]
},
{
"parameters": {
"jsCode": "// Track A: \uc6d0\ubcf8 \ub370\uc774\ud130 + level \ucd94\uac00\nconst original = $('Set (Norm)').first().json;\nconst level = $json.level || ($json.message?.content ? JSON.parse($json.message.content).level : 'info');\n\nreturn [{\n json: {\n ...original,\n level: level\n }\n}];"
},
"id": "8",
"name": "Code (Combine A)",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1120,
300
]
},
{
"parameters": {
"jsCode": "// Track B: \uc6d0\ubcf8 \ub370\uc774\ud130 + summary \ucd94\uac00\nconst original = $('Set (Norm)').first().json;\nconst summary = $json.message?.content ? JSON.parse($json.message.content).summary : '';\n\nreturn [{\n json: {\n ...original,\n summary: summary\n }\n}];"
},
"id": "9",
"name": "Code (Combine B)",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
900,
500
]
},
{
"parameters": {
"jsCode": "// Track C: \uc6d0\ubcf8 \ub370\uc774\ud130 + \ubc88\uc5ed \uc815\ubcf4 \ucd94\uac00\nconst original = $('Set (Norm)').first().json;\n\nreturn [{\n json: {\n ...original,\n translatedText: $json.translatedText || original.content,\n detectedSourceLanguage: $json.detectedSourceLanguage || 'en'\n }\n}];"
},
"id": "10",
"name": "Code (Combine C)",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
900,
700
]
},
{
"parameters": {
"jsCode": "// 3\uac1c \ud2b8\ub799\uc758 \uacb0\uacfc\ub97c \ud558\ub098\ub85c \ubcd1\ud569\nconst trackA = $('Code (Combine A)').first().json;\nconst trackB = $('Code (Combine B)').first().json;\nconst trackC = $('Code (Combine C)').first().json;\n\nreturn [{\n json: {\n ...trackA,\n ...trackB,\n ...trackC\n }\n}];"
},
"id": "11",
"name": "Code (Final Merge)",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1340,
500
]
},
{
"parameters": {
"authentication": "serviceAccount",
"operation": "append",
"sheetId": {
"__rl": true,
"value": "inquiry-log",
"mode": "name"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"received_at": "={{ $json.received_at || $now.toISO() }}",
"user": "={{ $json.user }}",
"type": "={{ $json.type }}",
"is_repeat": "={{ $json.is_repeat }}",
"level": "={{ $json.level || 'info' }}",
"summary": "={{ $json.summary || '' }}",
"language": "={{ $json.detectedSourceLanguage || 'en' }}",
"content": "={{ $json.content }}",
"translated_text": "={{ $json.translatedText || $json.content }}"
}
},
"options": {}
},
"id": "12",
"name": "Google Sheets (Log)",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.4,
"position": [
1560,
260
],
"credentials": {
"googleSheetsApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"filePath": "=/home/node/.n8n/guides/{{ $json.type }}.md",
"options": {}
},
"id": "13",
"name": "Read Binary File (Load_File)",
"type": "n8n-nodes-base.readBinaryFile",
"typeVersion": 1,
"position": [
1560,
540
]
},
{
"parameters": {
"resource": "text",
"model": {
"__rl": true,
"value": "gpt-5-mini",
"mode": "list",
"cachedResultName": "gpt-5-mini"
},
"prompt": {
"__rl": true,
"value": "=\ub2f9\uc2e0\uc740 \uce5c\uc808\ud55c \uace0\uac1d \uc9c0\uc6d0 \ub2f4\ub2f9\uc790\uc785\ub2c8\ub2e4.\n\n**\uace0\uac1d \uc815\ubcf4**:\n- \uc0ac\uc6a9\uc790: {{ $('Code (Final Merge)').item.json.user }}\n- \uc5b8\uc5b4: {{ $('Code (Final Merge)').item.json.detectedSourceLanguage || 'en' }}\n\n**\ubb38\uc758 \uc815\ubcf4**:\n- \uc720\ud615: {{ $('Code (Final Merge)').item.json.type }}\n- \ub808\ubca8: {{ $('Code (Final Merge)').item.json.level || 'info' }}\n- \ubc18\ubcf5: {{ $('Code (Final Merge)').item.json.is_repeat ? '\uc608' : '\uc544\ub2c8\uc624' }}\n\n**\ubb38\uc758 \ub0b4\uc6a9**:\n{{ $('Code (Final Merge)').item.json.content }}\n\n**\uac00\uc774\ub4dc \ubb38\uc11c**:\n{{ $binary.data ? Buffer.from($binary.data.data).toString('utf8') : '\uac00\uc774\ub4dc \uc5c6\uc74c' }}\n\n\uc704 \uac00\uc774\ub4dc\ub97c \ucc38\uace0\ud558\uc5ec \uace0\uac1d\uc5d0\uac8c \ubcf4\ub0bc \ub2f5\ubcc0\uc744 \uc791\uc131\ud558\uc138\uc694.\n\n\ub2f5\ubcc0 \uc6d0\uce59:\n1. \uace0\uac1d \uc5b8\uc5b4\ub85c \uc791\uc131\n2. \uce5c\uc808\ud558\uace0 \uba85\ud655\ud558\uac8c\n3. \uac00\uc774\ub4dc \uc815\ucc45 \uc900\uc218\n4. \uad6c\uccb4\uc801\uc778 \ud574\uacb0 \ubc29\ubc95 \uc81c\uc2dc\n{{ $('Code (Final Merge)').item.json.is_repeat ? '5. \ubc18\ubcf5 \ubb38\uc758\uc784\uc744 \uc5b8\uae09\ud558\uace0 \ucd94\uac00 \ud655\uc778 \ud544\uc694\ud568\uc744 \uc548\ub0b4' : '' }}\n\nJSON \ud615\uc2dd:\n{\"response\": \"\ub2f5\ubcc0 \uc804\ubb38\"}",
"mode": "id"
},
"options": {
"temperature": 0.7,
"responseFormat": "json_object"
}
},
"id": "14",
"name": "AI Agent (AI_Draft)",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.4,
"position": [
1780,
540
],
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 1000
},
{
"parameters": {
"jsCode": "// 30+ \uad6d\uac00 \uc5b8\uc5b4\ubcc4 \ub2f4\ub2f9\uc790 \uc774\uba54\uc77c \ub9e4\ud551\nconst languageToEmail = {\n 'ko': 'cs.kr@company.com',\n 'ja': 'cs.jp@company.com',\n 'zh': 'cs.cn@company.com',\n 'zh-cn': 'cs.cn@company.com',\n 'zh-tw': 'cs.tw@company.com',\n 'zh-hk': 'cs.hk@company.com',\n 'th': 'cs.th@company.com',\n 'vi': 'cs.vn@company.com',\n 'id': 'cs.id@company.com',\n 'ms': 'cs.my@company.com',\n 'fil': 'cs.ph@company.com',\n 'tl': 'cs.ph@company.com',\n 'hi': 'cs.in@company.com',\n 'en': 'cs.us@company.com',\n 'en-us': 'cs.us@company.com',\n 'en-gb': 'cs.uk@company.com',\n 'de': 'cs.de@company.com',\n 'fr': 'cs.fr@company.com',\n 'es': 'cs.es@company.com',\n 'it': 'cs.it@company.com',\n 'pt': 'cs.pt@company.com',\n 'pt-br': 'cs.br@company.com',\n 'nl': 'cs.nl@company.com',\n 'pl': 'cs.pl@company.com',\n 'ru': 'cs.ru@company.com',\n 'tr': 'cs.tr@company.com',\n 'sv': 'cs.se@company.com',\n 'no': 'cs.no@company.com',\n 'da': 'cs.dk@company.com',\n 'fi': 'cs.fi@company.com',\n 'en-ca': 'cs.ca@company.com',\n 'es-mx': 'cs.mx@company.com',\n 'ar': 'cs.ae@company.com',\n 'he': 'cs.il@company.com',\n 'en-au': 'cs.au@company.com'\n};\n\nconst defaultEmail = 'cs@company.com';\n\nconst items = $input.all();\nconst result = [];\n\nfor (const item of items) {\n const language = (item.json.detectedSourceLanguage || item.json.language || 'en').toLowerCase();\n const level = item.json.level || 'info';\n \n // \uc5b8\uc5b4\ubcc4 \uc774\uba54\uc77c \ub9e4\ud551\n let managerEmail = languageToEmail[language];\n \n // \uae30\ubcf8 \uc5b8\uc5b4 fallback\n if (!managerEmail && language.includes('-')) {\n const baseLang = language.split('-')[0];\n managerEmail = languageToEmail[baseLang];\n }\n \n if (!managerEmail) {\n managerEmail = defaultEmail;\n }\n \n // AI \ub2f5\ubcc0 \ud30c\uc2f1\n let expectedResponse = '';\n if (item.json.message && item.json.message.content) {\n try {\n expectedResponse = JSON.parse(item.json.message.content).response || '';\n } catch (e) {\n expectedResponse = item.json.message.content || '';\n }\n }\n \n result.push({\n json: {\n ...item.json,\n manager_email: managerEmail,\n expected_response: expectedResponse\n }\n });\n}\n\nreturn result;"
},
"id": "15",
"name": "Code (Map_Address)",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2000,
540
]
},
{
"parameters": {
"fromEmail": "noreply@company.com",
"toEmail": "={{ $json.manager_email }}",
"subject": "={{ '[' + ($json.level || 'info').toUpperCase() + '][' + $json.type.toUpperCase() + '] ' + ($json.summary || '\uace0\uac1d \ubb38\uc758') }}",
"emailType": "html",
"message": "=<h2>\uace0\uac1d \ubb38\uc758</h2>\n<p><strong>\ubb38\uc758 \uc2dc\uac01:</strong> {{ $json.received_at }}</p>\n<p><strong>\uace0\uac1d:</strong> {{ $json.user }}</p>\n<p><strong>\uc720\ud615:</strong> {{ $json.type }}</p>\n<p><strong>\ub808\ubca8:</strong> {{ $json.level || 'info' }}</p>\n<p><strong>\ubc18\ubcf5 \ubb38\uc758:</strong> {{ $json.is_repeat ? '\uc608' : '\uc544\ub2c8\uc624' }}</p>\n\n<h3>\ubb38\uc758 \ub0b4\uc6a9</h3>\n<p>{{ $json.content }}</p>\n\n<h3>\ud55c\uad6d\uc5b4 \ubc88\uc5ed</h3>\n<p>{{ $json.translatedText || $json.content }}</p>\n\n<h3>AI \ub2f5\ubcc0 \ucd08\uc548</h3>\n<p>{{ $json.expected_response }}</p>\n\n<hr>\n<p style=\"font-size: 12px; color: #666;\">\uc790\ub3d9 \uc0dd\uc131\ub41c \uc774\uba54\uc77c\uc785\ub2c8\ub2e4.</p>",
"options": {}
},
"id": "16",
"name": "Email (Mail_Send)",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [
2220,
540
],
"credentials": {
"smtp": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Set (Norm)",
"type": "main",
"index": 0
}
]
]
},
"Set (Norm)": {
"main": [
[
{
"node": "IF (Critical Check)",
"type": "main",
"index": 0
},
{
"node": "AI Agent (AI_Sum)",
"type": "main",
"index": 0
},
{
"node": "IF (Translate Length <=200)",
"type": "main",
"index": 0
}
]
]
},
"IF (Translate Length <=200)": {
"main": [
[
{
"node": "Google Translate (Trans)",
"type": "main",
"index": 0
}
],
[
{
"node": "AI Agent (AI_Trans)",
"type": "main",
"index": 0
}
]
]
},
"AI Agent (AI_Trans)": {
"main": [
[
{
"node": "Code (Trans Normalize)",
"type": "main",
"index": 0
}
]
]
},
"Code (Trans Normalize)": {
"main": [
[
{
"node": "Code (Combine C)",
"type": "main",
"index": 0
}
]
]
},
"IF (Critical Check)": {
"main": [
[
{
"node": "Set (Set_Crit)",
"type": "main",
"index": 0
}
],
[
{
"node": "AI Agent (AI_Level)",
"type": "main",
"index": 0
}
]
]
},
"Set (Set_Crit)": {
"main": [
[
{
"node": "Code (Combine A)",
"type": "main",
"index": 0
}
]
]
},
"AI Agent (AI_Level)": {
"main": [
[
{
"node": "Code (Combine A)",
"type": "main",
"index": 0
}
]
]
},
"AI Agent (AI_Sum)": {
"main": [
[
{
"node": "Code (Combine B)",
"type": "main",
"index": 0
}
]
]
},
"Google Translate (Trans)": {
"main": [
[
{
"node": "Code (Combine C)",
"type": "main",
"index": 0
}
]
]
},
"Code (Combine A)": {
"main": [
[
{
"node": "Code (Final Merge)",
"type": "main",
"index": 0
}
]
]
},
"Code (Combine B)": {
"main": [
[
{
"node": "Code (Final Merge)",
"type": "main",
"index": 0
}
]
]
},
"Code (Combine C)": {
"main": [
[
{
"node": "Code (Final Merge)",
"type": "main",
"index": 0
}
]
]
},
"Code (Final Merge)": {
"main": [
[
{
"node": "Google Sheets (Log)",
"type": "main",
"index": 0
},
{
"node": "Read Binary File (Load_File)",
"type": "main",
"index": 0
}
]
]
},
"Read Binary File (Load_File)": {
"main": [
[
{
"node": "AI Agent (AI_Draft)",
"type": "main",
"index": 0
}
]
]
},
"AI Agent (AI_Draft)": {
"main": [
[
{
"node": "Code (Map_Address)",
"type": "main",
"index": 0
}
]
]
},
"Code (Map_Address)": {
"main": [
[
{
"node": "Email (Mail_Send)",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"staticData": null,
"tags": [],
"triggerCount": 1,
"updatedAt": "2026-01-17T19:20:00.000Z",
"versionId": "final-if-node"
}
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.
googleApigoogleSheetsApiopenAiApismtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
유저 문의 자동 분류/응대 (IF Node). Uses openAi, googleTranslate, googleSheets, readBinaryFile. Webhook trigger; 19 nodes.
Source: https://github.com/letsescape/shop-clone-n8n/blob/fe153456020b0f4d480135b0183bf2a69d02596b/n8n_data/workflows/inquiry.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Watch on Youtube▶️
This workflow helps solar sales teams reactivate cold leads automatically using value-first SMS follow-ups, AI-powered sentiment detection, real-time alerts, and CRM tracking.
Property managers and operations teams who want better visibility into unresolved maintenance requests.
Consulting firms in strategy, management, or IT who want to automate client onboarding and internal task assignment.
Property management teams handling leases, IDs, and compliance documents.