每周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": "每周 Slack 销售报告(Airtable 版)",
"tags": [],
"nodes": [
{
"id": "2488c731-3008-4f49-b7a6-e7ef45007927",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-496,
-272
],
"parameters": {
"width": 448,
"height": 672,
"content": "## 📩 每周 Slack 销售报告自动化"
},
"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": "工作流分解"
},
"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": "## 搜索未结交易"
},
"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": "## 搜索已赢交易"
},
"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": "## 发送 Slack 消息"
},
"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": "## 处理与格式化指标"
},
"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": "## 计划触发器"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "268480a9-a2d7-414d-8efc-d0c716dbbfdb",
"connections": {
"Merge Deals": {
"main": [
[
{
"node": "Slack Message Summary",
"type": "main",
"index": 0
}
]
]
},
"Advanced Metrics": {
"main": [
[
{
"node": "Slack Message",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Search Open Deals",
"type": "main",
"index": 0
},
{
"node": "Search Won Deals",
"type": "main",
"index": 0
}
]
]
},
"Search Won Deals": {
"main": [
[
{
"node": "Merge Deals",
"type": "main",
"index": 1
}
]
]
},
"Search Open Deals": {
"main": [
[
{
"node": "Merge Deals",
"type": "main",
"index": 0
}
]
]
},
"Slack Message Summary": {
"main": [
[
{
"node": "Advanced Metrics",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
中级 - 客户关系管理
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
001_面向Slack的AI驱动新闻洞察工作流
使用NewsAPI和GPT-4洞察的每日商业新闻简报发送到Slack
Set
Code
Merge
+5
17 节点James Carter
市场调研
从 GoHighLevel 自动发送客户续约提醒到 Gmail 和 Slack
从GoHighLevel自动发送客户续约提醒到Gmail、Slack和Google Sheets
If
Code
Gmail
+7
19 节点Rahul Joshi
客户关系管理
使用OpenAI、Ahrefs和多平台集成的自动化内容营销智能
使用OpenAI、Ahrefs和多平台集成的自动化内容营销智能
If
Set
Code
+8
21 节点Nikan Noorafkan
市场调研
使用 AI 创建 LinkedIn 贡献并在 Slack 上通知用户
使用 AI 创建 LinkedIn 贡献并在 Slack 上通知用户
Set
Code
Html
+11
33 节点Darryn
人工智能
使用AI监控股市:新闻分析与多渠道警报
使用AI监控股市:新闻分析与通过Slack和Telegram的多渠道警报
Code
Merge
Slack
+8
31 节点Daniel Shashko
工单管理
从GoHighLevel自动清理非活跃交易到Slack和Sheets
将GoHighLevel中的非活跃交易自动清理至Slack和Sheets
Code
Slack
Filter
+4
15 节点Rahul Joshi
客户关系管理
工作流信息
难度等级
中级
节点数量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 查看 →
分享此工作流