iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
生成式 AI

打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!系列 第 9

【Day 9】實現「自動化」!一起床就收到新聞,系統收尾囉~

  • 分享至 

  • xImage
  •  

我們在測試的時候都是用手動執行每個節點,現在要新增一個 Schedule Trigger 節點設定自動化。
如此一來,我們就能在每天起床看到準備好的新聞送到手機上。

自動化流程

在最前面(RSS Read 前)新增一個 Schedule Trigger 節點。

https://ithelp.ithome.com.tw/upload/images/20250816/20178067S9f4LSXOvH.png

步驟一:編輯設定

https://ithelp.ithome.com.tw/upload/images/20250816/201780677oYsfTIFQw.png

設定每天早上八點執行:

  1. Trigger Interval(觸發間隔):Days
  2. Days Between Triggers(每隔幾天觸發一次):1(一天一次)
  3. Trigger at Hour(時刻):8am
  4. Trigger at Minute(分鐘)0

可以根據你起床的時間,或是其他你希望的時間做更改。

❗這邊有一點要注意,雖然我設定早上八點執行,實際上不一定八點整就會收到訊息,
原因包含以下幾點:

  1. Schedule Trigger 的設計並非用於需要極高精準度的應用,而是在一個大約的時間點觸發。
  2. n8n 的排程引擎會週期性地檢查是否有任務需要執行,而不是持續不斷地在監控。舉個例子:n8n 在早上 8 點 15 分檢查時,發現 8 點的任務還沒執行,就會立即開始執行。
  3. 如果你的 n8n Docker 容器正在處理其他工作流,或者你的電腦資源(如 CPU、記憶體)正在被其他程式佔用,n8n 可能會等到有足夠的資源時才開始執行這個排程任務。
  4. n8n 使用一個內部任務佇列來管理所有需要執行的工作。當到了 8 點時,Schedule Trigger 會將這個任務放入佇列中,然後等待被執行。
    如果佇列中有其他更早的任務正在等待,你的 8 點任務就會排隊,導致延遲。

也就是說,你如果要它在一個很準確的時間執行,就不能用 Schedule Trigger 來排程,而是要去用外部的排程服務,並透過 Webhook 節點來觸發 n8n。

對我來說,我覺得它延遲個幾分鐘是可以接受的,畢竟自己起床的時間也不一定,它只要在我起床前有傳訊息就好,所以我還是用Schedule Trigger 來排程。
假如你真的就是想要它有一個精準的執行時間,那你可以先點進下一篇,裡面有我嘗試過的方法和我失敗的原因。

回來設定 Schedule Trigger 節點~

如果現在是下午,那你要等到隔天早上八點左右才會知道這個節點有沒有成功執行,有點太久了。
所以我們先設定短一點的時間來測試看看吧~
https://ithelp.ithome.com.tw/upload/images/20250816/20178067AY2i96CzSf.png

設定成每十秒執行一次,現在按下執行鍵,等待十秒 ⋯⋯


步驟二:更改執行模式

是不是怎麼等都等不到訊息?(我當初就是等了很多次等很久等不到訊息)
後來發現是因為沒有啟動工作流,n8n 有兩種主要的執行模式:

  1. 測試模式 ( Test Execution ):我們在編輯器手動點擊 Execute Workflow 時,n8n 會以測試模式執行。這種模式只會執行一次,幫助你測試每個節點的輸出是否正確,不會重複執行。
  2. 啟動模式 ( Active Execution ):當你儲存並啟動(Activate)工作流後,它會根據你設定的 Trigger 規則,在背景自動重複執行。這才是你希望它每 10 秒執行一次的模式。

https://ithelp.ithome.com.tw/upload/images/20250816/20178067W8cyDCEPcG.png

點擊中間的開關(Inactive → Active),之後再去執行一次節點,十秒後就能看到訊息成功傳送囉~

現在有一個新問題:「我啟動工作流以後,還要一直開著瀏覽器它才會運作嗎?」
啟動工作流代表這些節點會在背景持續監控和執行。因為我們是用 Docker 安裝 n8n 容器,
只要你的 Docker Container 持續運作,你的 n8n 就會一直自動化。

換句話說,假如你把瀏覽器關掉了,你的 Docker Container 還在運作,那工作流程就會持續運作;再換句話說,假如你把 Docker Container 關掉了,你的工作流程就會停止。
自動化取決於 Docker 容器。

Docker Desktop → 電腦作業系統(Windows / macOS)
n8n → 電腦上的應用程式(Chrome 瀏覽器)
電腦作業系統關閉 → 應用程式關閉


眼尖的你,有沒有發現執行完後右邊輸出的最下面有一個時區欄位。

https://ithelp.ithome.com.tw/upload/images/20250816/20178067ONpEVFp8Oy.png

我們又有新任務要處理了,身處台灣,它的時區怎麼會是美國紐約呢?


更改時區

n8n 的排程節點會根據它所在的伺服器時區來觸發,由於我的 Docker 容器預設的時區是紐約,所以它會按照紐約時間來執行。
Docker 容器的預設時區不是固定都會是紐約時間,它取決於以下兩個因素:

  1. Docker 映像檔的建立者設定
    • n8n 的 Docker 映像檔(n8nio/n8n)是由 n8n 官方團隊建立的。
      他們在建立這個映像檔時,可能會將時區設定為一個特定的預設值。
    • 許多應用程式的映像檔會預設時區為 UTC(國際標準時間),因為這是一個全球通用的標準,方便協調不同地區的服務。
    • 但有些映像檔的預設時區會根據建立者的地理位置或其他考量而有所不同。
  2. 你自己的 Docker 環境
    • 有些 Docker 環境會嘗試從主機系統繼承時區設定,但不一定會成功或可靠。

那我們現在的 Docker 時區不在 UTC +8:00 怎麼辦?
只能透過移除現在運行的 n8n 容器,新建一個時區在 UTC +8:00 的容器。

步驟一:停止並移除舊的容器 (記得 n8n 要先按儲存!)

docker stop 你的Container ID # 停止容器
docker rm 你的Container ID   # 移除容器

https://ithelp.ithome.com.tw/upload/images/20250816/20178067gz3kGBMHWo.png

不用擔心移除舊的容器會讓 n8n 的資料都消失,假如你之前是和我用相同的方式安裝,n8n 的資料都會存在你路徑的資料夾中,如果真的想再確認一下,可以去檔案總管中看有沒有 n8n 的資料夾。

https://ithelp.ithome.com.tw/upload/images/20250816/20178067Lo2gbWJwpn.png

如果有看到 database.sqlite 這個資料夾就表示你的 n8n 資料安全。

步驟二:用新的指令啟動正確時區的容器

docker run -d --name n8n -p 5678:5678 -v 你的路徑/.n8n:/home/node/.n8n --env GENERIC_TIMEZONE=Asia/Taipei n8nio/n8n

https://ithelp.ithome.com.tw/upload/images/20250816/20178067G4VdOt5Q2y.png

現在你只要在瀏覽器中打上 http://localhost:5678 就可以看到 n8n 的網頁了,且資料會和你舊容器儲存時的內容一模一樣!

現在再回去執行看看你的 Schedule Trigger ,輸出的時區應該要是台灣的時區。

https://ithelp.ithome.com.tw/upload/images/20250816/20178067k2lkXbKRoy.png

按下儲存並且確認你有啟動工作流,設定自動化的任務就完成啦~
之後在你設定的時間就會收到來自 AI 摘要後的新聞訊息了!

做到這邊結束了一個段落,我們這個自動化的新聞小編總算是完成了,下一階段要延伸一些進階的功能,增加 LINE Bot 和使用者的互動性,敬請期待吧!

下篇預告

明天(Day 10)的文章算是一個番外篇,我深刻體會到其實一個目標不是只有一條路能抵達 (但我走了其他條路後發現還是主幹道最好走),一起來看看我解決排程延遲問題的血淚史…


上一篇
【Day 8】系統收尾前的最後檢查:搞定 AI 摘要的格式問題!
下一篇
【Day 10】Webhook 節點:系統自動化的血汗嘗試
系列文
打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言