{"name":"Meeting Notes Summarizer","nodes":[{"id":"webhook","type":"n8n-nodes-base.webhook","name":"Meeting Ended Webhook","position":[250,300],"parameters":{"path":"meeting-ended","method":"POST"}},{"id":"downloadRecording","type":"n8n-nodes-base.httpRequest","name":"Download Recording","position":[450,300],"parameters":{"url":"={{$json.recording_url}}","method":"GET","options":{"response":{"response":{"responseFormat":"file"}}}}},{"id":"transcribe","type":"n8n-nodes-base.openAi","name":"Transcribe Audio","position":[650,300],"parameters":{"model":"whisper-1","operation":"transcribe","options":{"language":"en","responseFormat":"verbose_json"}}},{"id":"aiSummarize","type":"n8n-nodes-base.openAi","name":"AI Summarize & Extract","position":[850,300],"parameters":{"model":"gpt-4o","prompt":"Analyze this meeting transcript and produce a structured summary:\n\n1. **Meeting Summary** (3-5 bullet points of key discussions)\n2. **Decisions Made** (numbered list)\n3. **Action Items** (table format: | Owner | Task | Deadline | Priority |)\n4. **Open Questions** (items raised but not resolved)\n5. **Next Steps** (follow-up meeting topics)\n\nMeeting: {{$json.meeting_topic}}\nAttendees: {{$json.attendees}}\nDuration: {{$json.duration_minutes}} min\n\nTranscript:\n{{$json.transcript}}"}},{"id":"extractActions","type":"n8n-nodes-base.code","name":"Parse Action Items","position":[1050,200],"parameters":{"language":"javascript","code":"const text = $json.summary;\nconst actionSection = text.split(\"Action Items\")[1]?.split(\"Open Questions\")[0] || \"\";\nconst rows = actionSection.match(/\\|([^|]+)\\|([^|]+)\\|([^|]+)\\|([^|]+)\\|/g) || [];\nconst actions = rows.slice(1).map(r => { const cols = r.split(\"|\").filter(Boolean).map(s=>s.trim()); return { owner: cols[0], task: cols[1], deadline: cols[2], priority: cols[3] }; });\nreturn actions.map(a => ({ json: a }));"}},{"id":"createTasks","type":"n8n-nodes-base.httpRequest","name":"Create Tasks in PM Tool","position":[1250,200],"parameters":{"url":"={{$env.PROJECT_MGMT_API}}/tasks","method":"POST","body":{"title":"={{$json.task}}","assignee":"={{$json.owner}}","due_date":"={{$json.deadline}}","priority":"={{$json.priority}}","source":"meeting-notes"}}},{"id":"formatNotes","type":"n8n-nodes-base.code","name":"Format Email","position":[1050,400],"parameters":{"language":"javascript","code":"const summary = $json.summary;\nconst html = summary.replace(/\\*\\*(.*?)\\*\\*/g, \"<strong>$1</strong>\").replace(/\\n/g, \"<br>\");\nreturn { json: { ...items[0].json, html_notes: html } };"}},{"id":"emailNotes","type":"n8n-nodes-base.sendGrid","name":"Email Notes to Attendees","position":[1250,400],"parameters":{"to":"={{$json.attendee_emails}}","subject":"Meeting Notes: {{$json.meeting_topic}} — {{$json.meeting_date}}","html":"={{$json.html_notes}}"}},{"id":"archiveNotion","type":"n8n-nodes-base.notion","name":"Archive in Notion","position":[1450,300],"parameters":{"operation":"create","databaseId":"={{$env.NOTION_MEETINGS_DB}}","title":"{{$json.meeting_topic}} — {{$json.meeting_date}}","content":"={{$json.summary}}"}}],"connections":{"Meeting Ended Webhook":{"main":[[{"node":"Download Recording","type":"main","index":0}]]},"Download Recording":{"main":[[{"node":"Transcribe Audio","type":"main","index":0}]]},"Transcribe Audio":{"main":[[{"node":"AI Summarize & Extract","type":"main","index":0}]]},"AI Summarize & Extract":{"main":[[{"node":"Parse Action Items","type":"main","index":0},{"node":"Format Email","type":"main","index":0}]]},"Parse Action Items":{"main":[[{"node":"Create Tasks in PM Tool","type":"main","index":0}]]},"Format Email":{"main":[[{"node":"Email Notes to Attendees","type":"main","index":0}]]},"Email Notes to Attendees":{"main":[[{"node":"Archive in Notion","type":"main","index":0}]]},"Create Tasks in PM Tool":{"main":[[{"node":"Archive in Notion","type":"main","index":0}]]}}}