Tự động hoá · 9 phút đọc · 2026-09-17
Hướng dẫn n8n tiếng Việt: dựng luồng đầu tiên, đọc số item và ba lỗi người mới hay gặp
Một luồng đơn hàng mẫu cho thấy cách đọc INPUT, Parameters, OUTPUT và số item để bắt ba lỗi n8n người mới hay gặp. Từ Split Out đến Expression, mỗi bước đều có dấu hiệu kiểm tra rõ ràng.

Bài hướng dẫn n8n tiếng Việt này đi đúng một việc: dựng xong một luồng chạy được, rồi học cách đọc nó để tự tìm ra lỗi. Luồng mẫu lọc đơn hàng từ 1 triệu trở lên, không cần tài khoản hay dịch vụ ngoài nào, nên bạn chạy được ngay trên bản n8n vừa cài.
Mình làm trên n8n 2.35.7 tự cài trên Windows. Mọi ảnh trong bài là ảnh chụp sau khi bấm chạy thật, mọi thông báo lỗi là nguyên văn máy trả về.
Hướng dẫn n8n tiếng Việt: cần gì trước khi bắt đầu
- Bạn đã có n8n chạy trên máy. Chưa có thì làm theo bài Cài n8n trên Windows.
- Chưa rõ node, workflow, trigger là gì thì đọc nhanh bài n8n là gì.
Hai từ cần nhớ cho cả bài: node là một bước xử lý, item là một dòng dữ liệu đi qua node.
Bước 1: dán luồng mẫu vào n8n
Cách nhanh nhất để có n8n workflow đầu tiên chạy được là dán sẵn JSON của nó.
- Mở n8n, tạo một workflow trống.
- Bấm nút "Sao chép" ở khối mã dưới đây.
- Bấm vào vùng canvas trống rồi nhấn Ctrl+V.
{"nodes":[{"id":"n1","name":"Bấm chạy thử","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[0,0],"parameters":{}},{"id":"n2","name":"Tạo danh sách đơn","type":"n8n-nodes-base.set","typeVersion":3.4,"position":[240,0],"parameters":{"mode":"manual","assignments":{"assignments":[{"id":"a1","name":"don","value":"[{\"ma\":\"DH01\",\"khach\":\"Chị Mai\",\"tien\":450000},{\"ma\":\"DH02\",\"khach\":\"Anh Khoa\",\"tien\":1250000},{\"ma\":\"DH03\",\"khach\":\"Chị Thảo\",\"tien\":780000},{\"ma\":\"DH04\",\"khach\":\"Anh Phúc\",\"tien\":2100000},{\"ma\":\"DH05\",\"khach\":\"Chị Ngân\",\"tien\":990000}]","type":"array"}]},"options":{}}},{"id":"n3","name":"Tách từng đơn","type":"n8n-nodes-base.splitOut","typeVersion":1,"position":[480,0],"parameters":{"fieldToSplitOut":"don","options":{}}},{"id":"n4","name":"Đơn từ 1 triệu?","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[720,0],"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","version":3,"typeValidation":"={{ ($nodeVersion < 2.1 ? $parameter.options.looseTypeValidation : $parameter.looseTypeValidation) ? \"loose\" : \"strict\" }}"},"conditions":[{"id":"d1","leftValue":"={{ $json.tien }}","rightValue":1000000,"operator":{"type":"number","operation":"gte"}}],"combinator":"and"},"looseTypeValidation":false,"options":{}}},{"id":"n5","name":"Nhắc gọi xác nhận","type":"n8n-nodes-base.set","typeVersion":3.4,"position":[980,-100],"parameters":{"mode":"manual","assignments":{"assignments":[{"id":"a2","name":"loiNhan","value":"=Gọi xác nhận đơn {{ $json.ma }} của {{ $json.khach }}, {{ $json.tien }} đ","type":"string"}]},"options":{}}},{"id":"n6","name":"Đơn nhỏ, bỏ qua","type":"n8n-nodes-base.noOp","typeVersion":1,"position":[980,100],"parameters":{}}],"connections":{"Bấm chạy thử":{"main":[[{"node":"Tạo danh sách đơn","type":"main","index":0}]]},"Tạo danh sách đơn":{"main":[[{"node":"Tách từng đơn","type":"main","index":0}]]},"Tách từng đơn":{"main":[[{"node":"Đơn từ 1 triệu?","type":"main","index":0}]]},"Đơn từ 1 triệu?":{"main":[[{"node":"Nhắc gọi xác nhận","type":"main","index":0}],[{"node":"Đơn nhỏ, bỏ qua","type":"main","index":0}]]}}}Đã xong khi canvas hiện đủ 6 node: Bấm chạy thử, Tạo danh sách đơn, Tách từng đơn, Đơn từ 1 triệu?, Nhắc gọi xác nhận, Đơn nhỏ, bỏ qua. Mình đã dán đúng khối JSON này vào một workflow trống và chạy thử:

Bước 2: bấm chạy và đọc số item
Bấm nút Execute workflow. Chạy xong, mỗi node viền xanh có dấu tích, và mỗi đường nối có một nhãn đếm item.

Đọc nhãn theo thứ tự:
- Bấm chạy thử → Tạo danh sách đơn: 1 item. Lượt bấm tay tạo ra đúng một item.
- Tạo danh sách đơn → Tách từng đơn: 1 item. Vẫn một item, nhưng giờ chứa một mảng 5 đơn.
- Tách từng đơn → Đơn từ 1 triệu?: 5 items. Mảng đã tách thành 5 item, mỗi đơn một item.
- Nhánh true: 2 items, nhánh false: 3 items. Hai đơn từ 1 triệu trở lên, ba đơn nhỏ hơn.
Đây là thói quen quan trọng nhất khi học cách sử dụng n8n: nhìn số item trước, nhìn chữ "thành công" sau. Phần lỗi bên dưới sẽ cho thấy vì sao.
Bước 3: mở một node để xem dữ liệu vào và ra
Nhấp đúp vào node bất kỳ. Bảng mở ra có ba cột:
- INPUT: dữ liệu node nhận vào. Đổi cách xem bằng ba nút Schema, Table, JSON.
- Parameters: cấu hình của node. Nút Execute step chạy riêng node này.
- OUTPUT: dữ liệu node trả ra, kèm số item ở đầu cột.
n8n Split Out là gì: từ 1 item thành 5 items

Node Tạo danh sách đơn trả ra một item chứa trường don là một mảng. Nếu để nguyên như vậy, node If phía sau chỉ nhận một item. Split Out nhận tên trường mảng (ô Fields To Split Out ghi don) và tách nó ra thành 5 items. Từ đây, mọi node phía sau chạy một lần cho mỗi đơn.
n8n Expression là gì: ô có dấu bằng và dòng xem trước

Expression (biểu thức) là cách lấy dữ liệu từ item đang chạy chèn vào một ô. Trường loiNhan ghi:
Gọi xác nhận đơn {{ $json.ma }} của {{ $json.khach }}, {{ $json.tien }} đ$json.ma nghĩa là "trường ma của item đang chạy". Ô đang ở chế độ biểu thức có ba dấu hiệu, và bạn nên tập nhìn ra cả ba:
- Vạch có dấu = ở mép trái ô.
- Phần trong
{{ }}được tô màu xanh. - Có dòng xem trước kết quả ngay dưới ô.
Kết quả thật: "Gọi xác nhận đơn DH02 của Anh Khoa, 1250000 đ" và "Gọi xác nhận đơn DH04 của Anh Phúc, 2100000 đ".
Lỗi 1: quên bật chế độ biểu thức
Mình gõ đúng nội dung trên vào trường loiNhan, nhưng để ô ở chế độ thường.

- Lượt chạy vẫn báo thành công, không có lỗi nào.
- Số item vẫn đúng: 2 items.
- Nhưng lời nhắn ra nguyên văn
Gọi xác nhận đơn {{ $json.ma }} của {{ $json.khach }}, {{ $json.tien }} đ.
Cách sửa: chuyển ô sang chế độ Expression, rồi kiểm lại ba dấu hiệu ở trên. Không thấy dòng xem trước nghĩa là ô chưa phải biểu thức.
Lỗi 2: số tiền là chữ
Mình đổi số tiền trong mảng thành chữ, ví dụ "450000" trong ngoặc kép.

- Node If báo lỗi và luồng dừng. Nguyên văn:
Wrong type: '450000' is a string but was expecting a number [condition 0, item 0]. - Dấu hiệu ở cột INPUT: trường
tienmang biểu tượng chữ T thay vì dấu # của số. - n8n gợi ý hai cách: bật Convert types where required, hoặc thêm
.toNumber().
Cách sửa mình đã thử: bật công tắc Convert types where required trong node If, chạy lại. Kết quả thành công, nhánh true 2 items, nhánh false 3 items, giống hệt luồng gốc. Cách .toNumber() mình chưa thử.
Một chuyện mình vấp khi dựng luồng bằng API: nếu JSON của node If ghi cứng "typeValidation": "strict" thì bật công tắc cũng vẫn lỗi, vì giao diện tự đặt ô đó là một biểu thức đọc công tắc. JSON ở Bước 1 đã dùng đúng biểu thức đó, nên bạn bật công tắc là có tác dụng.
Lỗi 3: sai tên trường ở Split Out
Mình gõ dons thay vì don ở ô Fields To Split Out. Chỉ thừa một chữ s.

- Lượt chạy vẫn báo thành công.
- Split Out ra 0 item, luồng dừng ngay tại đó, hai node sau không chạy.
- Chỉ khi mở node mới thấy dòng
The field 'dons' wasn't found in any input item.
Cách sửa: mở cột INPUT ở dạng Schema, đọc đúng tên trường (ở đây là don), rồi gõ lại cho khớp từng chữ.
Điều rút ra cho người mới bắt đầu với n8n
Hai trong ba lỗi ở trên không làm lượt chạy báo lỗi. Vì vậy mỗi lần chạy thử, kiểm theo thứ tự này:
- Số item trên từng đường nối có đúng như bạn nghĩ không?
- Có node nào ra 0 item mà lẽ ra phải có dữ liệu không?
- Mở node cuối, đọc cột OUTPUT xem nội dung có đúng không, không chỉ đếm dòng.
Những gì mình chưa kiểm: n8n Cloud, bản chạy bằng Docker, cách sửa bằng .toNumber(), và tuỳ chọn Always Output Data.
Làm tiếp gì sau luồng đầu tiên
Bài hướng dẫn n8n tiếng Việt này dừng ở một luồng không cần tài khoản nào. Khi đã quen đọc số item, bạn có thể thử các luồng có dịch vụ thật mà mình đã dựng:
- Tác giả
- Quản trị viên
- Đăng ngày
- 2026-09-17
- Cập nhật
- 2026-09-17
- Thời gian đọc
- 9 phút đọc
- Tất cả bài viết