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 →
{
"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
}
]
]
}
}
}
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
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
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
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
AI LinkedIn Content Bot with Approval Loop
Telegram Googletaskstool. Uses telegramTrigger, mcpTrigger, agent, mcpClientTool. Event-driven trigger; 21 nodes.