从转录文本中提取会议任务并与Trello同步
高级
这是一个Project Management, AI Summarization领域的自动化工作流,包含 18 个节点。主要使用 Form, TrelloTool, FormTrigger, Agent, ExtractFromFile 等节点。 使用AI从转录文本中提取会议任务并同步到Trello
前置要求
- •OpenAI API Key
使用的节点 (18)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 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)可能需要您自行付费。
相关工作流推荐
Google Meet 月度人力资源问答
通过AI问题聚类和Google日历集成自动化人力资源问答会议
Set
Form
Merge
+9
26 节点Gabriel Santos
人力资源
使用OpenAI和Google Sheets从转录文本生成冲刺评审摘要
使用OpenAI和Google Sheets从转录文本生成冲刺评审摘要
Code
Form
Form Trigger
+4
13 节点Arkadiusz
项目管理
HireMind – AI驱动的简历智能处理流程
HR AI简历筛选与评估:GPT-4和Google Workspace
If
Code
Slack
+10
26 节点Trung Tran
人力资源
[astro/nextjs] 为文章/帖子分配类别/标签
使用OpenAI GPT-4、GitHub和Google Sheets为Astro/Next.js博客文章自动分类
Code
Form
Merge
+11
29 节点Piotr Sikora
内容创作
30 秒内完成客户入职的 AI 系统
使用GPT-4、Google Drive、ClickUp和Slack自动化客户入职
Set
Gmail
Slack
+10
18 节点Muhammad Bello
项目管理
使用GPT-4o、GoHighLevel、Google Drive、Slack和Gmail自动化客户入职
使用GPT-4o、GoHighLevel、Google Drive、Slack和Gmail自动化客户入职
Set
Gmail
Slack
+10
17 节点Adam Crafts
AI 摘要总结
工作流信息
难度等级
高级
节点数量18
分类2
节点类型9
作者
Gabriel Santos
@gabrielhmsantosEnthusiastic 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 查看 →
分享此工作流