里程碑
我的第一個 AI 行程助理:從想法到實作
Yang @karenyang_05發布於
1. 為什麼想做這個
平常事情一多,我就容易忘記行程,有些安排留在聊天訊息裡,有些只記在腦袋裡,沒有一個地方可以集中管理,有一次家教臨時改時間,剛好同學也要送東西給我,雖然兩件事我都知道,但當下沒有一起考慮,結果路線安排得很不順,這讓我發現問題不只是忘記行程,而是當事情臨時變動時,我很難快速掌握所有安排,所以我想做一個簡單的行程助理,只要像平常聊天一樣,把事情告訴它,就能幫我記錄、整理和提醒。
2. 作品介紹與互動示範
這個行程助理直接在 LINE 裡使用,不需要輸入固定格式,只要像平常聊天一樣,就能管理行程。
新增行程
例如我傳送「後天下午三點專題會議」,它會發現我沒有提供結束時間並主動詢問。
我: 後天下午三點專題會議
精靈: 請問專題會議預計幾點結束?
我: 五點
精靈: ✅ 已記下:專題會議 2026-10-27 15:00–17:00
即使分成兩次回答也能透過對話記憶把資訊整理成完整的行程。
自訂行程提醒
新增行程時也可以順便設定提醒時間。
我: 今天下午 5:30~8:00 和同學討論作業,提前 10 分鐘告訴我
精靈: ✅ 已記下:和同學討論作業 2026-10-25 17:30–20:00,⏰ 前 10 分鐘提醒
(17:20 收到提醒)
精靈: ⏰ 10 分鐘後:和同學討論作業 17:30–20:00
只要有設定提醒,時間到了就會主動傳送 LINE 訊息,沒有設定就不會提醒。
修改行程
如果行程臨時有變動,也可以直接用聊天的方式修改。
我: 把專題會議改到後天下午兩點到四點
精靈: ✏️ 已修改:專題會議 2026-10-27 15:00–17:00 → 2026-10-27 14:00–16:00
修改前也會檢查新的時間是否與其他行程衝突,避免安排撞在一起。
其他功能
時間衝突檢查
新增或修改行程時,系統會先檢查是否與其他行程重疊,如果時間衝突,就不會直接儲存,而是告訴我撞到哪個行程,讓我重新調整。
刪除行程
不需要手動尋找資料,只要直接說「刪除明天的開會」,系統就會根據行程名稱和日期找到對應的紀錄,刪除後也會回覆結果。
查看今天的行程
-LINE 選單中有一個「今天行程」按鈕,按下後就會以卡片形式顯示當天的安排。
-已結束的行程會顯示灰色並劃掉,正在進行的行程則會標示綠色,方便快速查看。
3. 我是怎麼做出來的
這個行程助理主要透過 n8n 串接不同的工具,讓 LINE 收到的訊息可以交給 AI 理解,再進行行程管理。
3.1 使用的工具
| 工具 | 主要用途 |
|---|---|
| LINE 官方帳號 | 與行程助理互動的介面 |
| Cloudflare Tunnel | 讓 LINE 能透過網路連線到我電腦上的 n8n |
| n8n | 串接各項服務,處理訊息與自動化流程 |
| Gemini AI | 理解自然語言,判斷操作意圖並整理行程資訊 |
| Data Table | n8n 內建的資料表,負責儲存與管理行程 |
主要使用 Webhook 接收訊息、AI Agent 處理自然語言,以及 HTTP Request 與 LINE API 溝通。
3.2 系統架構
一般行程操作:
-LINE 收到訊息 → n8n 接收 → Gemini 理解需求 → n8n 處理行程資料 → LINE 回覆結果
-其中 Cloudflare Tunnel 負責讓 LINE 能連線到我電腦上的 n8n,而 Data Table 則負責儲存行程。
查看今天行程:
按下 LINE 選單 → n8n 查詢 Data Table → LINE 顯示行程卡片
自動提醒:
n8n 定期檢查 Data Table → 找出需要提醒的行程 → LINE 主動發送通知
這三種流程就是整個行程助理的主要運作方式。
3.3 我特別注意的設計
在製作過程中,有幾個地方是我特別注意的。
1. AI 和 n8n 的分工
Gemini 主要負責理解我說的話,並整理成行程資料,至於能不能新增、修改或刪除,則交給 n8n 的流程進一步檢查,降低資料出錯的風險。
2. 時間衝突檢查
新增或修改行程前,會先檢查時間是否與其他行程重疊。
例如,原本已經有下午 2 點到 4 點的會議,如果又新增下午 3 點到 5 點的行程,系統就會判斷時間衝突,避免直接儲存。
3. 避免誤刪行程
刪除行程時,會根據名稱和日期尋找對應資料,避免只因為名稱相同,就刪掉其他日期的行程。
4. 減少不必要的 AI 使用
像「今天行程」這種固定功能,可以直接由 n8n 查詢資料表,不需要每次都經過 Gemini,讓流程更簡單,也能節省 AI 額度。
5. 避免重複提醒
提醒功能會定期檢查行程,只有符合提醒條件、尚未標記為已提醒的行程才會發送通知,發送成功後再更新提醒狀態,降低重複通知的機會。
4. 製作過程中遇到的錯誤
製作過程中遇到了不少問題,有些甚至花了不少時間才找到原因,以下整理幾個讓我印象比較深刻的錯誤。
4.1 連線與 Webhook
1. LINE 無法連接 localhost
一開始我直接把 n8n 的 localhost 網址填進 LINE Webhook,結果一直顯示網址不合法,後來才知道,localhost 只代表自己的電腦,LINE 無法從外部連進來,所以我改用 Cloudflare Tunnel,建立公開的 HTTPS 網址,才解決這個問題。
2. Cloudflare Tunnel 連線失敗
當時 Tunnel 一直出現連線逾時的錯誤,導致 LINE 的訊息無法傳進 n8n,後來嘗試改用 HTTP/2 連線,或切換手機熱點,才讓連線恢復正常,問題不一定出在 n8n 的流程本身,也可能是網路連線造成的。
3. 搞混測試與正式 Webhook
我曾經在 n8n 按下「Execute workflow」準備測試,接著從 LINE 傳訊息,卻發現畫面完全沒有輸出,後來才了解,n8n 的測試網址和正式網址不同,必須確認 LINE 傳送訊息的網址與目前使用的 Webhook 一致。
4. 修改流程後忘記發布
有一次我明明修改好了流程,但 LINE 還是執行舊版內容,後來才知道儲存和發布是不同的操作,修改完成後,還需要按下 Publish,才能讓正式流程使用更新後的版本。
4.2 資料格式與流程設定
1. JSON 的換行問題
設定 LINE 回覆內容時,我發現如果直接把含有換行的文字放進 JSON,可能造成格式錯誤,後來學到可以使用 JSON.stringify,將文字轉換成符合 JSON 格式的字串,避免換行造成問題。
2. Data Table 的條件沒有設定成功
有幾次我以為已經設定好資料表的查詢條件,但檢查節點時才發現,設定其實沒有成功儲存,這讓我學到不能只看畫面上有沒有填好,還要實際檢查節點的輸入、輸出,確認條件真的有生效。
4.3 邏輯判斷與資料安全
刪除行程的條件設定
原本我以為設定好日期和名稱,就只會刪除符合的那筆行程,後來才發現如果條件設定成「符合任一條件」,可能連其他日期的同名行程也一起刪掉,所以我改成「所有條件都符合」才允許刪除,避免誤刪其他行程。資料操作的條件不能只看表面設定,還需要確認實際執行結果。
5. 目前的限制與接下來
目前這個行程助理已經可以使用,但還有一些需要改善的地方。
5.1 目前的限制
- 無法考慮交通時間:
目前只能檢查行程是否重疊,還無法判斷兩個地點之間需要多少移動時間。
- 時間衝突後需要重新輸入:
如果新增行程時發現時間衝突,系統不會暫時保留那筆資料,調整後需要重新輸入。
- 修改與刪除的辨識能力有限:
目前主要透過行程名稱和日期尋找資料,如果名稱不一致,可能找不到對應的行程;同一天同名的行程也可能一起被刪除。
- 提醒時間不一定完全準確:
系統每 5 分鐘檢查一次行程,因此提醒可能比設定的時間晚幾分鐘。
- 需要電腦持續運作:
目前 n8n 部署在自己的電腦上,必須保持電腦、n8n 和 Cloudflare Tunnel 正常運作,才能提供服務。
- 免費服務的限制:
目前使用臨時 Cloudflare Tunnel,重新啟動後網址可能改變;Gemini 也有免費使用額度限制。
5.2 未來規劃
接下來,我希望逐步增加以下功能:
- 交通時間與路線規劃:考慮不同地點之間的移動時間,讓行程安排更合理。
- 每日行程提醒:每天早上主動傳送當天的行程。
- 語音與圖片輸入:除了打字,也能透過語音或照片新增行程。
- Google 日曆同步:讓行程可以同步到 Google 日曆。
- 雲端部署:讓系統不需要依賴自己的電腦持續開機。
我最想優先完成的是交通時間與路線規劃,因為這正是當初讓我想做行程助理的原因之一。
6. 製作心得
我以為n8n只要把不同工具和節點串接起來,就能完成想要的功能,但實際製作後才發現,還需要考慮資料怎麼傳遞、流程怎麼判斷,以及發生錯誤時該怎麼處理。
剛開始遇到問題時,常常不知道錯在哪裡,只能一直嘗試修改,後來慢慢學會把流程拆開,逐一檢查每個節點的輸入和輸出,找出問題發生的位置,不只是學會使用 n8n,而是開始理解自動化系統的運作方式,也學會更有條理地分析和解決問題。
雖然目前還有一些功能需要改善,但能把自己生活中遇到的問題做成一個實際可以使用的工具,對我來說是很有成就感的事!!!
0 個愛心0 則留言
登入並驗證手機後就能留言。登入