{
  "name": "Triage product UAT feedback with OpenAI, Notion, Slack and Gmail",
  "nodes": [
    {
      "id": "0fc12b8d-cdd0-4bdb-bde3-387055f7f6d9",
      "name": "trigger",
      "type": "n8n-nodes-base.webhook",
      "position": [
        496,
        -192
      ]
    },
    {
      "id": "0a104598-da2c-4843-bd69-beae42d58027",
      "name": "normalize",
      "type": "n8n-nodes-base.code",
      "position": [
        880,
        0
      ]
    },
    {
      "id": "8d100868-818d-49ea-88ba-9cdad7edf0b2",
      "name": "parsing and validation",
      "type": "n8n-nodes-base.code",
      "position": [
        1600,
        0
      ]
    },
    {
      "id": "4fd7632f-c669-4515-aace-a5ac06294387",
      "name": "double check",
      "type": "n8n-nodes-base.notion",
      "position": [
        1856,
        0
      ]
    },
    {
      "id": "1cc8d2a9-1d9f-4e1d-ad28-28e97d0e10e1",
      "name": "tester email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3280,
        128
      ]
    },
    {
      "id": "77c7b891-56d5-4b69-9072-5abab50994d7",
      "name": "slack tester",
      "type": "n8n-nodes-base.slack",
      "position": [
        3280,
        -96
      ]
    },
    {
      "id": "98f87f71-882a-4503-ba4a-c54f9a8c191e",
      "name": "clean text",
      "type": "n8n-nodes-base.code",
      "position": [
        1040,
        0
      ]
    },
    {
      "id": "7f3bddf4-10f7-407c-88ff-b80ded7f81c0",
      "name": "if found",
      "type": "n8n-nodes-base.if",
      "position": [
        2048,
        0
      ]
    },
    {
      "id": "e1fb44fa-36db-48ec-9254-7610b6ef00d9",
      "name": "compose reply branch 2",
      "type": "n8n-nodes-base.set",
      "position": [
        2704,
        16
      ]
    },
    {
      "id": "2821b3e2-049e-4bb9-92fa-7a6786f9cc61",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -752
      ],
      "parameters": {
        "width": 400,
        "height": 1328,
        "content": "## How it works\n\nThis workflow automates Product UAT feature request triage using AI and Notion.\n\nWhen feedback is submitted via a webhook, the workflow normalizes and cleans the input into a consiste"
      }
    },
    {
      "id": "aa17f050-d8e4-4efb-9e0e-396bb3064560",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -752
      ],
      "parameters": {
        "width": 768,
        "height": 1328,
        "content": "## Ingestion & Normalization\n\nReceives feedback via webhook and standardizes fields (tester, build, page, message) into a consistent uat.* structure, then cleans the message for AI processing."
      }
    },
    {
      "id": "5b741f6b-b52b-4566-9ad9-fa79a040d744",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1184,
        -752
      ],
      "parameters": {
        "width": 576,
        "height": 1328,
        "content": "## AI Triage\n\nUses an AI model to classify feedback (type, severity, summary, title, confidence) and outputs structured JSON for automation."
      }
    },
    {
      "id": "54678c3b-9143-4497-a20c-753b0ffbcd23",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1792,
        -752
      ],
      "parameters": {
        "width": 1056,
        "height": 1328,
        "content": "## Notion Dedupe & Upsert\n\nSearches Notion by suggested title to avoid duplicates. If found → update the existing page. If not → create a new roadmap/backlog entry."
      }
    },
    {
      "id": "70bebf34-35cd-4e0a-bd56-196973db9357",
      "name": "Webhook response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        3584,
        0
      ]
    },
    {
      "id": "48d97351-e626-4e38-af1d-7bb0ee515e0e",
      "name": "how to contact",
      "type": "n8n-nodes-base.if",
      "position": [
        2992,
        16
      ]
    },
    {
      "id": "0ebec36c-a116-4f1d-9530-548dd855ab8e",
      "name": "update notion database",
      "type": "n8n-nodes-base.notion",
      "position": [
        2368,
        -96
      ]
    },
    {
      "id": "c1776c0f-1be6-4b8e-a991-504e67b87001",
      "name": "create notion database",
      "type": "n8n-nodes-base.notion",
      "position": [
        2368,
        128
      ]
    },
    {
      "id": "49b40fff-f358-478e-8b95-6e938125d164",
      "name": "AI agent",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1296,
        0
      ]
    },
    {
      "id": "948e4e18-efad-48e9-9be1-dd86d8d640be",
      "name": "data merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        704,
        0
      ]
    },
    {
      "id": "b27f36b3-c980-4114-99e3-636368065ecf",
      "name": "data mapping",
      "type": "n8n-nodes-base.set",
      "position": [
        496,
        192
      ]
    },
    {
      "id": "b3605c3d-e2f3-4265-94bd-232caa190e16",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2880,
        -752
      ],
      "parameters": {
        "width": 880,
        "height": 1328,
        "content": "## Closed Loop\n\nSends a confirmation to the tester (Slack DM or email) and responds to the original webhook with status + triage metadata."
      }
    }
  ],
  "connections": {
    "trigger": {
      "main": [
        [
          {
            "node": "data merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI agent": {
      "main": [
        [
          {
            "node": "parsing and validation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "if found": {
      "main": [
        [
          {
            "node": "update notion database",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "create notion database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "normalize": {
      "main": [
        [
          {
            "node": "clean text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "clean text": {
      "main": [
        [
          {
            "node": "AI agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "data merge": {
      "main": [
        [
          {
            "node": "normalize",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "data mapping": {
      "main": [
        [
          {
            "node": "data merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "double check": {
      "main": [
        [
          {
            "node": "if found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "slack tester": {
      "main": [
        [
          {
            "node": "Webhook response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "tester email": {
      "main": [
        [
          {
            "node": "Webhook response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "how to contact": {
      "main": [
        [
          {
            "node": "slack tester",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "tester email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "compose reply branch 2": {
      "main": [
        [
          {
            "node": "how to contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "create notion database": {
      "main": [
        [
          {
            "node": "compose reply branch 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "parsing and validation": {
      "main": [
        [
          {
            "node": "double check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "update notion database": {
      "main": [
        [
          {
            "node": "compose reply branch 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}