GPT-4o-mini를 사용하여 Intercom 메시지를 분류하고 ClickUp 또는 Slack으로 전송
이것은AI Summarization, Multimodal AI분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 If, Code, Slack, ClickUp, Webhook 등의 노드를 사용하며. GPT-4o-mini를 사용하여 Intercom 메시지를 분류하고 ClickUp이나 Slack으로 전송
- •Slack Bot Token 또는 Webhook URL
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •OpenAI API Key
{
"meta": {
"instanceId": "EXAMPLE_INSTANCE_ID",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "c9ffdea8-c384-4ec1-ba34-f228c1ec6694",
"name": "📨 Intercom Webhook 트리거",
"type": "n8n-nodes-base.webhook",
"position": [
-1160,
160
],
"webhookId": "your-webhook-id-here",
"parameters": {
"path": "your-webhook-path-here",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1
},
{
"id": "74f38000-b249-404d-b430-7d864652d00f",
"name": "🧠 Classifier – AI prompt",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-920,
160
],
"parameters": {
"text": "You are an AI assistant designed to analyze customer conversations from Intercom. Your task is to classify each conversation into structured fields for workflow automation.\n\nConversation: {{ $json[\"data\"][\"item\"] }}\n\nBased on the provided conversation JSON, respond ONLY with a valid JSON object in the following format:\n\n{\n \"category\": \"<Support | Product | Sales | Other>\",\n \"sentiment\": \"<Positive | Neutral | Negative>\",\n \"urgency\": \"<High | Medium | Low>\",\n \"reasoning\": \"<Brief explanation of how you classified it>\",\n \"tags\": [\"tag1\", \"tag2\"]\n}\n\nGuidelines:\n- \"category\": Determine the main topic. Use:\n - \"Support\" for help requests, bugs, technical issues, etc.\n - \"Product\" for feature requests, feedback, or UX issues.\n - \"Sales\" for pricing, demo, onboarding, or enterprise inquiries.\n - \"Other\" if it doesn't fit above.\n- \"sentiment\": Analyze customer tone. Choose Positive, Neutral, or Negative.\n- \"urgency\": \n - High = frustrated users, urgent bug, blocked access.\n - Medium = requesting help soon, moderately concerned.\n - Low = casual inquiry, general feedback.\n- \"reasoning\": Explain how you decided on the classification.\n- \"tags\": Suggest 2–4 keywords as tags based on context (e.g., \"billing\", \"login\", \"onboarding\").\n\nOnly output valid JSON. Do NOT include explanations or extra text outside the JSON.",
"options": {},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "68ee4343-685a-4f13-b0a7-c57c271dafb0",
"name": "GPT model (GPT-4o-mini)",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-832,
380
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "YOUR_OPENAI_CREDENTIAL_ID",
"name": "OpenAI API Key"
}
},
"typeVersion": 1.2
},
{
"id": "146ebc31-9ffa-4ade-954a-51bd561236ea",
"name": "🧮 Process Classification",
"type": "n8n-nodes-base.code",
"position": [
-544,
160
],
"parameters": {
"jsCode": "// Parse the OpenAI response and structure the data\nconst aiResponse = $input.first().json.choices[0].message.content;\n\ntry {\n const classification = JSON.parse(aiResponse);\n \n // Extract original conversation data\n const conversationData = $('📨 Intercom Webhook').first().json.data.item;\n \n return {\n json: {\n // Classification results\n category: classification.category,\n sentiment: classification.sentiment,\n urgency: classification.urgency,\n reasoning: classification.reasoning,\n tags: classification.tags || [],\n \n // Original conversation data\n conversation_id: conversationData.id,\n subject: conversationData.conversation_parts.conversation_parts[0].subject || 'No Subject',\n message: conversationData.conversation_parts.conversation_parts[0].body,\n customer_name: conversationData.user.name,\n customer_email: conversationData.user.email,\n created_at: conversationData.created_at,\n \n // Formatted data for tasks\n task_title: `[${classification.category.toUpperCase()}] ${conversationData.conversation_parts.conversation_parts[0].subject || 'Support Request'}`,\n task_description: `**Customer:** ${conversationData.user.name} (${conversationData.user.email})\\n\\n**Original Message:**\\n${conversationData.conversation_parts.conversation_parts[0].body}\\n\\n**AI Classification:**\\n- Category: ${classification.category}\\n- Sentiment: ${classification.sentiment}\\n- Urgency: ${classification.urgency}\\n- Reasoning: ${classification.reasoning}\\n\\n**Conversation ID:** ${conversationData.id}`\n }\n };\n} catch (error) {\n throw new Error(`Failed to parse AI response: ${error.message}`);\n}"
},
"typeVersion": 2
},
{
"id": "9ef8a0da-aae3-4c64-96cb-24ef077b389f",
"name": "🛠️ Is Support Request?",
"type": "n8n-nodes-base.if",
"position": [
-324,
-40
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "support_condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.category }}",
"rightValue": "Support"
}
]
}
},
"typeVersion": 2
},
{
"id": "5f505600-5d12-4e51-8799-823951346b3b",
"name": "📦 Is Product Request?",
"type": "n8n-nodes-base.if",
"position": [
-324,
160
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "product_condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.category }}",
"rightValue": "Product"
}
]
}
},
"typeVersion": 2
},
{
"id": "9565f5e6-d9ba-428d-a737-bce1eb24ebc9",
"name": "💼 Is Sales Request?",
"type": "n8n-nodes-base.if",
"position": [
-324,
360
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "sales_condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.category }}",
"rightValue": "Sales"
}
]
}
},
"typeVersion": 2
},
{
"id": "a96be2e2-1e56-4ac6-a7e0-3815748277d0",
"name": "🧾 Create Support Task",
"type": "n8n-nodes-base.clickUp",
"position": [
-104,
-40
],
"parameters": {
"list": "YOUR_CLICKUP_LIST_ID",
"name": "={{ $json.task_title }}",
"team": "YOUR_CLICKUP_TEAM_ID",
"space": "YOUR_CLICKUP_SPACE_NAME",
"folder": "YOUR_CLICKUP_FOLDER_NAME",
"authentication": "oAuth2",
"additionalFields": {
"tags": "={{ $json.tags.join(', ') }}",
"status": "YOUR_STATUS_NAME",
"priority": "={{ $json.urgency }}",
"assignees": "YOUR_ASSIGNEE_ID"
}
},
"credentials": {
"clickUpOAuth2Api": {
"id": "YOUR_CLICKUP_CREDENTIAL_ID",
"name": "ClickUp OAuth2 API"
}
},
"typeVersion": 1
},
{
"id": "257d17bf-5f65-43d9-a4c5-09cdf06c4e17",
"name": "🛍️ Create Product Task",
"type": "n8n-nodes-base.clickUp",
"position": [
-104,
160
],
"parameters": {
"list": "YOUR_CLICKUP_LIST_ID",
"name": "={{ $json.task_title }}",
"team": "YOUR_CLICKUP_TEAM_ID",
"space": "YOUR_CLICKUP_SPACE_NAME",
"folder": "YOUR_CLICKUP_FOLDER_NAME",
"authentication": "oAuth2",
"additionalFields": {
"tags": "={{ $json.tags.join(', ') }}",
"status": "YOUR_STATUS_NAME",
"priority": "={{ $json.urgency }}",
"assignees": "YOUR_ASSIGNEE_ID"
}
},
"credentials": {
"clickUpOAuth2Api": {
"id": "YOUR_CLICKUP_CREDENTIAL_ID",
"name": "ClickUp OAuth2 API"
}
},
"typeVersion": 1
},
{
"id": "6ba00f81-e6af-45b5-86ba-875fec8e30b1",
"name": "📣 Slack – Notify Sales team",
"type": "n8n-nodes-base.slack",
"position": [
-104,
360
],
"webhookId": "your-slack-webhook-id",
"parameters": {
"text": "🚨 New Sales Inquiry Alert!\n\n**Customer:** {{ $json.customer_name }} ({{ $json.customer_email }})\n**Subject:** {{ $json.subject }}\n**Sentiment:** {{ $json.sentiment }}\n**Urgency:** {{ $json.urgency }}\n\n**Message:**\n{{ $json.message }}\n\n**AI Reasoning:** {{ $json.reasoning }}\n\n**Conversation ID:** {{ $json.conversation_id }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "YOUR_SLACK_CHANNEL_ID"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "YOUR_SLACK_CREDENTIAL_ID",
"name": "Slack API"
}
},
"typeVersion": 2.3
},
{
"id": "96a7c0c2-5b4c-4f13-aa55-d93de00e9401",
"name": "메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1300,
-180
],
"parameters": {
"color": 4,
"width": 320,
"height": 720,
"content": "## 📨 1. Webhook Intake\n\nPurpose:\n\n*Receives incoming conversation data from Intercom via a webhook (triggered on new messages).\n\nInput:\n\nFull conversation JSON\nCustomer name, email, and message content*"
},
"typeVersion": 1
},
{
"id": "4153b386-0f82-4da0-9d76-c52824ced79e",
"name": "메모1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-960,
-240
],
"parameters": {
"color": 6,
"width": 540,
"height": 780,
"content": "## 🤖 2. AI Classification Engine\n\nHow it works:\n\n*The conversation is sent to an AI model with a prompt to classify it.\n\nAI responds with a structured JSON containing:\ncategory: Support | Product | Sales | Other\nsentiment: Positive | Neutral | Negative\nurgency: High | Medium | Low\nreasoning: Explanation for classification\ntags: Relevant keywords\n\nA code node parses this AI output and merges it with user + conversation details to prepare for task creation or routing.*"
},
"typeVersion": 1
},
{
"id": "65b8eff5-9782-403a-b01e-8f72f698ad1e",
"name": "메모2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
-300
],
"parameters": {
"color": 5,
"height": 840,
"content": "## 🔀 3. Conditional Routing\n\nLogic:\n\n*Each path checks the category returned by the AI.\n\nBased on category, it routes the conversation to the appropriate action.*"
},
"typeVersion": 1
},
{
"id": "415d9545-aa7b-405b-9aa4-50a02e938602",
"name": "메모3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-140,
-400
],
"parameters": {
"color": 3,
"width": 260,
"height": 940,
"content": "## 📌 4. Action Handling 🧾 \n\n**🧾Support:**\n\nCreates a ClickUp task with title, description, priority, and tags.\n\n**📦 Product:**\nSame as Support – task created in ClickUp with relevant details.\n\n**📣 Sales:**\nSends a Slack message to the Sales team with AI's reasoning."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"📨 Intercom Webhook": {
"main": [
[
{
"node": "74f38000-b249-404d-b430-7d864652d00f",
"type": "main",
"index": 0
}
]
]
},
"9565f5e6-d9ba-428d-a737-bce1eb24ebc9": {
"main": [
[
{
"node": "6ba00f81-e6af-45b5-86ba-875fec8e30b1",
"type": "main",
"index": 0
}
]
]
},
"68ee4343-685a-4f13-b0a7-c57c271dafb0": {
"ai_languageModel": [
[
{
"node": "74f38000-b249-404d-b430-7d864652d00f",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"5f505600-5d12-4e51-8799-823951346b3b": {
"main": [
[
{
"node": "257d17bf-5f65-43d9-a4c5-09cdf06c4e17",
"type": "main",
"index": 0
}
]
]
},
"a96be2e2-1e56-4ac6-a7e0-3815748277d0": {
"main": [
[]
]
},
"9ef8a0da-aae3-4c64-96cb-24ef077b389f": {
"main": [
[
{
"node": "a96be2e2-1e56-4ac6-a7e0-3815748277d0",
"type": "main",
"index": 0
}
]
]
},
"146ebc31-9ffa-4ade-954a-51bd561236ea": {
"main": [
[
{
"node": "9ef8a0da-aae3-4c64-96cb-24ef077b389f",
"type": "main",
"index": 0
},
{
"node": "5f505600-5d12-4e51-8799-823951346b3b",
"type": "main",
"index": 0
},
{
"node": "9565f5e6-d9ba-428d-a737-bce1eb24ebc9",
"type": "main",
"index": 0
}
]
]
},
"74f38000-b249-404d-b430-7d864652d00f": {
"main": [
[
{
"node": "146ebc31-9ffa-4ade-954a-51bd561236ea",
"type": "main",
"index": 0
}
]
]
}
}
}이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - AI 요약, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Avkash Kakdiya
@itechnotion🚀 Founder of iTechNotion — we build custom AI-powered automation workflows for startups, agencies, and founders. 💡 Specializing in agentic AI systems, content automation, sales funnels, and digital workers. 🔧 14+ years in tech | Building scalable no-code/low-code solutions using n8n, OpenAI, and other API-first tools. 📬 Let’s automate what slows you down.
이 워크플로우 공유