8
n8n 中文网amn8n.com

基于AI的Loom视频问答(Gemini-2.5和Slack通知)

高级

这是一个AI, IT Ops领域的自动化工作流,包含 24 个节点。主要使用 If, Set, Code, Wait, Merge 等节点,结合人工智能技术实现智能自动化。 基于AI的Loom视频问答:使用Gemini-2.5和Slack通知

前置要求
  • Slack Bot Token 或 Webhook URL
  • 可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "59761dc282918b63de68f8544bab8098be77f63f00c94bc04dd5d71886f7d2e1",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "1b69f192-6e52-4484-8953-285441906bde",
      "name": "提取视频ID",
      "type": "n8n-nodes-base.set",
      "position": [
        600,
        -420
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "videoId",
              "value": "={{ $json['Loom Video URL'].split('/').pop().split(\"?\")[0] }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "96a1f9d1-41da-4f73-aef1-5fc61a2ecbde",
      "name": "获取下载URL",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        820,
        -425
      ],
      "parameters": {
        "url": "=https://www.loom.com/api/campaigns/sessions/{{ $json.videoId }}/transcoded-url",
        "method": "POST",
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "983e0686-6a65-495c-af5c-103001995271",
      "name": "下载视频内容",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1040,
        -420
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "9426bf71-eb18-419f-a693-a7b5832956a6",
      "name": "Loom URL表单",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        160,
        -420
      ],
      "webhookId": "5c01bf3e-8c98-4311-859e-dac20b35d252",
      "parameters": {
        "options": {},
        "formTitle": "Loom Video Downloader to Gemini",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Loom Video URL",
              "placeholder": "https://www.loom.com/share/4ef793670bfd4b06a7c042b1b439d51a",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Enter a question about the video",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Enter a public loom video url and the video will be downloaded and provided as input to Google Gemini"
      },
      "typeVersion": 2.2
    },
    {
      "id": "a7331691-acda-4191-add6-65ab1f61b1d5",
      "name": "上传视频数据",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2360,
        -425
      ],
      "parameters": {
        "url": "={{ $json.uploadUrl }}",
        "method": "PUT",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Length",
              "value": "={{ $json.fileSizeInBytes }}"
            },
            {
              "name": "X-Goog-Upload-Offset",
              "value": "0"
            },
            {
              "name": "X-Goog-Upload-Command",
              "value": "upload, finalize"
            }
          ]
        },
        "inputDataFieldName": "data"
      },
      "typeVersion": 4.1
    },
    {
      "id": "c24fb0b7-d21f-4fe7-bed4-b0e2ecd0c2b2",
      "name": "为Gemini启动上传会话",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1700,
        -500
      ],
      "parameters": {
        "url": "=https://generativelanguage.googleapis.com/upload/v1beta/files",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "jsonBody": "={\n  \"file\": {\n    \"display_name\": \"{{ $json.displayName }}\"\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "X-Goog-Upload-Protocol",
              "value": "resumable"
            },
            {
              "name": "X-Goog-Upload-Command",
              "value": "start"
            },
            {
              "name": "X-Goog-Upload-Header-Content-Length",
              "value": "={{  $json.fileSizeInBytes }}"
            },
            {
              "name": "X-Goog-Upload-Header-Content-Type",
              "value": "={{ $json.mimeType }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpQueryAuth": {
          "id": "wDRHYE3a1YNvuZ5Z",
          "name": "Gemini API Query Auth"
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "e92b0b3d-e309-44b3-a288-2fea8f50c695",
      "name": "有效的Loom URL?",
      "type": "n8n-nodes-base.if",
      "position": [
        380,
        -420
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "debf942c-92e7-43f0-9c9b-15d03aa6e507",
              "operator": {
                "type": "string",
                "operation": "startsWith"
              },
              "leftValue": "={{ $json['Loom Video URL'] }}",
              "rightValue": "https://www.loom.com/share/"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "3180c3a0-b5cc-4501-80ed-2ebce9463af2",
      "name": "合并",
      "type": "n8n-nodes-base.merge",
      "position": [
        2140,
        -425
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.1
    },
    {
      "id": "5c1a814e-041b-456d-89f2-22a1845d6693",
      "name": "合并1",
      "type": "n8n-nodes-base.merge",
      "position": [
        1480,
        -420
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.1
    },
    {
      "id": "51021cc5-971d-4287-be7f-d102ccb2505f",
      "name": "提取文件详情",
      "type": "n8n-nodes-base.set",
      "position": [
        2580,
        -420
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "geminiFileUri",
              "value": "={{ $json.file.uri }}"
            },
            {
              "name": "geminiFileName",
              "value": "={{ $json.file.name }}"
            },
            {
              "name": "geminiFileMimeType",
              "value": "={{ $json.file.mimeType }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "a0b210dc-4d66-45eb-a1f6-526297049bea",
      "name": "等待5秒",
      "type": "n8n-nodes-base.wait",
      "position": [
        3060,
        -400
      ],
      "webhookId": "ccaddc3f-1091-4e08-a513-0f61bbfe025f",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "e36643d5-5102-4ef9-99ce-3777d38d0f16",
      "name": "循环直到视频激活",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2800,
        -425
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "6496a5f2-b52a-4f68-bfef-09788e36aac1",
      "name": "获取视频状态",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3240,
        -400
      ],
      "parameters": {
        "url": "={{ $json.geminiFileUri }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth"
      },
      "credentials": {
        "httpQueryAuth": {
          "id": "wDRHYE3a1YNvuZ5Z",
          "name": "Gemini API Query Auth"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4a822835-719f-46aa-8f0e-1715af385f7a",
      "name": "视频已激活?",
      "type": "n8n-nodes-base.if",
      "position": [
        3460,
        -400
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0f9c3f19-3a7b-43c3-9e81-41cfcf649d00",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.state }}",
              "rightValue": "ACTIVE"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9e78e6d5-435c-4c8a-8cd4-64f0c5e4ff7f",
      "name": "要求Gemini总结视频",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3740,
        -460
      ],
      "parameters": {
        "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro-preview-03-25:generateContent",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"file_data\": {\n            \"mime_type\": \"video/mp4\",\n            \"file_uri\": \"{{ $json.uri }}\"\n          }\n        },\n        {\n          \"text\": {{ JSON.stringify($('Loom URL Form').first().json['Enter a question about the video']) }}\n        }\n      ]\n    }\n  ]\n} ",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth"
      },
      "credentials": {
        "httpQueryAuth": {
          "id": "wDRHYE3a1YNvuZ5Z",
          "name": "Gemini API Query Auth"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "77df9ffb-2a4d-46c9-a2a1-44eaf1f7a734",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        120,
        -640
      ],
      "parameters": {
        "color": 7,
        "width": 1080,
        "height": 420,
        "content": "## 下载Loom视频"
      },
      "typeVersion": 1
    },
    {
      "id": "89545746-96c1-4896-95bf-c5bca17b1ef3",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1200,
        -640
      ],
      "parameters": {
        "color": 5,
        "width": 1300,
        "height": 420,
        "content": "## 上传视频到Gemini"
      },
      "typeVersion": 1
    },
    {
      "id": "f35ceb48-2931-47b5-835a-bf3cfbec813b",
      "name": "提取上传URL",
      "type": "n8n-nodes-base.set",
      "position": [
        1920,
        -500
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "uploadUrl",
              "value": "={{ $json.headers['x-goog-upload-url'] }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "02cff2c4-5f4f-4422-acc8-bb5e6a125365",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2500,
        -640
      ],
      "parameters": {
        "width": 1120,
        "height": 420,
        "content": "## 在与LLM请求使用前确保视频已激活"
      },
      "typeVersion": 1
    },
    {
      "id": "9f457708-2b80-403e-8030-1dbdbc81bc54",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3620,
        -640
      ],
      "parameters": {
        "color": 4,
        "width": 580,
        "height": 420,
        "content": "## 向Gemini LLM发送请求"
      },
      "typeVersion": 1
    },
    {
      "id": "33800aac-7646-40ce-98b2-213f48f91ad8",
      "name": "计算文件大小",
      "type": "n8n-nodes-base.code",
      "position": [
        1240,
        -520
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Get the input item (using $input.item for single item processing is fine)\nconst item = $input.item;\n\n// --- Define the Expected Binary Property Name ---\n// This is crucial. If the node feeding this Code node outputs binary data\n// under a different property name (e.g., 'file', 'binaryOutput'),\n// you MUST change this value accordingly.\nconst binaryPropertyName = 'data';\n\n// --- Check if any binary data exists and if the specific property is present ---\nif (!item.binary || !item.binary[binaryPropertyName]) {\n  const availableProperties = item.binary ? Object.keys(item.binary).join(', ') : 'none';\n  throw new Error(`Binary property '${binaryPropertyName}' not found on input item. Available binary properties: ${availableProperties}. Check the 'Property Name' setting in the preceding node if it handles binary data (e.g., HTTP Request, Read File).`);\n}\n\n// --- Access Binary Data and Calculate Size using Helpers ---\n// Use the n8n helper function to get the buffer\nconst buffer = await this.helpers.getBinaryDataBuffer(0, binaryPropertyName);\n\n// The length of the buffer *is* the size in bytes\nconst fileSizeInBytes = buffer.length;\n\n// --- Prepare Output JSON ---\nconst outputJson = {\n  fileSizeInBytes: fileSizeInBytes,\n};\n\nreturn outputJson;"
      },
      "typeVersion": 2
    },
    {
      "id": "e6fdc875-2fde-4da3-8330-11e72ba02d33",
      "name": "设置视频属性",
      "type": "n8n-nodes-base.set",
      "position": [
        1240,
        -360
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "185823b8-48f0-423b-a670-33a5215cf348",
              "name": "mimeType",
              "type": "string",
              "value": "={{ $binary.data.mimeType }}"
            },
            {
              "id": "94cce1af-7bcc-49ea-9968-c0b12c2fbc82",
              "name": "displayName",
              "type": "string",
              "value": "=loom_{{ $('Extract Video ID').item.json.videoId }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "3ae06fca-7edb-4949-a9e7-588256ffddd0",
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        4020,
        -460
      ],
      "webhookId": "3ec96773-ccb6-446d-8b2f-0d53e50bfca8",
      "parameters": {
        "text": "=Loom video response from Gemini: {{ $json.candidates[0].content.parts[0].text }}",
        "user": {
          "__rl": true,
          "mode": "username",
          "value": "@giosegar"
        },
        "select": "user",
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "id": "9",
          "name": "Bot access token"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "b564cf3b-1fd7-4b4d-9fda-1e5ba2842224",
      "name": "便签说明4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -440,
        -640
      ],
      "parameters": {
        "width": 420,
        "height": 400,
        "content": "## 如何使用此工作流"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Upload Video Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge1": {
      "main": [
        [
          {
            "node": "Start Upload Session for Gemini",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Loom URL Form": {
      "main": [
        [
          {
            "node": "Valid Loom URL?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Video Active?": {
      "main": [
        [
          {
            "node": "Loop Until Video Is Active",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 5 Seconds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 5 Seconds": {
      "main": [
        [
          {
            "node": "Get Video Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Valid Loom URL?": {
      "main": [
        [
          {
            "node": "Extract Video ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Video ID": {
      "main": [
        [
          {
            "node": "Fetch Download URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Video Status": {
      "main": [
        [
          {
            "node": "Video Active?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Video Data": {
      "main": [
        [
          {
            "node": "Extract File Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Download URL": {
      "main": [
        [
          {
            "node": "Download Video Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate File Size": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract File Details": {
      "main": [
        [
          {
            "node": "Loop Until Video Is Active",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Video Attributes": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Download Video Content": {
      "main": [
        [
          {
            "node": "Calculate File Size",
            "type": "main",
            "index": 0
          },
          {
            "node": "Set Video Attributes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract URL for Uploading": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Until Video Is Active": {
      "main": [
        [
          {
            "node": "Ask Gemini to Summarize Video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 5 Seconds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ask Gemini to Summarize Video": {
      "main": [
        [
          {
            "node": "Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Upload Session for Gemini": {
      "main": [
        [
          {
            "node": "Extract URL for Uploading",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 人工智能, IT 运维

需要付费吗?

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

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

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

作者
GiovanniSegar

GiovanniSegar

@giosegar

I build automations and web apps for businesses. If your business has over $1M in revenue, I'll help you scale with smart systems.

外部链接
在 n8n.io 查看

分享此工作流