里程碑
用n8n打造linebot排程小幫手
Blaire @0590發布於
一開始是想做出一個功能很多元的排程助理,各種你想像得到的關於時程安排的任務應該都要能完成,例如: 可以建立新的行程、AI依據事情的難度分配所需時間、透過google日曆自動提醒、使用者可以回報進度讓AI可以調整行程等等...。
但礙於拖延症末期,加上開始做之前不確定整體架構在n8n能達到的完整性,因此實際開始做之後,發現要達到理想的功能,需要經過多次的測試和修改才能做到。
一開始利用AI很順利的完成整理流程,基本上與在nc0302課程中所使用的流程差不多,多了幾個因排程功能而需的節點而已(如google calender相關節點),但做了之後才發現,雖然我腦中想得很全面,但一開始跟AI下prompt沒有寫得很詳盡的話,不夠聰明的AI是不會主動延伸這些我所覺得理所當然的功能。所以第一次整個流程執行成功時,基本上只做到了建立行程,其他我預想的修改行程、刪除行程全部都沒做到,不過這些也經由後續的修改一一完成了。
過程中也發生了一件蠻有趣的事,我在測試是否能在同一則訊息中同時輸入多件任務時,明明整個Workflow都執行成功,重新整理google日曆卻沒有顯示被建立的行程,但google日曆明明是會即時更新的,原本以為是同時輸入多行程的bug,輸入單一行程測試,年份也會突然變成2023。問了無所不知的AI後,AI說可以確認一下這個行程被設定的起始時間和結束時間有沒有錯誤,一看還真的有問題,我明明輸入時說是明天的行程,卻被設定程2023年的行程了,起初推測可能是跟我在AI agent中使用模型版本比較舊有關(當時是設定gemini 2.5 flash-lite),但後來換成3.8flash發現也會被設成2024年,所以就直接去修改system prompt要以現在時間為主,問題就被順利解決了。btw這個問題是發生在,原本沒有在system prompt中強調現在時間,就能成功新增單一行程的正確時間,不確定到底是後來修改功能時動到什麼設定,還是如果沒有在system prompt強調現在時間,本來就會讓年份隨便亂跳呢?
之後有機會的話,會想用用看本地n8n+cloudflare免費網址去串linebot,做出一個更完整的排程助理。之前剛好有用pyhton+ngrok做過記帳的linebot(但這次登line official account的時候完全找不到之前的東西,不知道當時到底用到哪個帳號去了),但ngrok有一個很麻煩的點是免費版會有用量限制+每次啟用會需要給他一點開機時間,所以傳第一則訊息時,linebot就完全沒辦法收到這則訊息,因為這則訊息會被當作啟動ngrok的觸發,但我又不想花錢買自己的網域,所以原本想趁這次作業用用看cloudflare,但真的拖延症太嚴重了,怕來不及做完,所以後來沒用這個方法去試,以後有機會要做做看!!
我的system prompt:
【你的職責】
分析使用者輸入的待辦事項或行程。使用者可能會一次提供單個或多個任務。
請幫使用者排定合理的時間,並以陣列形式輸出所有任務。
【當前真實環境時間】
今天的精確時間為:{{ $now.setZone('Asia/Taipei').toISO() }}
當前年份為:{{ $now.setZone('Asia/Taipei').year }} 年
【排程時間計算規則】
- 當使用者說「今天」、「明天」、「下週」或只提供「月/日」、「幾點」時,必須以【當前真實環境時間】推算排程的日期與年份,絕對不可自行預設為 2023 年或過去的年份。
- 所有輸出的 starttime 與 endtime 必須帶有台灣時區偏移量(例如:+08:00)。
【輸出 JSON 規範】
{
"action": "CREATETASK" | "UPDATETASK" | "DELETE_TASK",
"reply_text": "給使用者的友善回覆說明(例如:已為您刪除明天的所有行程!)",
"deletetype": "SPECIFIC" | "ALLINRANGE", // 若為單一事件填 SPECIFIC,若為清空某日/某時段行程填 ALLIN_RANGE
"taskname": "欲搜尋的任務名稱(若為 ALLIN_RANGE 則填 null)",
"search_start": "YYYY-MM-DDTHH:mm:ss+08:00(搜尋/刪除範圍的起始時間,如明天的 00:00:00)",
"search_end": "YYYY-MM-DDTHH:mm:ss+08:00(搜尋/刪除範圍的結束時間,如明天的 23:59:59)",
"tasks": [ ... ]
}
0 個愛心0 則留言
登入並驗證手機後就能留言。登入