Giới thiệu
Mọi workflow thực tế đều đến ngã rẽ: chỉ gửi thông báo khi giá trị deal trên $10.000, xử lý đơn hàng khác nhau tùy theo trạng thái, bỏ qua một bước khi trường dữ liệu trống. n8n xử lý tất cả những điều này thông qua phân nhánh có điều kiện — định tuyến luồng thực thi theo các nhánh khác nhau dựa trên dữ liệu thực tế chảy qua workflow của bạn.
n8n cung cấp hai node cho việc này: IF cho quyết định có/không, và Switch khi bạn cần nhiều hơn hai kết quả. Biết khi nào nên dùng node nào, và cách cấu hình điều kiện chính xác, chính là điều phân biệt workflow mong manh với workflow vận hành ổn định trong production.
Node IF: Phân nhánh nhị phân
Node IF đánh giá một hoặc nhiều điều kiện dựa trên dữ liệu đầu vào và định tuyến mỗi item đến đầu ra TRUE hoặc FALSE. Không có item nào đi cả hai nhánh — mỗi item chọn chính xác một đường.
Để cấu hình, bạn chọn một giá trị từ dữ liệu đầu vào (thường là tham chiếu trường như cú pháp expression), chọn một toán tử, và đặt giá trị so sánh. n8n hỗ trợ nhiều toán tử cho từng kiểu dữ liệu:
Với chuỗi: equals, not equals, contains, starts with, ends with, regex match. Với số: equals, not equals, greater than, less than, greater than or equal, less than or equal. Với boolean: is true, is false. Với mảng và object: is empty, is not empty.
Ví dụ đơn giản: một webhook nhận dữ liệu đơn hàng và bạn muốn định tuyến các đơn giá trị cao đến một kênh Slack riêng.
Trong node IF bạn sẽ đặt: Value 1 — expression tham chiếu trường số tiền đơn hàng Operation — Greater Than Value 2 — 10000
Các item có số tiền vượt quá 10.000 sẽ thoát ra ở đầu ra TRUE. Tất cả các item còn lại thoát ra ở FALSE. Sau đó bạn kết nối mỗi đầu ra với các node downstream tương ứng.
Bạn có thể xếp chồng nhiều điều kiện trong cùng một node IF bằng AND (tất cả phải thoả mãn) hoặc OR (chỉ cần một điều kiện đúng là đủ). Lưu ý rằng chuỗi AND có thể trở nên khó đọc khi vượt quá ba điều kiện — lúc đó, tách thành các node IF nối tiếp nhau hoặc chuyển sang Switch thường sẽ rõ ràng hơn.
Node Switch: Nhiều kết quả
Khi bạn có nhiều hơn hai tuyến đường có thể, việc xếp chồng các node IF sẽ trở nên lộn xộn rất nhanh. Switch cho phép bạn định nghĩa nhiều quy tắc, mỗi quy tắc có đầu ra riêng, được đánh giá từ trên xuống dưới. Quy tắc đầu tiên khớp sẽ thắng, và item thoát ra ở đầu ra đó.
Switch cũng có đầu ra Fallback — các item không khớp quy tắc nào sẽ rơi vào đây. Luôn kết nối gì đó với fallback, dù chỉ là một node No Operation, để bạn biết chuyện gì đã xảy ra với các item không khớp.
Ví dụ thực tế: bạn nhận các ticket hỗ trợ và muốn định tuyến chúng theo mức độ ưu tiên.
Trong n8n, bạn cấu hình mỗi quy tắc theo cách giống như cấu hình điều kiện IF — chọn trường, chọn toán tử, đặt giá trị so sánh. Điểm khác biệt là mỗi quy tắc có cổng đầu ra được đánh số riêng trên node.
Một chi tiết tinh tế đáng lưu ý: theo mặc định, Switch chỉ định tuyến mỗi item đến quy tắc khớp đầu tiên. Nếu bạn bật tuỳ chọn "Send data to all matching outputs", một item có thể thoát ra ở nhiều đầu ra cùng lúc. Điều này hữu ích nhưng có thể gây trùng lặp hành động downstream nếu bạn không lường trước — hãy tắt nó trừ khi bạn thực sự cần hành vi fan-out.
Những lỗi thường gặp
Sai lệch kiểu dữ liệu gây ra lỗi âm thầm nhiều hơn bất kỳ lỗi nào khác. Nếu trường đầu vào của bạn chứa chuỗi "1500" và bạn so sánh với Greater Than 1000 bằng toán tử Number, n8n có thể không tự động ép kiểu chuỗi tuỳ thuộc vào nguồn dữ liệu. Hãy dùng node Set hoặc một expression như parseInt() để chuẩn hoá kiểu trước khi phân nhánh.
Một lỗi phổ biến khác là để đầu ra FALSE của node IF hoặc đầu ra Fallback của node Switch không được kết nối. n8n sẽ không báo lỗi — những item đó chỉ đơn giản là biến mất khỏi execution. Trong một workflow xử lý dữ liệu khách hàng, việc mất mát âm thầm như vậy sẽ rất khó gỡ lỗi sau này. Hãy kết nối mọi đầu ra với một node nào đó, dù chỉ là một bước ghi log tối thiểu.
Cũng cần cẩn thận với các trường rỗng hoặc null. So sánh một giá trị null với "equals some string" sẽ cho kết quả false, thường là điều bạn muốn — nhưng "is empty" và "is not empty" lại hoạt động khác với "equals empty string". Hãy kiểm thử với payload null thực tế, không chỉ chuỗi rỗng.
Tóm tắt
Dùng node IF khi quyết định của bạn là nhị phân — TRUE hoặc FALSE, đúng hoặc sai, khớp hoặc không khớp. Dùng Switch khi bạn có ba hoặc nhiều kết quả khác nhau và muốn các đầu ra riêng biệt, gọn gàng mà không phải nối chuỗi nhiều node IF. Trong cả hai trường hợp, luôn xử lý rõ ràng đường không khớp, chuẩn hoá kiểu dữ liệu trước khi so sánh, và kiểm thử với các đầu vào biên (null, chuỗi rỗng, kiểu không mong đợi) trước khi triển khai lên production. Hai node này là nền tảng của mọi workflow có logic điều kiện thực sự.
Bài kiểm tra cuối bài