昨天我們成功透過 Webhook 讓系統隨時準備好接收外部傳來的訊息。但是,現實世界中使用者傳來的東西千奇百怪。
假設我們的 AI 知識管家未來要能處理:
如果我們把所有的東西都直接無腦丟給後端的 FastAPI 與 Gemini,系統一定會崩潰。我們需要一個 Router,在資料進入處理核心之前,先把它們分流到對應的專屬通道。
你可能會想:「既然我們有 Gemini,為什麼不直接把使用者傳來的內容全部直接丟給 AI?」呼應我們在 Day 03 提過的概念,這裡有幾個不這麼做的原因:
1. 成本與速度:呼叫 LLM 需要花費 Token 且有網路延遲。
2. 可靠性:AI 的回答具有機率性,有時候可能會判斷錯誤。
3. 有更簡單的解法:判斷一個字串是不是 YouTube 網址,只需要看它有沒有包含 youtube.com 就好,這種「規則明確」的事情,交給傳統的 IF 邏輯處理是最快、最穩定的。
在 n8n 中,我們可以使用 IF Node 或 Switch Node 來進行條件判斷與分流。因為我們有多個類別(YouTube、Web、PDF、Text),這裡使用擴充性最好的 Switch Node。
建立 Switch Node
在昨天的 Webhook 節點後面,點擊 + 新增節點,搜尋並選擇 Switch 節點。點開 Switch 節點設定,我們要根據 Webhook 傳進來的 text 欄位來做判斷。將 Value 1 綁定為我們昨天學到的路徑:{{ $json.body.text }}。
設定 Routing 規則
將規則如上圖設定,要注意因為 youtube 連結也包含 http,所以 youtube 的規則要放在網頁的前面。最後一個規則是處理純文字的。
接下來就可以像昨天一樣用 curl 測試:
curl -X POST http://localhost:5678/webhook-test/telegram-webhook \
-H "Content-Type: application/json" \
-d "{\"text\": \"一段 Youtube 連結\"}"

接著檢測是否走在正確的路徑上,每條路徑要接的點未來幾天會再處理。