iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

前言:

昨天我們將我們的 LINE Bot 串接起來了,再來我們不能只觀測我們的 Notion database Creat 而已,一個真正智能的同步系統,不能只處理「新增」,還必須能應對 「更新」與「刪除」。
當我研究如何實現這一點時,發現 n8n 內建的 Notion Trigger 有一個限制:它無法直接觸發「頁面被刪除」的事件。

要突破這個限制,我們必須從使用官方 Trigger,轉變為使用更底層 Notion Webhook 整合


.yml 檔修改並實作 webhook 監聽Notion

由於我們要使用 Webhook 監聽 Notion ,以至於達成可以知道 Notion 的頁面被刪除。

由於 n8n 執行在本地端,它生成的 Webhook URL 是 http://localhost:5678/,這個 localhost 對於遠端的 Notion 服務來說是無法識別也無法存取的,因為 localhost 指的是服務「自己本身」,Notion 的伺服器無法連到我們自己的電腦。

為了解決這個問題,你需要設定一個公開的 URL,讓 Notion 能夠找得到我們的 n8n 服務。

Zork.io 是什麼 ?!

zrok 是一個開源的安全穿隧 (Secure Tunneling) 服務。它的核心功能是,為一個沒有公開 IP 位址的本地網路服務 (Private Service),提供一個安全、可公開存取的入口 (Public Endpoint)。
在這次你設定 Notion 和 n8n 的流程中。

zrok 扮演了:

  • 公開網址提供者: 這是最核心的功能。它給了你那個只能在自己電腦上存取的 http://localhost:5678 一個全世界都能找到的公開網址。
  • 安全加密的終端:他讓 Notion 到 zrok 伺服器之間的這段網路連線是經過 SSL/TLS 加密的,確保了資料在傳輸過程中的安全。而 zrok 再把解密後的 http 請求發給你本地的 n8n。

zrok 在這次的流程中,就是一座連接「公網世界的 Notion」和「你私有電腦上的 n8n」之間的安全、穩定的橋樑。 它讓兩個原本無法直接對話的服務,能夠順暢無礙地進行溝通。

如何開始使用 zrok (完整步驟)

下面我會引導你完成 zrok 的設定,來取得那個寶貴的固定網址。

  1. 下載 zrok

    • 打開你的終端機 (Windows 建議使用 PowerShell 或 Command Prompt)。

    • 如果你有 winget ,可以直接用指令安裝:

      winget install zrok
      
    • 或者,手動到 zrok 的 GitHub Releases 頁面 下載符合你作業系統 (例如 windows_amd64.tar.gz) 的壓縮檔並解壓縮。

      image

  2. 取得邀請 Token

    • zrok 使用邀請制來註冊免費服務。並在終端機中,切換到 zrok 執行檔所在的目錄,然後執行邀請指令:
    zrok invite
    
    • 它會提示你輸入 Email,Email AddressConfirm Email都輸入你的 email,輸入後按 Enter。很快你就會收到一封來自 zrok 的郵件,裡面包含了你的啟用 Token (一長串的字元)。

      image
      image

  3. 啟用 zrok 環境

    • 收到 Token 後,執行啟用指令。將 [你的Token] 替換為郵件中的字串。

      zrok enable [你的Token] 
      

      image

      看到成功訊息,代表 zrok 環境已準備就緒。
      image

  4. 分享你的 n8n 服務並取得固定網址

    • 現在,執行最重要的 share 指令,將本地的 n8n 服務分享出去:

      zrok share public http://localhost:5678 --backend-mode proxy
      
    • 執行後,您會看到一個公開的 URL,例如 https://abcdefg.ui.zrok.io。這就是您專屬的公開網址! 請將它複製下來,並保持這個終端機視窗持續運行。
      記得不要關掉這個畫面,我們使用 zork.io 都要開啟,我們的 Webhook 才可以正常使用:

      image

      注意:https://abcdefg.ui.zrok.io (假設) 就是我們的專屬網址把它複製下來。

設定 n8n 環境變數

取得公開網址後,我們需要告訴 n8n:「以後你生成的 Webhook URL,都要用這個新的公開網址作為前綴。」

  1. 修改 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
    
    
  2. 重啟 n8n 容器

    存檔案後,在終端機中,於 docker-compose.yml 所在目錄下,依序執行以下指令來重啟 n8n,使新設定生效:

    docker-compose down
    
    docker-compose up -d
    

隱憂與提醒

  • 電腦必須一直開著,且不能進入休眠模式。
  • zrok share 的終端機視窗必須一直執行著
  • 資料傳輸需要繞道 zrok 的伺服器,而不是直接從 Notion 連到你。這會增加延遲,n8n 可能要多花幾百毫秒甚至一兩秒才會收到請求。
  • 理論上,zrok (或任何穿隧服務的提供商) 有能力看到流經他們伺服器的流量內容。

以上就是我們可能會有的困擾。

Webhook 連線至 Notion

  1. 在 n8n 中,新增一個 Webhook 節點。複製 Production URL ( 記得不要使用到 Test URL ) 。
    image

  2. 前往我們之前的 Notion 整合頁面,並點擊 Webhook頁籤,並建立一個新的訂閱。
    image
    image

  3. 將我們剛剛複製的網址貼上 Notion 中的 Webhook 網址,並將我們的 zork.io 網址整合進去才可使用,整合完大致會像這樣:

    https://abcdefg.ui.zrok.io/webhoot/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

    注意:abcdefg.ui.zrok.io的部分是你自己的 zork.io 的網址
    image

  4. 按下「建立訂閱」
    image

  5. 滑到最下面會有一個「驗證」按下去
    image

  6. 建立訂閱後,滑到頁面下方進行驗證,點擊「重新傳送權杖」。
    image

  7. 若有正常傳送權杖,我們回到 n8n 查看 Webhook 節點的 Executions 紀錄,找到我們的verification_token 會看到一個secret_ 開頭的一個權杖,這就是我們的權杖,複製並貼回 Notion 的驗證欄位並提交。
    image

完成以上步驟,您的 n8n 就正式與 Notion Webhook 連接成功了!


結語:

今天無疑是我們專案中技術挑戰最大的一天。我們從零開始,成功地利用 zrok 為本地運行的 n8n 建立了一條通往公網的安全通道,並藉此成功地將 n8n Webhook 註冊到 Notion,突破了原生 Trigger 的功能限制。

這一步的意義非常重大:我們的 n8n 工作流,從此不再是被動地等待「新增頁面」的單一事件,而是建立了一個全方位的監聽哨站,能夠捕捉到 Notion 資料庫中發生的任何風吹草動。

雖然過程複雜,但我們已經打通了最關鍵的數據管道。從明天開始,我們將利用這條管道,開始處理傳來的各種事件數據,為我們的 AI Agent 賦予更豐富的邏輯,讓它學會如何根據不同的事件類型(新增、更新、刪除)執行不同的操作,真正實現智能化的同步管理。敬請期待!


上一篇
Day 24 | n8n LINE Bot 通知節點設定
系列文
生成式AI 與 Notion 的碰撞 ?! 你還在 ctrl+c ctrl+v ?25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言