{
  "name": "Classify developer questions with GPT-4o from Slack to Notion & Airtable",
  "nodes": [
    {
      "id": "d605b180-fd35-4ab7-9bc3-b7ac4d07382a",
      "name": "Configure GPT-4o Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        -48,
        160
      ]
    },
    {
      "id": "673d6f84-b6df-4ab0-b660-68e9c2f42c58",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        144
      ],
      "parameters": {
        "width": null,
        "height": 416,
        "content": "## Node Name: Slack Channel Trigger – Developer Q&A\n**Action**: Triggers the workflow when a new message is posted in the specified Slack channel.\n**Description**:\nThis node listens for new messages i"
      }
    },
    {
      "id": "47fcda03-e6b3-4c57-9759-5ecd78e5111c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -736,
        -528
      ],
      "parameters": {
        "width": null,
        "height": 448,
        "content": "## Node Name: Validate Slack Message Payload\n**Action**: Checks if the incoming Slack message includes valid user and text data.\n**Description**:\nThis node ensures that the incoming event payload cont"
      }
    },
    {
      "id": "ca80b0ca-55db-4daa-ae54-b0bebeeaa496",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -592
      ],
      "parameters": {
        "width": null,
        "height": 496,
        "content": "## Node Name: Classify Developer Question (AI)\n**Action**: Uses GPT-4o to determine whether the Slack message matches a known FAQ.\n**Description**:\nThis AI Agent compares the new Slack question agains"
      }
    },
    {
      "id": "3de471ba-4941-4bd4-b4c8-c0ef1ddac91d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        -528
      ],
      "parameters": {
        "width": null,
        "height": 448,
        "content": "## Node Name: Extract Question Metadata (JavaScript)\n**Action**: Cleans and structures Slack message data into a standardized JSON format.\n**Description**:\nThis JavaScript node extracts key fields — m"
      }
    },
    {
      "id": "4918701a-c839-4ccc-8520-68896948d3b7",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        320
      ],
      "parameters": {
        "width": null,
        "height": 384,
        "content": "## Node Name: Configure GPT-4o Model\n**Action**: Sets up Azure OpenAI GPT-4o as the active AI model.\n**Description**:\nThis node configures the GPT-4o model as the underlying large language model for q"
      }
    },
    {
      "id": "e49f36cf-2e1c-46cb-82b8-933828f06eee",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        528
      ],
      "parameters": {
        "width": null,
        "height": 416,
        "content": "## Node Name: Log Workflow Errors to Google Sheets\n**Action**: Logs missing payloads or node execution errors into a Google Sheet.\n**Description**:\nIf a Slack event, AI response, or integration call f"
      }
    },
    {
      "id": "2579076f-312f-42a3-a4ec-28a06734d309",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        288,
        -512
      ],
      "parameters": {
        "width": null,
        "height": 432,
        "content": "## Node Name: Parse AI JSON Output\n**Action**: Converts the AI’s string output into structured JSON for further logic.\n**Description**:\nThe GPT model returns text formatted as JSON, but downstream nod"
      }
    },
    {
      "id": "8acec43e-5345-47e6-b982-0ca2fc8bb8f6",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        112
      ],
      "parameters": {
        "width": null,
        "height": 448,
        "content": "## Node Name: Check If Question Was Answered\n**Action**: Evaluates the AI’s response to decide if the Slack question was resolved.\n**Description**:\nThis IF node checks whether `status == \"answered\"`. "
      }
    },
    {
      "id": "6aca240f-06ae-4efa-81da-de358ff558c2",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -736
      ],
      "parameters": {
        "width": null,
        "height": 496,
        "content": "## Node Name: Save Answered Question to Notion FAQ\n**Action**: Logs answered questions and AI explanations in the Notion database.\n**Description**:\nThis node creates a Notion entry within the database"
      }
    },
    {
      "id": "5e8735d8-e19a-4022-8a88-11a5c089628d",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        912,
        336
      ],
      "parameters": {
        "width": null,
        "height": 464,
        "content": "## Node Name: Log Unanswered Question to Airtable\n**Action**: Records new or unrecognized questions into Airtable for review.\n**Description**:\nThis Airtable node creates a record containing the Slack "
      }
    },
    {
      "id": "0f0577a1-998f-4d2a-bcc8-bdad6ce83712",
      "name": "Slack Channel Trigger – Developer Q&A",
      "type": "n8n-nodes-base.slackTrigger",
      "position": [
        -944,
        -32
      ]
    },
    {
      "id": "4ae060d6-e45c-4186-8ca4-fc6254b937df",
      "name": "Validate Slack Message Payload",
      "type": "n8n-nodes-base.if",
      "position": [
        -672,
        -32
      ]
    },
    {
      "id": "e7aea1a1-c5d6-4036-b964-f7261b82f5a4",
      "name": "Extract Question Metadata (JavaScript)",
      "type": "n8n-nodes-base.code",
      "position": [
        -320,
        -48
      ]
    },
    {
      "id": "582017af-c1ee-4670-87a8-b3fd5baf3199",
      "name": " Classify Developer Question (AI)",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -16,
        -48
      ]
    },
    {
      "id": "fd788ab2-46df-498d-a8df-b4d45161ffd5",
      "name": "Parse AI JSON Output",
      "type": "n8n-nodes-base.code",
      "position": [
        368,
        -48
      ]
    },
    {
      "id": "53a743a3-1b56-419b-a8f6-1a5c8af21ec1",
      "name": "Check If Question Was Answered",
      "type": "n8n-nodes-base.if",
      "position": [
        656,
        -48
      ]
    },
    {
      "id": "050dfc42-d32a-48cc-ab95-f47ba238d719",
      "name": "Save Answered Question to Notion FAQ",
      "type": "n8n-nodes-base.notion",
      "position": [
        944,
        -208
      ]
    },
    {
      "id": "9c8a1797-2cc1-415c-839c-88dd8b4aa1b5",
      "name": " Log Unanswered Question to Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        944,
        160
      ]
    },
    {
      "id": "9a40948e-659c-42ef-8817-985eab6191d6",
      "name": "Log Workflow Errors to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -384,
        336
      ]
    }
  ],
  "connections": {
    "Parse AI JSON Output": {
      "main": [
        [
          {
            "node": "Check If Question Was Answered",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configure GPT-4o Model": {
      "ai_languageModel": [
        [
          {
            "node": " Classify Developer Question (AI)",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Check If Question Was Answered": {
      "main": [
        [
          {
            "node": "Save Answered Question to Notion FAQ",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": " Log Unanswered Question to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Slack Message Payload": {
      "main": [
        [
          {
            "node": "Extract Question Metadata (JavaScript)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Workflow Errors to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    " Classify Developer Question (AI)": {
      "main": [
        [
          {
            "node": "Parse AI JSON Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Question Metadata (JavaScript)": {
      "main": [
        [
          {
            "node": " Classify Developer Question (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack Channel Trigger – Developer Q&A": {
      "main": [
        [
          {
            "node": "Validate Slack Message Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}