幾年前有介紹過一款類似 IFTTT 的自動化服務 n8n,經過這幾年的進化成長,n8n 內建的 node 越來越多且也越來越好用了!🌟

而 n8n 最近幾年也開始大力宣傳他們的雲端架設服務,最基本同時可啟用 5 個 workflows 的方案每月要 20 美金

所幸的是他們提供的自架版本還是存在著,自己搭一套 Docker 版的 n8n 只需要短短幾分鐘就能搞定,硬體門檻也不高

我自己有跑在一台樹莓派 4(4GB RAM)的設備上也是很順的跑起來,所以免費甲骨文或者 GCP 最低配置的虛擬機更不用說也都沒問題

下面就來快速在樹莓派裡面安裝一套 n8n,同樣適用於 Ubuntu / Debian 系統

安裝 Docker 環境

最簡單就是直接用官方的安裝腳本直接安裝,要注意的是執行腳本需要 sudo 或者 root 權限

$ sudo apt update
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh

等待腳本跑完安裝完畢,接著設定一下權限

$ sudo usermod -aG docker $USER

接著重新登入一次 ssh 即可完成 Docker 執行環境的安裝,然後我們最後安裝 Docker compose

$ sudo apt-get install docker-compose-plugin

以上就完成 Docker 執行的基本環境

啟動 Docker 版 n8n

下面是 docker-compose.yml 內容,可以直接拷貝黏貼

services:
	n8n:
		image: n8nio/n8n
		container_name: n8n
		restart: unless-stopped
		environment:
			- EXECUTIONS_DATA_PRUNE=true
			- EXECUTIONS_DATA_MAX_AGE=72
			- EXECUTIONS_DATA_PRUNE_MAX_COUNT=2500
			- GENERIC_TIMEZONE=Asia/Taipei
			- TZ=Asia/Taipei
		ports:
			- 5678:5678
		volumes:
			- n8n-data:/home/node/.n8n

volumes:
	n8n-data:

需要詳細的設定,來配合你的環境跟需求可以參考官網說明文件 https://docs.n8n.io/hosting/installation/server-setups/docker-compose/

保存好之後,我們可以直接輸入以下指令啟動容器

$ docker compose up -d

根據你的機器設備與網路速度,稍等幾分鐘部屬的時間,完成後直接使用瀏覽器打開 http://[樹莓派 IP]:5678

打開後根據提示完成第一次所需的帳號設定與簡易問券調查即可愉快的使用 n8n!🎉

監測 PTT 某個討論版的標題關鍵字

以之前有介紹的那篇為例,當時 n8n 內建 node 功能還蠻少的,所以當時還另外寫了 code 來過濾已經發過的內容

如今 n8n 已經有內建一個名為 RSS Trigger 的節點,他會自動記憶上次已經處理過的內容,每次只有新內容出現時才會觸發後續的工作流

大致上想要實現的功能如下:

  1. 定時(每十分鐘或半小時或者更長時間)監測 PTT 某個討論版的 RSS Feed
  2. 出現你感興趣的標題關鍵字時,發送 Telegram 通知給你自己

整個完整 workflow 就只要上圖三個內建 node 即可完成,比幾年前要好很多,完全不需要寫任何一行程式

下面我們來看一下每個 node 裡面的相關設定

RSS Feed Trigger 節點設定

1 的欄位就是指定他每隔多少時間要去抓一次資料,如上圖就是設定 30 分鐘會去抓取一次

2 的欄位填入 RSS Feed url 即可

PTT 所有討論版都有 ATOM 輸出,找出你要監測的討論版即可,例如上圖的 url 是 Steam 遊戲版

iOS 版就是: https://www.ptt.cc/atom/iOS.xml

日本旅遊版就會是: https://www.ptt.cc/atom/Japan_Travel.xml

請自行以此類推

設定完畢後,3 的按鈕可以先測試一下有沒有正確抓取內容,可以在右側的 Output 即時檢視抓取回來的資料

可以看見抓取回來的有文章標題(title)、文章連結(link)、文章發佈時間(pubDate)、文章作者(author)、少部分文章內容(content)…等等

If 節點設定

這個節點主要用來過濾我們要的內容,例如我只要 Steam 版中標題出現「限免」的文章

如上圖,我們直接將左側 INPUT 的 title 用滑鼠直接拖曳到右邊的條件欄位,選擇 A contains,後面欄位填寫「限免」

填寫完畢後,一樣按一下右上角的按鈕「Test step」,即可測試此節點的執行結果

此設定動作表示,只要 title 字串中「包含」(contains)「限免」的文字,就會輸出到 True Branch

反之如果沒有,就會輸出到 False Branch

Telegram 節點設定

我每次花最多時間大部分在這個節點上,因為要排版什麼的,需要花點時間 🤣

這個節點主要是將之前抓取到的,而且經過 If 節點過濾出標題內包含「限免」字串的文章,發送到指定的 Telegram ID 上

可以請機器人直接私訊你,也能是群組或者頻道的 ID

在第一個 Credential to connect with 欄位請選擇你要控制的 Telegram 機器人

如果你之前沒有設定過的話,也可以點一下直接開始設定一組新的 Telegram bot token

至於怎麼申請 Telegram bot 網路上已經有蠻多文章教學,可以去參考一下

Chat ID 是要發給目標的 ID,這部份建議可以安裝 Swiftgram 這個第三方 Telegram 客戶端,他可以很輕鬆查到你自己或者群組的 ID

要注意的是,如果是個人 ID 的話會是純數字,但如果是群組或者頻道,會是一個前面帶有「-」的數字

如果是群組或者頻道在填入 Chat ID 時候,請要加上「-」

Text 的欄位就是訊息內容,此部份就隨個人喜好,你可以加上標題、連結跟內容都行,只要方便自己閱讀即可

另外要注意的是最底下有個 Additional Fields 的欄位,如果點一下 Add Field 會出現額外的選項

像是要不要顯是連結預覽或者關閉通知等等的選項,都可以在這邊找到

三個節點 node 都設定完畢後,記得右上角 Active 開關要記得打開,打開後 n8n 就會依照你設定的週期來定期抓取資料了

以上就完成一個監控 PTT 討論版自訂關鍵字的 workflow,對比幾前年版本的 n8n 要簡單許多

👆 實際在 Telegram 收到的效果如上圖

結語

總的來說 n8n 這個自動化工作流,將以往普羅大眾比較難下手的工作,變成 GUI 模組化的節點設計

不需要有太多軟體工程師寫程式的基礎,也能順利打造出專屬自己一套自動化系統

在開發或者 debug 階段,也能很清楚看到每個節點輸入以及輸出,因為模組化設計,很方便就能隨時替換或者新增或者刪除其中某一個節點

而且與幾年前相比,如今的 n8n 已經變得易用許多,也有整合這幾年最流行的 AI node,可以輕鬆呼叫 OpenAI 或者自架的 Ollama 大模型等等

非常適合個人或小型團隊的自動化需求,我之後應該還會整理幾個 n8n 實戰範例

希望本篇教學能有所幫助,如果有任何問題或者有 n8n 新奇的用法,歡迎留言交流!🖖