{
  "name": "Meeting Notes Summarizer",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "meeting-summary",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "b8c9d0e1-8888-4000-8000-000000000001",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        250,
        300
      ]
    },
    {
      "parameters": {
        "resource": "chat",
        "operation": "message",
        "model": "gpt-4o",
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are a meeting notes assistant. Analyze the meeting transcript and produce a structured summary. Respond with a JSON object:\n{\n  \"title\": \"Meeting title inferred from content\",\n  \"date\": \"meeting date if mentioned\",\n  \"attendees\": [\"list of participants mentioned\"],\n  \"summary\": \"2-3 paragraph executive summary\",\n  \"key_decisions\": [\"decision 1\", \"decision 2\"],\n  \"action_items\": [\n    {\"task\": \"description\", \"assignee\": \"person\", \"deadline\": \"date or null\"}\n  ],\n  \"topics_discussed\": [\"topic 1\", \"topic 2\"],\n  \"open_questions\": [\"question 1\"],\n  \"next_meeting\": \"date/time if mentioned or null\"\n}\n\nBe thorough in capturing all action items. Attribute tasks to specific people when possible."
            },
            {
              "role": "user",
              "content": "={{ $json.body.transcript }}"
            }
          ]
        },
        "options": {
          "temperature": 0.3,
          "maxTokens": 2048
        }
      },
      "id": "b8c9d0e1-8888-4000-8000-000000000002",
      "name": "OpenAI Summarize",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.6,
      "position": [
        500,
        300
      ],
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "page",
        "operation": "create",
        "databaseId": {
          "__rl": true,
          "value": "your-notion-meetings-db-id",
          "mode": "id"
        },
        "title": "={{ JSON.parse($json.text).title }}",
        "bodyContent": "=## Summary\n{{ JSON.parse($json.text).summary }}\n\n## Attendees\n{{ JSON.parse($json.text).attendees.map(a => '- ' + a).join('\\n') }}\n\n## Key Decisions\n{{ JSON.parse($json.text).key_decisions.map((d, i) => (i+1) + '. ' + d).join('\\n') }}\n\n## Action Items\n{{ JSON.parse($json.text).action_items.map(a => '- [ ] **' + a.task + '** \u2014 ' + (a.assignee || 'Unassigned') + (a.deadline ? ' (Due: ' + a.deadline + ')' : '')).join('\\n') }}\n\n## Topics Discussed\n{{ JSON.parse($json.text).topics_discussed.map(t => '- ' + t).join('\\n') }}\n\n## Open Questions\n{{ JSON.parse($json.text).open_questions.map(q => '- ' + q).join('\\n') }}",
        "options": {}
      },
      "id": "b8c9d0e1-8888-4000-8000-000000000003",
      "name": "Notion Create Page",
      "type": "n8n-nodes-base.notion",
      "typeVersion": 2.2,
      "position": [
        750,
        300
      ],
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "channel": "#team-updates",
        "text": "=:memo: *Meeting Summary: {{ JSON.parse($('OpenAI Summarize').item.json.text).title }}*\n\n{{ JSON.parse($('OpenAI Summarize').item.json.text).summary }}\n\n*Action Items:*\n{{ JSON.parse($('OpenAI Summarize').item.json.text).action_items.map(a => ':point_right: ' + a.task + ' \u2014 ' + (a.assignee || 'Unassigned')).join('\\n') }}\n\n:link: <{{ $('Notion Create Page').item.json.url }}|View full notes in Notion>",
        "otherOptions": {
          "unfurl_links": false
        }
      },
      "id": "b8c9d0e1-8888-4000-8000-000000000004",
      "name": "Slack Post Summary",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.2,
      "position": [
        1000,
        300
      ],
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "options": {
          "responseCode": 200
        },
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ summary: JSON.parse($('OpenAI Summarize').item.json.text), notionUrl: $('Notion Create Page').item.json.url }) }}"
      },
      "id": "b8c9d0e1-8888-4000-8000-000000000005",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        1250,
        300
      ]
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "OpenAI Summarize",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Summarize": {
      "main": [
        [
          {
            "node": "Notion Create Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notion Create Page": {
      "main": [
        [
          {
            "node": "Slack Post Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack Post Summary": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "staticData": null
}