8
n8n 中文网amn8n.com

37 - Productboard–Linear 集成

中级

这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 10 个节点。主要使用 If, Code, Linear, Telegram, HttpRequest 等节点。 将 Productboard 功能同步至 Linear 问题,支持 Telegram 通知

前置要求
  • Telegram Bot Token
  • 可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "SANITIZED_WORKFLOW_ID",
  "meta": {
    "instanceId": "SANITIZED_INSTANCE_ID",
    "templateCredsSetupCompleted": true
  },
  "name": "37 - Productboard–Linear 集成",
  "tags": [
    {
      "id": "SANITIZED_TAG_ID",
      "name": "Example",
      "createdAt": "2025-06-17T05:42:41.949Z",
      "updatedAt": "2025-06-17T05:42:41.949Z"
    }
  ],
  "nodes": [
    {
      "id": "460e03e8-4887-44fe-a7b9-22d054fc9667",
      "name": "📅 计划触发器",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1520,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "439a1e13-f507-4852-9a82-54fdc93712e3",
      "name": "🌐 HTTP 请求到 ProductBoard",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1296,
        0
      ],
      "parameters": {
        "url": "https://api.productboard.com/features",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_PRODUCTBOARD_API_TOKEN"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "X-Version",
              "value": "1"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8951b0ae-f5c0-4f8e-950d-752345df1355",
      "name": "💻 代码(转换功能)",
      "type": "n8n-nodes-base.code",
      "position": [
        -1072,
        0
      ],
      "parameters": {
        "jsCode": "const rawData = items[0].json.data;\n\nconst result = rawData.map(d => {\n  return {\n    id: d.id,\n    name: d.name,\n    type: d.type,\n    status: d.status?.name || null,\n    parentId: d.parent?.feature?.id || d.parent?.component?.id || null,\n    owner: d.owner?.email || null,\n    description: d.description \n      ? d.description.replace(/<[^>]*>/g, '').trim() \n      : null,  // ✅ plain text only\n    createdAt: d.createdAt ? new Date(d.createdAt).toISOString().split(\"T\")[0] : null,\n    updatedAt: d.updatedAt ? new Date(d.updatedAt).toISOString().split(\"T\")[0] : null,\n    link: d.links?.html || null,\n  };\n});\n\nreturn result.map(r => ({ json: r }));"
      },
      "typeVersion": 2
    },
    {
      "id": "040e657a-7b12-4a49-9e27-9368c3dbb28b",
      "name": "⚖️ 如果(过滤新功能)",
      "type": "n8n-nodes-base.if",
      "position": [
        -848,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "bd7950c3-92a2-4b73-b806-58603d79ed42",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.createdAt }}",
              "rightValue": "={{ new Date($json.createdAt).toISOString().split(\"T\")[0] }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f7914171-83ce-4789-a531-a6e35bf0156f",
      "name": "📝 创建 Linear Issue",
      "type": "n8n-nodes-base.linear",
      "position": [
        -624,
        0
      ],
      "parameters": {
        "title": "={{ $json.name }}",
        "teamId": "YOUR_LINEAR_TEAM_ID",
        "additionalFields": {
          "description": "={{ $json.description }}"
        }
      },
      "credentials": {
        "linearApi": {
          "id": "YOUR_LINEAR_CREDENTIALS_ID",
          "name": "Linear account"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "ad845fc6-1dc2-49c4-9531-72de9d5a86fd",
      "name": "📢 成功通知 (Telegram)",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -400,
        0
      ],
      "webhookId": "YOUR_TELEGRAM_WEBHOOK_ID",
      "parameters": {
        "text": "=✅ Successfully synced Productboard feature \"{{ $('⚖️ If (Filter New Features)').item.json.name }}\" with Linear",
        "chatId": "YOUR_TELEGRAM_CHAT_ID",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "YOUR_TELEGRAM_CREDENTIALS_ID",
          "name": "Telegram account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c410712a-a467-4ee3-a1ad-cf2f5eb8f1a6",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        -496
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 720,
        "content": "## 🗓 触发器与数据获取"
      },
      "typeVersion": 1
    },
    {
      "id": "e19527b8-f8b0-40ad-a999-46f60bc9c5b7",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        -496
      ],
      "parameters": {
        "width": 224,
        "height": 720,
        "content": "## 🔄 数据转换"
      },
      "typeVersion": 1
    },
    {
      "id": "4c17a6fb-67ec-41a9-8dd3-7fb931aede29",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        -496
      ],
      "parameters": {
        "color": 4,
        "width": 192,
        "height": 720,
        "content": "## ✅ 过滤逻辑"
      },
      "typeVersion": 1
    },
    {
      "id": "1f1286e7-81dc-41ab-a8c6-d63f5162eb49",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        -496
      ],
      "parameters": {
        "color": 3,
        "width": 432,
        "height": 720,
        "content": "## 📝 Issue 创建与通知"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "SANITIZED_VERSION_ID",
  "connections": {
    "📅 Schedule Trigger": {
      "main": [
        [
          {
            "node": "🌐 HTTP Request to ProductBoard",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "📝 Create Linear Issue": {
      "main": [
        [
          {
            "node": "📢 Success Notification (Telegram)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "💻 Code (Transform Features)": {
      "main": [
        [
          {
            "node": "⚖️ If (Filter New Features)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "⚖️ If (Filter New Features)": {
      "main": [
        [
          {
            "node": "📝 Create Linear Issue",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "🌐 HTTP Request to ProductBoard": {
      "main": [
        [
          {
            "node": "💻 Code (Transform Features)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

中级 - 内容创作, 多模态 AI

需要付费吗?

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

工作流信息
难度等级
中级
节点数量10
分类2
节点类型7
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Avkash Kakdiya

Avkash Kakdiya

@itechnotion

🚀 Founder of iTechNotion — we build custom AI-powered automation workflows for startups, agencies, and founders. 💡 Specializing in agentic AI systems, content automation, sales funnels, and digital workers. 🔧 14+ years in tech | Building scalable no-code/low-code solutions using n8n, OpenAI, and other API-first tools. 📬 Let’s automate what slows you down.

外部链接
在 n8n.io 查看

分享此工作流