This workflow follows the Agent → Google Sheets 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 →
{
"name": "WF1 - Masukin Jadwal",
"nodes": [
{
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"type": "n8n-nodes-base.telegramTrigger",
"typeVersion": 1.2,
"position": [
-32,
-480
],
"name": "Telegram Trigger",
"id": "0caed9aa-f37f-4703-9017-37b9a265a3c0",
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.message.text }}",
"options": {
"systemMessage": "=Kamu adalah asisten penjadwalan. \nTugas: ekstrak **tanggal, waktu, dan tugas** dari kalimat user, lalu kembalikan **HANYA** JSON murni tanpa back-tick.\n\nAturan:\n- Tanggal: konversi ke format YYYY-MM-DD \n- Waktu: konversi ke format 24-jam (HH:MM) \n- Task: teks tugas apa saja\n\nContoh input \u00e2\u2020\u2019 output \n\"jadwal 15 juli 2025 4 sore lari\" \n\u00e2\u2020\u2019 {\"Date\":\"2025-07-15\",\"Time\":\"16:00\",\"Task\":\"lari\"}\n\n\"jadwal besok 9 pagi presentasi\" (asumsikan hari+1) \n\u00e2\u2020\u2019 {\"Date\":\"2025-07-16\",\"Time\":\"09:00\",\"Task\":\"presentasi\"}\n\nJika tidak bisa ekstrak, balas: {\"error\":\"format tidak dikenal\"}"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2,
"position": [
160,
-480
],
"name": "AI Agent",
"id": "b1befc25-5339-43bf-afa5-5afde607a3f9"
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "1aNPaLcOvN-_FUnDbcxJHltrRerGglzrje0aKirtQdoo",
"mode": "list",
"cachedResultName": "AgendaBot",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1aNPaLcOvN-_FUnDbcxJHltrRerGglzrje0aKirtQdoo/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Sheet1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1aNPaLcOvN-_FUnDbcxJHltrRerGglzrje0aKirtQdoo/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Timestamp": "={{ $now.format('yyyy-MM-dd hh:dd') }}",
"Date": "={{ $json.Date }}",
"Time": "={{ $json.Time }}",
"Task": "={{ $json.Task }}",
"Status": "=planned"
},
"matchingColumns": [],
"schema": [
{
"id": "Timestamp",
"displayName": "Timestamp",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Date",
"displayName": "Date",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Time",
"displayName": "Time",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Task",
"displayName": "Task",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Status",
"displayName": "Status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4,
"position": [
1152,
-480
],
"name": "Append to Sheet",
"id": "3abcfae6-0b8f-4dd6-a0b5-25f759dfc411",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"text": "=\u00e2\u0153\u2026 Agenda disimpan: {{ $json.Task }} pada {{ $json.Date }} {{ $json.Time }}",
"additionalFields": {}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1344,
-480
],
"name": "Telegram Reply",
"id": "31714884-453f-4054-aa5f-d1b43cb1d269",
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"modelName": "models/gemini-2.0-flash",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"typeVersion": 1,
"position": [
176,
-304
],
"name": "Google Gemini",
"id": "f96906e5-1c13-42e2-8804-db974cfd9f23",
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "// Ambil teks output\nconst raw = items[0].json.output;\n\n// Hilangkan ```json dan ```\nconst clean = raw.replace(/```json\\n|\\n```/g, '').trim();\n\n// Parse menjadi objek\nconst obj = JSON.parse(clean);\n\n// Return items baru\nreturn [{ json: obj }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
864,
-480
],
"id": "4a7597f6-dd2a-450a-9e30-26c2429627a6",
"name": "Code"
},
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.1,
"position": [
208,
48
],
"name": "DailyReminder",
"id": "92e11b56-7497-4f03-a2f4-769bbd91a0ea"
},
{
"parameters": {
"documentId": {
"__rl": true,
"value": "1aNPaLcOvN-_FUnDbcxJHltrRerGglzrje0aKirtQdoo",
"mode": "list",
"cachedResultName": "AgendaBot",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1aNPaLcOvN-_FUnDbcxJHltrRerGglzrje0aKirtQdoo/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Sheet1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1aNPaLcOvN-_FUnDbcxJHltrRerGglzrje0aKirtQdoo/edit#gid=0"
},
"combineFilters": "AND",
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4,
"position": [
384,
48
],
"name": "Read Today",
"id": "73ba7828-a71e-446a-a539-7abb4a25fa41",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"chatId": "1758420679",
"text": "={{ $json.reminderText }}",
"additionalFields": {}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1104,
48
],
"name": "Send Reminder",
"id": "4f619c3f-cfd0-4b5c-b1aa-0b20226837a9",
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "const today = new Date().toISOString().slice(0, 10);\nconst todayRows = items.filter(r => r.json.Date === today);\n\nconst text = todayRows.length\n ? '\u00f0\u0178\u201c\u2020 Agenda hari ini:\\n' + todayRows.map(r => `\u00e2\u20ac\u00a2 ${r.json.Time} - ${r.json.Task}`).join('\\n')\n : '\u00f0\u0178\u017d\u2030 Hari ini tidak ada agenda.';\n\nreturn [{ json: { reminderText: text } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
832,
48
],
"id": "f1ac7c7a-5b4f-4f99-8b09-d56888280564",
"name": "filter today"
},
{
"parameters": {
"content": "## code \n// Ambil teks output\nconst raw = items[0].json.output;\n\n// Hilangkan ```json dan ```\nconst clean = raw.replace(/```json\\n|\\n```/g, '').trim();\n\n// Parse menjadi objek\nconst obj = JSON.parse(clean);\n\n// Return items baru\nreturn [{ json: obj }];\n\n\n\nFungsi kode tersebut membersihkan & mengubah teks JSON yang belum siap dipakai menjadi objek JavaScript yang siap dipakai oleh node berikutnya.\n\nKode itu \u00e2\u20ac\u0153pembersih\u00e2\u20ac\u009d supaya AI yang suka beri balasan dengan back-tick bisa langsung dipakai di node selanjutnya.",
"height": 432,
"width": 592
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
496,
-640
],
"id": "b0974f79-e7be-4684-b13f-4c790cd5e636",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## Code\nconst today = new Date().toISOString().slice(0, 10);\nconst todayRows = items.filter(r => r.json.Date === today);\n\nconst text = todayRows.length\n ? '\u00f0\u0178\u201c\u2020 Agenda hari ini:\\n' + todayRows.map(r => `\u00e2\u20ac\u00a2 ${r.json.Time} - ${r.json.Task}`).join('\\n')\n : '\u00f0\u0178\u017d\u2030 Hari ini tidak ada agenda.';\n\nreturn [{ json: { reminderText: text } }];\n\n\n\n\n\n\nFungsi ini membuat pesan reminder harian berdasarkan data Google Sheet.",
"height": 352,
"width": 528
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
528,
-128
],
"id": "9d86c3eb-60f2-4fd4-bda0-4a499a3de7e0",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## Prompt AI Agent\nKamu adalah asisten penjadwalan. \nTugas: ekstrak **tanggal, waktu, dan tugas** dari kalimat user, lalu kembalikan **HANYA** JSON murni tanpa back-tick.\n\nAturan:\n- Tanggal: konversi ke format YYYY-MM-DD \n- Waktu: konversi ke format 24-jam (HH:MM) \n- Task: teks tugas apa saja\n\nContoh input \u00e2\u2020\u2019 output \n\"jadwal 15 juli 2025 4 sore lari\" \n\u00e2\u2020\u2019 {\"Date\":\"2025-07-15\",\"Time\":\"16:00\",\"Task\":\"lari\"}\n\n\"jadwal besok 9 pagi presentasi\" (asumsikan hari+1) \n\u00e2\u2020\u2019 {\"Date\":\"2025-07-16\",\"Time\":\"09:00\",\"Task\":\"presentasi\"}\n\nJika tidak bisa ekstrak, balas: {\"error\":\"format tidak dikenal\"}",
"height": 400,
"width": 544,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1296,
-240
],
"id": "845e3867-062a-4c10-831e-8a35797f16d1",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## Tutorial lengkap cara membuat bisa lihat di sini :\n### [TIKTOK](https://www.tiktok.com/@hardi.digitalsantuy/video/7527360547046657301) \n### [YOUTUBE](https://www.youtube.com/watch?v=-GkQ1UK6idM)\n\nHardi | Digital Santuy",
"height": 192,
"width": 400,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-192,
-160
],
"id": "f34c9c6e-49b5-4ddf-ba4e-a0b175bf4bab",
"name": "Sticky Note4"
}
],
"connections": {
"Telegram Trigger": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Append to Sheet": {
"main": [
[
{
"node": "Telegram Reply",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Code": {
"main": [
[
{
"node": "Append to Sheet",
"type": "main",
"index": 0
}
]
]
},
"DailyReminder": {
"main": [
[
{
"node": "Read Today",
"type": "main",
"index": 0
}
]
]
},
"Read Today": {
"main": [
[
{
"node": "filter today",
"type": "main",
"index": 0
}
]
]
},
"filter today": {
"main": [
[
{
"node": "Send Reminder",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "962d9c89-fda3-4baa-a377-341f47aa99f3",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "Bb187VEykGJmxLGI",
"tags": []
}
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.
googlePalmApigoogleSheetsOAuth2ApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
WF1 - Masukin Jadwal. Uses telegramTrigger, agent, googleSheets, telegram. Event-driven trigger; 14 nodes.
Source: https://github.com/hardisastra/File-Projek-Json-n8n/blob/main/Otomatisasi_Telegram_Schedule_Reminder_Harian.json — 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 workflow creates a multi-talented AI assistant named Simran that interacts with users via Telegram. It can handle text and voice messages, understand the user's intent, and perform various tasks.
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
This workflow transforms your Telegram bot into an intelligent creative assistant. It can chat conversationally, fetch trending image prompts from PromptHero for inspiration, or perform a deep "remix"
> 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.