[title] Build a Personal Task Management System with n8n + Telegram
[content]
n8n + Telegram is genuinely a great combo. Let’s walk through how to use n8n + Telegram to build a task management system—by handling tasks through an auto-reply bot.
How to Think About a Task Management System
The Core Components
Whether you call it managing attention or managing time, when it comes down to implementation, it usually boils down to two components:
- A to-do list
- A calendar
In Getting Things Done, David Allen suggests you only put the following on your calendar:
- Time-specific actions (e.g., 1/1 19:00 dinner with friends)
- Day-specific actions (e.g., 1/2 register for an exam)
- Day-specific information (e.g., 12/25 is a holiday, even if it’s not actually for Christmas)
He strongly recommends NOT putting “what I need to do today” to-dos on your calendar!
For a long time, calendars were paper-based. My old-school brain still hasn’t fully transitioned to Google Calendar—so the bad habit of writing my to-do list directly onto the calendar stuck around for years. This time, I’m separating them completely.
What a To-Do List Is For: Free Your Memory—Don’t Use Your Brain to Store Small Stuff
Before everything became digital, to-do lists were often an underappreciated approach, especially because you couldn’t just “put it in an app”:
Writing lists on “whatever workspace” using “the blank backside of an A4 sheet”
Advantages:
- Write down anything anytime you think of it
The downsides are obvious:
- Tasks end up scattered everywhere
- Some tasks don’t have a scheduled time but still need to be remembered. As the papers pile up and get scattered, some items eventually stop getting tracked at all.
The busier and more fragmented things become, the more pressure you feel from not being able to remember everything—and the heavier the mental burden gets.
So, a digital task management system should have a few basics:
- When I remember something I need to do, I can immediately dump it into the to-do list and deal with it later
- I can access it anytime—both for inputting and retrieving information

Time Buckets in a Task Log: Now, Today, Tomorrow (and the Stuff You Don’t Need to Do at All)
In the book Do It Tomorrow, the author provides an important categorization:
For the purpose of time management, I divide urgency into three levels: now, today, tomorrow.
Now: Only something that requires dropping everything and focusing immediately qualifies as “now.” It’s usually emergency response.
Today: Something that must be completed today, but when you planned your day in advance, you couldn’t put this in. This is the situation we hate the most.
Tomorrow: Most things are “tomorrow.” These are the items you can plan ahead for—your default mode.
So in a workflow, the ideal situation is:
- When something comes up, add it to the work list and don’t do it today
- Minimize the number of things added to “today” at the last minute
- When planning tomorrow’s work, move items from the work list into tomorrow’s work list, then draw a stop line underneath
- The next day, tomorrow’s list becomes today’s list—then complete everything on it one by one
“Today” in the Task Log — Only Do What’s Above the Stop Line
Do It Tomorrow introduces a key concept: the stop line.
Because there’s only so much you can do in a day, once you draw a stop line in your list, anything added afterward belongs to tomorrow. That means what you do today includes only:
- Work already scheduled to be handled today
- Work collected the day before
- New items added below today’s stop line due to “must be done today” urgency
In this system, we pull open items into “Today,” and in the day’s workflow we “clear out” the items under “Today”—that’s the intended outcome.

Do Important Things “Tomorrow” — Progress Is Finite
Before each day ends, you review items that are still OPEN as well as anything added today, then move what you’ll do tomorrow into tomorrow’s work list. That lets you draw a new line again.
Overall, this approach has many advantages:
- A closed list
- A systematic way to handle incoming work
- Fewer interruptions
- Easy day planning
We’re going to implement this structure in n8n.
Features
User-Triggered Features
- Add a task: type a sentence (e.g., “Schedule interview”) to add a task
- Complete a task: type the task number (e.g., “134”) to mark it as completed
- Query tasks: type
/allto list all tasks currently on the to-do list - Query today’s completed tasks: type
/Dto show tasks completed today - Assign to Today: type
D+ number (e.g.,D134) to add a task to today - Assign to Tomorrow: type
T+ number (e.g.,T134) to add a task to tomorrow
System-Automated Features
- At 00:05 (or any specified time): move unfinished tasks from Today back to the to-do list, and convert the pre-assigned Tomorrow tasks into Today tasks
Why Telegram?
Because sending messages on Telegram doesn’t incur extra costs—LINE does.
Also, Telegram works across devices such as computers and phones. It’s very friendly for cross-platform usage, which is convenient for people who frequently work across different interfaces.
Database Structure
The data tables are built in Google Sheets. There are three sheets in total: Open, Close, and IDGet.
Open Sheet

This contains all unfinished items—the most basic form of a to-do list.
It simply adds a Status column: Open means unscheduled, Today means to be done today, and Tomorrow means to be done tomorrow.
Close Sheet

All completed items are moved into this sheet.
One column that matters here is the completion time. When querying what was completed today, this is the field you’ll look at.
IDGet Sheet

This simply makes it easier for the system to retrieve a unique event number. If you can manage n8n variables properly, you may not even need this sheet.
How Can You Get This as Fast as Possible?
- Have an AI tool (e.g., ChatGPT) read this webpage
- Ask the AI tool to design the n8n workflow logic based on the page and export a JSON file
- Import the exported JSON into n8n, then adjust connection/auth settings as needed. That’s the fastest way—don’t build it yourself!
n8n Architecture
The basic architecture is:
User types → n8n parses the command → determine task operation type → update Google Sheets → reply on Telegram with confirmation
Add a Task
User types
→ Telegram input: Schedule interview
n8n parses the command
→ Telegram Trigger receives message text (
$json.message.text)→ Goes into Command Switch (determine text type)
Determine the task operation type
→ Command Switch rules:
- Doesn’t start with
/...- Isn’t purely numeric
- Isn’t
D\d+orT\d+→ go to fallback (i.e., the “add task” flow)Update Google Sheets
→ Get Last ID: read the current last global ID from the IDGet sheet
→ Get Existing Open Tasks: read existing tasks from the Open sheet (used to calculate the next IdentID)
→ Calculate New IDs: compute
nextIdandnextIdentId→ Create New Task Data: combine the task content + new ID into one row (including a Taipei timezone timestamp)
→ Append New Task: append the new task into the Open sheet
→ Update IDGet: write the latest
nextIdback into the IDGet sheetReply on Telegram to confirm
→ Send Add Acknowledgement: reply “Added to to-do list: xxx (ID: #IdentID)”
Complete a Task
User types
→ Telegram input: 134
n8n parses the command
→ Telegram Trigger receives text
→ Command Switch determines it’s “pure numbers”
Determine the task operation type
→ Command Switch matches rule:
^[0-9]+$→ Follow the “complete task” branch
Update Google Sheets
→ Get Open Tasks For Completion: first read all rows from the Open sheet
→ Prepare Completion Data: in a Code node
- Find the row where IdentID = 134
- Create a row to write into the Close sheet (Status=Close, ClosedAt/UpdatedAt=Taipei timezone) → Append to Close Sheet: append completion data into the Close sheet → confirmRow: look up the row in Open by ID (to retrieve the task name for the reply) → Update Open Row: delete that row from the Open sheet (operation=delete, using row_number)
Reply on Telegram to confirm
→ Send Completion Acknowledgement: reply “Completed: Task (ID: IdentID)”
Query Tasks (All: /all, Completed Today: /D)
User types
→ Telegram input: /all
n8n parses the command
→ Telegram Trigger receives text
→ Command Switch detects “starts with /”
→ Goes into Switch (dedicated to determining /all vs /D)
Determine the task operation type
→ Switch matches: /all
→ Follow the “list tasks” branch
Update Google Sheets
→ Get Open Tasks List: read all rows from the Open sheet (including Open/Today/Tomorrow statuses)
Reply on Telegram to confirm
→ Format Task List: group + sort the three statuses and compose the text
→ Send Task List: send the formatted list back to Telegram
Assign a Task (Today: D+number, Tomorrow: T+number)
User types
→ Telegram input: D134
n8n parses the command
→ Telegram Trigger receives text
→ Command Switch matches rule:
^D\d+$(go to the “D/T assignment” branch)→ Goes into Command Switch1 (determine whether it’s D or T)
Determine the task operation type
→ Command Switch1 matches:
^D\d+$→ Edit Fields: split D134 into
targetIdentId=134Update Google Sheets
→ Get Task By IdentID: query the Open sheet with IdentID=134 (mainly to get the task name)
→ Update Status To Today: perform appendOrUpdate on the Open sheet
matchingColumns=IdentID
- Update Status to Today
- Write UpdatedAt with a Taipei timezone timestamp
Reply on Telegram to confirm
→ Send Add Acknowledgement1: reply “✅ Added to today’s plan: #134 task text”
Automated System Cleanup
Today Task Handling (Move Unfinished Tasks Back to Open)
→ n8n starts on a schedule
→ Filter tasks in Google Sheets where Status = Today
→ Update those tasks’ Status to Open
→ Write UpdatedAt as the current time
→ (Optional) include them in the cross-day cleanup report list
Tomorrow Task Handling (Convert Tomorrow Tasks into Today)
→ n8n starts on a schedule
→ Filter tasks in Google Sheets where Status = Tomorrow
→ Update those tasks’ Status to Today
→ Write UpdatedAt as the current time
→ (Optional) include them in the cross-day cleanup report list