N
n8n Store
Workflow Market
37 - Productboard–Linear Integration

37 - Productboard–Linear Integration

by itechnotion0 views

描述

分类

🤖 AI & Machine Learning

使用的节点

n8n-nodes-base.ifn8n-nodes-base.coden8n-nodes-base.linearn8n-nodes-base.telegramn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.httpRequestn8n-nodes-base.scheduleTrigger
价格免费
浏览量0
最后更新11/28/2025
workflow.json
{
  "id": "SANITIZED_WORKFLOW_ID",
  "meta": {
    "instanceId": "SANITIZED_INSTANCE_ID",
    "templateCredsSetupCompleted": true
  },
  "name": "37 - Productboard–Linear Integration",
  "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": "📅 Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1520,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "439a1e13-f507-4852-9a82-54fdc93712e3",
      "name": "🌐 HTTP Request to 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": "💻 Code (Transform Features)",
      "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": "⚖️ If (Filter New Features)",
      "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": "📝 Create 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": "📢 Success Notification (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": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        -496
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 720,
        "content": "## 🗓 Trigger & Data Fetching\n\n*Schedule Trigger starts the workflow at defined intervals.\n\nHTTP Request (Productboard) fetches all features from Productboard using API authentication and version headers.\n\n👉 Together, these nodes ensure Productboard data is regularly pulled in for syncing.*"
      },
      "typeVersion": 1
    },
    {
      "id": "e19527b8-f8b0-40ad-a999-46f60bc9c5b7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        -496
      ],
      "parameters": {
        "width": 224,
        "height": 720,
        "content": "## 🔄 Data Transformation\n\n*Code Node (Transform Features) processes the raw JSON from Productboard.\n\nStrips out HTML from feature descriptions → plain text only.\n\nExtracts key fields (id, name, type, status, parentId, owner, created/updated dates, link).\n\nFormats dates as YYYY-MM-DD.\n\n👉 This guarantees that only clean, standardized data moves forward.*"
      },
      "typeVersion": 1
    },
    {
      "id": "4c17a6fb-67ec-41a9-8dd3-7fb931aede29",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        -496
      ],
      "parameters": {
        "color": 4,
        "width": 192,
        "height": 720,
        "content": "## ✅ Filtering Logic\n\n*If Node (Filter New Features) compares the createdAt field against today's date.\n\nEnsures only newly created Productboard features proceed.\n\n👉 Prevents duplicate syncing of older records.*"
      },
      "typeVersion": 1
    },
    {
      "id": "1f1286e7-81dc-41ab-a8c6-d63f5162eb49",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        -496
      ],
      "parameters": {
        "color": 3,
        "width": 432,
        "height": 720,
        "content": "## 📝 Issue Creation & Notifications\n\n*Create Linear Issue\n\nCreates a new issue in a specific Linear team.\n\nUses the Productboard feature name as the title and description as the issue body.\n\nTelegram Success Notification\n\nSends a confirmation message once a feature has been successfully synced into Linear.\n\n👉 This closes the loop by syncing new Productboard features to Linear and notifying the team.*"
      },
      "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
          }
        ]
      ]
    }
  }
}

相关工作流