매주 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)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
001_Slack을 위한 AI 추동 뉴스 통찰력 작업 흐름
NewsAPI와 GPT-4 인사이트를 사용한 일일 비즈니스 뉴스 요약을 Slack으로 발송
Set
Code
Merge
+
Set
Code
Merge
17 노드James Carter
시장 조사
GoHighLevel에서 Gmail 및 Slack으로의 고객 갱신 알림 자동 발송
GoHighLevel에서 고객 갱신 알림을 Gmail, Slack, Google Sheets로 자동 발송
If
Code
Gmail
+
If
Code
Gmail
19 노드Rahul Joshi
고객관계관리
OpenAI, Ahrefs 및 다중 플랫폼 통합을 사용한 자동화된 콘텐츠 마케팅 인텔리전스
OpenAI, Ahrefs 및 다중 플랫폼 연동을 사용한 자동화된 콘텐츠 마케팅 인텔리전스
If
Set
Code
+
If
Set
Code
21 노드Nikan Noorafkan
시장 조사
AI를 사용하여 LinkedIn 기여 내용 생성하고 Slack에서 사용자에게 알림
AI를 통해 LinkedIn 기여 및 Slack에서 사용자 알림
Set
Code
Html
+
Set
Code
Html
33 노드Darryn
인공지능
GoHighLevel에서 비활성 거래를 Slack 및 Sheets로 자동 정리
GoHighLevel의 비활성 거래를 Slack 및 Sheets로 자동 정리
Code
Slack
Filter
+
Code
Slack
Filter
15 노드Rahul Joshi
고객관계관리
영업 파이프라인 자동화 대시보드
HubSpot CRM, ScrapeGraphAI 및 Google Sheets 대시보드를 사용한 영업 파이프라인 자동화
If
Code
Slack
+
If
Code
Slack
22 노드vinci-king-01
고객관계관리
워크플로우 정보
난이도
중급
노드 수14
카테고리1
노드 유형6
저자
James Carter
@arioloopAutomation engineer | 10+ years streamlining Sales & Marketing. Use my link to book an initial consultation for custom n8n work.
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유