你有沒有遇過這種噩夢:設了一個 n8n 自動化工作流,結果 AI 自動幫你發出一封怪怪的客服回覆、或者把錯誤的訂單資料同步進了 CRM,等你發現時已經來不及了?
這就是「全自動化的盲點」——有些決策,你不能放手讓機器自己做。
n8n v2.6.x 新增的 Human-in-the-Loop(HITL)功能,就是為了解決這個問題。它讓你在自動化流程的任意節點插入一個「等待人工確認」的關卡,流程暫停、通知你、你按核准或拒絕,才繼續往下跑。
繁體中文圈幾乎沒有人寫過這個功能的完整教學,本文是你找得到最詳細的一份。
HITL 的概念不是 n8n 發明的,它來自 AI/ML 領域,意思是「讓人類的判斷介入自動化迴圈」。想像一條組裝線:全自動太快但出錯率高,全人工太慢但準確,HITL 就是在關鍵節點讓人類把關的折衷方案。
在 n8n 的脈絡下,HITL 意味著:
HITL 不是所有工作流都需要,以下是最值得加入人工審核節點的情境:
| 場景 | 為什麼需要 HITL | 審核關卡位置 |
|---|---|---|
| AI 生成社群文案後發布 | AI 可能語氣不對或產生錯誤資訊 | 發文前確認 |
| 大額退款申請自動處理 | 超過 $500 的退款不能全自動 | 退款執行前審批 |
| 合約條款自動填寫後寄出 | 法律文件必須人工確認 | 寄出前法務審核 |
| AI 客服升級為人工處理 | 負面情緒客戶不宜全交給 AI | AI 偵測到情緒後轉交 |
| 廠商報價自動比較後下單 | 採購決策有商業風險 | 最終下單前確認 |
在開始教學前,先搞清楚 n8n HITL 的三個關鍵組件:
這是整個 HITL 機制的核心。當工作流執行到這個節點,流程會暫停,並生成一個唯一的「審核 URL」。審核者點擊這個 URL,可以選擇「核准」或「拒絕」,流程才會繼續。
等待期間,n8n 的 execution 狀態會顯示為 waiting(不是 failed 或 completed)。
光有 Wait for Approval 還不夠——你需要一個通知機制,把「有待審項目」和「審核 URL」發送給對應的審核人。最常用的是 Telegram Bot(即時收到、點擊方便),其次是 Email 或 Slack。
審核結果(核准 / 拒絕)會作為變數傳給下一個節點。你用 IF 節點判斷結果,分別執行「核准流程」和「拒絕流程」。
我們用一個最常見的場景來示範:
每天早上 9 點,AI 自動生成一則 Instagram 貼文草稿,透過 Telegram 傳給你,你按「發布」就自動貼到 IG,按「放棄」就跳過。
新增一個 Schedule Trigger 節點,設定每天 09:00 觸發。
Schedule Trigger 設定:
- Rule: Every day
- Time: 09:00
- Timezone: Asia/Taipei
在 Schedule Trigger 後,加入 OpenAI Chat Model 或 HTTP Request 節點,呼叫你的 AI API 生成文案:
// OpenAI Node 範例 Prompt
System: 你是一個台灣美食餐廳的社群小編,寫 Instagram 貼文時要親切活潑,加上 3-5 個 emoji 和 hashtag。
User: 請根據今天({{$today.format('MM/DD')}})的天氣,幫我寫一則午餐推薦貼文,200 字以內。
這是核心步驟。在 OpenAI 節點後,加入 Wait for Approval 節點(在 Flow 類別下找):
Wait for Approval 節點設定:
- Approval URL: 系統自動生成(顯示在節點輸出)
- Timeout: 24 hours(超過 24 小時自動處理)
- On Timeout: Reject(超時視為拒絕)
- Description: "AI 文案待您審核" (可選,顯示在審核頁面)
設定完成後,節點輸出會包含兩個關鍵變數:
$json.approvalUrl:審核頁面的 URL(需要傳給審核者)$json.approved:審核結果(true / false)Wait for Approval 生成的審核 URL 不需要 n8n 帳號就能訪問,直接點擊就能看到審核內容並做決定。這讓你可以把審核任務發給不懂 n8n 的同事或主管。
在 Wait for Approval 節點之前(注意順序),加入 Telegram 節點,把 AI 生成的文案和審核連結一起發給你:
Telegram Send Message 節點設定:
- Chat ID: 你的 Telegram Chat ID
- Text:
📝 *AI 文案待審核*
今日 AI 生成貼文:
---
{{$node["OpenAI"].json.choices[0].message.content}}
---
請點擊下方連結審核:
✅ [點此審核]({{$node["Wait for Approval"].json.approvalUrl}})
(24 小時內未審核將自動拒絕)
- Parse Mode: Markdown
等等——你可能有疑問:Wait for Approval 節點在 Telegram 節點之後,怎麼在 Telegram 裡引用它的輸出?
這裡有個 n8n 的重要特性:Wait for Approval 節點需要先執行(生成 URL)才能把 URL 傳給通知節點。正確的連接順序應該是:
Schedule Trigger
→ OpenAI(生成文案)
→ Wait for Approval(生成審核 URL,流程暫停)
→ Telegram(發送通知 + 審核 URL)
→ [等待審核者點擊 URL]
→ IF(判斷核准/拒絕)
→ 核准: Instagram 發文節點
→ 拒絕: 記錄到 Google Sheets 節點
審核者做完決定後,工作流從 Wait for Approval 節點繼續。加入 IF 節點:
IF 節點條件:
- Value 1: {{$node["Wait for Approval"].json.approved}}
- Operator: Equal
- Value 2: true
True 分支: 繼續執行(發文)
False 分支: 記錄到 Google Sheets + 發送「已放棄」Telegram 通知
對於更複雜的業務場景(例如:採購審批需要主管和財務雙重確認),你可以串接多個 Wait for Approval 節點:
申請提交
→ Wait for Approval(主管審核)
→ IF 主管核准
→ Wait for Approval(財務審核)
→ IF 財務核准
→ 正式下單
→ IF 財務拒絕
→ 通知申請人:財務拒絕原因
→ IF 主管拒絕
→ 通知申請人:主管拒絕原因
每個 Wait for Approval 節點可以設定不同的通知對象,把審核 URL 發給不同的 Telegram 群組或 Email 對象。
n8n HITL 的審核頁面預設只有「核准 / 拒絕」按鈕,但你可以透過設定讓審核者填寫意見:
// Wait for Approval 節點進階設定
Fields to Collect:
- Name: reason
Type: Text
Label: 拒絕原因(可選)
Required: false
這樣審核者拒絕時可以填寫原因,後續流程可以讀取 $json.reason 來記錄或通知申請人。
HITL 最常見的問題是:審核者忘記或沒看到通知,流程卡在 waiting 狀態。建議的處理策略:
在 n8n 中設定一個獨立的監控工作流,每小時掃描 waiting 狀態超過 X 小時的 execution,發送第二次提醒通知。
// 在 Wait for Approval 的 Timeout 處理分支
On Timeout → Telegram 通知上級主管:
"⚠️ 待審核項目超過 [X 小時] 未處理,已自動轉交您審核。"
→ 新的 Wait for Approval(給上級)
自架 n8n 完全控制工作流數量和 HITL 設定,每月只需 $6 VPS 費用。用 DigitalOcean 新用戶連結,取得 $200 免費試用點數,夠跑好幾個月。
👉 領取 DigitalOcean $200 點數如果你用 DigitalOcean VPS 自架 n8n,需要確保以下設定才能讓 Wait for Approval 的審核 URL 可以被外部訪問:
# docker-compose.yml 關鍵設定
version: '3.1'
services:
n8n:
image: n8nio/n8n:latest # 確保版本 >= 2.6
environment:
- N8N_HOST=your-domain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://your-domain.com/ # 重要:HITL URL 依賴此設定
- N8N_EDITOR_BASE_URL=https://your-domain.com
ports:
- "5678:5678"
volumes:
- n8n_data:/home/node/.n8n
{WEBHOOK_URL}/rest/waiting/{executionId}。如果 WEBHOOK_URL 設定錯誤(例如用 localhost),審核者點擊連結就會無法訪問。在 DigitalOcean 上必須設定為你的 domain 或 IP。
# 更新 n8n Docker 容器
docker pull n8nio/n8n:latest
docker-compose down
docker-compose up -d
# 確認版本
docker exec -it n8n_container n8n --version
通常是 WEBHOOK_URL 設定錯誤,或者 n8n 服務沒有從外部網路訪問的路徑。確認 WEBHOOK_URL 設定為正確的 domain,並檢查 Nginx/Caddy 反向代理設定。
n8n 的 waiting executions 儲存在資料庫,重啟不會消失。但如果你用的是記憶體模式(非 SQLite/PostgreSQL),重啟後 waiting 狀態確實會丟失。建議改用 SQLite 或 PostgreSQL 持久化儲存。
確認 n8n 版本 >= 2.6.x。在節點列表搜尋 "Wait" 或 "Approval",或在 Flow 類別下找。
確認 n8n 的 WEBHOOK_URL 是公開可訪問的 HTTPS URL(非 HTTP)。Let's Encrypt 免費 SSL 憑證可以解決。
一個 waiting execution 在 n8n 裡的資源消耗非常低——它只是資料庫裡的一條記錄,不會佔用 CPU 或記憶體。理論上你可以同時有數百個 waiting executions,系統也不會有問題(但需要足夠的磁碟空間儲存 execution 日誌)。
建議定期清理過期的 waiting executions,避免資料庫膨脹:
# n8n 設定:自動清理舊 executions
N8N_EXECUTIONS_DATA_PRUNE=true
N8N_EXECUTIONS_DATA_MAX_AGE=168 # 保留 7 天
N8N_EXECUTIONS_DATA_SAVE_ON_ERROR=all
N8N_EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # 成功的不留,省空間
| 平台 | HITL 支援 | 審核方式 | 費用 |
|---|---|---|---|
| n8n(自架) | ✅ 原生支援 v2.6+ | URL / Telegram / Email | VPS $6/月 |
| n8n Cloud | ✅ 原生支援 | URL / Telegram / Email | $20/月起 |
| Make(前 Integromat) | ⚠️ 需要第三方工具 | Email 確認 | $9/月起 |
| Zapier | ❌ 原生不支援 | 需自行實作 webhook | $19.99/月起 |
| Dify | ✅ 內建 Human Review | Dify 介面審核 | 免費自架 / $59/月雲端 |
結論很明顯:n8n 的 HITL 實作是目前最靈活的,不限制審核通道(可以 Telegram、Email、Slack、甚至自定義 webhook),而且自架成本極低。
台灣某電商使用 n8n HITL 處理退款申請:
導入後客訴率下降 40%,退款處理時間從平均 2.3 天降到 6 小時。
某 KOL 團隊用 n8n 每天生成 5-10 則 AI 文案,透過 HITL 讓創作者快速審核,一鍵確認發布到 Instagram + Facebook + Threads。平均每則文案審核時間從 15 分鐘降到 90 秒(因為是改稿而非從零寫)。
製造業採購流程:n8n 自動整理 3 家廠商報價 → AI 分析後推薦最優方案 → HITL 讓採購主管確認後才下訂單。導入後採購錯誤率歸零,且主管只需花 5 分鐘確認(而非 2 小時重複整理 Excel)。
不是每個工作流都需要 HITL——加太多審核節點反而讓自動化失去意義。一個好的判斷標準:
問自己:「如果這個決定錯了,修復代價是多少?」
n8n v2.6 的 HITL 功能讓「有選擇性的自動化」變得簡單——你不用在「完全自動」和「完全人工」之間二選一,而是可以精準設定哪些節點要人類把關。
這是 AI 自動化走向成熟的標誌:我們不再追求把所有事情都自動化,而是把人類判斷放在最有價值的地方。
DigitalOcean 是台灣開發者最常用的 VPS 選擇,$6/月 Droplet 就能跑 n8n + HITL 全功能。新用戶透過以下連結可獲得 $200 免費試用點數,相當於免費跑超過 30 個月。
🚀 前往 DigitalOcean 領取 $200 點數