昨天我們將我們的 LINE Bot 串接起來了,再來我們不能只觀測我們的 Notion database Creat 而已,一個真正智能的同步系統,不能只處理「新增」,還必須能應對 「更新」與「刪除」。
當我研究如何實現這一點時,發現 n8n 內建的 Notion Trigger 有一個限制:它無法直接觸發「頁面被刪除」的事件。
要突破這個限制,我們必須從使用官方 Trigger,轉變為使用更底層 Notion Webhook 整合。
由於我們要使用 Webhook 監聽 Notion ,以至於達成可以知道 Notion 的頁面被刪除。
由於 n8n 執行在本地端,它生成的 Webhook URL 是 http://localhost:5678/
,這個 localhost 對於遠端的 Notion 服務來說是無法識別也無法存取的,因為 localhost 指的是服務「自己本身」,Notion 的伺服器無法連到我們自己的電腦。
為了解決這個問題,你需要設定一個公開的 URL,讓 Notion 能夠找得到我們的 n8n 服務。
zrok 是一個開源的安全穿隧 (Secure Tunneling) 服務。它的核心功能是,為一個沒有公開 IP 位址的本地網路服務 (Private Service),提供一個安全、可公開存取的入口 (Public Endpoint)。
在這次你設定 Notion 和 n8n 的流程中。
zrok 扮演了:
http://localhost:5678
一個全世界都能找到的公開網址。zrok 在這次的流程中,就是一座連接「公網世界的 Notion」和「你私有電腦上的 n8n」之間的安全、穩定的橋樑。 它讓兩個原本無法直接對話的服務,能夠順暢無礙地進行溝通。
下面我會引導你完成 zrok 的設定,來取得那個寶貴的固定網址。
下載 zrok
打開你的終端機 (Windows 建議使用 PowerShell 或 Command Prompt)。
如果你有 winget
,可以直接用指令安裝:
winget install zrok
或者,手動到 zrok 的 GitHub Releases 頁面 下載符合你作業系統 (例如 windows_amd64.tar.gz) 的壓縮檔並解壓縮。
取得邀請 Token
zrok invite
它會提示你輸入 Email,Email Address
、Confirm Email
都輸入你的 email,輸入後按 Enter。很快你就會收到一封來自 zrok 的郵件,裡面包含了你的啟用 Token (一長串的字元)。
啟用 zrok 環境
收到 Token 後,執行啟用指令。將 [你的Token] 替換為郵件中的字串。
zrok enable [你的Token]
看到成功訊息,代表 zrok 環境已準備就緒。
分享你的 n8n 服務並取得固定網址
現在,執行最重要的 share 指令,將本地的 n8n 服務分享出去:
zrok share public http://localhost:5678 --backend-mode proxy
執行後,您會看到一個公開的 URL,例如 https://abcdefg.ui.zrok.io。這就是您專屬的公開網址! 請將它複製下來,並保持這個終端機視窗持續運行。
記得不要關掉這個畫面,我們使用 zork.io 都要開啟,我們的 Webhook 才可以正常使用:
注意:https://abcdefg.ui.zrok.io (假設) 就是我們的專屬網址把它複製下來。
取得公開網址後,我們需要告訴 n8n:「以後你生成的 Webhook URL,都要用這個新的公開網址作為前綴。」
修改 docker-compose.yml
打開您的 docker-compose.yml 檔案,在 environment 區塊新增或修改 WEBHOOK_URL 這一行。將 https://abcdefg.ui.zrok.io/
換成您自己的 zrok 網址。
version: '3.7'
services:
n8n:
image: docker.n8n.io/n8nio/n8n # 基於官方的 docker.n8n.io/n8nio/n8n 映像檔建立一個名為 n8n 的容器。
container_name: n8n # 如果不設定,Docker 會給它一個隨機的名字。設定後方便你用指令來管理它。
restart: unless-stopped # 除非你手動停止它 (例如用 docker-compose down),否則無論是 Docker 服務重啟,還是 n8n 程式崩潰,Docker 都會自動幫你重啟這個容器。
ports:
- "5678:5678" # 將主機的 5678 連接埠映射到容器的 5678 連接埠
environment:
- GENERIC_TIMEZONE=Asia/Taipei
- WEBHOOK_URL=WEBHOOK_URL=https://abcdefg.ui.zrok.io/ # 為所有 Webhook 設定了公開的基礎 URL ,這是與外部服務整合的關鍵。
- N8N_BASIC_AUTH_ACTIVE=true # 啟用並配置了基礎身份驗證,用以保護 n8n 的 UI 存取安全。
- N8N_BASIC_AUTH_USER=tim940812
- N8N_BASIC_AUTH_PASSWORD=tim940812
- N8N_SKIP_WEBHOOK_DEREGISTRATION_SHUTDOWN=true # 防止容器重啟時自動註銷在外部服務註冊的 Webhook,確保整合的持久性。
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
external: true
重啟 n8n 容器
存檔案後,在終端機中,於 docker-compose.yml 所在目錄下,依序執行以下指令來重啟 n8n,使新設定生效:
docker-compose down
docker-compose up -d
以上就是我們可能會有的困擾。
在 n8n 中,新增一個 Webhook 節點。複製 Production URL ( 記得不要使用到 Test URL ) 。
前往我們之前的 Notion 整合頁面,並點擊 Webhook頁籤,並建立一個新的訂閱。
將我們剛剛複製的網址貼上 Notion 中的 Webhook 網址,並將我們的 zork.io 網址整合進去才可使用,整合完大致會像這樣:
https://abcdefg.ui.zrok.io/webhoot/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
注意:abcdefg.ui.zrok.io
的部分是你自己的 zork.io 的網址
按下「建立訂閱」
滑到最下面會有一個「驗證」按下去
建立訂閱後,滑到頁面下方進行驗證,點擊「重新傳送權杖」。
若有正常傳送權杖,我們回到 n8n 查看 Webhook 節點的 Executions 紀錄,找到我們的verification_token
會看到一個secret_
開頭的一個權杖,這就是我們的權杖,複製並貼回 Notion 的驗證欄位並提交。
完成以上步驟,您的 n8n 就正式與 Notion Webhook 連接成功了!
今天無疑是我們專案中技術挑戰最大的一天。我們從零開始,成功地利用 zrok 為本地運行的 n8n 建立了一條通往公網的安全通道,並藉此成功地將 n8n Webhook 註冊到 Notion,突破了原生 Trigger 的功能限制。
這一步的意義非常重大:我們的 n8n 工作流,從此不再是被動地等待「新增頁面」的單一事件,而是建立了一個全方位的監聽哨站,能夠捕捉到 Notion 資料庫中發生的任何風吹草動。
雖然過程複雜,但我們已經打通了最關鍵的數據管道。從明天開始,我們將利用這條管道,開始處理傳來的各種事件數據,為我們的 AI Agent 賦予更豐富的邏輯,讓它學會如何根據不同的事件類型(新增、更新、刪除)執行不同的操作,真正實現智能化的同步管理。敬請期待!