{
  "name": "Triage Slack and Gmail requests with an AI-powered intake layer",
  "nodes": [
    {
      "id": "a47f4fcc-9504-4f2d-8a43-2fdb6580d1df",
      "name": "LLM for message normalization",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1008,
        448
      ]
    },
    {
      "id": "c45714d0-0805-49ab-af7f-57befcc7d38a",
      "name": "LLM for triage agent",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1760,
        480
      ]
    },
    {
      "id": "c05ed7f5-fc0e-45e0-978f-d05cca2fc949",
      "name": "Parse triage JSON",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1888,
        480
      ]
    },
    {
      "id": "3f36efad-c273-406f-b14b-dcef692a84d2",
      "name": "LLM for structured parsing",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1888,
        656
      ]
    },
    {
      "id": "9e078e3d-3947-4063-a819-bd9d1919843e",
      "name": "Notify in Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        2480,
        160
      ]
    },
    {
      "id": "bd0bd87f-ffaf-477f-a695-ae2c5acfb18c",
      "name": "Run every minute",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        320,
        176
      ]
    },
    {
      "id": "896e927d-47b1-408c-a32b-622bd8791678",
      "name": "Fetch recent Slack messages",
      "type": "n8n-nodes-base.slack",
      "position": [
        544,
        176
      ]
    },
    {
      "id": "221a8952-07aa-4c9a-91ab-110a0390bfad",
      "name": "Watch inbound Gmail messages",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        544,
        368
      ]
    },
    {
      "id": "ac6b1a3c-221a-48f7-b653-3f01a013407e",
      "name": "Skip already processed items",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        1312,
        256
      ]
    },
    {
      "id": "c34eef0e-60f9-4b90-8d3d-f078dde3a1b3",
      "name": "Store processed IDs",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        1536,
        256
      ]
    },
    {
      "id": "f0cd3b01-eeb4-45f0-aefa-49e0e83183f5",
      "name": "Triage and prioritize request",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1792,
        256
      ]
    },
    {
      "id": "117965c8-6d91-4366-bd5b-b5f30d275b06",
      "name": "Create Notion ticket",
      "type": "n8n-nodes-base.notion",
      "position": [
        2256,
        352
      ]
    },
    {
      "id": "80284d99-b8b0-4dba-abbd-943a7efa63e7",
      "name": "Only high importance items",
      "type": "n8n-nodes-base.filter",
      "position": [
        2256,
        160
      ]
    },
    {
      "id": "f6a969ab-16ba-4348-835d-2f5e78fb9828",
      "name": "Main sticky note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        32
      ],
      "parameters": {
        "width": 528,
        "height": 592,
        "content": "## How it works\n* This workflow collects inbound requests from Slack and Gmail.\n* Each item is normalized into a consistent JSON structure.\n* A data table is used to dedupe items so the same request i"
      }
    },
    {
      "id": "9b78ff76-f0b6-45c6-801d-02bbd336df26",
      "name": "Group sticky note: Collect items",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        32
      ],
      "parameters": {
        "width": 528,
        "height": 560,
        "content": "### Collect items\n* Schedule trigger polls a Slack channel.\n* Gmail trigger watches for new messages.\n* Configure the Slack channel and Gmail sender filter before enabling."
      }
    },
    {
      "id": "4a383452-73df-4d85-a7aa-113aa976ca4e",
      "name": "Group sticky note: Extract content",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        64
      ],
      "parameters": {
        "width": 704,
        "height": 544,
        "content": "### Normalize and dedupe\n* Normalizes sources into one schema.\n* Uses a data table to skip repeats.\n* Ensure the data table exists and has a uniqueID column.\n* Makes it possible to add a new source as"
      }
    },
    {
      "id": "255cabc3-d456-4e95-b312-cdab31ff4f1b",
      "name": "Group sticky note: Analyze and send",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        64
      ],
      "parameters": {
        "width": 976,
        "height": 736,
        "content": "### Analyze and send\n* AI agent outputs structured fields.\n* Notion ticket is created for tracking.\n* Slack notification is sent only when the filter matches.\n* Adjust the importance threshold as need"
      }
    },
    {
      "id": "1a8c48ce-65b9-4a00-a11e-6ffc9459072a",
      "name": "Universal intake normalizer",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        1008,
        256
      ]
    }
  ],
  "connections": {
    "Run every minute": {
      "main": [
        [
          {
            "node": "Fetch recent Slack messages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse triage JSON": {
      "ai_outputParser": [
        [
          {
            "node": "Triage and prioritize request",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Store processed IDs": {
      "main": [
        [
          {
            "node": "Triage and prioritize request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM for triage agent": {
      "ai_languageModel": [
        [
          {
            "node": "Triage and prioritize request",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "LLM for structured parsing": {
      "ai_languageModel": [
        [
          {
            "node": "Parse triage JSON",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Only high importance items": {
      "main": [
        [
          {
            "node": "Notify in Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch recent Slack messages": {
      "main": [
        [
          {
            "node": "Universal intake normalizer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Universal intake normalizer": {
      "main": [
        [
          {
            "node": "Skip already processed items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Skip already processed items": {
      "main": [
        [
          {
            "node": "Store processed IDs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Watch inbound Gmail messages": {
      "main": [
        [
          {
            "node": "Universal intake normalizer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM for message normalization": {
      "ai_languageModel": [
        [
          {
            "node": "Universal intake normalizer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Triage and prioritize request": {
      "main": [
        [
          {
            "node": "Only high importance items",
            "type": "main",
            "index": 0
          },
          {
            "node": "Create Notion ticket",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}