AutomationFlowsAI & RAG › Telegram Schedule Entry to Google Sheets

Telegram Schedule Entry to Google Sheets

Original n8n title: Wf1 - Masukin Jadwal

WF1 - Masukin Jadwal. Uses telegramTrigger, agent, googleSheets, telegram. Event-driven trigger; 14 nodes.

Event trigger★★★★☆ complexityAI-powered14 nodesTelegram TriggerAgentGoogle SheetsTelegramGoogle Gemini Chat
AI & RAG Trigger: Event Nodes: 14 Complexity: ★★★★☆ AI nodes: yes Added:

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 →

Download .json
{
  "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.

Pro

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 →

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 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.

MongoDB, Chain Llm, Google Gemini Chat +11
AI & RAG

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, MongoDB, Telegram Trigger +6
AI & RAG

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"

Telegram Trigger, Output Parser Structured, Telegram +6
AI & RAG

&gt; AI-powered nutrition assistant for Telegram — log meals, set goals, and get personalized daily reports with Google Sheets integration.

Telegram, Google Gemini, Google Gemini Chat +7
AI & RAG

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.

OpenAI Chat, Memory Buffer Window, Output Parser Structured +11