8
n8n 中文网amn8n.com

从转录文本中提取会议任务并与Trello同步

高级

这是一个Project Management, AI Summarization领域的自动化工作流,包含 18 个节点。主要使用 Form, TrelloTool, FormTrigger, Agent, ExtractFromFile 等节点。 使用AI从转录文本中提取会议任务并同步到Trello

前置要求
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "ZGNostTBUj8ot9yp",
  "meta": {
    "instanceId": "46f10f8f90bd424d08d7ec9e92bdd735f336873f2ca9f21d76cc7ac132eeaabd",
    "templateCredsSetupCompleted": true
  },
  "name": "从转录文本中提取会议任务并与 Trello 同步",
  "tags": [],
  "nodes": [
    {
      "id": "70515f8f-edd6-4c52-947a-f79cbb7429ef",
      "name": "获取转录",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        480,
        0
      ],
      "parameters": {
        "options": {},
        "operation": "text",
        "binaryPropertyName": "Transcript_archive"
      },
      "typeVersion": 1
    },
    {
      "id": "203f05d3-7356-40b9-ad81-248760e72080",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        944,
        0
      ],
      "parameters": {
        "text": "=Transcript:\n\n{{ $json.data }}",
        "options": {
          "systemMessage": "=# Main Agent Instructions\n\nYou are an assistant specialized in meeting analysis.\nYour job is to (1) extract actionable tasks from a meeting transcript, (2) sync each task with Trello via the Trello Sub-Agent, and (3) produce a clear user-facing summary.\n\n## Workflow\n\n1. **Extract Tasks**\n   - Identify only clear, actionable tasks.\n   - For each task, produce:\n     - **title** → short, concise (max ~6 words).\n     - **description** → 1–2 sentences explaining the action.\n     - **assignee** → person responsible, or `\"undefined\"`.\n     - **deadline** → date/time if mentioned, or `\"undefined\"`.\n   - **Deduplicate** (merge near-duplicates; keep one canonical task).\n\n2. **Sync with Trello (via Trello Sub-Agent)**\n   - For each task, call the **Trello Sub-Agent** with `title`, `description`, `assignee`, `deadline`.\n   - The Trello Sub-Agent will:\n     - Use **Get Trello Cards** to check for an existing card (case-insensitive, tolerant to small wording changes).\n     - If a match exists → return `{ \"status\": \"exists\", \"card_id\": \"<id>\" }`.\n     - If no match → create with **Create Trello Card** and return `{ \"status\": \"created\", \"card_id\": \"<id>\" }`.\n\n3. **User-Facing Summary**\n   - Write a brief summary (1–3 sentences) describing: total tasks found, how many already existed, how many were created, and any tasks without assignee or deadline.\n   - The summary **must be in the user’s language** (if unknown, use English).\n   - Keep it concise and non-technical.\n\n4. **Output Format**\n   - Return a JSON object with two top-level keys: `summary` and `tasks`.\n\n### JSON Schema\n\n```json\n{\n  \"summary\": {\n    \"text\": \"string\",\n    \"metrics\": {\n      \"total_tasks\": \"number\",\n      \"existing_cards\": \"number\",\n      \"created_cards\": \"number\",\n      \"without_assignee\": \"number\",\n      \"without_deadline\": \"number\"\n    }\n  },\n  \"tasks\": [\n    {\n      \"title\": \"string (≤ 6 words)\",\n      \"description\": \"string (1–2 sentences)\",\n      \"assignee\": \"string | \\\"undefined\\\"\",\n      \"deadline\": \"string | \\\"undefined\\\"\",\n      \"status\": \"exists | created\",\n      \"card_id\": \"string\"\n    }\n  ]\n}\n````\n\nIf no tasks are found, return:\n\n```json\n{\n  \"summary\": {\n    \"text\": \"No tasks were found in the transcript.\",\n    \"metrics\": {\n      \"total_tasks\": 0,\n      \"existing_cards\": 0,\n      \"created_cards\": 0,\n      \"without_assignee\": 0,\n      \"without_deadline\": 0\n    }\n  },\n  \"tasks\": []\n}\n```\n\n## Example\n\n**Transcript Excerpt**\n\n> John: I can prepare the financial report by Friday.\n> Maria: I’ll schedule the client meeting.\n\n**Expected Output**\n\n```json\n{\n  \"summary\": {\n    \"text\": \"Found 2 tasks in the transcript: 1 already existed in Trello and 1 was created. None are missing an assignee; 1 has no deadline.\",\n    \"metrics\": {\n      \"total_tasks\": 2,\n      \"existing_cards\": 1,\n      \"created_cards\": 1,\n      \"without_assignee\": 0,\n      \"without_deadline\": 1\n    }\n  },\n  \"tasks\": [\n    {\n      \"title\": \"Prepare financial report\",\n      \"description\": \"John will compile and deliver the financial report by Friday.\",\n      \"assignee\": \"John\",\n      \"deadline\": \"Friday\",\n      \"status\": \"exists\",\n      \"card_id\": \"abc123\"\n    },\n    {\n      \"title\": \"Schedule client meeting\",\n      \"description\": \"Maria will arrange a meeting with the client to align next steps.\",\n      \"assignee\": \"Maria\",\n      \"deadline\": \"undefined\",\n      \"status\": \"created\",\n      \"card_id\": \"xyz789\"\n    }\n  ]\n}\n```\n\n## Sub-Agents\n\n## Trello Sync\n\nFor each extracted task:\n1. Call the **Trello Sub-Agent** with `title`, `description`, `assignee`, `deadline`.\n2. Append the sub-agent result to the task:\n   - `status`: \"exists\" | \"created\"\n   - `card_id`: string\n   - optionally `list_id` (when status = \"exists\")\n3. Use these results to build the user-facing `summary.metrics`:\n   - `total_tasks`, `existing_cards`, `created_cards`,\n   - `without_assignee`, `without_deadline`."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "50775259-4478-4445-be0b-03da0b9f796b",
      "name": "结构化输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1184,
        208
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"summary\": {\n    \"text\": \"Found 2 tasks in the transcript: 1 already existed in Trello and 1 was created. None are missing an assignee; 1 has no deadline.\",\n    \"metrics\": {\n      \"total_tasks\": 2,\n      \"existing_cards\": 1,\n      \"created_cards\": 1,\n      \"without_assignee\": 0,\n      \"without_deadline\": 1\n    }\n  },\n  \"tasks\": [\n    {\n      \"title\": \"Prepare financial report\",\n      \"description\": \"John will compile and deliver the financial report by Friday.\",\n      \"assignee\": \"John\",\n      \"deadline\": \"Friday\",\n      \"status\": \"exists\",\n      \"card_id\": \"abc123\"\n    },\n    {\n      \"title\": \"Schedule client meeting\",\n      \"description\": \"Maria will arrange a meeting with the client to align next steps.\",\n      \"assignee\": \"Maria\",\n      \"deadline\": \"undefined\",\n      \"status\": \"created\",\n      \"card_id\": \"xyz789\"\n    }\n  ]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "d34e917d-9065-408e-a9ac-f66480118e6f",
      "name": "OpenAI 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        896,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "zwivGqRORUgpjepY",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "35a227e0-41e5-4773-8628-a3863e09165b",
      "name": "接收转录文件",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        0,
        0
      ],
      "webhookId": "c107cc74-88b8-4620-a825-4f26a4ae24b5",
      "parameters": {
        "options": {},
        "formTitle": "Tasks from meeting",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "Transcript archive",
              "multipleFiles": false,
              "requiredField": true,
              "acceptFileTypes": ".txt"
            }
          ]
        },
        "responseMode": "lastNode",
        "formDescription": "Create Trello tasks from a meeting transcript"
      },
      "typeVersion": 2.3
    },
    {
      "id": "48c38412-ae7d-40cb-be25-dd6ff989938e",
      "name": "Trello 代理",
      "type": "@n8n/n8n-nodes-langchain.agentTool",
      "position": [
        1008,
        448
      ],
      "parameters": {
        "text": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Prompt__User_Message_', `Trello task`, 'string') }}",
        "options": {
          "systemMessage": "=# Trello Sub-Agent Instructions\n\nYou manage Trello syncing for tasks.\nTools available:\n- **Get many lists in Trello**\n- **Get all cards in a list in Trello**\n- **Create a card in Trello** (targets a single preconfigured default list)\n\n## Input\nTask JSON:\n- `title` (string, required)\n- `description` (string, required)\n- `assignee` (string | \"undefined\")\n- `deadline` (string | \"undefined\")\n\n## Board-wide Duplicate Check (title AND description)\n1. Call **Get many lists in Trello** and collect all `list_id`s.\n2. For each list, call **Get all cards in a list in Trello**.\n3. For each card, compare:\n   - Incoming `title` ↔ card `name`\n   - Incoming `description` ↔ card `desc`\n\n### Normalization\n- Lowercase, trim, collapse multiple spaces.\n- Strip punctuation and emojis.\n- Normalize common accents/diacritics.\n- Optional: drop very common stopwords (e.g., “the”, “a”, “of”, “para”, “de”).\n\n### Match Criteria (declare duplicate if ANY holds)\n- **Exact title match** (normalized) **AND** description **highly similar** (≥ 0.80 token overlap or near-exact).\n- **High title similarity** (≥ 0.90) **AND** **high description similarity** (≥ 0.80).\n- **Exact description match** (normalized) **AND** title **highly similar** (≥ 0.90).\n\n> If multiple candidates match, choose the **highest combined similarity** (title_sim * 0.6 + desc_sim * 0.4).\n\n4. If a duplicate is found **anywhere on the board**, **do not create** a card. Return:\n```json\n{ \"status\": \"exists\", \"card_id\": \"<existing_card_id>\", \"list_id\": \"<existing_list_id>\" }\n````\n\n## Create (only if NO duplicate found)\n\n* Call **Create a card in Trello** with:\n\n  * `name` = `title`\n  * `desc` = `description`\n  * Add `assignee` / `deadline` if the tool supports these fields.\n* Return:\n\n```json\n{ \"status\": \"created\", \"card_id\": \"<new_card_id>\", \"created_in_default_list\": true }\n```\n\n## Output (always one object)\n\n* Duplicate:\n\n```json\n{ \"status\": \"exists\", \"card_id\": \"<id>\", \"list_id\": \"<list_id>\" }\n```\n\n* Created:\n\n```json\n{ \"status\": \"created\", \"card_id\": \"<id>\", \"created_in_default_list\": true }\n```\n\n* Error:\n\n```json\n{ \"status\": \"error\", \"message\": \"Reason...\" }\n```\n\n## Notes\n\n* Be conservative: one card per unique task.\n* Prefer NOT creating when in doubt (high similarity)."
        },
        "hasOutputParser": true,
        "toolDescription": "Responsible for syncing tasks with Trello. It checks if a card already exists for a given task and creates one if it doesn’t, ensuring no duplicates are added"
      },
      "typeVersion": 2.2
    },
    {
      "id": "40527286-8a51-4ac0-ba33-b41a6da83cf9",
      "name": "结构化输出解析器1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1696,
        656
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Trello Sub-Agent Output\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\"exists\", \"created\", \"error\"],\n      \"description\": \"Result of the Trello sync check.\"\n    },\n    \"card_id\": {\n      \"type\": \"string\",\n      \"description\": \"ID of the Trello card (if exists or created).\"\n    },\n    \"list_id\": {\n      \"type\": \"string\",\n      \"description\": \"ID of the list where the card already exists (only when status = 'exists').\"\n    },\n    \"created_in_default_list\": {\n      \"type\": \"boolean\",\n      \"description\": \"True if a new card was created in the default list (only when status = 'created').\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"Error message if status = 'error'.\"\n    }\n  },\n  \"required\": [\"status\"],\n  \"additionalProperties\": false\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "b3f6f705-03f8-4aca-a320-e2a2d6f969a3",
      "name": "OpenAI 聊天模型1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        976,
        656
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "zwivGqRORUgpjepY",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4b687b0d-c314-4bed-801e-81ab8d77927c",
      "name": "在 Trello 中创建卡片",
      "type": "n8n-nodes-base.trelloTool",
      "position": [
        1136,
        656
      ],
      "parameters": {
        "name": "={{ $fromAI('taskTitle') }}",
        "listId": "Specific List ID",
        "description": "={{ $fromAI('taskDescription') }}",
        "additionalFields": {}
      },
      "credentials": {
        "trelloApi": {
          "id": "vOKxrsBgkMdaWH6Q",
          "name": "Trello account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f6e13596-4b3d-4fa5-a2d7-f5bf15656e97",
      "name": "在 Trello 中获取多个列表",
      "type": "n8n-nodes-base.trelloTool",
      "position": [
        1312,
        656
      ],
      "parameters": {
        "id": "Your Board ID",
        "resource": "list",
        "operation": "getAll",
        "returnAll": true,
        "additionalFields": {}
      },
      "credentials": {
        "trelloApi": {
          "id": "vOKxrsBgkMdaWH6Q",
          "name": "Trello account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e031ecda-c0d0-4668-afcc-bd2268ac65c8",
      "name": "在 Trello 列表中获取所有卡片",
      "type": "n8n-nodes-base.trelloTool",
      "position": [
        1488,
        656
      ],
      "parameters": {
        "id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('List_ID', ``, 'string') }}",
        "resource": "list",
        "operation": "getCards",
        "returnAll": true,
        "additionalFields": {
          "fields": "name, desc"
        }
      },
      "credentials": {
        "trelloApi": {
          "id": "vOKxrsBgkMdaWH6Q",
          "name": "Trello account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "cd442a7c-0f53-4993-aa9c-139ccdf0d183",
      "name": "响应表单",
      "type": "n8n-nodes-base.form",
      "position": [
        1632,
        0
      ],
      "webhookId": "e1dd99fd-57e6-4699-a6d9-bd83191fc864",
      "parameters": {
        "options": {},
        "operation": "completion",
        "completionTitle": "Graded transcripts and tasks created in Trello",
        "completionMessage": "={{ $json.output.summary.text }}"
      },
      "typeVersion": 2.3
    },
    {
      "id": "d667ead8-0892-4e2d-8662-06bd7f55e24b",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        -688
      ],
      "parameters": {
        "color": 6,
        "width": 1920,
        "height": 496,
        "content": "## 提取会议任务并与 Trello 同步"
      },
      "typeVersion": 1
    },
    {
      "id": "f7c2888b-dbda-4e5a-bde0-2948016216a5",
      "name": "便签 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -144
      ],
      "parameters": {
        "width": 304,
        "height": 304,
        "content": "**获取转录节点**"
      },
      "typeVersion": 1
    },
    {
      "id": "6753c318-fef9-4558-bc3b-63e50dedfc17",
      "name": "便签 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        -144
      ],
      "parameters": {
        "width": 304,
        "height": 304,
        "content": "**表单触发器节点**"
      },
      "typeVersion": 1
    },
    {
      "id": "6ba8dc96-1c09-4874-a8ce-d74b9f94d749",
      "name": "便签 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        -144
      ],
      "parameters": {
        "color": 3,
        "width": 560,
        "height": 496,
        "content": "**AI 代理节点**"
      },
      "typeVersion": 1
    },
    {
      "id": "a63d8b4f-8077-402e-9a52-acb167af2298",
      "name": "便签 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        368,
        384
      ],
      "parameters": {
        "color": 5,
        "width": 1456,
        "height": 432,
        "content": "**Trello 代理节点**"
      },
      "typeVersion": 1
    },
    {
      "id": "fdb32427-0adc-4d40-a616-93b32981aae0",
      "name": "便签 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1520,
        -144
      ],
      "parameters": {
        "width": 304,
        "height": 304,
        "content": "**响应表单节点**"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "3bc1df01-1881-41f8-92ff-6de105bfc690",
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Respond to Form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trello Agent": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Get Transcription": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Trello Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Create a card in Trello": {
      "ai_tool": [
        [
          {
            "node": "Trello Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Receive Transcript file": {
      "main": [
        [
          {
            "node": "Get Transcription",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get many lists in Trello": {
      "ai_tool": [
        [
          {
            "node": "Trello Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Trello Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Get all cards in a list in Trello": {
      "ai_tool": [
        [
          {
            "node": "Trello Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 项目管理, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量18
分类2
节点类型9
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Gabriel Santos

Gabriel Santos

@gabrielhmsantos

Enthusiastic developer passionate about automation and system integration. I work mainly with Python, RPA, and N8N, building workflows and custom solutions to optimize processes and connect platforms. Always learning, sharing, and exploring new ways to automate smarter.

外部链接
在 n8n.io 查看

分享此工作流