8
n8n 한국어amn8n.com

매주 Slack 판매 보고서(Airtable 버전)

중급

이것은CRM분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 Code, Merge, Slack, Airtable, ScheduleTrigger 등의 노드를 사용하며. 사용하여 Airtable를 통해 Slack에 동적 판매 파이프라인 지표 생성

사전 요구사항
  • Slack Bot Token 또는 Webhook URL
  • Airtable API Key

카테고리

워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "53Zi0qKV30N2PZq9",
  "meta": {
    "instanceId": "e854ccd1d846d48f876ea4ce7613a148e39ed800c748cb59061b490defde7afd",
    "templateCredsSetupCompleted": true
  },
  "name": "Weekly Slack Sales Report (Airtable Edition)",
  "tags": [],
  "nodes": [
    {
      "id": "2488c731-3008-4f49-b7a6-e7ef45007927",
      "name": "메모지",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -272
      ],
      "parameters": {
        "width": 448,
        "height": 672,
        "content": "## 📩 Weekly Slack Sales Report Automation\n\nSends a weekly pipeline summary to Slack with real sales metrics like open deals, top deal, win rate, weighted pipeline, and total revenue closed.\n\n👤 Who It’s For\n\nSales managers, founders, and revenue teams who want automatic visibility into deal momentum without checking the CRM.\n\n⚙️ How to Set Up\n\t1.\tConnect Airtable and Slack accounts.\n\t2.\tDuplicate this workflow in n8n.\n\t3.\tSet Airtable table + Slack channel in the respective nodes.\n\t4.\tSchedule to run weekly (or trigger manually).\n\n✅ Requirements\n\t•\tAirtable sales pipeline table (with “Status” and “Value” fields)\n\t•\tSlack workspace with webhook or token access\n\t•\tn8n cloud or self-hosted instance\n\n🎨 How to Customize\n\t•\tChange the Slack formatting to match your brand voice\n\t•\tAdd fields like “Deal Owner” or “Close Date” if needed\n\t•\tModify weighting in Code node if your pipeline uses different stages\n\n**Need Help?**\n\nJoin the [Discord](https://discord.com/invite/XPKeKXeB7d) or ask in the [Forum](https://community.n8n.io/)."
      },
      "typeVersion": 1
    },
    {
      "id": "9cd0f108-3e28-4039-a8a3-b9bf37a28e53",
      "name": "메모지1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        -608
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 304,
        "content": "Workflow Breakdown\n\t1.\tSearch Airtable for deals marked “Won”\n\t2.\tSearch Airtable again for all other open deals\n\t3.\tMerge results into one array\n\t4.\tSplit & summarize in Code Node 1: format Slack message with open/won stats\n\t5.\tDeeper metrics in Code Node 2: weighted pipeline, total revenue\n\t6.\tSend final message to Slack"
      },
      "typeVersion": 1
    },
    {
      "id": "3d418639-c107-4ee7-b461-6a492f835c92",
      "name": "일정 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        144,
        112
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6a5fed72-ce8f-41bf-9f26-be81c5011394",
      "name": "진행 중 거래 검색",
      "type": "n8n-nodes-base.airtable",
      "position": [
        656,
        -80
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appGid2SnQKDjgdhy",
          "cachedResultUrl": "https://airtable.com/appGid2SnQKDjgdhy",
          "cachedResultName": "Airtable to Slack Weekly Report"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblQq0yUYA7dIZxUr",
          "cachedResultUrl": "https://airtable.com/appGid2SnQKDjgdhy/tblQq0yUYA7dIZxUr",
          "cachedResultName": "Deals"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "=OR(\n  {Status} = \"Qualified\",\n  {Status} = \"Proposal Sent\",\n  {Status} = \"Negotiation\"\n)"
      },
      "typeVersion": 2.1
    },
    {
      "id": "a52e60df-e378-40c0-be0a-c3512661b452",
      "name": "성사 거래 검색",
      "type": "n8n-nodes-base.airtable",
      "position": [
        656,
        432
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appGid2SnQKDjgdhy",
          "cachedResultUrl": "https://airtable.com/appGid2SnQKDjgdhy",
          "cachedResultName": "Airtable to Slack Weekly Report"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblQq0yUYA7dIZxUr",
          "cachedResultUrl": "https://airtable.com/appGid2SnQKDjgdhy/tblQq0yUYA7dIZxUr",
          "cachedResultName": "Deals"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "={Status} = \"Won\""
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "TYjnodYUe5IcQGV2",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "49091bc3-1815-407f-bb1e-79a3c0413171",
      "name": "거래 통합",
      "type": "n8n-nodes-base.merge",
      "position": [
        1088,
        112
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "179a3e43-8f0e-4f93-ad58-8f5a8f8b07db",
      "name": "Slack 메시지 요약",
      "type": "n8n-nodes-base.code",
      "position": [
        1296,
        112
      ],
      "parameters": {
        "jsCode": "// Split input: open deals and closed deals\nconst openDeals = items.filter(item => item.json['Status'] !== 'Won' && item.json['Status'] !== 'Lost');\nconst closedDeals = items.filter(item => item.json['Status'] === 'Won');\n\n// Metrics\nconst pipelineValue = openDeals.reduce((sum, d) => sum + Number(d.json['Value'] || 0), 0);\nconst topDeal = openDeals.sort((a, b) => b.json['Value'] - a.json['Value'])[0];\nconst winRate = closedDeals.length + openDeals.length > 0\n  ? (closedDeals.length / (closedDeals.length + openDeals.length)) * 100\n  : 0;\n\n// Format\nreturn [\n  {\n    json: {\n      openDeals,\n      closedDeals,\n      summary: `📊 *Weekly Pipeline Report*`,\n      value: `• Open Deals: *${openDeals.length}*  \n• Pipeline Value: *£${pipelineValue.toLocaleString()}*  \n• Top Deal: *${topDeal?.json['Deal Name']}* – £${topDeal?.json['Value']}  \n• Win Rate: *${winRate.toFixed(1)}%*`\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "7b1c11c7-43ea-4825-94f0-286c8e89a453",
      "name": "고급 지표",
      "type": "n8n-nodes-base.code",
      "position": [
        1504,
        112
      ],
      "parameters": {
        "jsCode": "const openDeals = items[0].json.openDeals;\nconst closedDeals = items[0].json.closedDeals;\n\n// Extract field helper\nconst getField = (record, field) => record.json?.[field] ?? null;\n\nconst totalPipeline = openDeals.reduce((sum, record) => {\n  return sum + (parseFloat(getField(record, 'Value')) || 0);\n}, 0);\n\nconst weightedPipeline = openDeals.reduce((sum, record) => {\n  const stage = getField(record, 'Stage');\n  const value = parseFloat(getField(record, 'Value')) || 0;\n\n  const stageWeights = {\n    'Qualified': 0.2,\n    'Proposal Sent': 0.4,\n    'Negotiation': 0.6,\n    'Won': 1,\n    'Lost': 0\n  };\n\n  const weight = stageWeights[stage] || 0.2;\n  return sum + (value * weight);\n}, 0);\n\nconst totalClosed = closedDeals.reduce((sum, record) => {\n  return sum + (parseFloat(getField(record, 'Value')) || 0);\n}, 0);\n\nconst winRate = openDeals.length + closedDeals.length > 0\n  ? ((closedDeals.length / (openDeals.length + closedDeals.length)) * 100).toFixed(1)\n  : 'N/A';\n\nreturn [\n  {\n    json: {\n      totalPipeline: `£${totalPipeline.toLocaleString()}`,\n      weightedPipeline: `£${weightedPipeline.toLocaleString()}`,\n      totalClosed: `£${totalClosed.toLocaleString()}`,\n      winRate: `${winRate}%`,\n      openDealsCount: openDeals.length,\n      closedDealsCount: closedDeals.length\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "a3740fd8-0e24-4581-a156-006ffe33b40b",
      "name": "Slack 메시지",
      "type": "n8n-nodes-base.slack",
      "position": [
        1904,
        112
      ],
      "webhookId": "8c2a1c87-c10d-4c14-b4c9-c31474da3b95",
      "parameters": {
        "text": "=📊 *Weekly Sales Report*  • 🧮 *Total Pipeline:* {{ $json.totalPipeline }} • ⚖️ *Weighted Pipeline:* {{ $json.weightedPipeline }} • 🏆 *Total Closed (All Time):* {{ $json.totalClosed }} • 📈 *Win Rate:* {{ $json.winRate }}  • 🔄 *Open Deals:* {{ $json.openDealsCount }} • ✅ *Closed Deals:* {{ $json.closedDealsCount }}  _This report was generated automatically using n8n._",
        "user": {
          "__rl": true,
          "mode": "list",
          "value": "U096VCG525P",
          "cachedResultName": "james"
        },
        "select": "user",
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "edcCpymx9IvKgibG",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "8349a72d-1430-42d3-adde-06a577cb9f3c",
      "name": "메모지3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        224
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Search Open Deals\n[Read more about Airtable node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/)\n\nThis node fetches all remaining records in the pipeline that are still active (i.e. any Status that isn’t “Won”). These open deals are used to compute total pipeline value, top open deal, and other forward-looking metrics.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9df9bf18-cc92-4711-b0a8-1b6c7bf94574",
      "name": "메모지4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Search Won Deals\n[Read more about the Airtable node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/)\n\nThis node queries the Airtable deal table for all records where Status is set to “Won”. It returns only the successfully closed deals so the report can calculate win rate and total closed revenue.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "593619f0-bd06-436c-9203-096a6eef52b5",
      "name": "메모지5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Send Slack Message\n[Read more about the Slack node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/)\n\nThis node takes the formatted message and posts it to the designated Slack channel. It uses the output from both code nodes to send a single message with all the key sales metrics, helping the team stay aligned on pipeline status.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0c21cce2-a383-424c-9018-9c04b37b3fd7",
      "name": "메모지6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 688,
        "height": 416,
        "content": "## Process & Format Metrics\n[Read more about the Code node](https://www.google.com/search?client=safari&rls=en&q=code+node+n8n&ie=UTF-8&oe=UTF-8)\n\n[Read more about the Merge node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/)\n\nMerges both datasets, splits open vs won deals, calculates total pipeline, weighted pipeline based on stage probabilities, top deal, closed revenue, and win rate, then formats everything into a clean message for Slack.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "aebcfa3e-9587-403e-b4f7-0e9c7088fbc5",
      "name": "메모지7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Schedule Trigger\n[Read more about Calendly Credentials](https://docs.n8n.io/integrations/builtin/credentials/calendly/)\n\nTriggers the workflow on a recurring schedule. You can set it to run as often as you like.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "268480a9-a2d7-414d-8efc-d0c716dbbfdb",
  "connections": {
    "49091bc3-1815-407f-bb1e-79a3c0413171": {
      "main": [
        [
          {
            "node": "179a3e43-8f0e-4f93-ad58-8f5a8f8b07db",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7b1c11c7-43ea-4825-94f0-286c8e89a453": {
      "main": [
        [
          {
            "node": "a3740fd8-0e24-4581-a156-006ffe33b40b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3d418639-c107-4ee7-b461-6a492f835c92": {
      "main": [
        [
          {
            "node": "6a5fed72-ce8f-41bf-9f26-be81c5011394",
            "type": "main",
            "index": 0
          },
          {
            "node": "a52e60df-e378-40c0-be0a-c3512661b452",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a52e60df-e378-40c0-be0a-c3512661b452": {
      "main": [
        [
          {
            "node": "49091bc3-1815-407f-bb1e-79a3c0413171",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "6a5fed72-ce8f-41bf-9f26-be81c5011394": {
      "main": [
        [
          {
            "node": "49091bc3-1815-407f-bb1e-79a3c0413171",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "179a3e43-8f0e-4f93-ad58-8f5a8f8b07db": {
      "main": [
        [
          {
            "node": "7b1c11c7-43ea-4825-94f0-286c8e89a453",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

중급 - 고객관계관리

유료인가요?

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

워크플로우 정보
난이도
중급
노드 수14
카테고리1
노드 유형6
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
James Carter

James Carter

@arioloop

Automation engineer | 10+ years streamlining Sales & Marketing. Use my link to book an initial consultation for custom n8n work.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34