This workflow corresponds to n8n.io template #10713 β we link there as the canonical source.
This workflow follows the Agent β Google Drive 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": "yFT0myYXT8EL6Did",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Up Video Project",
"tags": [],
"nodes": [
{
"id": "2eb46252-42bf-4db6-996b-aa5fb523dbdc",
"name": "Upload file1",
"type": "n8n-nodes-base.googleDrive",
"position": [
176,
-1072
],
"parameters": {
"name": "=Vidio Project",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive",
"cachedResultUrl": "https://drive.google.com/drive/my-drive",
"cachedResultName": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "12QmhGydAPjYma1dLb40J6yD8V4azR8ok",
"cachedResultUrl": "https://drive.google.com/drive/folders/12QmhGydAPjYma1dLb40J6yD8V4azR8ok",
"cachedResultName": "My Projects Journey "
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "09050f3a-9c99-48b7-8064-b5e51a8d79d7",
"name": "Get a file1",
"type": "n8n-nodes-base.telegram",
"position": [
-16,
-1072
],
"parameters": {
"fileId": "={{ $json.message.video.file_id }}",
"resource": "file",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "04673879-5c55-4ca5-9a04-e6d24dbda5fb",
"name": "Append row in sheet1",
"type": "n8n-nodes-base.googleSheets",
"position": [
400,
-1072
],
"parameters": {
"columns": {
"value": {
"Ukuran": "={{ ($json.size / (1024*1024)).toFixed(2) }} MB",
"ID File": "={{ $json.id }}",
"Duration": "={{ $('Up Video Project').item.json.message.video.duration }}",
"Nama File": "={{ $json.name }}",
"Link Drive": "={{ $json.webViewLink }}",
"Last Update": "={{ new Date().toLocaleString(\"sv-SE\", { timeZone: \"Asia/Jakarta\" }).replace(\"T\", \" \") }}",
"Time Upload": "={{ new Date($json.createdTime).toLocaleString(\"id-ID\", { timeZone: \"Asia/Jakarta\" }) }}"
},
"schema": [
{
"id": "ID File",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ID File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Nama File",
"type": "string",
"display": true,
"required": false,
"displayName": "Nama File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link Drive",
"type": "string",
"display": true,
"required": false,
"displayName": "Link Drive",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Duration",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Duration",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Ukuran",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Ukuran",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Time Upload",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Time Upload",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Update",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Last Update",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"No"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2144684696,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg/edit#gid=2144684696",
"cachedResultName": "Up Video Jouney Project"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg/edit?usp=drivesdk",
"cachedResultName": "Data Upload Vidio"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "980a5b64-69a4-464d-b31c-01cf791c1181",
"name": "Send a text message3",
"type": "n8n-nodes-base.telegram",
"position": [
624,
-1072
],
"parameters": {
"text": "=Vidio is in!\n\nRename the file:\n`/edit {{ $json['File ID'] }} name`",
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"additionalFields": {
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "c74de640-ad29-4c01-8056-780491ea3dac",
"name": "Switch1",
"type": "n8n-nodes-base.switch",
"position": [
-384,
-240
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "60919e73-3d5e-4630-bdac-e08cd9d412bc",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.video }}",
"rightValue": ""
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "39373caa-e41b-44ee-b616-419d3a04c5dc",
"operator": {
"type": "string",
"operation": "startsWith"
},
"leftValue": "={{ $json.message.text }}",
"rightValue": "/edit"
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5443df3b-55ed-4f6c-b4af-c4c8351dcde3",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.text }}",
"rightValue": ""
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "ec529d29-81b5-4a26-a414-2f62a830439a",
"name": "Update file1",
"type": "n8n-nodes-base.googleDrive",
"position": [
176,
-272
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "update",
"newUpdatedFileName": "={{ $json.name }}"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "02c2fb3a-7090-4850-8747-f9856a1d2861",
"name": "Code1",
"type": "n8n-nodes-base.code",
"position": [
-16,
-272
],
"parameters": {
"jsCode": "const text = $json.message.text;\nconst parts = text.split(\" \");\n\nreturn [\n {\n json: {\n original: text,\n command: parts[0], \n id: parts[1], \n name: parts.slice(2).join(\" \") \n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "ff864633-ac91-4e09-bc0c-060dff00c2f2",
"name": "Update row in sheet1",
"type": "n8n-nodes-base.googleSheets",
"position": [
400,
-272
],
"parameters": {
"columns": {
"value": {
"ID File": "={{ $json.id }}",
"Nama File": "={{ $json.name }}",
"Last Update": "={{ new Date().toLocaleString(\"sv-SE\", { timeZone: \"Asia/Jakarta\" }).replace(\"T\", \" \") }}"
},
"schema": [
{
"id": "ID File",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ID File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Nama File",
"type": "string",
"display": true,
"required": false,
"displayName": "Nama File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link Drive",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Link Drive",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Duration",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Duration",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Ukuran",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Ukuran",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Time Upload",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Time Upload",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Update",
"type": "string",
"display": true,
"required": false,
"displayName": "Last Update",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"ID File"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2144684696,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg/edit#gid=2144684696",
"cachedResultName": "Up Video Jouney Project"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg/edit?usp=drivesdk",
"cachedResultName": "Data Upload Vidio"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "e1671455-e214-4b89-be35-e235f3f68211",
"name": "Send a text message4",
"type": "n8n-nodes-base.telegram",
"position": [
624,
-272
],
"parameters": {
"text": "=Name has been changed : {{ $json['Nama File'] }}",
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"additionalFields": {
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "97c22a46-cef9-43ec-ba02-bbf1eb9babaa",
"name": "AI Agent1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
80,
400
],
"parameters": {
"text": "={{ $json.message.text }}",
"options": {
"systemMessage": "You are an AI agent and the user\u2019s personal assistant, responsible for answering any questions from the user.\nIf the question involves data, use the **Data Vidio** tool to provide the answer.\n\n**Note:**\n\n* ALWAYS USE EMOJIS WHEN RESPONDING. \ud83d\ude04\n* ALWAYS CHECK THE TOOL (**Data Vidio**) FIRST TO SEE IF IT HAS AN ANSWER. \ud83d\udd0d\n"
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "804880c6-b9ff-483f-9efd-b57023006b43",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
16,
624
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e4c909f6-6e9b-49ac-98fb-d8a1b49daa5b",
"name": "Simple Memory1",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
144,
624
],
"parameters": {
"sessionKey": "={{ $('Switch1').item.json.message.chat.id }}",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "0096ecc7-dab5-467c-bcae-6456a18ec213",
"name": "Data Vidio1",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
272,
624
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2144684696,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg/edit#gid=2144684696",
"cachedResultName": "Up Video Jouney Project"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WcP7wqEPZZlL9mor8enGIP2yJXZ7GfFwD0bzYFKk-Vg/edit?usp=drivesdk",
"cachedResultName": "Data Upload Vidio"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "733e2d39-bbdf-43d3-9590-a0785c216a1f",
"name": "Send a text message5",
"type": "n8n-nodes-base.telegram",
"position": [
480,
400
],
"parameters": {
"text": "={{ $json.output }}",
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"additionalFields": {
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "29536951-6c67-44a6-a791-e383cc0aebb5",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-688,
-640
],
"parameters": {
"width": 496,
"height": 608,
"content": "## 1. Trigger & Routing\n\nTelegram Trigger \u2192 Switch\n\n**Purpose**\n* Detects every incoming message/video from your Telegram bot.\n* The Switch node routes the message into 3 paths:\n\n * **Video** \u2192 automatic upload flow.\n * **/edit** \u2192 rename file flow.\n * **Any text** \u2192 handled by the AI Agent.\n---\n**Rules Used**\n* `message.video exists` \u2192 upload process.\n* `message.text startsWith(\"/edit\")` \u2192 rename process.\n* `message.text exists` \u2192 AI response."
},
"typeVersion": 1
},
{
"id": "11c664ed-a5ed-451d-a636-f8cb482d1ea2",
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-608,
-224
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "e94bb294-e4a4-4bea-be6b-7be7dbba904e",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1376,
-800
],
"parameters": {
"color": 4,
"width": 624,
"height": 992,
"content": "## \ud83d\ude80 Overview\n\nThis workflow automates Telegram-to-Google Drive video uploads with smart renaming, Google Sheets logging, and Gemini AI assistance. Ideal for creators, educators, and automation-focused teams.\n\n\n## \u2699\ufe0f How It Works\n\n* **Telegram Trigger** \u2192 Starts the workflow when a user sends a video to your bot.\n* **Switch Node** \u2192 Detects file type or command and routes the flow.\n* **Get File** \u2192 Downloads the Telegram video file.\n* **Upload to Google Drive** \u2192 Sends the file to your chosen Drive folder.\n* **Smart Rename (Code Node)** \u2192 Auto-formats the filename using dynamic logic.\n* **Google Sheets Logging** \u2192 Appends/upload data for easy tracking.\n* **AI Agent (Gemini)** \u2192 Uses Data Vidio memory to analyze or respond.\n* **Telegram Notification** \u2192 Sends status updates back to the user.\n\n## \ud83e\udde0 Highlights\n\n* Full integration: Telegram \u2192 Google Drive \u2192 Google Sheets \u2192 Gemini AI\n* Supports append/update modes\n* Dynamic filename generation\n* AI memory integration\n* Easy to clone and adapt\n\n## \ud83e\ude84 Ideal Use Cases\n\n* Video assignment submissions\n* Media team content management\n* Automated archiving with AI analysis\n* Personal Telegram-to-Drive assistant\n\n## \ud83e\udde9 Setup Tips\n\n* Use the provided Google Sheets template\n* Configure your bot token, Google Drive, and Sheets credentials\n* Insert your Gemini API key and connect Data Vidio\n* Test with a sample video before going live\n"
},
"typeVersion": 1
},
{
"id": "f394d958-0bc9-41cd-9785-e2c296b03e06",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
-48
],
"parameters": {
"width": 880,
"height": 800,
"content": "## 4. AI Auto-Reply System\n\n**AI Agent \u2192 Gemini Model \u2192 Memory \u2192 Data Sheet \u2192 Telegram Reply**\n\n**Purpose**\n\nHandles all non-video and non-/edit text messages through an AI Agent that:\n\n* Has per-user memory.\n* Can access Google Sheets (Data Vidio).\n* Uses Gemini as the LLM.\n\n---\n**AI Capabilities**\n* Fetch sheet data to answer user queries.\n* Remember conversation context.\n* Respond with emojis.\n* Follow the system prompt as the user\u2019s personal assistant."
},
"typeVersion": 1
},
{
"id": "52f56ef2-7625-444d-8e1f-297fac7002f0",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
-1680
],
"parameters": {
"width": 880,
"height": 768,
"content": "## 2. Video Upload Process\n\n**Get a file1 \u2192 Upload file1 \u2192 Append row \u2192 Send message**\n\n**Workflow**\n\n1. Get a file1\n Retrieves the video file from Telegram using `file_id`.\n\n2. Upload file1\n Automatically uploads the file to Google Drive.\n\n3. Append row in sheet\n Logs all metadata into Google Sheets:\n\n * File name\n * Drive link\n * File size\n * Duration\n * Upload timestamp\n * Last update timestamp\n\n4. Send message\n The bot replies with:\n\n * Confirmation the video was uploaded\n * Command template for renaming the file\n"
},
"typeVersion": 1
},
{
"id": "ee7bf956-b894-498c-8937-1ebbabc12ed4",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
-864
],
"parameters": {
"width": 880,
"height": 768,
"content": "## 3. File Rename Process\n\n**Code1 \u2192 Update file \u2192 Update row \u2192 Send message**\n\n**Rename Flow**\n\n1. Code1\n Parses the `/edit ID new_name` command.\n\n2. Update file1\n Renames the file in Google Drive.\n\n3. Update row in sheet\n Updates sheet row based on:\n\n * ID File\n * File Name\n * Last Update\n\n4. Send message\n Sends success confirmation to Telegram.\n\n---\n**Command Format**\n```\n/edit <FILE_ID> <new file name>\n```"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "5af14876-12ce-4b84-b8cd-cae89e69d5b9",
"connections": {
"Code1": {
"main": [
[
{
"node": "Update file1",
"type": "main",
"index": 0
}
]
]
},
"Switch1": {
"main": [
[
{
"node": "Get a file1",
"type": "main",
"index": 0
}
],
[
{
"node": "Code1",
"type": "main",
"index": 0
}
],
[
{
"node": "AI Agent1",
"type": "main",
"index": 0
}
]
]
},
"AI Agent1": {
"main": [
[
{
"node": "Send a text message5",
"type": "main",
"index": 0
}
]
]
},
"Data Vidio1": {
"ai_tool": [
[
{
"node": "AI Agent1",
"type": "ai_tool",
"index": 0
}
]
]
},
"Get a file1": {
"main": [
[
{
"node": "Upload file1",
"type": "main",
"index": 0
}
]
]
},
"Update file1": {
"main": [
[
{
"node": "Update row in sheet1",
"type": "main",
"index": 0
}
]
]
},
"Upload file1": {
"main": [
[
{
"node": "Append row in sheet1",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory1": {
"ai_memory": [
[
{
"node": "AI Agent1",
"type": "ai_memory",
"index": 0
}
]
]
},
"Telegram Trigger": {
"main": [
[
{
"node": "Switch1",
"type": "main",
"index": 0
}
]
]
},
"Append row in sheet1": {
"main": [
[
{
"node": "Send a text message3",
"type": "main",
"index": 0
}
]
]
},
"Update row in sheet1": {
"main": [
[
{
"node": "Send a text message4",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Agent1",
"type": "ai_languageModel",
"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.
googleDriveOAuth2ApigooglePalmApigoogleSheetsOAuth2ApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
π Overview
Source: https://n8n.io/workflows/10713/ β 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 project is a template for building a complete academic virtual assistant using n8n. It connects to Telegram, answers frequently asked questions by querying MongoDB, keeps the community informed a
Telegram Trigger receives incoming messages (text, voice, photo, document). Switch routes by message type to appropriate processors: Text β forwarded as-is. Voice β downloaded and sent to Transcribe a
Transform your Telegram messenger into a powerful, multi-modal personal or team assistant. This n8n workflow creates an intelligent agent that can understand text, voice, images, and documents, and ta
> AI-powered nutrition assistant for Telegram β log meals, set goals, and get personalized daily reports with Google Sheets integration.
This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos β all triggered from a simple Telegram chat and managed via Google Sheets.