當我們把 n8n(自動化流程工具)與 Dify(AI 應用開發平台)結合時,其實是實現了一種「AI 事件驅動式架構(AI Event-driven Workflow)」。
簡單來說:
你可以把整個流程想成這樣:
使用者 → Webhook (n8n) → HTTP Request (呼叫 Dify API)
→ Dify 處理文字生成 → 回傳回答
→ (錯誤處理 / 格式化) → Respond to Webhook → 使用者
這整段流程中:
/chat-messages API| 模組 | 角色 | 功能重點 |
|---|---|---|
| n8n Webhook | 事件接收者 | 等待使用者的訊息請求(通常是 HTTP POST) |
| HTTP Request 節點 | API 呼叫者 | 把訊息轉發到 Dify 的 API(帶上 Token) |
| Dify | AI 核心 | 負責理解問題、生成回答 |
| IF/Try/Catch 節點 | 流程判斷與健壯性 | 處理 API 呼叫失敗或根據 Dify 回覆結果進行下一步判斷 (新增) |
| Respond to Webhook 節點 | 回傳出口 | 把 AI 的回覆送回原請求端 |
/chat-messages 為例)在 n8n 的 HTTP Request 節點中,發送的 JSON Body 結構通常如下:
{
"inputs": {},
"query": "={{ $json['body']['message'] }}",
"response_mode": "blocking",
"user": "api-user",
"conversation_id": "={{ $json['body']['session_id'] }}"
}
query:AI 要回答的問題 (原來的 user_question 在新版 Dify API 中通常寫作 query)response_mode:設定為 blocking 代表 n8n 會等待 Dify 回覆完才繼續user:用來區分使用者conversation_id:(新增) 若要實現多輪對話,此參數是必須的。n8n 會從 Webhook 接收到的資料(例如 session_id)中擷取此 ID,確保 Dify 能維持上下文。API 呼叫成功後,Dify 會回傳一個 JSON,例如:
{
"id": "...",
"answer": "今天台北的天氣晴朗,最高溫28度。",
"conversation_id": "..."
}
一個穩定的 AI 流程必須考慮失敗狀況。n8n 扮演的角色不只是傳遞,還要確保流程的健壯性:
| 情境 | n8n 的處理機制 | 目的 |
|---|---|---|
| API 呼叫失敗 | 使用 Try/Catch 節點。Try 區塊放 HTTP Request,若失敗則進入 Catch 區塊。 |
避免流程中斷,並執行備用應答。 |
| 備用應答 | 在 Catch 區塊中,設置一個 Respond to Webhook,回傳預設訊息:「系統忙碌中,請稍後再試。」 |
確保使用者在失敗時仍能收到回應,而非空白。 |
這樣的架構可以被應用在: