{
  "id": "55z6K2RROkmMufYu",
  "meta": {
    "instanceId": "d766a8ee81e6e9c4a6f6072b794508c301e839c43fcd16e1ba1e24f731944509",
    "templateCredsSetupCompleted": true
  },
  "name": "Automated Meeting Recording Transcription & Minutes Distribution Workflow",
  "tags": [
    {
      "id": "9lQxmdXusUqB0ADJ",
      "name": "議事録系",
      "createdAt": "2025-11-01T15:04:17.465Z",
      "updatedAt": "2025-11-01T15:04:17.465Z"
    }
  ],
  "nodes": [
    {
      "id": "c47970ae-4de8-49f0-91c7-d1b92dcf8236",
      "name": "Google Drive Trigger",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -400,
        32
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyHour",
              "minute": 59
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "103izO2_it3aeyuqF6lo7lfIZhvOp7mbY",
          "cachedResultUrl": "https://drive.google.com/drive/folders/103izO2_it3aeyuqF6lo7lfIZhvOp7mbY",
          "cachedResultName": "Recordings-test"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "85222786-3e08-4b34-ae57-252fa5e72dd9",
      "name": "Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -160,
        32
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "fileName": "={{ $json.originalFilename }}",
          "binaryPropertyName": "data"
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "daa338d6-3be9-410d-8f7d-910e8a875b59",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        112,
        32
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "credentials": {
        "openAiApi": {
          "id": "credential-id",
          "name": "openAiApi Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ed1f6913-94e2-428f-89a9-6994e5037dcb",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -464,
        -176
      ],
      "parameters": {
        "width": 459.0695038476583,
        "height": 425.9351190986499,
        "content": "## Triggering and Downloading the Audio File\n\nThis workflow uses Google Drive as the source.\n\nWhen an audio file is uploaded, the trigger activates immediately and downloads the file for processing."
      },
      "typeVersion": 1
    },
    {
      "id": "2c82e15f-f4ad-4500-80a5-54ce726c7691",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        -176
      ],
      "parameters": {
        "color": 6,
        "width": 537,
        "height": 420,
        "content": "## Transcription and Summarization with OpenAI\n\nOnce the file data is retrieved, it is sent to OpenAI for transcription.\nThe transcribed text is then processed again by OpenAI to generate a summary and extract additional information.\nAlthough this workflow uses OpenAI, you can replace it with any other LLM as well.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "768b5b61-0afb-4ec1-a34f-bff4b07e4676",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        -176
      ],
      "parameters": {
        "width": 231.28081576725737,
        "height": 411.7664447204431,
        "content": "## Chatwork Notification\nSends an automatic notification to Chatwork to inform that the meeting notes are ready."
      },
      "typeVersion": 1
    },
    {
      "id": "2bae20fa-21c0-4bee-a40e-2a4fc1747d09",
      "name": "OpenAI 2",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        320,
        32
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5",
          "cachedResultName": "GPT-5"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=\"Today is \" {{ $now }}  \"Transcript: \" {{  $('OpenAI').item.json.text }}"
            },
            {
              "role": "system",
              "content": "<!--\n最終的な「議事録作成支援システム」のシステムプロンプト構造サンプル\n必ず日本語で出力が返ってくるようにするための指定を追加\n-->\n\n<SystemSetup>\n    <Role>議事録作成支援システム</Role>\n    <Objective>\n        会議の文字起こしデータを元に、クライアント向けの正式な議事録を自動生成する\n    </Objective>\n    <CoreSkills>\n        <Skill>要点の抽出・雑談の除去</Skill>\n        <Skill>発言者やトピックごとの整理</Skill>\n        <Skill>クライアント向けの文書構成・文言調整</Skill>\n        <Skill>議事録提出前のレビューサポート</Skill>\n    </CoreSkills>\n    <LanguageSettings>\n        <!-- 日本語での入出力を常に行うよう強制する設定 -->\n        <PreferredLanguage>ja-JP</PreferredLanguage>\n        <AlwaysRespondInJapanese>true</AlwaysRespondInJapanese>\n    </LanguageSettings>\n    <WorkflowSteps>\n        <Step1>文字起こしデータの入力と初期解析</Step1>\n        <Step2>要点抽出と文書構成の自動生成</Step2>\n        <Step3>議事録ドラフト生成</Step3>\n        <Step4>レビュー・修正・最終承認</Step4>\n    </WorkflowSteps>\n</SystemSetup>\n\n<DynamicTaskExecutionOrchestration>\n    <TaskList>\n        <Task id=\"data_ingestion\" priority=\"high\">\n            <Description>\n                文字起こしデータを読み込み、基本的な情報（発言者、発言時間など）を解析する\n            </Description>\n            <Dependencies></Dependencies>\n        </Task>\n        <Task id=\"summary_generation\" priority=\"high\">\n            <Description>\n                要点抽出アルゴリズムを実行し、重要なトピックや決定事項を抽出。\n                その結果をもとに議事録の見出し構成を生成する\n            </Description>\n            <Dependencies>data_ingestion</Dependencies>\n        </Task>\n        <Task id=\"draft_generation\" priority=\"medium\">\n            <Description>\n                要点抽出結果とクライアント向けフォーマット情報をもとに、\n                議事録ドラフトを作成する\n            </Description>\n            <Dependencies>summary_generation</Dependencies>\n        </Task>\n        <Task id=\"review_process\" priority=\"medium\">\n            <Description>\n                ドラフトをユーザー（またはレビュアー）が確認・修正できるフローを提供する。\n                修正内容を学習して精度向上に活用\n            </Description>\n            <Dependencies>draft_generation</Dependencies>\n        </Task>\n        <Task id=\"final_approval\" priority=\"high\">\n            <Description>\n                修正後の議事録を最終承認し、クライアントに提出できる形式で出力する\n            </Description>\n            <Dependencies>review_process</Dependencies>\n        </Task>\n    </TaskList>\n    \n    <ExecutionLogic>\n        <PriorityRules>\n            <Rule>優先度 (priority=\"high\") が高いタスクを先に実行</Rule>\n            <Rule>Dependencies がすべて完了したタスクから実行</Rule>\n        </PriorityRules>\n        <RuntimeAdjustments>\n            <Rule>ユーザーから再抽出要望があれば summary_generation タスクへリダイレクト</Rule>\n            <Rule>修正量が多い場合、draft_generation ～ review_process を繰り返す</Rule>\n        </RuntimeAdjustments>\n    </ExecutionLogic>\n    \n    <ErrorHandling>\n        <ErrorCase>\n            <Condition>文字起こしデータのフォーマットが不正</Condition>\n            <Action>ユーザーにエラーメッセージを提示し、正しい形式での再入力を促す</Action>\n        </ErrorCase>\n        <ErrorCase>\n            <Condition>要点抽出アルゴリズムが無効なデータを受信</Condition>\n            <Action>ログを記録し、タスク実行を中断。ユーザーによる手動修正を求める</Action>\n        </ErrorCase>\n    </ErrorHandling>\n</DynamicTaskExecutionOrchestration>\n\n<FeedbackLoop>\n    <CollectionMechanism>\n        <Method>レビュー画面でのコメント入力</Method>\n        <Method>修正履歴の追跡</Method>\n        <Method>アプリ内満足度評価ボタン（例：☆1～5）</Method>\n    </CollectionMechanism>\n    <AnalysisAndLearning>\n        <Rule>修正されたフレーズや文書構成を学習し、次回以降の自動生成に反映</Rule>\n        <Rule>要点抽出時に誤認識・不要抽出があった場合、その事例をアルゴリズムにフィードバック</Rule>\n    </AnalysisAndLearning>\n    <ImprovementActions>\n        <Action>抽出アルゴリズムの重み付け再調整</Action>\n        <Action>テキスト整形/言い回しのテンプレートアップデート</Action>\n        <Action>UI/UX面でレビュー・修正プロセスを最適化</Action>\n    </ImprovementActions>\n</FeedbackLoop>\n\n<PerformanceMetrics>\n    <Metrics>\n        <Metric>\n            <Name>要点抽出精度</Name>\n            <Description>雑談や不要部分の省略がどれだけ正確に行われているか</Description>\n        </Metric>\n        <Metric>\n            <Name>文書校正精度</Name>\n            <Description>クライアントにとって読みやすく、誤字脱字が少ないか</Description>\n        </Metric>\n        <Metric>\n            <Name>レビュー修正率</Name>\n            <Description>生成されたドラフトに対して、どの程度の修正が行われるか</Description>\n        </Metric>\n        <Metric>\n            <Name>ユーザー満足度</Name>\n            <Description>星評価やコメントなどのフィードバックを集計し、改善度を把握</Description>\n        </Metric>\n    </Metrics>\n    <AnalysisCycle>\n        <Frequency>週次または月次でメトリクスを集計</Frequency>\n        <Action>改善アイデアの優先度付けと対応計画の作成</Action>\n    </AnalysisCycle>\n</PerformanceMetrics>\n\n<CreativityEnhancement>\n    <CrossDomainIdeas>\n        <Method>\n            発言内容に関連する外部の情報ソースを照会し、類似ケース・成功事例などを提示して議事録に添える\n        </Method>\n        <Benefit>\n            会議内容を発展させるヒントを提供し、付加価値の高い議事録を作成\n        </Benefit>\n    </CrossDomainIdeas>\n    <CreativityTechniques>\n        <Technique>\n            <Name>SCAMPER法</Name>\n            <Implementation>\n                会議内容に対し、S (Substitute), C (Combine), A (Adapt) ... などの\n                観点で提案や考察を行う\n            </Implementation>\n        </Technique>\n        <Technique>\n            <Name>ブレーンライティング</Name>\n            <Implementation>\n                テキストベースでアイデアを連鎖的に追加し合うプロセスをサポート\n            </Implementation>\n        </Technique>\n    </CreativityTechniques>\n    <CoCreationModel>\n        <InteractionFlow>\n            <Step>システムが複数の要約パターンや視点を提案</Step>\n            <Step>ユーザーが提案を比較検討し、追加アイデアを入力</Step>\n            <Step>システムが最終的にユーザーの意図を反映した「議事録＋アルファ案」を生成</Step>\n        </InteractionFlow>\n        <Benefit>\n            新たな視点や発想を盛り込んだ議事録を作成できる\n        </Benefit>\n    </CoCreationModel>\n    <IdeaEvaluation>\n        <Criteria>\n            <Criterion>\n                <Name>新規性</Name>\n                <Description>既存の議事録にはないユニークな切り口か</Description>\n            </Criterion>\n            <Criterion>\n                <Name>有用性</Name>\n                <Description>クライアントや会議参加者にとって実行可能で価値があるか</Description>\n            </Criterion>\n        </Criteria>\n    </IdeaEvaluation>\n</CreativityEnhancement>\n\n<EthicalConsiderations>\n    <Principles>\n        <Principle>\n            <Name>機密保持</Name>\n            <Description>\n                会議内容や個人情報は厳格に管理し、外部に流出しないよう徹底する\n            </Description>\n        </Principle>\n        <Principle>\n            <Name>プライバシー保護</Name>\n            <Description>\n                会議参加者の個人情報は必要最小限にとどめる\n            </Description>\n        </Principle>\n        <Principle>\n            <Name>透明性と説明可能性</Name>\n            <Description>\n                要約・抽出ロジックを概念的に説明できるようにし、\n                ユーザーが編集過程を追跡できるようにする\n            </Description>\n        </Principle>\n    </Principles>\n    <PossibleDilemmas>\n        <Dilemma>\n            <Name>誤った要約や偏り</Name>\n            <Description>\n                主観的なバイアスにより、特定の意見や人物に不利となる要約が生成されるリスク\n            </Description>\n            <Mitigation>\n                システムの要約結果をユーザー（または複数人）がレビューできる体制を整備\n            </Mitigation>\n        </Dilemma>\n        <Dilemma>\n            <Name>情報の二次利用</Name>\n            <Description>\n                学習データとして過去の会議内容を利用する際、機密情報を扱うリスク\n            </Description>\n            <Mitigation>\n                機密情報を匿名化やマスキング処理し、同意を得た範囲でのみ再利用\n            </Mitigation>\n        </Dilemma>\n    </PossibleDilemmas>\n    <DecisionProcess>\n        <Step>\n            生成テキストに機密情報が含まれそうな場合、システムがアラートを提示\n        </Step>\n        <Step>\n            ユーザーが伏字・削除・匿名化の方法を選択し、システムが実行\n        </Step>\n        <Step>\n            最終チェックで問題があれば再度要約・修正プロセスへ\n        </Step>\n    </DecisionProcess>\n    <Transparency>\n        <Method>\n            どの発言がどのように要約・編集されたかをユーザーが追跡可能にする\n        </Method>\n        <Method>\n            恣意的な改変が疑われる場合、元の文字起こしとの比較を容易に行える\n        </Method>\n    </Transparency>\n</EthicalConsiderations>"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "credential-id",
          "name": "openAiApi Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a4e8924c-72fe-4a67-87f7-3cb2865e318b",
      "name": "Upload file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1088,
        16
      ],
      "parameters": {
        "name": "={{ $now.format('yyyy-MM-dd _hhmmss') }}. docx",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "1u9Q0BevrGONjaiBKIhnW69rx5iMK27o8",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1u9Q0BevrGONjaiBKIhnW69rx5iMK27o8",
          "cachedResultName": "議事録(meet以外)"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "c547724e-009f-4bf7-a8b2-0418364fdb0b",
      "name": "Convert to File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        784,
        16
      ],
      "parameters": {
        "options": {},
        "operation": "toText",
        "sourceProperty": "message.content"
      },
      "typeVersion": 1.1
    },
    {
      "id": "17ab2f44-4bdf-41f1-9b86-a1d23b488b7d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -176
      ],
      "parameters": {
        "color": 5,
        "width": 231.28081576725737,
        "height": 411.7664447204431,
        "content": "## Convert to File\nConverts the summarized meeting notes into a text or docx file."
      },
      "typeVersion": 1
    },
    {
      "id": "c58fa179-7f38-41c7-ac92-b210e8d90aba",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        -176
      ],
      "parameters": {
        "color": 3,
        "width": 231.28081576725737,
        "height": 411.7664447204431,
        "content": "## Google Drive Upload\nUploads the generated meeting notes file to the specified Google Drive folder."
      },
      "typeVersion": 1
    },
    {
      "id": "bff86f5a-3685-45c0-9ea8-db1ab04fa188",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1408,
        -576
      ],
      "parameters": {
        "width": 880,
        "height": 2016,
        "content": "## Automated Meeting Recording Transcription & Minutes Distribution Workflow\n\nManaging meeting recordings manually—downloading audio, transcribing it, summarizing key points, saving documents, and notifying the team—quickly becomes repetitive and inefficient. This workflow eliminates all of those manual steps by automatically detecting new audio files uploaded to a designated Google Drive folder, converting them into high-quality transcripts using OpenAI, summarizing them into structured meeting minutes, transforming the content into a text file, uploading it back to Google Drive, and finally notifying a Chatwork room with the completed summary.\nWhat used to take hours can now be completed automatically within minutes, ensuring consistency, accuracy, and faster information sharing.\n\n## Who’s it for\n\nThis workflow is ideal for:\n\n- Teams that need high-quality, client-ready meeting minutes generated automatically  \n- Project managers who require accurate summaries, decision tracking, and action items without manual effort  \n- Cross-functional teams handling multiple meetings and requiring structured, searchable documentation  \n- Organizations using Google Meet, Zoom, or Teams where recordings must be turned into polished minutes  \n- Anyone who wants a consistent, AI-assisted system that analyzes discussions, extracts insights, and formats them professionally  \n\nBy leveraging an advanced Meeting Minutes Generation System—capable of key-point extraction, noise reduction, speaker/topic organization, and review support—this workflow ensures that every meeting is transformed into a clean, structured, and highly usable document.\n\n---\n\n## How it works\n\n### 1. Audio file upload triggers the workflow  \nWhen a new recording is uploaded to the designated Google Drive folder, the Google Drive Trigger immediately activates and begins processing.\n\n### 2. The audio file is downloaded  \nThe file is retrieved from Google Drive and prepared in binary format for accurate transcription.\n\n### 3. AI-powered transcription  \nThe audio is sent to OpenAI’s transcription engine, producing a complete and highly accurate transcript of the meeting.\n\n### 4. Generate structured, client-ready meeting minutes  \nThe transcript is processed by a specialized Meeting Minutes Generation System powered by a multi-step prompt.  \nInstead of using a fixed template, the system intelligently analyzes the transcription and automatically generates a professionally structured document using the following capabilities:\n\n- Extraction of key points while removing irrelevant conversation  \n- Organization of content by speaker, topic, and logical flow  \n- Automatic construction of headings and document structure  \n- Draft generation based on client-facing writing standards  \n- Review-support logic that allows refinement and improved readability  \n- Task-YOUR_OPENAI_KEY_HERE orchestration (ingestion → key-point extraction → draft generation → review → final approval)\n\nBecause the system dynamically determines the optimal structure, the resulting minutes adapt to the content of each meeting rather than following a rigid set of categories.  \nIf certain information cannot be derived from the transcript, the system will appropriately leave it out rather than forcing placeholder sections.\n\n\n### 5. Convert the minutes into a file  \nThe structured minutes are converted into a `.txt` or `.docx` document, ready for submission or archival.\n\n### 6. Upload the finalized document  \nThe completed meeting minutes are uploaded to a specific Google Drive folder and saved using a timestamped filename.\n\n### 7. Notify Chatwork  \nA formatted notification—including the summarized content—is automatically posted to a Chatwork room, ensuring immediate team visibility.\n\n---\n\n## How to set up\n\n1. Import the workflow into your n8n environment.  \n2. Authenticate Google Drive and select the folder to monitor for new recordings.  \n3. Connect your OpenAI API keys for both transcription and structured minutes generation.  \n4. Specify the Google Drive folder where the finished documents should be stored.  \n5. Add your Chatwork API token and room ID for automated notifications.  \n6. Upload a sample audio file to confirm the full end-to-end pipeline works correctly.\n\n---\n\n## Requirements\n\n- n8n instance (cloud or self-hosted)  \n- Google Drive account with appropriate folder permissions  \n- OpenAI API credentials  \n- Chatwork API token  \n- Supported audio formats like mp3, wav, m4a, etc.\n\n---\n\n## How to customize the workflow\n\n- Modify the minutes-generation prompt to reflect your organization’s preferred format  \n- Add Slack, Teams, or Discord notifications in addition to Chatwork  \n- Route different types of meetings to different folders or templates  \n- Save transcript and structured minutes separately for compliance or analysis  \n- Log metadata or decisions into Google Sheets or project management tools  \n- Store minutes in a vector database to enable semantic search across past meetings  \n- Attach the final document directly as a file in Chatwork  \n- Extend the system to support revision cycles, reviewer comments, or approval workflows  \n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "501cad16-ca1c-4ac8-9ff0-0d9fe05b4f5a",
      "name": "Chatwork Notification",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1472,
        0
      ],
      "parameters": {
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "form-urlencoded",
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "body",
              "value": "=[info][title]自動通知[/title]議事録の作成が完了しました。[/info]\n\n{{ $('OpenAI 2').item.json.message.content }}"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "credential-id",
          "name": "httpHeaderAuth Credential"
        }
      },
      "typeVersion": 4.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f7879139-33c9-4f3d-b499-d6f185cf09da",
  "connections": {
    "OpenAI": {
      "main": [
        [
          {
            "node": "OpenAI 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI 2": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload file": {
      "main": [
        [
          {
            "node": "Chatwork Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Upload file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger": {
      "main": [
        [
          {
            "node": "Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}