AutomationFlowsAI & RAG › Multimodal Slack AI Assistant with Voice, Image & Video Processing

Multimodal Slack AI Assistant with Voice, Image & Video Processing

ByKeith Uy @keithuy on n8n.io

This is a base template for anyone trying to develop a Slack bot AI Agent. This base allows for multiple inputs (Voice, Picture, Video, and Text inputs) to be processed by an AI model of their choosing to a get a User started. From here, the User may connect any tools that they…

Event trigger★★★★★ complexityAI-powered34 nodesAgentOpenAIMemory Buffer WindowDate Time ToolAnthropic ChatGoogle GeminiSlack TriggerSlack
AI & RAG Trigger: Event Nodes: 34 Complexity: ★★★★★ AI nodes: yes Added:

This workflow corresponds to n8n.io template #9149 — we link there as the canonical source.

This workflow follows the Agent → Googlegemini recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "0sz7800El6YsOEhI",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Slack AI Agent Base",
  "tags": [],
  "nodes": [
    {
      "id": "ce4185b8-002f-4d1a-afb5-7b92f72a6654",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        224,
        176
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "voice",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "2c19aba8-aba2-4cf2-aefc-1f1af9277f5d",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.files[0].media_display_type }}",
                    "rightValue": "audio"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "picture",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "5e324898-f3d5-4a84-8ca4-94a33849cd6d",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.files[0].mimetype }}",
                    "rightValue": "image/png"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "video",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "7b448a1b-5f96-42e3-bfce-dad6b5c45f01",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.files[0].mimetype }}",
                    "rightValue": "video/mp4"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "text",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "ef6ba691-a321-4458-af08-6b9f2f39b18a",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.blocks[0].elements[0].elements[1].type }}",
                    "rightValue": "text"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "f8764c3f-e0d7-4409-825d-805ed9fcb987",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1616,
        144
      ],
      "parameters": {
        "text": "={{ $json[\"User Input\"] }}",
        "options": {
          "systemMessage": "You are a helpful, intelligent assistant.\n\nOutput ONLY a plain UTF-8 string for Telegram. \nNo JSON. No code fences. No prefaces. \nIf content is empty, output \"\u2026\"."
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "222d87bc-66ae-48d4-8272-29aae5ce9f03",
      "name": "Transcribe a recording",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        976,
        16
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "e5041fd3-f5e7-4351-b539-364f51ed37f3",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        1728,
        448
      ],
      "parameters": {
        "sessionKey": "={{ $('Slack Trigger').item.json.channel }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 50
      },
      "typeVersion": 1.3
    },
    {
      "id": "21dc9d8d-c911-469b-9b93-92ee88c25a96",
      "name": "Date & Time",
      "type": "n8n-nodes-base.dateTimeTool",
      "position": [
        1968,
        448
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "ddff0cde-feb3-415e-9357-33a1d52f8004",
      "name": "Anthropic Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        1456,
        448
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-20250514",
          "cachedResultName": "Claude Sonnet 4"
        },
        "options": {
          "maxTokensToSample": 10000
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "f52eba8b-f1e1-4b58-8dbd-5070673c809b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 560,
        "content": "# INSTRUCTIONS\n\n## 1. Create your chat bot and generate access token in Slack\n(Check documentation for more in-depth help)\n-> Create Slack bot \n-> Allow Permissions\n-> Install App in desired workspace\n-> Copy access token for Slack Connection in Step 2 below\n\n## 2. Create Credentials in n8n\n-> Open Slack trigger node\n-> Click create credential\n-> Paste access token\n-> Save\n\n## 3. Create LLM access token\nDifferent per LLM but search your LLM + API in google\n-> (will have to create an account with the LLM platform)\n-> buy credits to use LLM API\n-> Generate Access token\n-> Paste token in LLM node"
      },
      "typeVersion": 1
    },
    {
      "id": "ffa1adaa-36e0-488b-a1da-42c11a4c0f6c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 208,
        "height": 496,
        "content": "### Waits for Slack message to start workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "bb7289d3-db39-416f-baec-e3fb131b81f3",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 208,
        "height": 496,
        "content": "### Determines what type of message was sent"
      },
      "typeVersion": 1
    },
    {
      "id": "b31e49df-04c8-498f-80e4-33e400007b22",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 192,
        "height": 208,
        "content": "### Gets Audio File"
      },
      "typeVersion": 1
    },
    {
      "id": "f3db8810-569e-4bf7-8147-76aa6e2e4a25",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        928,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 208,
        "height": 208,
        "content": "### Uses OpenAI to Transcribe Recording"
      },
      "typeVersion": 1
    },
    {
      "id": "8f0822c6-9479-4aa1-92c6-cc0cb43079bc",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        352
      ],
      "parameters": {
        "width": 224,
        "height": 224,
        "content": "### Choose any LLM you want here"
      },
      "typeVersion": 1
    },
    {
      "id": "a39401d6-fed8-47ea-82af-de561df1b32e",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1584,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 288,
        "height": 368,
        "content": "### Base AI Agent. Adjust \"system prompt\" to personalize this agent to your needs"
      },
      "typeVersion": 1
    },
    {
      "id": "d8b86141-a03a-419c-854d-a57269cc4898",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1904,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 224,
        "height": 368,
        "content": "### Sends AI Agent output to you in Slack"
      },
      "typeVersion": 1
    },
    {
      "id": "3fefd42d-52cc-438c-b4cb-99620e58f6a6",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1664,
        352
      ],
      "parameters": {
        "width": 208,
        "height": 224,
        "content": "### Choose # of messages the LLM can read back"
      },
      "typeVersion": 1
    },
    {
      "id": "028b7ead-a437-470e-920e-5d0d1c9cae98",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1904,
        352
      ],
      "parameters": {
        "width": 224,
        "height": 224,
        "content": "### Add tools that the LLM has access to here"
      },
      "typeVersion": 1
    },
    {
      "id": "f9b36773-7ded-446d-86ac-889740af3699",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        192
      ],
      "parameters": {
        "color": 5,
        "width": 192,
        "height": 208,
        "content": "### Gets Photo File"
      },
      "typeVersion": 1
    },
    {
      "id": "d49cb62d-917f-4cb9-9080-363f3259d861",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        928,
        192
      ],
      "parameters": {
        "color": 5,
        "width": 208,
        "height": 208,
        "content": "### Uses Gemini to analyze photo"
      },
      "typeVersion": 1
    },
    {
      "id": "2f40620a-0c0b-4f99-ba5a-6700c3cc38b3",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1232,
        112
      ],
      "parameters": {
        "numberInputs": 4
      },
      "typeVersion": 3.2
    },
    {
      "id": "20c873b1-a8ea-40ce-a0e6-0b424a76ff8d",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 160,
        "height": 368,
        "content": "### Creates a unified input to pass to AI Agent"
      },
      "typeVersion": 1
    },
    {
      "id": "db7460e7-6c91-40de-989c-aa729d26bd85",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        432
      ],
      "parameters": {
        "color": 5,
        "width": 192,
        "height": 208,
        "content": "### Gets Video File"
      },
      "typeVersion": 1
    },
    {
      "id": "25433506-93df-4a6b-91c1-65bbe24427f5",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        928,
        432
      ],
      "parameters": {
        "color": 5,
        "width": 208,
        "height": 208,
        "content": "### Uses Gemini to analyze Video"
      },
      "typeVersion": 1
    },
    {
      "id": "1c3a6c58-96b3-46be-9a48-8a8d951076c2",
      "name": "Analyze video",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        976,
        496
      ],
      "parameters": {
        "text": "={{ $('Slack Trigger').item.json.text }}",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "video",
        "inputType": "binary",
        "operation": "analyze"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "695ac1ab-48bd-48f3-9797-482fb4bb5ade",
      "name": "Analyze an image",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        976,
        256
      ],
      "parameters": {
        "text": "={{ $('Slack Trigger').item.json.text }}",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "image",
        "inputType": "binary",
        "operation": "analyze"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "dfbb869b-c80b-40c8-8df8-11a951a93b77",
      "name": "Slack Trigger",
      "type": "n8n-nodes-base.slackTrigger",
      "position": [
        -16,
        208
      ],
      "parameters": {
        "options": {},
        "trigger": [
          "app_mention",
          "message"
        ],
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09HD4Z93T7",
          "cachedResultName": "ai-agent"
        }
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4e18fc91-e742-4da4-8416-9a9b57cb2de0",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        1968,
        144
      ],
      "parameters": {
        "text": "={{ $('AI Agent').item.json.output }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "C09HD4Z93T7"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "1e78889b-6686-4f45-91cc-72df6843df10",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        752,
        16
      ],
      "parameters": {
        "url": "={{ $json.url_private }}",
        "options": {
          "redirect": {
            "redirect": {}
          },
          "response": {
            "response": {}
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [Your bot token here]"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0623e545-fa6c-4162-80ff-85a9ec99b148",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 192,
        "height": 688,
        "content": "### Download File"
      },
      "typeVersion": 1
    },
    {
      "id": "e9328967-f8c6-4654-89b0-e5ddf4945b3a",
      "name": "HTTP Request1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        752,
        256
      ],
      "parameters": {
        "url": "={{ $json.url_private }}",
        "options": {
          "redirect": {
            "redirect": {}
          },
          "response": {
            "response": {}
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [Your bot token here]"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "68b9c45f-b20a-42ce-9158-000c43763128",
      "name": "HTTP Request2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        752,
        496
      ],
      "parameters": {
        "url": "={{ $json.url_private }}",
        "options": {
          "redirect": {
            "redirect": {}
          },
          "response": {
            "response": {}
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer [Your bot token here]"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b00f89d5-d32c-4417-a2d7-ffed1b1b8572",
      "name": "Get Audio File",
      "type": "n8n-nodes-base.slack",
      "position": [
        528,
        16
      ],
      "parameters": {
        "fileId": "={{ $json.files[0].id }}",
        "resource": "file",
        "operation": "get"
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "afa71e24-0ea2-464b-bb8d-c6af2c09cfab",
      "name": "Get a Picture File",
      "type": "n8n-nodes-base.slack",
      "position": [
        528,
        256
      ],
      "parameters": {
        "fileId": "={{ $json.files[0].id }}",
        "resource": "file",
        "operation": "get"
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "ab84c6ee-0704-4846-85ae-c94d3b69d12b",
      "name": "Get Video File",
      "type": "n8n-nodes-base.slack",
      "position": [
        528,
        496
      ],
      "parameters": {
        "fileId": "={{ $json.files[0].id }}",
        "resource": "file",
        "operation": "get"
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "1753c69a-cf19-41d9-b65a-e75d1dd685c0",
      "name": "Set \"User Input\" for AI Agent",
      "type": "n8n-nodes-base.set",
      "position": [
        1424,
        144
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4f68c522-dd1e-45dc-ab39-f5b640bfe274",
              "name": "User Input",
              "type": "string",
              "value": "={{$json.text     || $json.message?.text     || $json.content     || $json[\"data\"]     || $json.result     || $json.transcription     || \"\"}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6c042ce2-b81b-4765-9f11-e16f5cb33755",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Set \"User Input\" for AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "Get Audio File",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get a Picture File",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Video File",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Date & Time": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Transcribe a recording",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze video": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "HTTP Request1": {
      "main": [
        [
          {
            "node": "Analyze an image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request2": {
      "main": [
        [
          {
            "node": "Analyze video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Slack Trigger": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Audio File": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Video File": {
      "main": [
        [
          {
            "node": "HTTP Request2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze an image": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get a Picture File": {
      "main": [
        [
          {
            "node": "HTTP Request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe a recording": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set \"User Input\" for AI Agent": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This is a base template for anyone trying to develop a Slack bot AI Agent. This base allows for multiple inputs (Voice, Picture, Video, and Text inputs) to be processed by an AI model of their choosing to a get a User started. From here, the User may connect any tools that they…

Source: https://n8n.io/workflows/9149/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This is a base template for anyone trying to develop a telegram AI Agent. This base allows for multiple inputs (Voice, Picture, Video, and Text inputs) to be processed by an AI model of their choosing

Telegram Trigger, Agent, OpenAI +5
AI & RAG

Chat with a multi-agent system to write a blog. The orchestrator advances through research, headlines, hooks, outline, intro, draft, and final polish–one phase per reply—outputting options and asking

Agent, Tool Workflow, Memory Buffer Window +9
AI & RAG

Slack workspace with admin access Anthropic API key (You can replace with other LLM Chat) Explorium API Key Go to api.slack.com/apps Click Create New App → From scratch Give it name (e.g., "Explorium

Slack Trigger, HTTP Request, Agent +4
AI & RAG

Who is this for? Agencies, consultants, and service providers who conduct discovery calls and need to quickly turn conversations into professional proposals.

Tool Think, Tool Calculator, Agent Tool +18
AI & RAG

📺 Full walkthrough video: https://youtu.be/-kpt0BwjKls

HTTP Request, OpenAI, WhatsApp +11