8
n8n 中文网amn8n.com

发布说明转常见问题存根(Jira/ClickUp)

高级

这是一个Engineering, Multimodal AI领域的自动化工作流,包含 20 个节点。主要使用 If, Code, Gmail, Slack, Notion 等节点。 使用GPT-4o从ClickUp自动生成发布说明到Notion和Slack

前置要求
  • Google 账号和 Gmail API 凭证
  • Slack Bot Token 或 Webhook URL
  • Notion API Key
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "qIm89R0VoyFG5umx",
  "meta": {
    "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
    "templateCredsSetupCompleted": true
  },
  "name": "发布说明转常见问题存根(Jira/ClickUp):",
  "tags": [],
  "nodes": [
    {
      "id": "0a9f291a-fb5e-48d2-aef0-8b4cb3471228",
      "name": "配置 GPT-4o 模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        160,
        128
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "id": "C3WzT18XqF8OdVM6",
          "name": "Azure Open AI account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "296c2339-d34b-45b4-8c79-05a1ab1bb5e1",
      "name": "在 Google Sheets 中记录错误",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -288,
        544
      ],
      "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": "a754bf62-8af5-43d5-8210-a9d451828bfa",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 528,
        "height": 368,
        "content": "## ClickUp 触发器与验证"
      },
      "typeVersion": 1
    },
    {
      "id": "ae6259ca-a0d7-49c5-b33f-c122d087c856",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1664,
        -944
      ],
      "parameters": {
        "width": 576,
        "height": 576,
        "content": "## 工作原理"
      },
      "typeVersion": 1
    },
    {
      "id": "652ed9cf-0a37-4772-8b59-232706351ce2",
      "name": "ClickUp 任务状态触发器",
      "type": "n8n-nodes-base.clickUpTrigger",
      "position": [
        -944,
        -64
      ],
      "webhookId": "5e28e69f-9b57-48b6-a5b0-9150c156e111",
      "parameters": {
        "team": "9014872066",
        "events": [
          "taskStatusUpdated"
        ],
        "filters": {}
      },
      "credentials": {
        "clickUpApi": {
          "id": "kahuAqa6VKsSxhn1",
          "name": "ClickUp account 3"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f803efdb-39a1-44ad-bf1b-f93dbe68a29a",
      "name": "验证 ClickUp 载荷",
      "type": "n8n-nodes-base.if",
      "position": [
        -688,
        -64
      ],
      "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.task_id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "386b65fa-bf70-40ef-9a3b-00ca7e84d49d",
      "name": "从 ClickUp 获取任务详情",
      "type": "n8n-nodes-base.clickUp",
      "position": [
        -352,
        -80
      ],
      "parameters": {
        "id": "={{ $json.task_id }}",
        "operation": "get"
      },
      "credentials": {
        "clickUpApi": {
          "id": "kahuAqa6VKsSxhn1",
          "name": "ClickUp account 3"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9df1d658-7d5b-4ad9-a8c5-921cd84f0d7e",
      "name": "在 JavaScript 中解析任务详情",
      "type": "n8n-nodes-base.code",
      "position": [
        -112,
        -80
      ],
      "parameters": {
        "jsCode": "// Extract ClickUp task details safely\nconst task = $json;\n\n// Handle cases where arrays or fields might be empty\nconst assignee = (task.assignees && task.assignees.length > 0) ? task.assignees[0] : {};\nconst customFields = task.custom_fields || [];\n\n// Try to find the first field with a value (like a GitHub or docs link)\nconst linkField = customFields.find(f => f.value) || {};\n\nreturn [\n  {\n    json: {\n      title: task.name || \"Untitled Task\",\n      description: task.description || \"No description available.\",\n      status: task.status?.status || \"No status\",\n      priority: task.priority?.priority || \"Not set\",\n      due_date: task.due_date || \"No due date\",\n      assignee: assignee.username || \"Unassigned\",\n      email: assignee.email || \"No email\",\n      link: linkField.value || \"No link provided\",\n      url: task.url || \"No URL\",\n    },\n  },\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "0cea2e62-14b1-4b94-82f9-fad9d1039e42",
      "name": "生成发布说明常见问题(AI)",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        144,
        -80
      ],
      "parameters": {
        "text": "=Task Title: {{$json.title}}\nDescription: {{$json.description}}\nStatus: {{$json.status}}\nPriority: {{$json.priority}}\nDue Date: {{$json.due_date}}\nAssignee: {{$json.assignee}} ({{$json.email}})\nTask URL: {{$json.url}}\nReference Link: {{$json.link}}\n\nPlease create a brief FAQ in Markdown format using the 4 sections:\n1) What changed\n2) Why\n3) How to use\n4) Known issues\n",
        "options": {
          "systemMessage": "=You are a release notes editor. \nYour job is to turn technical task information into a clear, simple FAQ for users and internal teams. \nBe concise, non-marketing, and structured under these exact 4 sections:\n1) What changed\n2) Why\n3) How to use\n4) Known issues\n\nEach section should be 2–4 short bullet points.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "8928882c-2c88-43f3-9797-f6179f2bb841",
      "name": "将发布说明保存至 Notion",
      "type": "n8n-nodes-base.notion",
      "position": [
        544,
        -80
      ],
      "parameters": {
        "title": "={{ $('Parse Task Details in JavaScript').item.json.title }}",
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "29a802b9-1fa0-804a-b406-e078961e0659",
          "cachedResultUrl": "https://www.notion.so/29a802b91fa0804ab406e078961e0659",
          "cachedResultName": "Release Notes"
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Task URL|rich_text",
              "textContent": "={{ $('Parse Task Details in JavaScript').item.json.url }}"
            },
            {
              "key": "Status|rich_text",
              "textContent": "={{ $('Parse Task Details in JavaScript').item.json.status }}"
            },
            {
              "key": "Priority|rich_text",
              "textContent": "={{ $('Parse Task Details in JavaScript').item.json.priority }}"
            },
            {
              "key": "Owner|rich_text",
              "textContent": "={{ $('Parse Task Details in JavaScript').item.json.assignee }}"
            },
            {
              "key": "FAQ Content|rich_text",
              "textContent": "={{ $json.output }}"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "id": "iDjtgSTYG9ECVBtT",
          "name": "Notion account 2"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "63000865-c681-490a-8ce0-f8faf3c89e01",
      "name": "在 Slack 中发布公告",
      "type": "n8n-nodes-base.slack",
      "position": [
        1184,
        -80
      ],
      "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
    },
    {
      "id": "add680c8-a40a-489c-bc5f-34cac0a078a0",
      "name": "配置 GPT-4o 模型1",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        816,
        128
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "id": "C3WzT18XqF8OdVM6",
          "name": "Azure Open AI account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1d91b3cc-e61d-419d-a15e-8dfe2a9a4dd5",
      "name": "生成 Slack 发布公告(AI)",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        800,
        -80
      ],
      "parameters": {
        "text": "=Create a Slack release announcement message using this task information:\n\nTask Title:{{ $(' Fetch Task Details from ClickUp').item.json.name }}\nDescription: {{ $(' Fetch Task Details from ClickUp').item.json.description }}\nStatus: {{ $(' Fetch Task Details from ClickUp').item.json.status }}\nPriority:{{ $json.properties }}\nAssignee: {{ $(' Fetch Task Details from ClickUp').item.json.assignees[0].email }}\nTask URL: {{$json.url}}\n\nFormat it as a professional Slack message with emojis, proper formatting, and a clickable task link.",
        "options": {
          "systemMessage": "=You are a Slack message formatter for release announcements.\n\nYour job is to take ClickUp task information and create a visually appealing, professional Slack message.\n\nRequirements:\n1. Use Slack markdown formatting (bold with *, italics with _, code blocks with ```)\n2. Include appropriate emojis for visual appeal\n3. Keep it concise and scannable\n4. Structure: Header → Key Details → Task Link → Release Date → Footer\n5. Use bullet points or clean formatting for readability\n6. Add a clickable link to the ClickUp task\n7. Include automation signature at the bottom\n\nReturn ONLY the formatted Slack message text, no JSON, no explanations"
        },
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "be95e9d0-6750-477a-b4a2-d1a097aac9fd",
      "name": "向负责人发送确认邮件",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1536,
        -80
      ],
      "webhookId": "0c82c299-6938-42ed-bda6-5007d79af34f",
      "parameters": {
        "sendTo": "={{ $('Parse Task Details in JavaScript').item.json.email }}",
        "message": "=<!DOCTYPE html>\n<html>\n<head>\n    <style>\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            max-width: 600px;\n            margin: 0 auto;\n            padding: 20px;\n        }\n        .header {\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            color: white;\n            padding: 30px;\n            border-radius: 10px 10px 0 0;\n            text-align: center;\n        }\n        .header h1 {\n            margin: 0;\n            font-size: 24px;\n        }\n        .content {\n            background: #f8f9fa;\n            padding: 30px;\n            border-radius: 0 0 10px 10px;\n        }\n        .info-box {\n            background: white;\n            padding: 20px;\n            border-radius: 8px;\n            margin: 20px 0;\n            border-left: 4px solid #667eea;\n        }\n        .info-row {\n            margin: 12px 0;\n            display: flex;\n            align-items: center;\n        }\n        .label {\n            font-weight: 600;\n            color: #667eea;\n            min-width: 120px;\n        }\n        .value {\n            color: #333;\n        }\n        .priority-urgent { color: #dc3545; font-weight: bold; }\n        .priority-high { color: #fd7e14; font-weight: bold; }\n        .priority-normal { color: #ffc107; }\n        .priority-low { color: #28a745; }\n        .status-ready { color: #28a745; font-weight: bold; }\n        .cta-button {\n            display: inline-block;\n            background: #667eea;\n            color: white !important;\n            padding: 14px 30px;\n            text-decoration: none;\n            border-radius: 6px;\n            margin: 20px 0;\n            font-weight: 600;\n            text-align: center;\n        }\n        .cta-button:hover {\n            background: #5568d3;\n        }\n        .faq-section {\n            background: white;\n            padding: 20px;\n            border-radius: 8px;\n            margin: 20px 0;\n        }\n        .faq-section h3 {\n            color: #667eea;\n            margin-top: 0;\n        }\n        .footer {\n            text-align: center;\n            padding: 20px;\n            color: #6c757d;\n            font-size: 12px;\n            border-top: 1px solid #dee2e6;\n            margin-top: 30px;\n        }\n        .emoji {\n            font-size: 18px;\n            margin-right: 8px;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"header\">\n        <h1>🚀 Your Release is Ready!</h1>\n    </div>\n    \n    <div class=\"content\">\n        <p>Hi <strong>{{ $('Parse Task Details in JavaScript').item.json.assignee }}</strong>,</p>\n        \n        <p>Great news! Your feature release has been processed and documented. Here are the details:</p>\n        \n        <div class=\"info-box\">\n            <div class=\"info-row\">\n                <span class=\"label\">📋 Feature:</span>\n                <span class=\"value\">{{ $('Parse Task Details in JavaScript').item.json.title }}</span>\n            </div>\n            <div class=\"info-row\">\n                <span class=\"label\">⚡ Priority:</span>\n                <span class=\"value priority-{{ $('Parse Task Details in JavaScript').item.json.priority.toLowerCase() }}\">\n                    {{ $('Parse Task Details in JavaScript').item.json.priority }}\n                </span>\n            </div>\n            <div class=\"info-row\">\n                <span class=\"label\">✅ Status:</span>\n                <span class=\"value status-ready\">{{ $('Parse Task Details in JavaScript').item.json.status }}</span>\n            </div>\n            <div class=\"info-row\">\n                <span class=\"label\">📅 Release Date:</span>\n                <span class=\"value\">{{ $now.toFormat('MMMM dd, yyyy') }}</span>\n            </div>\n        </div>\n\n        <center>\n            <a href=\"{{ $('Save Release Notes to Notion').item.json.url }}\" class=\"cta-button\">\n                📖 View Full Release Notes in Notion\n            </a>\n        </center>\n\n        <div class=\"faq-section\">\n            <h3>📝 Release Notes Preview</h3>\n            <p style=\"white-space: pre-line; color: #495057; line-height: 1.8;\">{{ $('Generate Release Notes FAQ (AI)').item.json.output.substring(0, 500) }}...</p>\n        </div>\n\n        <div class=\"info-box\" style=\"border-left-color: #28a745;\">\n            <p style=\"margin: 0;\"><strong>🔗 Quick Links:</strong></p>\n            <ul style=\"margin: 10px 0;\">\n                <li><a href=\"{{ $('Parse Task Details in JavaScript').item.json.url }}\" style=\"color: #667eea;\">View ClickUp Task</a></li>\n                <li><a href=\"{{ $('Save Release Notes to Notion').item.json.url }}\" style=\"color: #667eea;\">View Notion Documentation</a></li>\n                {{ $('Parse Task Details in JavaScript').item.json.link !== 'No link provided' ? '<li><a href=\"' + $('Parse Task Details in JavaScript').item.json.link + '\" style=\"color: #667eea;\">Reference Link</a></li>' : '' }}\n            </ul>\n        </div>\n\n        <p style=\"margin-top: 30px;\">The team has been notified via Slack, and this release is now live in our knowledge base.</p>\n        \n        <p>If you have any questions or need to update the documentation, please reach out to the team.</p>\n        \n        <p style=\"margin-top: 30px;\">\n            Best regards,<br>\n            <strong>Release Automation Team</strong>\n        </p>\n    </div>\n\n    <div class=\"footer\">\n        <p>🤖 This is an automated message generated by our n8n workflow.</p>\n        <p>If you believe you received this in error, please contact your system administrator.</p>\n    </div>\n</body>\n</html>",
        "options": {},
        "subject": "=✅ Release Ready: {{ $('Parse Task Details in JavaScript').item.json.title }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "RchiXdmY8WaQhOSJ",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "56486d5f-7142-4092-8808-d95961f28ac8",
      "name": "便签12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -304
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 464,
        "content": "## 任务数据获取与解析"
      },
      "typeVersion": 1
    },
    {
      "id": "26dd72fa-2822-41ad-8eee-f8b8fb4a1cda",
      "name": "便签13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -288
      ],
      "parameters": {
        "color": 7,
        "width": 352,
        "height": 576,
        "content": "## AI 发布说明生成"
      },
      "typeVersion": 1
    },
    {
      "id": "e7920945-1bac-4cdc-b0bf-8aaa731e271f",
      "name": "便签14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        -352
      ],
      "parameters": {
        "color": 7,
        "height": 640,
        "content": "## Notion 文档记录与存档"
      },
      "typeVersion": 1
    },
    {
      "id": "4a84e45d-17b4-4ec9-96bf-4c6ec252e393",
      "name": "便签15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -304
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 592,
        "content": "## Slack 公告与 AI 格式化"
      },
      "typeVersion": 1
    },
    {
      "id": "0f1b231a-9a08-4e5b-8344-01aa0f8ae8c8",
      "name": "便签16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        -256
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 400,
        "content": "## 邮件确认与完结"
      },
      "typeVersion": 1
    },
    {
      "id": "ad64298d-dcf6-45e5-86a0-dadef7539b6c",
      "name": "便签17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        320
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 464,
        "content": "## 错误处理与记录"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1ca088d6-1491-407d-b2c4-a74e0d2ac92c",
  "connections": {
    "Configure GPT-4o Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Release Notes FAQ (AI)",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Configure GPT-4o Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Slack Release Announcement (AI)",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Validate ClickUp Payload": {
      "main": [
        [
          {
            "node": " Fetch Task Details from ClickUp",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Errors in Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Announce Release in Slack": {
      "main": [
        [
          {
            "node": " Send Acknowledgment Email to Assignee",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ClickUp Task Status Trigger": {
      "main": [
        [
          {
            "node": "Validate ClickUp Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Release Notes to Notion": {
      "main": [
        [
          {
            "node": "Generate Slack Release Announcement (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Release Notes FAQ (AI)": {
      "main": [
        [
          {
            "node": "Save Release Notes to Notion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    " Fetch Task Details from ClickUp": {
      "main": [
        [
          {
            "node": "Parse Task Details in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Task Details in JavaScript": {
      "main": [
        [
          {
            "node": "Generate Release Notes FAQ (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Slack Release Announcement (AI)": {
      "main": [
        [
          {
            "node": "Announce Release in Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 工程, 多模态 AI

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量20
分类2
节点类型11
难度说明

适合高级用户,包含 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 查看

分享此工作流