会議記録の通知

上級

これはAI Summarization, Multimodal AI分野の自動化ワークフローで、16個のノードを含みます。主にSet, Code, Slack, DateTime, SplitOutなどのノードを使用。 Gemini AIとSlack通知を使った会議ノート要約の自動化

前提条件
  • Slack Bot Token または Webhook URL
  • ターゲットAPIの認証情報が必要な場合あり
  • Google Gemini API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "6nKbFj90W1K6L90c",
  "meta": {
    "instanceId": "bbc3fa3cd7d64d8ff0c4877d98dee68ce7dadacc5e089546680c915b3e5a212b",
    "templateCredsSetupCompleted": true
  },
  "name": "Meeting notes notification",
  "tags": [],
  "nodes": [
    {
      "id": "173f23e7-fbd7-4dd1-acbe-4784be565a22",
      "name": "スケジュールトリガー",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -464,
        -288
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "98ee19dc-ccee-430a-8186-37337fa71619",
      "name": "AI変換",
      "type": "n8n-nodes-base.aiTransform",
      "position": [
        656,
        -288
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst today = new Date();\nconst oneWeekAgo = new Date();\noneWeekAgo.setDate(today.getDate() - 7);\n\nconst filteredItems = items.filter((item) => {\n  const itemDate = new Date(item?.json?.formattedDate);\n  return itemDate >= oneWeekAgo && itemDate <= today;\n});\n\nreturn filteredItems;\n",
        "instructions": "Filter the formatted Date in the past week upto today",
        "codeGeneratedForPrompt": "Filter the formatted Date in the past week upto today"
      },
      "typeVersion": 1
    },
    {
      "id": "b08111fc-f718-4009-aed8-4746d204f801",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        888,
        -64
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "F27E5eCnDR6vZBbg",
          "name": "Google Gemini(PaLM) Api account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6fac9ef2-7876-4f71-a4aa-32aed028bf49",
      "name": "メッセージ送信",
      "type": "n8n-nodes-base.slack",
      "position": [
        1456,
        -288
      ],
      "webhookId": "cb7cf410-be03-47eb-a39f-08e04c4d1021",
      "parameters": {
        "text": "test",
        "select": "channel",
        "blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09CV2VC877",
          "cachedResultName": "meeting-notes"
        },
        "messageType": "block",
        "otherOptions": {
          "includeLinkToWorkflow": false
        },
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "XBHT6VDVo1vwvFz2",
          "name": "Slack account"
        }
      },
      "executeOnce": true,
      "typeVersion": 2.3
    },
    {
      "id": "fd642df4-da0e-43b7-b6bf-4cd9bb80f9d6",
      "name": "要約",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        1016,
        -64
      ],
      "parameters": {
        "url": "=https://api.meetgeek.ai/v1/meetings/{{ $json.extract_meeting_id }}/summary/",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "xTo22iPOKW4a71o3",
          "name": "Bearer Auth account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "daf0670b-e2d7-446d-9d63-32952e99d55b",
      "name": "付箋",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -312,
        -432
      ],
      "parameters": {
        "width": 464,
        "height": 304,
        "content": "## Get meeting data from the note taker"
      },
      "typeVersion": 1
    },
    {
      "id": "b6d8b4ef-1dbb-410a-a656-d6cb77e3cf64",
      "name": "付箋1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        392,
        -480
      ],
      "parameters": {
        "width": 400,
        "height": 352,
        "content": "## Format the date and restructure the data\n**Filter the meeting data for the past seven days.**"
      },
      "typeVersion": 1
    },
    {
      "id": "d5ceabf5-c4c4-4d40-8cd9-719537478abc",
      "name": "付箋2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        832,
        -464
      ],
      "parameters": {
        "width": 320,
        "height": 544,
        "content": "## Extract summary and action items from the meeting notes\n**Using Gemini AI model summarize the meeting notes and list down the action items** "
      },
      "typeVersion": 1
    },
    {
      "id": "2248164e-c74c-43cf-ba80-2c314969310b",
      "name": "AIエージェント",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        880,
        -288
      ],
      "parameters": {
        "text": "=# 📝 Meeting Notes Summarizer with Action Items\n\nYou are an AI assistant that **summarizes meeting notes** and **extracts clear action items**.\n\n---\n\n## 🔹 Input Data\n- **meeting_id**: `{{ $json.extract_meeting_id }}`\n- **title**: `{{ $json.title }}`\n\n---\n\n## 🔹 Task Instructions\n1. Call the **Meeting Note Summary API** using the **HTTP Request node**, passing `meeting_id` as a path parameter.  \n2. For each API response, generate a summary for the corresponding meeting.  \n3. Provide a **concise summary** in **3–5 bullet points**.  \n4. Extract a structured **Action Items** list with:\n   - **Task description**  \n   - **Responsible person** (if mentioned, otherwise `Unassigned`)  \n   - **Deadline** (if mentioned, otherwise `No deadline`)  \n5. Ensure each meeting summary **includes the meeting title** (`{{ $json.title }}`).  \n6. If the meeting notes are **empty or missing**, still return the JSON format but use:\n   - `\"summary\": [\"No summary available\"]`  \n   - `\"action_items\": []`  \n\n---\n\n## 🔹 Output Format (JSON)\n```json\n{\n  \"title\": \"{{ $json.title }}\",\n  \"summary\": [\n    \"point 1\",\n    \"point 2\",\n    \"point 3\"\n  ],\n  \"action_items\": [\n    {\n      \"task\": \"Task description\",\n      \"owner\": \"Person name / Unassigned\",\n      \"deadline\": \"Date / No deadline\"\n    }\n  ]\n}\n",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "f20b3135-24b3-4d49-bceb-1c10f32ac9bf",
      "name": "付箋3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1208,
        -416
      ],
      "parameters": {
        "width": 368,
        "height": 288,
        "content": "## Set slack notification\n**Restructure the output from the AI agent and formatted it to slack block** "
      },
      "typeVersion": 1
    },
    {
      "id": "4086c066-d09c-47f0-b19e-f8b56fcf0d8a",
      "name": "会議IDのカスタム名追加",
      "type": "n8n-nodes-base.set",
      "position": [
        208,
        -288
      ],
      "parameters": {
        "include": "except",
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "f26be114-60b9-4017-ada9-db48cb79968a",
              "name": "extract_meeting_id",
              "type": "string",
              "value": "={{ $json.meeting_id }}"
            }
          ]
        },
        "excludeFields": "meeting_id",
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "06de46ec-90b5-48a7-95e8-52e1899a3d81",
      "name": "会議の分割",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -16,
        -288
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "=meetings"
      },
      "typeVersion": 1
    },
    {
      "id": "46c0edee-9d49-4278-bf55-0244d6085290",
      "name": "会議リストの取得",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -240,
        -288
      ],
      "parameters": {
        "url": "https://api.meetgeek.ai/v1/meetings/",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "xTo22iPOKW4a71o3",
          "name": "Bearer Auth account"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.2
    },
    {
      "id": "e66baa91-7c07-4c23-93e0-cb2cea49ccd9",
      "name": "日付のフォーマット",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        432,
        -288
      ],
      "parameters": {
        "date": "={{ $json.timestamp_start_utc }}",
        "format": "yyyy-MM-dd",
        "options": {
          "includeInputFields": true
        },
        "operation": "formatDate"
      },
      "typeVersion": 2
    },
    {
      "id": "3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1",
      "name": "Slackブロックへの再構成",
      "type": "n8n-nodes-base.code",
      "position": [
        1232,
        -288
      ],
      "parameters": {
        "jsCode": "// Input: array of note-taker outputs\nconst notes = $input.all().map(item => item.json);\n\n// Slack blocks array\nlet blocks = [];\n\nnotes.forEach((note, index) => {\n  // Clean and parse JSON inside code block\n  const cleaned = note.output.replace(/```json|```/g, '').trim();\n  let parsed;\n\n  try {\n    parsed = JSON.parse(cleaned);\n  } catch (err) {\n    parsed = { title: `Meeting ${index + 1}`, summary: [\"Could not parse notes\"], action_items: [] };\n  }\n\n  // Meeting header with title\n  blocks.push({\n    type: \"header\",\n    text: {\n      type: \"plain_text\",\n      text: parsed.title || `Meeting ${index + 1}`\n    }\n  });\n\n  // Summary section\n  if (parsed.summary && parsed.summary.length > 0) {\n    blocks.push({\n      type: \"section\",\n      text: {\n        type: \"mrkdwn\",\n        text: \"*Summary:*\\n\" + parsed.summary.map(s => `• ${s}`).join(\"\\n\")\n      }\n    });\n  }\n\n  // Action items section\n  if (parsed.action_items && parsed.action_items.length > 0) {\n    blocks.push({\n      type: \"section\",\n      text: {\n        type: \"mrkdwn\",\n        text: \"*Action Items:*\"\n      }\n    });\n\n    parsed.action_items.forEach(item => {\n      blocks.push({\n        type: \"section\",\n        text: {\n          type: \"mrkdwn\",\n          text: `• *Task:* ${item.task || \"N/A\"}\\n   *Owner:* ${item.owner || \"Unassigned\"}\\n   *Deadline:* ${item.deadline || \"No deadline\"}`\n        }\n      });\n    });\n  } else {\n    // If no action items\n    blocks.push({\n      type: \"section\",\n      text: {\n        type: \"mrkdwn\",\n        text: \"_No action items available_\"\n      }\n    });\n  }\n\n  // Divider\n  blocks.push({ type: \"divider\" });\n});\n\nreturn { blocks };\n"
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "97e0f0e6-6745-4b45-a019-c89e76de9ec5",
      "name": "付箋5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        -1008
      ],
      "parameters": {
        "width": 512,
        "height": 544,
        "content": "## 📌 Meeting Notes Summarizer & Slack Notifier\n\n**What it does**\n- ⏰ Reads meeting notes from your note-taking app using API calls  \n- 🤖 Summarizes key points and extracts action items with **Gemini AI**  \n- 🗂️ Restructures the output into **Slack Block Kit** format  \n- 🔔 Sends daily Slack notifications with clear summaries and actionable tasks  \n\n**Requirements**\n- API key & configuration for your meeting note-taking application  \n- Gemini AI credentials  \n- Slack channel with OAuth credentials  \n\n**Setup Instructions**\n1. Configure the **note taker API** in the **Get Meetings List** and **Summary** nodes.  \n   - *Get Meetings List* → fetches the list of meetings  \n   - *Summary* → fetches the summary for each meeting  \n2. Add your **Gemini AI credentials** to enable summarization.  \n3. Configure **Slack** to send notifications to the desired channel.  \n4. Activate the workflow — your team will start receiving automated meeting summaries and action items daily.  \n\n**Tip:** You can further customize this workflow by adjusting the trigger schedule, modifying Slack message formatting, or changing the API URL in the HTTP Request node."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "bdd7ca4b-f73e-491e-b697-0e419879a2b8",
  "connections": {
    "fd642df4-da0e-43b7-b6bf-4cd9bb80f9d6": {
      "ai_tool": [
        [
          {
            "node": "2248164e-c74c-43cf-ba80-2c314969310b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "2248164e-c74c-43cf-ba80-2c314969310b": {
      "main": [
        [
          {
            "node": "3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e66baa91-7c07-4c23-93e0-cb2cea49ccd9": {
      "main": [
        [
          {
            "node": "98ee19dc-ccee-430a-8186-37337fa71619",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "98ee19dc-ccee-430a-8186-37337fa71619": {
      "main": [
        [
          {
            "node": "2248164e-c74c-43cf-ba80-2c314969310b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "06de46ec-90b5-48a7-95e8-52e1899a3d81": {
      "main": [
        [
          {
            "node": "4086c066-d09c-47f0-b19e-f8b56fcf0d8a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "173f23e7-fbd7-4dd1-acbe-4784be565a22": {
      "main": [
        [
          {
            "node": "46c0edee-9d49-4278-bf55-0244d6085290",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "46c0edee-9d49-4278-bf55-0244d6085290": {
      "main": [
        [
          {
            "node": "06de46ec-90b5-48a7-95e8-52e1899a3d81",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b08111fc-f718-4009-aed8-4746d204f801": {
      "ai_languageModel": [
        [
          {
            "node": "2248164e-c74c-43cf-ba80-2c314969310b",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1": {
      "main": [
        [
          {
            "node": "6fac9ef2-7876-4f71-a4aa-32aed028bf49",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4086c066-d09c-47f0-b19e-f8b56fcf0d8a": {
      "main": [
        [
          {
            "node": "e66baa91-7c07-4c23-93e0-cb2cea49ccd9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

上級 - AI要約, マルチモーダルAI

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
上級
ノード数16
カテゴリー2
ノードタイプ12
難易度説明

上級者向け、16ノード以上の複雑なワークフロー

作成者
Sayone Technologies

Sayone Technologies

@sayonetech

SayOne Technologies is a digital transformation and IT services company headquartered in India, with a strong focus on web, mobile, and AI-driven solutions for the retail tech space. With over a decade of experience, SayOne partners with global businesses to build scalable applications, optimize inventory and operations using next-gen AI, and deliver customer-centric digital products.

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34