8
n8n 한국어amn8n.com

세일즈 담당자 성과 추적기

고급

이것은CRM, Multimodal AI분야의자동화 워크플로우로, 21개의 노드를 포함합니다.주로 If, Code, Slack, Notion, HighLevel 등의 노드를 사용하며. HighLevel CRM, GPT-4o, Notion 및 Slack 기반 자동화된 영업 리더보드

사전 요구사항
  • Slack Bot Token 또는 Webhook URL
  • Notion API Key
  • Google Sheets API 인증 정보
  • OpenAI API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "10DIaOOdZ9QBUom9",
  "meta": {
    "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
    "templateCredsSetupCompleted": true
  },
  "name": "Sales Rep Performance Tracker",
  "tags": [],
  "nodes": [
    {
      "id": "e4b514d1-ceed-4308-bf24-a94abc9a01fc",
      "name": "워크플로 실행 시",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -736,
        -128
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "78510025-3729-4ff7-8349-a26ef82e1db1",
      "name": "메모지",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        -688
      ],
      "parameters": {
        "height": 528,
        "content": "## 📦 Fetch All Deals from HighLevel CRM\n**Action:**  \n- Retrieves all opportunities (deals) from the connected HighLevel CRM.  \n\n**Description:**  \n- Uses `getAll` operation to pull unlimited deal records.  \n- Captures key fields for performance tracking:  \n  - Deal name, stage, assigned rep, value, client/company name, and update date.  \n- Provides the raw dataset for later data cleaning and aggregation.  \n- Ensures every deal is included for accurate sales metrics.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b92239c9-9f54-4efc-9e9c-874bf8f66759",
      "name": "메모지1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -256,
        32
      ],
      "parameters": {
        "height": 384,
        "content": "## 🔍 Validate Deal Fetch Success (IF Node)\n**Action:**  \nChecks if the fetched deal records contain valid IDs.  \n\n**Description:**  \nActs as a validation gate to ensure data integrity.  \nIf `deal_id` is present → continue to processing.  \nIf missing or empty → trigger the error logging branch.  \nPrevents downstream errors by stopping invalid data early.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5e0496ef-bb97-44fa-8df4-ed773f3e7eb9",
      "name": "메모지2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        496
      ],
      "parameters": {
        "height": 448,
        "content": "## 🚨 Log Fetch or Validation Errors (Error Handling Node)\n**Action:**  \nAppends failed records or errors into a Google Sheets error log.  \n\n**Description:**  \nLogs all failed deal records for manual review or debugging.  \nEach log includes `error_id` and `error` details for traceability.  \nProvides a centralized view of all CRM fetch or data validation issues.  \nHelps maintain clean and reliable automation flow.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8f2b9f85-8750-4d8b-bba2-cb240a4954fe",
      "name": "메모지3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        400
      ],
      "parameters": {
        "height": 432,
        "content": "## 🧠 GPT-4o Model Configuration\n**Action:**  \n- Configures GPT-4o (Azure OpenAI) model for language generation.  \n\n**Description:**  \n- Defines system role for generating short, friendly, motivational messages.  \n- Ensures tone consistency and optimized token usage.  \n- Connects to downstream LangChain AI Agent node for contextual outputs.  \n- Enables scalable and automated message generation via OpenAI.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "db313017-c7f5-4671-b994-c56e75d006ae",
      "name": "메모지4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        -912
      ],
      "parameters": {
        "height": 544,
        "content": "## 🧾 Generate Notion Performance Dashboard\n**Action:**  \n- Creates a personalized performance page for each rep in Notion.  \n\n**Description:**  \n- Generates a Notion page titled “{rep_id} - Sales Rep Performance Tracker”.  \n- Includes performance stats, motivational summary, and leaderboard context:  \n  - Total deals, total value, deals won, average value.  \n- Explains business value: transparent visibility → healthy competition.  \n- Refreshes daily for up-to-date tracking and motivation.  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "08277d6f-c97f-46dd-ace1-8dc01a2ef297",
      "name": "메모지5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        176
      ],
      "parameters": {
        "height": 416,
        "content": "## ⚙️ Transform Data for AI Input\n**Action:**  \n- Prepares formatted JSON data for AI-based Slack message generation.  \n\n**Description:**  \n- Collects summarized data per rep and flattens it for GPT input.  \n- Returns each record as an individual AI-friendly item.  \n- Ensures smooth handoff to GPT node for text generation.  \n- Critical for maintaining consistency between stats and motivational messages.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9518f7ae-ea95-44e1-af79-291151d1124a",
      "name": "메모지6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1168,
        -624
      ],
      "parameters": {
        "height": 544,
        "content": "## 🤖 AI-Generated Motivational Slack Messages\n**Action:**  \n- Uses GPT-4o via LangChain to create custom Slack messages per rep.  \n\n**Description:**  \n- Takes summarized performance data and crafts 2–3 line motivational blurbs.  \n- Includes emojis 🎯🔥💪 for energy and tone.  \n- Mentions rep_id and highlights achievements positively.  \n- Keeps output concise for Slack readability.  \n- Human-like, encouraging messages improve team morale and competition.  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "e052b33a-3d29-4eb1-aa8a-f497c121d9d1",
      "name": "메모지7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1472,
        192
      ],
      "parameters": {
        "height": 464,
        "content": "## 💬 Notify Sales Team in Slack\n**Action:**  \n- Sends AI-generated motivational summaries to the Slack channel or user.  \n\n**Description:**  \n- Posts formatted messages directly in Slack via Slack API.  \n- Targets specific user or sales channel for transparency.  \n- Reinforces accountability and recognition.  \n- Builds engagement and team motivation with daily leaderboard updates.  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "6956ad52-fc95-43b7-8194-fd952b56aea9",
      "name": "HighLevel CRM에서 모든 거래 가져오기",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        -464,
        -128
      ],
      "parameters": {
        "filters": {},
        "resource": "opportunity",
        "operation": "getAll",
        "requestOptions": {}
      },
      "credentials": {
        "highLevelOAuth2Api": {
          "id": "5QWHSi134dLIBEsC",
          "name": "HighLevel account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "bad87d8a-9bf2-4194-995f-2619a222975f",
      "name": "거래 조회 성공 검증",
      "type": "n8n-nodes-base.if",
      "position": [
        -192,
        -128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e2adb005-2b3c-4d1e-8445-442df1fe925a",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "8c390668-b627-4943-8d4a-adc0c6f84cd9",
      "name": "조회 또는 검증 오류 기록",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        128,
        320
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "error_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "error_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "error",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "error",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "error_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1338537721,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit#gid=1338537721",
          "cachedResultName": "error log sheet"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Uldk_4BxWbdZTDZxFUeohIfeBmGHHqVEl9Ogb0l6R8Y/edit?usp=drivesdk",
          "cachedResultName": "Interviewer Brief Pack "
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "kpPEOLCGn963qpoh",
          "name": "automations@techdome.ai"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "616feb11-a8c0-4955-9202-ed1a12e34208",
      "name": "메모지8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        -704
      ],
      "parameters": {
        "height": 544,
        "content": "## 🧹 Clean & Structure Deal Data\n**Action:**  \n- Transforms raw CRM data into clean, structured records.  \n\n**Description:**  \n- Extracts and normalizes key fields into a consistent schema:  \n  - Deal ID, Rep ID, Client Name, Status, Stage ID, Value, Updated At.  \n- Removes nulls and handles missing data (e.g., “Unassigned”, “Unknown”).  \n- Prepares the dataset for further analysis and grouping by rep.  \n- Simplifies the JSON format for easy downstream processing.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c205c167-2333-43a9-a80b-43ebd068559d",
      "name": "메모지9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        304,
        -672
      ],
      "parameters": {
        "height": 512,
        "content": "## 📊 Summarize Sales by Representative\n**Action:**  \n- Aggregates deal-level data into performance summaries per sales rep.  \n\n**Description:**  \n- Groups deals by `rep_id` and computes:  \n  - Total deals handled  \n  - Total deal value  \n  - Total won deals  \n  - Average deal value per rep  \n- Provides a summarized dataset for leaderboard and performance visualization.  \n- Enables tracking of who’s closing deals effectively and who needs support.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "eda6d196-9842-46f0-b077-31ab9ccd40fd",
      "name": "거래 데이터 정리 및 구조화",
      "type": "n8n-nodes-base.code",
      "position": [
        128,
        -128
      ],
      "parameters": {
        "jsCode": "const deals = $input.all().map(i => i.json);\n\nconst cleaned = deals.map(d => ({\n  deal_id: d.id,\n  deal_name: d.name,\n  rep_id: d.assignedTo || \"Unassigned\",\n  status: d.status,\n  stage_id: d.pipelineStageId,\n  value: d.monetaryValue || 0,\n  client_name: d.relations?.[0]?.contactName || \"Unknown\",\n  company_name: d.relations?.[0]?.companyName || \"\",\n  updated_at: d.updatedAt\n}));\n\nreturn cleaned.map(c => ({ json: c }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "de0e86ce-8d99-40bb-8e9a-a25773785f72",
      "name": "담당자별 판매 실적 요약",
      "type": "n8n-nodes-base.code",
      "position": [
        368,
        -128
      ],
      "parameters": {
        "jsCode": "const deals = $input.all().map(i => i.json);\n\n// Object to hold totals per rep\nconst summary = {};\n\nfor (const d of deals) {\n  const rep = d.rep_id || \"Unassigned\";\n  if (!summary[rep]) {\n    summary[rep] = {\n      rep_id: rep,\n      total_deals: 0,\n      total_value: 0,\n      won_deals: 0,\n    };\n  }\n\n  summary[rep].total_deals += 1;\n  summary[rep].total_value += d.value || 0;\n\n  // If your GHL marks won deals as 'won' or similar\n  if (d.status && d.status.toLowerCase().includes(\"won\")) {\n    summary[rep].won_deals += 1;\n  }\n}\n\n// Convert to array for output\nreturn Object.values(summary).map(rep => ({\n  json: {\n    rep_id: rep.rep_id,\n    total_deals: rep.total_deals,\n    total_value: rep.total_value,\n    won_deals: rep.won_deals,\n    avg_value: rep.total_value / rep.total_deals,\n  },\n}));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "4014211b-b50d-46d2-a0dc-dba3e3bb7766",
      "name": "Notion 성과 대시보드 생성",
      "type": "n8n-nodes-base.notion",
      "position": [
        752,
        -336
      ],
      "parameters": {
        "title": "={{ $json[\"rep_id\"] }} - Sales Rep Performance Tracker\n",
        "pageId": {
          "__rl": true,
          "mode": "id",
          "value": "265802b91fa080f69fffd0fc1daffe3d"
        },
        "simple": false,
        "blockUi": {
          "blockValues": [
            {
              "text": {
                "text": [
                  {
                    "text": "={{ $json[\"rep_id\"] }} - Sales Rep Performance Tracker\n",
                    "annotationUi": {}
                  }
                ]
              },
              "type": "heading_1",
              "richText": true
            },
            {
              "textContent": "=👋 Hello {{$json[\"rep_id\"]}}, here’s your latest performance update! 🎉  \n\n**Sales Rep Performance Tracker**  \n🔎 **Problem:** No visibility into which rep is actually performing well.  \n✅ **Solution:** Track your daily performance, updated every midnight.\n\nHere’s your performance summary for today:  \n- 📊 **Total Deals:** {{$json[\"total_deals\"]}}  \n- 💰 **Total Value:** {{$json[\"total_value\"]}}  \n- 🏆 **Deals Won:** {{$json[\"won_deals\"]}}  \n- 📈 **Average Deal Value:** {{$json[\"avg_value\"]}}\n\n📅 **Next Update:** The leaderboard will be refreshed every day at midnight to show your ranking alongside your peers.  \n\n**Value:** Transparent performance insights → healthy competition → better accountability.  \n\nKeep up the great work and aim for the top! 🚀  \nStatus: *Ongoing* |"
            }
          ]
        },
        "options": {}
      },
      "credentials": {
        "notionApi": {
          "id": "iDjtgSTYG9ECVBtT",
          "name": "Notion account 2"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4c6b43f1-6397-46df-b4e2-880fb400dcb9",
      "name": "AI 입력용 데이터 변환",
      "type": "n8n-nodes-base.code",
      "position": [
        704,
        0
      ],
      "parameters": {
        "jsCode": "// Collect all incoming data\nconst allData = items.map(item => item.json);\n\n// Transform and flatten the structure\nconst formattedData = allData.map(item => ({\n  rep_id: item.rep_id,\n  total_deals: item.total_deals,\n  total_value: item.total_value,\n  won_deals: item.won_deals,\n  avg_value: item.avg_value\n}));\n\n// Return each record as a separate item (AI node-friendly)\nreturn formattedData.map(data => ({ json: data }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "891ba41f-f222-4a41-b557-14808b3fabc4",
      "name": "GPT-4o 모델 구성",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        1072,
        224
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "id": "C3WzT18XqF8OdVM6",
          "name": "Azure Open AI account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e676ef5c-e9f9-4b2b-b6b7-8a52b8b91179",
      "name": "AI 생성 동기 부여 Slack 메시지",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1088,
        0
      ],
      "parameters": {
        "text": "=Generate a motivational Slack message for the following sales reps based on their performance data:\n\n{{JSON.stringify($json)}}\n\nFormat it like this:\n- Use emojis 🎯🔥💪 for motivation\n- Mention each rep_id and highlight their performance briefly\n- Keep it under 2–3 lines per rep\n",
        "options": {
          "systemMessage": "=You are a motivational message generator for a sales team. \nYou will receive sales rep data including total deals, total value, won deals, and average deal value.\nUse this data to create short, positive, and personalized motivational messages suitable for posting in Slack. \nKeep it friendly, energetic, and relevant to the rep’s performance.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "45ff779d-dc4e-4a83-bcfc-5197aecdc91f",
      "name": "Slack에서 세일즈 팀에 알림",
      "type": "n8n-nodes-base.slack",
      "position": [
        1520,
        0
      ],
      "webhookId": "ddaa7632-9e35-4bd3-82d6-572d5cae84cc",
      "parameters": {
        "text": "={{ $json.output }}",
        "user": {
          "__rl": true,
          "mode": "list",
          "value": "U09HMPVD466",
          "cachedResultName": "newscctv22"
        },
        "select": "user",
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "id": "rNqvWj9TfChPVRYY",
          "name": "Slack account vivek"
        }
      },
      "typeVersion": 2.3
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d7102749-1f49-4575-a6cc-b80eb1664bbe",
  "connections": {
    "891ba41f-f222-4a41-b557-14808b3fabc4": {
      "ai_languageModel": [
        [
          {
            "node": "e676ef5c-e9f9-4b2b-b6b7-8a52b8b91179",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "eda6d196-9842-46f0-b077-31ab9ccd40fd": {
      "main": [
        [
          {
            "node": "de0e86ce-8d99-40bb-8e9a-a25773785f72",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4c6b43f1-6397-46df-b4e2-880fb400dcb9": {
      "main": [
        [
          {
            "node": "e676ef5c-e9f9-4b2b-b6b7-8a52b8b91179",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bad87d8a-9bf2-4194-995f-2619a222975f": {
      "main": [
        [
          {
            "node": "eda6d196-9842-46f0-b077-31ab9ccd40fd",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "8c390668-b627-4943-8d4a-adc0c6f84cd9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "de0e86ce-8d99-40bb-8e9a-a25773785f72": {
      "main": [
        [
          {
            "node": "4014211b-b50d-46d2-a0dc-dba3e3bb7766",
            "type": "main",
            "index": 0
          },
          {
            "node": "4c6b43f1-6397-46df-b4e2-880fb400dcb9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6956ad52-fc95-43b7-8194-fd952b56aea9": {
      "main": [
        [
          {
            "node": "bad87d8a-9bf2-4194-995f-2619a222975f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e4b514d1-ceed-4308-bf24-a94abc9a01fc": {
      "main": [
        [
          {
            "node": "6956ad52-fc95-43b7-8194-fd952b56aea9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e676ef5c-e9f9-4b2b-b6b7-8a52b8b91179": {
      "main": [
        [
          {
            "node": "45ff779d-dc4e-4a83-bcfc-5197aecdc91f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

고급 - 고객관계관리, 멀티모달 AI

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수21
카테고리2
노드 유형10
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

저자
Rahul Joshi

Rahul Joshi

@rahul08

Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34