用n8n+Telegram實現個人任務管理系統

下班後的浣熊
發佈時間: 更新:
n8n-telegram-todo-list

n8n+Telegram真的是個很好用的工具,一起來看看怎麼用n8n+Telegram,用自動回覆機器人的方式來處理任務管理系統吧!


任務管理系統的思考脈絡

任務管理系統的成分

管理注意力或管理時間,無論最後歷程為何,最後落地大概就是兩個成分:

  • 待辦事項清單
  • 時間行事曆

其中,時間行事曆在David Allen在Getting Things Done中,建議只寫這些東西:

  • 具體時間的行動事項(Time-Specific Action,例如1/1 19:00跟朋友吃飯)
  • 具體日期的行動事項(Day-Specific Action,例如1/2報名考試)
  • 該日的資訊類型(Day-Specific Information,例如12/25聖誕節會放假,雖然理由不是聖誕節)

他高度建議,不要把「每天要做什麼」的待辦事項寫在行事曆上!

由於長時間以來行事曆都是紙本,老派的心靈還沒有轉換上Google Calendar,這個把待辦事項清單寫上行事曆,是真的維持很久的壞習慣,趁著這一次全部分開來。


To-Do List 待辦事項清單的功能:解放記憶,不要用大腦記得瑣碎的事情

因為不能寫在記事本上了,在電子化之前,待辦事項清單是一個高度不被重視的方式:

在「各個工作地方」隨意「拿著一張A4紙的背面空白處」在寫清單

優點:

  • 隨時想到什麼寫什麼

這個缺點也很明顯:

  • 要做的事情散落在各處
  • 有一些事情是沒有規劃時間,但是要記得做的那些事情,最後因為這些紙越累積越多,然後散落,最後就有一些事情沒有繼續追蹤下去

事情越忙越瑣碎,記不得這麼多事情的壓力就會越來越大,也會讓心思有很多額外的負擔。

因此,這種電子化後的任務管理系統,要有幾個基礎:

  • 當我想起來要做什麼的時候,立刻可以把它丟進去待辦清單之中之後再處理
  • 要隨時可以取得,無論是寫入或是取得訊息

任務日誌的時間區塊:立即、當天、明天、(跟那些完全不需要做的事情)

在《重要事明日做》一書中,作者有一個很重要的分類:

就時間管理的目的而言,我將緊急程度分為三個等級:立即、當天、明天

立即:立刻放下手邊所有事情、集中注意力的事項,才叫立即。通常是緊急應變。

當天:當天需要完成的事情,但預先規劃這天時,無法把這件事情放進來。這是我們最討厭的狀況。

明天:絕大多數的狀況,都是明天。這些才是可以事先規劃的事項。是預設反應。

因此,在工作流中,我們最喜歡的狀況是:

  • 遇到事情,把事情增加入工作清單,今天不做
  • 今天臨時增加上去的事情越少越好
  • 規劃明天工作的行程時,把它從工作清單移入明天工作清單,然後下面畫停止線
  • 隔天,讓明天的工作清單變成今天,再一個一個把它全部做完

任務日誌的「今日」-只做終止線上的事情

《重要事明日做》有重要的概念:終止線。

因為一天能夠做的事情有限,當你在清單中劃下終止線後,增加的事情都是明日的事情。因此,今天會做的事情,只有:

  • 之前就排定要在今天處理的工作
  • 前一天收集的工作
  • 因為有需要「當天」完成的急迫性,而在今天的終止線下方加上新的事項

在系統中,把開放事件拉到今日,並且在今天的工作流程中把「今日」的項目消光,就是我們系統的期待。


重要的事「明日做」-有限的完成進度

在每一天結束之前,都需要檢視一下仍保持OPEN及今天新增的項目,並且將明天要做的事情,移動到明天的工作清單裡面。這樣,我們又可以畫出一條線出來。

整體來說,這種作法有很多的優點:

  • 封閉式清單
  • 系統化的方式處理新的工作事項
  • 減少干擾
  • 輕易規劃一天的工作

我們要在n8n上去實現這個架構。



功能

由使用者促發的功能

  • 增加任務:打一串字(如:安排訪談),即表示增加任務
  • 完成任務:打該任務的編號(如:134),即表示任務已完成
  • 查詢任務:打/all,即表示列入所有在待辦清單上的任務
  • 查詢今日已完成任務:打/D,即顯示本日已完成之任務
  • 指定今日任務:打D+數字(如:D134),即表示將任務增加進今日的任務
  • 指定明日任務:打T+數字(如:T134),即表示將任務增加進明日的任務

由系統自動促發的功能

  • 半夜00:05或任何一指定時間:將當日未完成任務放回待辦事項,將已指定之明日任務變成今日任務


為什麼是Telegram?

因為Telegram傳送訊息不需要額外費用,LINE需要。

另外,Telegram在電腦、手機等媒介上都能使用,跨平台操作十分友善,對常常在不同介面工作的人而言十分方便。



資料庫結構

資料表建在Google Sheet上,一共有三張表:Open、Close和IDGet。


Open表

就是所有還沒完成的事項,To-Do List的最原本形式。

只是他多了一個Status的欄位,有Open就是沒列時間的、Today是今天要做的、Tomorrow是明天要做的。


Close表

所有被完成的項目,都會被搬到這張表來。

裡面有一個欄位會用到,是完成時間。當要查詢今天完成哪些事情的時候, 會查這個欄位。


IDGet表

只是方便系統去取一個唯一的事件號碼,如果可以操作n8n的變數內容,就不一定要這張表。



怎麼樣可以讓你最快獲得這個東西呢?

  • 請AI工具(如ChatGPT)讀取這個網頁
  • 請AI工具根據網頁的說明,設計n8n的運作邏輯,然後輸出JSON檔案
  • 把輸出後的JSON檔案匯入n8n,一些加密驗證連線的方式再調整,就是最快的方式啦~千萬不要自己做!


n8n架構

這個基本的架構是:

使用者打字 —> n8n 解析指令 —> 判斷任務操作類型 —> 更新 Google Sheets —>回 Telegram 確認


增加任務

使用者打字

→ Telegram 輸入:安排訪談

n8n 解析指令

→ Telegram Trigger 收到訊息文字($json.message.text)

→ 進到 Command Switch(判斷文字型態)

判斷任務操作類型

→ Command Switch 規則:

  • 不是 /… 開頭
  • 不是純數字
  • 不是 D\d+ 或 T\d+→ 走 fallback(也就是「新增任務」流程)

更新 Google Sheets

→ Get Last ID:去 IDGet 表抓目前最後一個全域 ID

→ Get Existing Open Tasks:去 Open 表抓既有任務(用來算下一個 IdentID)

→ Calculate New IDs:計算 nextId 與 nextIdentId

→ Create New Task Data:把任務內容+新 ID 組成一筆資料(含台北時區時間戳)

→ Append New Task:把新任務 append 到 Open 表

→ Update IDGet:把最新 nextId 回寫到 IDGet 表

回 Telegram 確認

→ Send Add Acknowledgement:回覆「已加入代辦事項:xxx (ID: #IdentID)」


完成任務

使用者打字

→ Telegram 輸入:134

n8n 解析指令

→ Telegram Trigger 收到文字

→ Command Switch 判斷是「純數字」

判斷任務操作類型

→ Command Switch 命中規則:^[0-9]+$

→ 走「完成任務」分支

更新 Google Sheets

→ Get Open Tasks For Completion:先把 Open 表全部讀出來

→ Prepare Completion Data:在程式節點中

  • 找到 IdentID = 134 的那一列
  • 產生一筆要寫入 Close 表的資料(Status=Close、ClosedAt/UpdatedAt=台北時區)→ Append to Close Sheet:把完成資料 append 到 Close 表→ confirmRow:回 Open 表用 ID 查這筆(用來拿 Task 名稱做回覆)→ Update Open Row:把 Open 表該列刪掉(operation=delete,使用 row_number)

回 Telegram 確認

→ Send Completion Acknowledgement:回覆「已完成:Task (ID: IdentID)」

查詢任務(全部/all,今日/D)

使用者打字

→ Telegram 輸入:/all

n8n 解析指令

→ Telegram Trigger 收到文字

→ Command Switch 判斷「以 / 開頭」

→ 進到 Switch(專門判斷 /all 或 /D)

判斷任務操作類型

→ Switch 命中條件:/all

→ 走「列出任務清單」分支

更新 Google Sheets

→ Get Open Tasks List:從 Open 表讀出所有列(包含 Open/Today/Tomorrow 狀態)

回 Telegram 確認

→ Format Task List:把三種狀態分組+排序+組成文字

→ Send Task List:把整理好的清單回 Telegram

指定任務(今日D+數字,明日T+數字)

使用者打字

→ Telegram 輸入:D134

n8n 解析指令

→ Telegram Trigger 收到文字

→ Command Switch 命中規則:^D\d+$(走到「D/T 指派」那條支線)

→ 進到 Command Switch1(再判斷是 D 還是 T)

判斷任務操作類型

→ Command Switch1 命中:^D\d+$

→ Edit Fields:把 D134 拆成 targetIdentId=134

更新 Google Sheets

→ Get Task By IdentID:用 IdentID=134 去 Open 表抓出該任務(主要是拿 Task 名稱)

→ Update Status To Today:對 Open 表做 appendOrUpdate

matchingColumns=IdentID

  • 把 Status 更新成 Today
  • UpdatedAt 寫入台北時區時間

回 Telegram 確認

→ Send Add Acknowledgement1:回覆「✅ 已加入今日預排:#134 任務文字」

系統自動整理

Today 任務處理流程(未完成任務回到待辦)

→ n8n 啟動排程

→ 篩選 Google Sheets 中 Status = Today 的任務

→ 將這些任務的 Status 更新為 Open

→ UpdatedAt 寫入當下時間

→(可選)納入跨日整理回報清單

Tomorrow 任務處理流程(明日任務轉為今日)

→ n8n 啟動排程

→ 篩選 Google Sheets 中 Status = Tomorrow 的任務

→ 將這些任務的 Status 更新為 Today

→ UpdatedAt 寫入當下時間

→(可選)納入跨日整理回報清單

你可能也會喜歡

發表評論