AutomationFlowsAI & RAG › Create and Publish AI Videos From Telegram with Veed and Blotato

Create and Publish AI Videos From Telegram with Veed and Blotato

ByVEED @veed on n8n.io

This n8n workflow creates a conversational AI video agent accessible through Telegram. Users chat with a bot to request AI-generated talking-head videos using VEED's MCP tools, then optionally publish to 9 social media platforms via Blotato with a single approval tap.

Event trigger★★★★☆ complexityAI-powered29 nodesTelegram TriggerAgentOpenAI ChatMemory Buffer WindowMcp Client ToolTelegram@Blotato/N8N Nodes Blotato
AI & RAG Trigger: Event Nodes: 29 Complexity: ★★★★☆ AI nodes: yes Added:
Create and Publish AI Videos From Telegram with Veed and Blotato — n8n workflow card showing Telegram Trigger, Agent, OpenAI Chat integration

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

This workflow follows the Agent → OpenAI Chat 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": "BDtNdohn_cl8c4GUuiLXF",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Create & Publish AI Videos from Telegram Chat with VEED and Blotato",
  "tags": [],
  "nodes": [
    {
      "id": "c7200268-e44e-40bd-99f3-8451e231c008",
      "name": "Sticky Note - Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        -224
      ],
      "parameters": {
        "color": 5,
        "width": 500,
        "height": 1352,
        "content": "# Create Telegram AI Video Agent with VEED MCP\n\nA conversational AI video agent accessible through Telegram. Users chat with a bot to create AI talking-head videos using VEED's MCP tools, then optionally publish to social media via Blotato.\n\n## How It Works\n1. **Message**: User sends a message to the Telegram bot\n2. **AI Agent**: OpenAI-powered agent interprets the request and maintains conversation context\n3. **VEED Tools**: Agent uses VEED MCP tools to browse characters/voices and create videos\n4. **Response**: Agent sends the result back via Telegram\n5. **Approval**: If a video URL is detected, user is asked to approve publishing\n6. **Upload**: Video is uploaded to Blotato\n7. **Publish**: Video is posted to 9 platforms in parallel (TikTok, YouTube, Instagram, LinkedIn, Facebook, X, Threads, Bluesky, Pinterest)\n\n## Requirements\n- Telegram Bot Token (via @BotFather)\n- OpenAI API Key\n- VEED MCP OAuth2 credentials\n- Blotato: Install `@blotato/n8n-nodes-blotato` community node + API key (paid plan required)\n\n**Author:** VEED.io"
      },
      "typeVersion": 1
    },
    {
      "id": "19562635-8dea-43a1-ac0e-d879bae17613",
      "name": "Sticky Note - How It Works",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        -224
      ],
      "parameters": {
        "color": 7,
        "width": 452,
        "height": 400,
        "content": "## Conversation Flow\n\nThe AI agent guides users through a video creation flow:\n\n1. User describes the video they want to create\n2. Agent lists available AI characters using `list_characters`\n3. User picks a character\n4. Agent lists voices using `list_voices` (filtered by locale)\n5. User picks a voice\n6. Agent confirms details using `confirm_fabric_video`\n7. Agent creates the video using `create_fabric_video`\n8. Agent tracks progress with `get_generation_status`\n9. Agent delivers the video URL when complete\n10. User is asked: \"Publish to social media?\"\n11. If approved, video is uploaded to Blotato then posted to all platforms in parallel\n"
      },
      "typeVersion": 1
    },
    {
      "id": "65578691-e4af-4066-a007-cf7d2d97f5b8",
      "name": "Sticky Note - VEED Tools",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        192
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 224,
        "content": "\n## Available VEED MCP Tools\n- `list_workspaces` - Show available workspaces\n- `list_characters` - Browse AI avatar characters\n- `list_voices` - Browse voices by locale\n- `confirm_fabric_video` - Preview video before creating\n- `create_fabric_video` - Create a talking-head video\n- `get_generation_status` - Check video progress\n- `get_credit_balance` - Check remaining credits"
      },
      "typeVersion": 1
    },
    {
      "id": "329e1034-edec-45c1-b56b-4c57bfe12b1c",
      "name": "Sticky Note - Blotato Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2976,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 620,
        "content": "## Blotato Setup\n\n1. Install the `@blotato/n8n-nodes-blotato` community node in n8n\n2. Sign up at [blotato.com](https://blotato.com) (paid plan required)\n3. Connect your social media accounts in the Blotato dashboard\n4. Go to Settings > API and copy your API key\n5. In n8n, create Blotato API credentials with your key\n6. Configure each platform node with your `accountId` (select from the dropdown list)\n\n## Pre-configured Platforms\nAll 9 platforms are wired and ready. Configure the `accountId` in each platform node:\n- TikTok\n- YouTube (also set title & privacy)\n- Instagram\n- LinkedIn\n- Facebook (also set Page ID)\n- Twitter / X\n- Threads\n- Bluesky\n- Pinterest (also set Board ID)\n\nDisable any platform node you don't need."
      },
      "typeVersion": 1
    },
    {
      "id": "f5f15fb6-4494-43b0-9128-a4302585ba81",
      "name": "Sticky Note - Approval Flow",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2528,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 424,
        "content": "## Approval & Publishing Flow\n\nAfter the AI agent responds, the workflow checks if the output contains a VEED video URL using the `VIDEO_READY:` marker.\n\nIf a video is found:\n1. Telegram sends an approval prompt with Approve/Reject buttons\n2. Workflow pauses and waits up to 24 hours for a response\n3. **Approve**: Video is uploaded to Blotato, then posted to all 9 platforms in parallel\n4. **Reject**: User gets a confirmation that publishing was skipped\n\nThe caption is extracted from the first 200 characters of the agent's response. Edit the **Set Caption** node to customize."
      },
      "typeVersion": 1
    },
    {
      "id": "59b6e3b1-0a7b-48dd-aeb2-5fd81b1e486f",
      "name": "\ud83d\udce9 Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        1328,
        448
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "5d5af7e1-c89f-456a-8c05-9fec7015f6ed",
      "name": "\ud83e\udd16 AI Video Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1536,
        448
      ],
      "parameters": {
        "text": "={{ $json.message.text }}",
        "options": {
          "maxIterations": 15,
          "systemMessage": "You are a friendly AI video creation assistant powered by VEED. You help users create professional talking-head videos with AI avatars through Telegram.\n\n## Your Capabilities\nYou have access to VEED's video creation tools:\n- list_workspaces - Show available workspaces\n- list_characters - Browse AI avatar characters (optional filter: gender male/female)\n- list_voices - Browse voices (requires locale e.g. \"en\", optional filter: gender Female/Male/Neutral)\n- confirm_fabric_video - Preview video details before creating (requires script, voiceId, characterId)\n- create_fabric_video - Create a video (requires script, voiceId, characterId; optional aspectRatio: square/landscape/portrait)\n- get_generation_status - Check video progress (requires jobId)\n- get_credit_balance - Check remaining credits\n\n## Video Creation Flow\nGuide users through these steps:\n1. Understand their need - Ask what video they want to create and what the script should say\n2. Choose a character - Show available AI avatars using list_characters. Let them pick.\n3. Choose a voice - Ask preferred language/locale, show voices using list_voices. Let them pick.\n4. Confirm details - Use confirm_fabric_video to summarize before creating\n5. Create the video - Use create_fabric_video with confirmed parameters\n6. Track progress - IMMEDIATELY call get_generation_status with the returned jobId\n7. Deliver result - Share the video URL when complete\n\n## Important Guidelines\n- Always confirm the script with the user before creating a video\n- Video generation takes 1-5 minutes. Tell the user to be patient.\n- Each video costs ~8 credits per second. Offer to check balance with get_credit_balance if asked.\n- If a user greets you, introduce yourself and explain what you can do\n- Keep responses concise for Telegram readability\n- Default locale to \"en\" if user doesn't specify\n- After create_fabric_video returns a jobId, ALWAYS immediately call get_generation_status\n\n## Video URL Output Rule\nWhen a video has finished generating and you have the final video URL from get_generation_status, include it on its own line prefixed with the exact marker VIDEO_READY: followed by the URL. Example:\nVIDEO_READY: https://www.veed.io/view/abc123\nThis marker is used by the downstream publishing flow. ONLY use this marker for the final completed video URL, NEVER for thumbnails, previews, workspace links, or any other URLs.\n\n## Telegram Formatting Rules\nYou are responding inside Telegram which has limited formatting support.\n\nNEVER use:\n- Markdown tables (no | pipes)\n- Headers (no # symbols)\n- Horizontal rules\n\nALWAYS use:\n- *bold* for names and labels\n- `backticks` for IDs that users need to copy\n- [text](url) for clickable links\n- Numbered lists (1. 2. 3.) for selections\n\nWhen listing characters, use this format (one line per character):\n1. *Name* (Gender) - `character-id` [Preview](thumbnail_url)\n\nWhen listing voices, use this format (one line per voice):\n1. *Name* (Gender, Locale) - `voice-id`\n\nIf a list exceeds 20 items, show only the first 20 and tell the user how many more are available, asking them to narrow by gender or locale.\n\nEnd every selection list with: \"Reply with the number to select.\""
        },
        "promptType": "define"
      },
      "typeVersion": 3.1
    },
    {
      "id": "3900e223-007e-4e74-bddb-6bf80b1924dd",
      "name": "\ud83e\udde0 OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1440,
        672
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-nano",
          "cachedResultName": "gpt-5-nano"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "39387542-5b8e-477a-8257-108fdad1fe21",
      "name": "\ud83d\udcbe Conversation Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        1600,
        672
      ],
      "parameters": {
        "sessionKey": "={{ $('\ud83d\udce9 Telegram Trigger').item.json.message.chat.id }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 20
      },
      "typeVersion": 1.3
    },
    {
      "id": "3f18584c-021a-46ec-bbbd-811b88075bd4",
      "name": "\ud83c\udfac VEED MCP Tools",
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "position": [
        1760,
        672
      ],
      "parameters": {
        "options": {},
        "endpointUrl": "https://www.veed.io/api/v1/mcp",
        "authentication": "mcpOAuth2Api"
      },
      "typeVersion": 1.2
    },
    {
      "id": "17588487-0f31-445f-9b34-2b71cc0beab2",
      "name": "\ud83d\udce4 Send Agent Response",
      "type": "n8n-nodes-base.telegram",
      "onError": "continueRegularOutput",
      "position": [
        1872,
        448
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "chatId": "={{ $('\ud83d\udce9 Telegram Trigger').item.json.message.chat.id }}",
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "a1f14a33-3112-4508-b526-f33d8597e78c",
      "name": "\ud83d\udccb Extract Video URL",
      "type": "n8n-nodes-base.code",
      "position": [
        2096,
        448
      ],
      "parameters": {
        "jsCode": "const output = $('\ud83e\udd16 AI Video Agent').item.json.output;\nconst markerMatch = output.match(/VIDEO_READY:\\s*(https?:\\/\\/[^\\s)>\\]]+)/i);\nreturn [{\n  json: {\n    video_url: markerMatch ? markerMatch[1] : null,\n    has_video: !!markerMatch,\n    agent_output: output,\n    chat_id: $('\ud83d\udce9 Telegram Trigger').item.json.message.chat.id\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "0f96e340-6426-42a1-8e38-0930595b8e9d",
      "name": "\u2705 Has Video URL?",
      "type": "n8n-nodes-base.if",
      "position": [
        2304,
        448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "check-has-video",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.has_video }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "41b40be3-7e35-4e11-91a9-b5b1ab2ee0b4",
      "name": "\ud83d\udce9 Publish to Social Media?",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2528,
        432
      ],
      "parameters": {
        "chatId": "={{ $json.chat_id }}",
        "message": "={{ \"Your video is ready!\\n\\n\" + $json.video_url + \"\\n\\nWould you like to publish it to social media via Blotato?\" }}",
        "options": {
          "limitWaitTime": {
            "values": {
              "resumeAmount": 24
            }
          }
        },
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double"
          }
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4f5b76b1-2d05-4459-bdf3-a1c431626f39",
      "name": "\u2705 Approved?",
      "type": "n8n-nodes-base.if",
      "position": [
        2752,
        432
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "check-approved",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "fc21e072-460d-4fa8-95f9-40d19f4e5219",
      "name": "\ud83d\udce4 Send Skipped Message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2976,
        672
      ],
      "parameters": {
        "text": "No problem! Your video won't be published to social media. You can still share it manually using the link above.",
        "chatId": "={{ $('\ud83d\udccb Extract Video URL').item.json.chat_id }}",
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "e013af82-e304-4c0d-91e2-0b1da2869b1c",
      "name": "\u2699\ufe0f Set Caption",
      "type": "n8n-nodes-base.set",
      "position": [
        2976,
        416
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "set-caption",
              "name": "caption",
              "type": "string",
              "value": "={{ $('\ud83d\udccb Extract Video URL').item.json.agent_output.substring(0, 200) }}"
            },
            {
              "id": "set-video-url",
              "name": "video_url",
              "type": "string",
              "value": "={{ $('\ud83d\udccb Extract Video URL').item.json.video_url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "dfe122c7-9112-456b-9a44-c2da1bfdbd79",
      "name": "\ud83d\udce4 Upload Video to Blotato",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3184,
        416
      ],
      "parameters": {
        "mediaUrl": "={{ $json.video_url }}",
        "resource": "media"
      },
      "typeVersion": 2
    },
    {
      "id": "d70caf4c-cc1e-4cbe-8d61-bd0e21ccd337",
      "name": "TikTok",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        -144
      ],
      "parameters": {
        "options": {},
        "platform": "tiktok",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your TikTok account"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "360fdb93-44ee-4b57-bc0c-3effe4a617a2",
      "name": "YouTube",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        0
      ],
      "parameters": {
        "options": {},
        "platform": "youtube",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your YouTube account"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}",
        "postCreateYoutubeOptionTitle": "={{ $('\u2699\ufe0f Set Caption').item.json.caption.substring(0, 100) }}",
        "postCreateYoutubeOptionPrivacyStatus": "private",
        "postCreateYoutubeOptionShouldNotifySubscribers": false
      },
      "typeVersion": 2
    },
    {
      "id": "d673fa52-18e3-4067-b23b-9a1a96d4559b",
      "name": "Instagram",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        144
      ],
      "parameters": {
        "options": {},
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your Instagram account"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "8fef3bf1-5095-4cb5-afe6-90a4f74b3549",
      "name": "LinkedIn",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        272
      ],
      "parameters": {
        "options": {},
        "platform": "linkedin",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your LinkedIn account"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "aebaf671-f8e9-4d10-9268-ef68e4346b5c",
      "name": "Facebook",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        416
      ],
      "parameters": {
        "options": {},
        "platform": "facebook",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your Facebook account"
        },
        "facebookPageId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your Facebook Page"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "a9273b66-c125-49fe-a953-9bbbb85b3a7f",
      "name": "Twitter (X)",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        560
      ],
      "parameters": {
        "options": {},
        "platform": "twitter",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your X account"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "19c5cb56-fb44-4f39-a833-08583d412ae6",
      "name": "Threads",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        704
      ],
      "parameters": {
        "options": {},
        "platform": "threads",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your Threads account"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "a84a9f54-6cfc-4c22-9835-a96b8e3e5002",
      "name": "Bluesky",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        832
      ],
      "parameters": {
        "options": {},
        "platform": "bluesky",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your Bluesky account"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "19ca265b-53a0-4484-8c30-5e5c5a090f35",
      "name": "Pinterest",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3504,
        976
      ],
      "parameters": {
        "options": {},
        "platform": "pinterest",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Select your Pinterest account"
        },
        "postContentText": "={{ $('\u2699\ufe0f Set Caption').item.json.caption }}",
        "pinterestBoardId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "45e2ede8-4136-42a7-93bc-7716bdc4136e",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        3760,
        304
      ],
      "parameters": {
        "mode": "chooseBranch",
        "numberInputs": 9
      },
      "typeVersion": 3.2
    },
    {
      "id": "92fab343-deac-418d-95bf-7088fecf37f4",
      "name": "\ud83d\udce4 Send Publish Summary",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3984,
        416
      ],
      "parameters": {
        "text": "={{ 'Your video has been published to all configured platforms via Blotato!\\n\\nVideo: ' + $('\ud83d\udccb Extract Video URL').item.json.video_url }}",
        "chatId": "={{ $('\ud83d\udccb Extract Video URL').item.json.chat_id }}",
        "additionalFields": {}
      },
      "typeVersion": 1.2
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "599af6c6-e7ed-494f-b69a-59acefd36312",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "\ud83d\udce4 Send Publish Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "TikTok": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Bluesky": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 7
          }
        ]
      ]
    },
    "Threads": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 6
          }
        ]
      ]
    },
    "YouTube": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Facebook": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 4
          }
        ]
      ]
    },
    "LinkedIn": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "Instagram": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Pinterest": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 8
          }
        ]
      ]
    },
    "Twitter (X)": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 5
          }
        ]
      ]
    },
    "\u2705 Approved?": {
      "main": [
        [
          {
            "node": "\u2699\ufe0f Set Caption",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\ud83d\udce4 Send Skipped Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u2699\ufe0f Set Caption": {
      "main": [
        [
          {
            "node": "\ud83d\udce4 Upload Video to Blotato",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u2705 Has Video URL?": {
      "main": [
        [
          {
            "node": "\ud83d\udce9 Publish to Social Media?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83c\udfac VEED MCP Tools": {
      "ai_tool": [
        [
          {
            "node": "\ud83e\udd16 AI Video Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "\ud83e\udd16 AI Video Agent": {
      "main": [
        [
          {
            "node": "\ud83d\udce4 Send Agent Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce9 Telegram Trigger": {
      "main": [
        [
          {
            "node": "\ud83e\udd16 AI Video Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udccb Extract Video URL": {
      "main": [
        [
          {
            "node": "\u2705 Has Video URL?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83e\udde0 OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "\ud83e\udd16 AI Video Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udcbe Conversation Memory": {
      "ai_memory": [
        [
          {
            "node": "\ud83e\udd16 AI Video Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce4 Send Agent Response": {
      "main": [
        [
          {
            "node": "\ud83d\udccb Extract Video URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce4 Upload Video to Blotato": {
      "main": [
        [
          {
            "node": "TikTok",
            "type": "main",
            "index": 0
          },
          {
            "node": "YouTube",
            "type": "main",
            "index": 0
          },
          {
            "node": "Instagram",
            "type": "main",
            "index": 0
          },
          {
            "node": "LinkedIn",
            "type": "main",
            "index": 0
          },
          {
            "node": "Facebook",
            "type": "main",
            "index": 0
          },
          {
            "node": "Twitter (X)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Threads",
            "type": "main",
            "index": 0
          },
          {
            "node": "Bluesky",
            "type": "main",
            "index": 0
          },
          {
            "node": "Pinterest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce9 Publish to Social Media?": {
      "main": [
        [
          {
            "node": "\u2705 Approved?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This n8n workflow creates a conversational AI video agent accessible through Telegram. Users chat with a bot to request AI-generated talking-head videos using VEED's MCP tools, then optionally publish to 9 social media platforms via Blotato with a single approval tap.

Source: https://n8n.io/workflows/14290/ — 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 template is designed for anyone who wants to use Telegram as a personal AI assistant hub. If you often juggle tasks, emails, calendars, and expenses across multiple tools, this workflow consolida

OpenAI Chat, Memory Buffer Window, Mcp Client Tool +11
AI & RAG

Meet Troy, your intelligent personal assistant that seamlessly manages your Google Calendar and Tasks through Telegram. This workflow combines AI-powered natural language processing with MCP (Model Co

Mcp Trigger, Google Calendar Tool, Google Tasks Tool +7
AI & RAG

This n8n workflow transforms your Telegram messenger into a personal assistant for creating and publishing X-Threads. You can simply send an idea as a text or voice message, collaboratively edit the A

OpenAI Chat, OpenAI, Telegram +4
AI & RAG

AI LinkedIn Content Bot with Approval Loop

OpenAI Chat, OpenAI, Telegram +4
AI & RAG

Telegram Googletaskstool. Uses telegramTrigger, mcpTrigger, agent, mcpClientTool. Event-driven trigger; 21 nodes.

Telegram Trigger, Mcp Trigger, Agent +6