This workflow follows the Gmail → 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 →
{
"id": "5CmV0koXuemjbEmB",
"nodes": [
{
"parameters": {
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "1V6cIC3_5s3w6xq-ZjVZnEQ65rXXbTY56UwxNcoACFUQ"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "\uace0\uac1d\ubb38\uc758_\ud3fc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1V6cIC3_5s3w6xq-ZjVZnEQ65rXXbTY56UwxNcoACFUQ/edit#gid=0"
},
"event": "rowAdded",
"options": {}
},
"id": "trigger-new-inquiry",
"name": "On New Inquiry Row",
"type": "n8n-nodes-base.googleSheetsTrigger",
"typeVersion": 1,
"position": [
240,
400
],
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"id": "classify-inquiry",
"name": "Classify Inquiry",
"position": [
400,
400
],
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 5000,
"onError": "continueErrorOutput",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 2.1,
"parameters": {
"resource": "text",
"operation": "response",
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"simplify": true,
"options": {},
"responses": {
"values": [
{
"type": "text",
"role": "system",
"content": "\ub2f9\uc2e0\uc740 \uace0\uac1d \ubb38\uc758\ub97c \ubd84\ub958\ud558\ub294 \uc804\ubb38 \uc5b4\uc2dc\uc2a4\ud134\ud2b8\uc785\ub2c8\ub2e4.\n\ub2e4\uc74c \uae30\uc900\uc5d0 \ub530\ub77c \ubb38\uc758\ub97c \ubd84\uc11d\ud558\uace0, \ubc18\ub4dc\uc2dc JSON \ud615\uc2dd\uc73c\ub85c\ub9cc \uc751\ub2f5\ud558\uc138\uc694.\n\n[\uce74\ud14c\uace0\ub9ac]\n- \uc81c\ud488\ubb38\uc758: \uc81c\ud488 \uc0ac\uc591, \uc0ac\uc6a9\ubc95, \uc7ac\uace0 \ub4f1\uc5d0 \ub300\ud55c \uc9c8\ubb38\n- \ubc30\uc1a1\ubb38\uc758: \ubc30\uc1a1 \uc0c1\ud0dc, \uc608\uc815\uc77c, \uc8fc\uc18c \ubcc0\uacbd \ub4f1\n- \ud658\ubd88\uc694\uccad: \ud658\ubd88, \uad50\ud658, \ucde8\uc18c\uc5d0 \ub300\ud55c \uc694\uccad\n- \uae30\ud0c0: \uc704 \uce74\ud14c\uace0\ub9ac\uc5d0 \ud574\ub2f9\ud558\uc9c0 \uc54a\ub294 \ubb38\uc758\n\n[\ubcf5\uc7a1\ub3c4]\n- \ub2e8\uc21c\ubb38\uc758: \ub2f5\ubcc0\uc774 \uc815\ud615\ud654\ub418\uc5b4 \uc788\uace0, \uac1c\uc778\uc815\ubcf4 \ud655\uc778\uc774\ub098 \uc815\ucc45 \ud310\ub2e8\uc774 \ubd88\ud544\uc694\ud55c \ubb38\uc758\n- \ud655\uc778\ud544\uc694: \uac1c\uc778 \uc8fc\ubb38 \uc815\ubcf4 \ud655\uc778\uc774 \ud544\uc694\ud558\uac70\ub098, \ud658\ubd88/\uad50\ud658\ucc98\ub7fc \uc815\ucc45 \ud310\ub2e8\uc774 \ud544\uc694\ud558\uac70\ub098, \uac10\uc815\uc801 \ucef4\ud50c\ub808\uc778\uc774 \ud3ec\ud568\ub41c \ubb38\uc758\n\n[\ucd9c\ub825 \ud615\uc2dd]\n{\n \"category\": \"\uc81c\ud488\ubb38\uc758 | \ubc30\uc1a1\ubb38\uc758 | \ud658\ubd88\uc694\uccad | \uae30\ud0c0\",\n \"complexity\": \"\ub2e8\uc21c\ubb38\uc758 | \ud655\uc778\ud544\uc694\",\n \"reason\": \"\ud310\ub2e8 \uadfc\uac70 \ud55c \uc904 \uc694\uc57d\"\n}\n\n\ucf54\ub4dc\ube14\ub85d\uc774\ub098 \uc124\uba85 \uc5c6\uc774 \uc21c\uc218 JSON \uac1d\uccb4\ub9cc \ucd9c\ub825\ud558\uc138\uc694."
},
{
"type": "text",
"role": "user",
"content": "=\uace0\uac1d\uba85: {{ $json[\"\uace0\uac1d\uba85\"] }}\n\uc774\uba54\uc77c: {{ $json[\"\uc774\uba54\uc77c\"] }}\n\ubb38\uc758 \ub0b4\uc6a9:\n---\n{{ $json[\"\ubb38\uc758\ub0b4\uc6a9\"] }}\n---\n\n\uc704 \ubb38\uc758\ub97c \ubd84\ub958\ud574\uc8fc\uc138\uc694."
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "const items = $input.all();\nconst triggerItems = $('On New Inquiry Row').all();\n\nreturn items.map((item, i) => {\n const g = item.json;\n const triggerItem = triggerItems[i]?.json ?? {};\n\n let raw = '';\n if (g.output?.[0]?.content?.[0]?.text) raw = g.output[0].content[0].text;\n else if (typeof g.content === 'string') raw = g.content;\n else if (g.message && typeof g.message.content === 'string') raw = g.message.content;\n else if (g.choices?.[0]?.message?.content) raw = g.choices[0].message.content;\n else if (typeof g.text === 'string') raw = g.text;\n else if (g.response?.candidates?.[0]?.content?.parts?.[0]?.text) raw = g.response.candidates[0].content.parts[0].text;\n\n raw = String(raw).trim()\n .replace(/^```json\\s*/i, '')\n .replace(/^```\\s*/i, '')\n .replace(/```$/, '')\n .trim();\n\n let parsed = { category: '\uae30\ud0c0', complexity: '\ud655\uc778\ud544\uc694', reason: 'JSON \ud30c\uc2f1 \uc2e4\ud328 \u2014 \uc548\uc804 \uae30\ubcf8\uac12' };\n try { parsed = JSON.parse(raw); } catch (e) {}\n\n return {\n json: {\n category: parsed.category,\n complexity: parsed.complexity,\n reason: parsed.reason,\n customerName: triggerItem['\uace0\uac1d\uba85'],\n customerEmail: triggerItem['\uc774\uba54\uc77c'],\n inquiry: triggerItem['\ubb38\uc758\ub0b4\uc6a9'],\n timestamp: triggerItem['\uc811\uc218\uc77c\uc2dc']\n }\n };\n});"
},
"id": "parse-classification",
"name": "Parse Classification",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
720,
400
]
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"combinator": "and",
"conditions": [
{
"id": "rule-simple",
"leftValue": "={{ $json.complexity }}",
"rightValue": "\ub2e8\uc21c\ubb38\uc758",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
]
},
"renameOutput": true,
"outputKey": "simple"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"combinator": "and",
"conditions": [
{
"id": "rule-manual",
"leftValue": "={{ $json.complexity }}",
"rightValue": "\ud655\uc778\ud544\uc694",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
]
},
"renameOutput": true,
"outputKey": "manual"
}
]
},
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "fallback"
}
},
"id": "route-by-complexity",
"name": "Route by Complexity",
"type": "n8n-nodes-base.switch",
"typeVersion": 3.4,
"position": [
960,
400
]
},
{
"id": "generate-auto-reply",
"name": "Generate Auto Reply",
"position": [
1120,
240
],
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 5000,
"onError": "continueErrorOutput",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 2.1,
"parameters": {
"resource": "text",
"operation": "response",
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"simplify": true,
"options": {},
"responses": {
"values": [
{
"type": "text",
"role": "system",
"content": "\ub2f9\uc2e0\uc740 \uace0\uac1d \uc751\ub300 \uc804\ubb38\uac00\uc785\ub2c8\ub2e4.\n\ub2e4\uc74c \uc6d0\uce59\uc5d0 \ub530\ub77c \uace0\uac1d \ubb38\uc758\uc5d0 \ub300\ud55c \uc774\uba54\uc77c \ub2f5\ubcc0\uc744 \ud55c\uad6d\uc5b4\ub85c \uc791\uc131\ud558\uc138\uc694.\n\n- \uc815\uc911\ud558\uace0 \uce5c\uadfc\ud55c \ud1a4\n- \ud575\uc2ec \ub2f5\ubcc0\uc744 \uba3c\uc800 \uc81c\uc2dc\ud558\uace0 \uadfc\uac70\ub294 \ub4a4\uc5d0 \uac04\ub7b5\ud788\n- \uc778\uc0ac\ub9d0, \ubcf8\ubb38, \ub9fa\uc74c\ub9d0 \uad6c\uc870\ub85c \uc791\uc131\n- 200~400\uc790 \uc774\ub0b4\n- \uac1c\uc778\uc815\ubcf4(\uc8fc\ubb38\ubc88\ud638, \uae08\uc561 \ub4f1) \uc784\uc758 \uc0dd\uc131 \uae08\uc9c0\n- \ucd94\uac00 \ud655\uc778\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 \"\ubb38\uc758 \uc8fc\uc2dc\uba74 \uc7ac\ud655\uc778 \ud6c4 \uc548\ub0b4\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4\" \ub77c\uace0 \uc548\ub0b4\n\n\uc774\uba54\uc77c \ubcf8\ubb38\ub9cc HTML \ub2e8\ub77d(<p>) \ud0dc\uadf8\ub85c \uac10\uc2f8 \ucd9c\ub825\ud558\uc138\uc694. \uc81c\ubaa9\uc774\ub098 \uc11c\ub450 \uc124\uba85\uc740 \ud3ec\ud568\ud558\uc9c0 \ub9c8\uc138\uc694."
},
{
"type": "text",
"role": "user",
"content": "=\uce74\ud14c\uace0\ub9ac: {{ $json.category }}\n\uace0\uac1d\uba85: {{ $json.customerName }}\n\ubb38\uc758 \ub0b4\uc6a9:\n{{ $json.inquiry }}\n\n\uc704 \ub0b4\uc6a9\uc5d0 \ub300\ud55c \ub2f5\ubcc0 \uc774\uba54\uc77c \ubcf8\ubb38\uc744 \uc791\uc131\ud574\uc8fc\uc138\uc694."
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"sendTo": "={{ $('Parse Classification').item.json.customerEmail }}",
"subject": "=[\uace0\uac1d\uc13c\ud130] {{ $('Parse Classification').item.json.category }} \ubb38\uc758\uc5d0 \ub300\ud55c \ub2f5\ubcc0",
"message": "={{ $json.output[0].content[0].text }}",
"options": {
"appendAttribution": false
},
"resource": "message",
"operation": "send"
},
"id": "send-customer-email",
"name": "Send Customer Email",
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.2,
"position": [
1440,
240
],
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 2000,
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"mode": "id",
"value": "1V6cIC3_5s3w6xq-ZjVZnEQ65rXXbTY56UwxNcoACFUQ"
},
"sheetName": {
"__rl": true,
"value": 650054400,
"mode": "list",
"cachedResultName": "\uace0\uac1d\ubb38\uc758_\ub85c\uadf8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1V6cIC3_5s3w6xq-ZjVZnEQ65rXXbTY56UwxNcoACFUQ/edit#gid=650054400"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"\uc811\uc218\uc77c\uc2dc": "={{ $('Parse Classification').item.json.timestamp }}",
"\uace0\uac1d\uba85": "={{ $('Parse Classification').item.json.customerName }}",
"\uc774\uba54\uc77c": "={{ $('Parse Classification').item.json.customerEmail }}",
"\ubb38\uc758\ub0b4\uc6a9": "={{ $('Parse Classification').item.json.inquiry }}",
"\uce74\ud14c\uace0\ub9ac": "={{ $('Parse Classification').item.json.category }}",
"\ubcf5\uc7a1\ub3c4": "={{ $('Parse Classification').item.json.complexity }}",
"\ucc98\ub9ac\ubc29\uc2dd": "\uc790\ub3d9\ubc1c\uc1a1"
},
"matchingColumns": [],
"schema": [
{
"id": "\uc811\uc218\uc77c\uc2dc",
"displayName": "\uc811\uc218\uc77c\uc2dc",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\uace0\uac1d\uba85",
"displayName": "\uace0\uac1d\uba85",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\uc774\uba54\uc77c",
"displayName": "\uc774\uba54\uc77c",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\ubb38\uc758\ub0b4\uc6a9",
"displayName": "\ubb38\uc758\ub0b4\uc6a9",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\uce74\ud14c\uace0\ub9ac",
"displayName": "\uce74\ud14c\uace0\ub9ac",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\ubcf5\uc7a1\ub3c4",
"displayName": "\ubcf5\uc7a1\ub3c4",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\ucc98\ub9ac\ubc29\uc2dd",
"displayName": "\ucc98\ub9ac\ubc29\uc2dd",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"id": "log-auto-sent",
"name": "Log Auto Sent",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
1680,
240
],
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"id": "generate-draft-reply",
"name": "Generate Draft Reply",
"position": [
1136,
560
],
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 5000,
"onError": "continueErrorOutput",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 2.1,
"parameters": {
"resource": "text",
"operation": "response",
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"simplify": true,
"options": {},
"responses": {
"values": [
{
"type": "text",
"role": "system",
"content": "\ub2f9\uc2e0\uc740 \uace0\uac1d \uc751\ub300 \uc804\ubb38\uac00\uc785\ub2c8\ub2e4.\n\ub2e4\uc74c \uc6d0\uce59\uc5d0 \ub530\ub77c \uace0\uac1d \ubb38\uc758\uc5d0 \ub300\ud55c \uc774\uba54\uc77c \ub2f5\ubcc0 \ucd08\uc548\uc744 \ud55c\uad6d\uc5b4\ub85c \uc791\uc131\ud558\uc138\uc694.\n\n- \uc815\uc911\ud558\uace0 \uce5c\uadfc\ud55c \ud1a4\n- \ud575\uc2ec \ub2f5\ubcc0\uc744 \uba3c\uc800 \uc81c\uc2dc\ud558\uace0 \uadfc\uac70\ub294 \ub4a4\uc5d0 \uac04\ub7b5\ud788\n- \uc778\uc0ac\ub9d0, \ubcf8\ubb38, \ub9fa\uc74c\ub9d0 \uad6c\uc870\ub85c \uc791\uc131\n- 200~400\uc790 \uc774\ub0b4\n- \uac1c\uc778\uc815\ubcf4(\uc8fc\ubb38\ubc88\ud638, \uae08\uc561 \ub4f1) \uc784\uc758 \uc0dd\uc131 \uae08\uc9c0\n- \ucd94\uac00 \ud655\uc778\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 \"\ubb38\uc758 \uc8fc\uc2dc\uba74 \uc7ac\ud655\uc778 \ud6c4 \uc548\ub0b4\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4\" \ub77c\uace0 \uc548\ub0b4\n\n\uc774\uba54\uc77c \ubcf8\ubb38\ub9cc HTML \ub2e8\ub77d(<p>) \ud0dc\uadf8\ub85c \uac10\uc2f8 \ucd9c\ub825\ud558\uc138\uc694. \uc81c\ubaa9\uc774\ub098 \uc11c\ub450 \uc124\uba85\uc740 \ud3ec\ud568\ud558\uc9c0 \ub9c8\uc138\uc694."
},
{
"type": "text",
"role": "user",
"content": "=\uce74\ud14c\uace0\ub9ac: {{ $json.category }}\n\uace0\uac1d\uba85: {{ $json.customerName }}\n\ubb38\uc758 \ub0b4\uc6a9:\n{{ $json.inquiry }}\n\n\uc704 \ub0b4\uc6a9\uc5d0 \ub300\ud55c \ub2f5\ubcc0 \uc774\uba54\uc77c \ubcf8\ubb38\uc744 \uc791\uc131\ud574\uc8fc\uc138\uc694. (\ub2f4\ub2f9\uc790\uac00 \uac80\ud1a0 \ud6c4 \uc218\uc815/\ubc1c\uc1a1 \uc608\uc815)"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"resource": "draft",
"subject": "=[\uac80\ud1a0 \ud544\uc694] {{ $('Parse Classification').item.json.category }} - {{ $('Parse Classification').item.json.customerName }}",
"emailType": "html",
"message": "={{ $json.output[0].content[0].text }}",
"options": {
"sendTo": "={{ $('Parse Classification').item.json.customerEmail }}"
}
},
"id": "create-gmail-draft",
"name": "Create Gmail Draft",
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.2,
"position": [
1440,
560
],
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 2000,
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"select": "channel",
"channelId": {
"__rl": true,
"mode": "name",
"value": "#customer-support"
},
"text": "=:bell: *\uc0c8 \ubb38\uc758\uac00 \ub3c4\ucc29\ud588\uc2b5\ub2c8\ub2e4. \ud655\uc778 \ud6c4 \ubc1c\uc1a1\ud574\uc8fc\uc138\uc694.*\n\n\u2022 *\uace0\uac1d\uba85*: {{ $('Parse Classification').item.json.customerName }}\n\u2022 *\uc774\uba54\uc77c*: {{ $('Parse Classification').item.json.customerEmail }}\n\u2022 *\uce74\ud14c\uace0\ub9ac*: {{ $('Parse Classification').item.json.category }}\n\u2022 *\ud310\ub2e8 \uadfc\uac70*: {{ $('Parse Classification').item.json.reason }}\n\n*\ubb38\uc758 \ub0b4\uc6a9*\n>>> {{ $('Parse Classification').item.json.inquiry }}\n\n*AI \ub2f5\ubcc0 \ucd08\uc548*\n```{{ $('Generate Draft Reply').item.json.output[0].content[0].text }}```\n\n:pencil: Gmail \ucd08\uc548 \uc5f4\uae30: https://mail.google.com/mail/u/0/#drafts/{{ $json.id }}",
"otherOptions": {
"mrkdwn": true
},
"resource": "message",
"operation": "post"
},
"id": "notify-customer-support",
"name": "Notify Customer Support",
"type": "n8n-nodes-base.slack",
"typeVersion": 2.4,
"position": [
1680,
560
],
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 2000,
"credentials": {
"slackApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"mode": "id",
"value": "1V6cIC3_5s3w6xq-ZjVZnEQ65rXXbTY56UwxNcoACFUQ"
},
"sheetName": {
"__rl": true,
"value": 650054400,
"mode": "list",
"cachedResultName": "\uace0\uac1d\ubb38\uc758_\ub85c\uadf8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1V6cIC3_5s3w6xq-ZjVZnEQ65rXXbTY56UwxNcoACFUQ/edit#gid=650054400"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"\uc811\uc218\uc77c\uc2dc": "={{ $('Parse Classification').item.json.timestamp }}",
"\uace0\uac1d\uba85": "={{ $('Parse Classification').item.json.customerName }}",
"\uc774\uba54\uc77c": "={{ $('Parse Classification').item.json.customerEmail }}",
"\ubb38\uc758\ub0b4\uc6a9": "={{ $('Parse Classification').item.json.inquiry }}",
"\uce74\ud14c\uace0\ub9ac": "={{ $('Parse Classification').item.json.category }}",
"\ubcf5\uc7a1\ub3c4": "={{ $('Parse Classification').item.json.complexity }}",
"\ucc98\ub9ac\ubc29\uc2dd": "\uc218\ub3d9\ud655\uc778"
},
"matchingColumns": [],
"schema": [
{
"id": "\uc811\uc218\uc77c\uc2dc",
"displayName": "\uc811\uc218\uc77c\uc2dc",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\uace0\uac1d\uba85",
"displayName": "\uace0\uac1d\uba85",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\uc774\uba54\uc77c",
"displayName": "\uc774\uba54\uc77c",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\ubb38\uc758\ub0b4\uc6a9",
"displayName": "\ubb38\uc758\ub0b4\uc6a9",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\uce74\ud14c\uace0\ub9ac",
"displayName": "\uce74\ud14c\uace0\ub9ac",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\ubcf5\uc7a1\ub3c4",
"displayName": "\ubcf5\uc7a1\ub3c4",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "\ucc98\ub9ac\ubc29\uc2dd",
"displayName": "\ucc98\ub9ac\ubc29\uc2dd",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"id": "log-manual-review",
"name": "Log Manual Review",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
1920,
560
],
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"select": "channel",
"channelId": {
"__rl": true,
"mode": "name",
"value": "#error-alert"
},
"text": "=:rotating_light: *\uace0\uac1d \ubb38\uc758 \uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc2e4\ud328*\n\n\u2022 *\uc5d0\ub7ec \uba54\uc2dc\uc9c0*: {{ $json.error || ($json.error && $json.error.message) || $json.message || '\ub0b4\uc6a9 \uc5c6\uc74c' }}\n\u2022 *\uace0\uac1d\uba85*: {{ $('On New Inquiry Row').item.json['\uace0\uac1d\uba85'] || $json.customerName || 'unknown' }}\n\u2022 *\uc774\uba54\uc77c*: {{ $('On New Inquiry Row').item.json['\uc774\uba54\uc77c'] || $json.customerEmail || 'unknown' }}\n\u2022 *\ubb38\uc758\ub0b4\uc6a9*: {{ $('On New Inquiry Row').item.json['\ubb38\uc758\ub0b4\uc6a9'] || $json.inquiry || 'unknown' }}\n\u2022 *\uce74\ud14c\uace0\ub9ac*: {{ $json.category || 'N/A' }}\n\u2022 *\ubcf5\uc7a1\ub3c4*: {{ $json.complexity || 'N/A' }}\n\u2022 *\uc2e4\ud589 ID*: {{ $execution.id }}\n\u2022 *Execution URL*: {{ $execution.resumeUrl || $execution.url }}\n\n\ub2f4\ub2f9\uc790 \uc218\ub3d9 \ud655\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.",
"otherOptions": {
"mrkdwn": true
},
"resource": "message",
"operation": "post"
},
"id": "alert-error-slack",
"name": "Alert Error Slack",
"type": "n8n-nodes-base.slack",
"typeVersion": 2.4,
"position": [
720,
720
],
"credentials": {
"slackApi": {
"name": "<your credential>"
}
}
}
],
"connections": {
"On New Inquiry Row": {
"main": [
[
{
"node": "Classify Inquiry",
"type": "main",
"index": 0
}
]
]
},
"Classify Inquiry": {
"main": [
[
{
"node": "Parse Classification",
"type": "main",
"index": 0
}
],
[
{
"node": "Alert Error Slack",
"type": "main",
"index": 0
}
]
]
},
"Parse Classification": {
"main": [
[
{
"node": "Route by Complexity",
"type": "main",
"index": 0
}
]
]
},
"Route by Complexity": {
"main": [
[
{
"node": "Generate Auto Reply",
"type": "main",
"index": 0
}
],
[
{
"node": "Generate Draft Reply",
"type": "main",
"index": 0
}
]
]
},
"Generate Auto Reply": {
"main": [
[
{
"node": "Send Customer Email",
"type": "main",
"index": 0
}
],
[
{
"node": "Alert Error Slack",
"type": "main",
"index": 0
}
]
]
},
"Send Customer Email": {
"main": [
[
{
"node": "Log Auto Sent",
"type": "main",
"index": 0
}
]
]
},
"Generate Draft Reply": {
"main": [
[
{
"node": "Create Gmail Draft",
"type": "main",
"index": 0
}
],
[
{
"node": "Alert Error Slack",
"type": "main",
"index": 0
}
]
]
},
"Create Gmail Draft": {
"main": [
[
{
"node": "Notify Customer Support",
"type": "main",
"index": 0
}
]
]
},
"Notify Customer Support": {
"main": [
[
{
"node": "Log Manual Review",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1",
"timezone": "Asia/Seoul",
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all",
"saveManualExecutions": true,
"callerPolicy": "workflowsFromSameOwner",
"availableInMCP": false,
"binaryMode": "separate"
}
}
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.
gmailOAuth2googleSheetsOAuth2ApigoogleSheetsTriggerOAuth2ApiopenAiApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Workflow-Ver1. Uses googleSheetsTrigger, openAi, gmail, googleSheets. Event-driven trigger; 12 nodes.
Source: https://github.com/withwooyong/n8n-with-ai/blob/4c60e3912dd623fc01626407d052fe052328382e/workflow-ver1.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.
Consultants, agencies, freelancers, and professional service firms who need to create customized proposals and contracts quickly and efficiently.
This template triggers when a new row appears in Google Sheets (from any intake form that writes to the sheet). It validates key fields, performs light deduplication by email or phone, and sends the d
Complete AI-powered sales system Automates lead capture, qualification, and follow-up from multiple channels. AI INTELLIGENCE:
Imagine a relentless, intelligent sales assistant working for you 24/7. That's exactly what this system is. It takes the grueling, manual work of outreach and transforms it into a precision-guided, au
An n8n-based automation that generates client proposals from a form, lets you review everything in one place, and sends the proposal only when you approve it.