Menu
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Đang tải...

Bài 28 — n8n — Open source automation cho VN team

AI Tools for Productivity Bài 28/60

Mở đầu — vì sao bài này quan trọng

Ở hai bài trước, bạn đã làm quen với Zapier (dễ dùng, trả tiền theo task) và Make.com (visual, linh hoạt hơn). Cả hai đều tuyệt vời, nhưng chúng có chung một điểm yếu mà nhiều team Việt Nam sẽ đụng phải sớm hay muộn: dữ liệu của bạn chạy qua server của họ, và chi phí tăng vọt khi khối lượng công việc lớn.

Hãy tưởng tượng bạn là trưởng phòng vận hành một công ty fintech ở TP.HCM. Mỗi ngày hệ thống của bạn xử lý hàng chục nghìn giao dịch, mỗi giao dịch cần kiểm tra, làm giàu dữ liệu, gửi thông báo. Nếu dùng Zapier với giá khoảng 0,02–0,05 USD mỗi task, hóa đơn hàng tháng có thể lên tới vài nghìn đô. Tệ hơn, dữ liệu khách hàng — số CMND/CCCD, số tài khoản — phải đi qua một server đặt ở nước ngoài. Với Nghị định 13/2023 về bảo vệ dữ liệu cá nhân (chúng ta sẽ học kỹ ở Bài 58), đây là rủi ro pháp lý thật sự.

n8n giải quyết đúng hai bài toán này: chi phí và chủ quyền dữ liệu. Đây là công cụ automation mã nguồn mở (open source), bạn có thể tự cài (self-host) trên server của mình. Dữ liệu không rời khỏi hạ tầng của bạn, và một khi đã cài xong, bạn chạy bao nhiêu workflow cũng không phải trả thêm tiền theo từng task. Với các team kỹ thuật ở Việt Nam — vốn quen tự host mọi thứ để tiết kiệm — n8n là mảnh ghép tự nhiên nhất trong bộ ba Zapier / Make / n8n.

Bài này sẽ giúp bạn hiểu khi nào nên chọn n8n thay vì Zapier hay Make, cách tự cài đặt, và cách tận dụng sức mạnh riêng của nó: khả năng viết code JavaScript tùy ý ngay trong workflow.

Khái niệm cốt lõi

n8n là gì và triết lý thiết kế

n8n (đọc là "n-eight-n", viết tắt của "nodemation") là một nền tảng automation dạng node-based giống Make: bạn kéo thả các "node" (khối chức năng) và nối chúng thành luồng xử lý. Nhưng khác biệt lớn nhất nằm ở mô hình phân phối:

  • Zapier / Make: là dịch vụ đám mây (cloud SaaS). Bạn trả tiền hàng tháng, dữ liệu chạy qua server của họ.
  • n8n: là phần mềm mã nguồn mở dùng giấy phép fair-code. Bạn tải về, cài trên máy chủ của mình, và toàn quyền kiểm soát.
Triết lý của n8n là "automation không giới hạn cho người biết kỹ thuật". Nó không cố che giấu độ phức tạp — nó cho bạn quyền tiếp cận sâu.

Ba lý do chính để chọn n8n

1. Open source & self-hosted — dữ liệu ở server bạn. Bạn có thể cài n8n trên một VPS ở Singapore, một server đặt tại data center ở Hà Nội, hay thậm chí một chiếc Raspberry Pi trong văn phòng. Mọi credential (khóa API, mật khẩu), mọi dữ liệu đi qua workflow đều nằm trong tầm kiểm soát của bạn. Đây là điểm cực kỳ quan trọng với ngành ngân hàng, y tế, bảo hiểm — những lĩnh vực bị ràng buộc chặt về nơi lưu trữ dữ liệu.

2. Code-friendly — không bị giới hạn bởi UI. Đây là "vũ khí bí mật" của n8n. Trong Zapier, nếu logic của bạn phức tạp, bạn thường bị kẹt vì giao diện không hỗ trợ. Với n8n, bất cứ lúc nào bạn cũng có thể chèn một Code node và viết JavaScript (hoặc Python) thuần để xử lý dữ liệu theo ý mình. Không có "bức tường UI" nào chặn bạn lại. Với dev, đây là cảm giác tự do rất khác biệt.

3. Chi phí có thể bằng 0 (ngoài tiền server). Bản community edition hoàn toàn miễn phí. Bạn chạy 1.000 hay 1 triệu workflow execution mỗi tháng cũng không thay đổi giá — chi phí duy nhất là tiền thuê VPS, thường chỉ 5–20 USD/tháng. So với việc Zapier tính tiền theo từng task, tiết kiệm là rất lớn khi khối lượng lớn.

Kiến trúc cơ bản của một workflow

Một workflow n8n gồm ba loại thành phần chính:

  • Trigger node — điểm khởi động. Có thể là một lịch (schedule), một webhook nhận dữ liệu từ bên ngoài, hay một sự kiện từ ứng dụng (email mới, dòng mới trong Google Sheets).
  • Regular node — các bước xử lý: gọi API, biến đổi dữ liệu, gửi thông báo, ghi vào database.
  • Code node / Function node — nơi bạn viết logic tùy ý bằng JavaScript.
Dữ liệu chảy giữa các node dưới dạng JSON items. Hiểu được cách n8n truyền item giữa các node là chìa khóa để làm chủ công cụ này — ta sẽ thấy rõ trong phần hướng dẫn.

Community vs Cloud vs Enterprise

n8n có ba hình thức:

  • Community (self-host): miễn phí, đầy đủ tính năng cốt lõi, bạn tự vận hành. Đây là lựa chọn của bài này.
  • n8n Cloud: n8n host giúp bạn, trả phí theo tháng — hợp với team không muốn lo hạ tầng.
  • Enterprise: thêm tính năng như phân quyền nâng cao (RBAC), SSO, môi trường staging — dành cho công ty lớn.

Tình huống thực tế

Ví dụ 1 — Startup fintech ở TP.HCM thoát khỏi hóa đơn Zapier tăng phi mã

Một startup fintech giả định tên VíNhanh có 12 người, ban đầu dùng Zapier để tự động hóa quy trình duyệt hồ sơ vay: khi khách nộp đơn qua form, Zapier gọi API chấm điểm tín dụng, gửi kết quả qua Slack cho nhân viên, và ghi vào Google Sheets.

Khi lượng đơn tăng từ 200 lên 8.000 mỗi tháng, mỗi đơn tốn khoảng 4 task Zapier — tức 32.000 task/tháng. Hóa đơn Zapier nhảy lên gần 900 USD/tháng. Tệ hơn, đội pháp chế cảnh báo: dữ liệu CCCD của khách đang đi qua server Zapier ở Mỹ, vi phạm nguyên tắc nội bộ về dữ liệu cá nhân.

Đội kỹ thuật chuyển toàn bộ sang n8n self-host trên một VPS 10 USD/tháng ở Singapore. Sau hai tuần chuyển đổi, chi phí automation giảm từ 900 USD xuống còn 10 USD, và dữ liệu khách không còn rời khỏi hạ tầng do họ kiểm soát.

Bài học: Khi khối lượng execution lớn và dữ liệu nhạy cảm, chi phí tiết kiệm của n8n không phải vài phần trăm — mà có thể là 90% trở lên. Điểm hòa vốn thường rơi vào khoảng vài nghìn task/tháng.

Ví dụ 2 — Agency marketing dùng Code node làm điều Zapier không làm được

Một agency ở Đà Nẵng (giả định tên Sóng Digital) cần tổng hợp báo cáo quảng cáo từ Facebook Ads, Google Ads và TikTok Ads mỗi sáng, rồi tính một chỉ số riêng: "chi phí trên mỗi lead chất lượng" — công thức phức tạp có trọng số khác nhau cho từng nguồn, loại bỏ lead trùng theo số điện thoại đã chuẩn hóa.

Họ đã thử Make.com nhưng logic chuẩn hóa số điện thoại Việt Nam (xử lý cả +84, 84, 0, khoảng trắng, dấu chấm) quá rối để làm bằng các module có sẵn. Trong n8n, họ chỉ cần một Code node với vài chục dòng JavaScript: gom dữ liệu ba nguồn, viết hàm normalizePhone(), lọc trùng, tính chỉ số, rồi đẩy sang Google Sheets và gửi Slack.

Workflow chạy mỗi 6h sáng qua Schedule trigger, không cần ai đụng tay.

Bài học: Khi logic nghiệp vụ có phần "khó nhằn" mà UI kéo-thả không diễn đạt nổi, khả năng viết code tùy ý của n8n biến việc bất khả thi thành vài dòng JavaScript. Đây là lý do dev thường thích n8n hơn các đối thủ.

Ví dụ 3 — Team nội bộ tự động phân loại ticket support bằng AI, dữ liệu không rời server

Một công ty SaaS B2B ở Hà Nội muốn dùng AI để phân loại ticket hỗ trợ khách hàng (khẩn/thường, kỹ thuật/thanh toán) trước khi giao cho nhân viên. Nhưng ticket chứa thông tin hợp đồng nhạy cảm, họ không muốn để một dịch vụ trung gian nào đọc được.

Họ dựng workflow n8n self-host: webhook nhận ticket mới → Code node bóc tách và ẩn (mask) thông tin nhạy cảm → gọi API AI để phân loại → route ticket về đúng nhóm. Vì n8n chạy trên server của họ, họ toàn quyền quyết định phần nào của dữ liệu được gửi ra ngoài và phần nào giữ lại. (Nguyên tắc bảo mật khi dùng AI tools sẽ được đào sâu ở Bài 45.)

Bài học: Self-host cho bạn quyền "biên tập" dữ liệu trước khi nó đi bất cứ đâu — điều mà SaaS đám mây khó đảm bảo. Với các luồng có AI xử lý dữ liệu nhạy cảm, đây là lợi thế quyết định.

Hướng dẫn từng bước

Ta sẽ dựng một workflow đơn giản mà hữu ích: mỗi sáng lấy dữ liệu từ một API, xử lý bằng code, rồi gửi thông báo.

Bước 1 — Cài đặt n8n bằng Docker

Cách nhanh và sạch nhất để self-host là dùng Docker. Trên một VPS Ubuntu đã cài Docker, chạy:

docker run -it --rm --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

Lệnh này chạy n8n và mở giao diện tại cổng 5678. Tham số -v n8n_data:... gắn một volume để lưu workflow và credential — nếu thiếu nó, dữ liệu sẽ mất khi container tắt. Với môi trường thật, bạn nên dùng docker compose kèm database PostgreSQL và cấu hình biến môi trường (như N8N_HOST, WEBHOOK_URL) để webhook hoạt động đúng qua domain.

Bước 2 — Mở giao diện và tạo tài khoản

Truy cập http://<địa-chỉ-server>:5678, tạo tài khoản admin đầu tiên. Nên đặt sau một reverse proxy (Nginx/Caddy) có HTTPS, đừng để lộ cổng 5678 ra Internet trần trụi.

Bước 3 — Thêm Trigger node

Tạo workflow mới, thêm node Schedule Trigger, đặt chạy mỗi ngày lúc 8h sáng. Đây là điểm khởi động luồng.

Bước 4 — Gọi API bằng HTTP Request node

Thêm node HTTP Request, nối vào sau Schedule. Cấu hình method GET, URL trỏ tới API bạn cần (ví dụ API tỷ giá, thời tiết, hay endpoint nội bộ). n8n sẽ nhận về dữ liệu JSON và truyền tiếp dưới dạng items.

Bước 5 — Xử lý dữ liệu bằng Code node

Đây là phần thú vị nhất. Thêm node Code, chọn ngôn ngữ JavaScript, và viết:

// Mỗi item vào node có dạng { json: {...} }
const items = $input.all();

return items.map(item => { const data = item.json; return { json: { tieuDe: data.title, // ví dụ: tính toán, chuẩn hóa, làm giàu dữ liệu tùy ý tomTat: Giá trị hôm nay: ${data.value}, thoiGian: new Date().toLocaleString('vi-VN'), } }; });

Điểm mấu chốt: $input.all() lấy tất cả items từ node trước, và bạn phải return một mảng items có cấu trúc { json: {...} }. Đây là "hợp đồng dữ liệu" giữa các node trong n8n.

Bước 6 — Gửi thông báo

Thêm node gửi kết quả — ví dụ Telegram, Slack, hay Send Email. Map trường tomTat vừa tạo vào nội dung tin nhắn bằng cú pháp biểu thức {{ $json.tomTat }}.

Bước 7 — Test và Activate

Bấm Execute Workflow để chạy thử và xem dữ liệu chảy qua từng node (n8n hiển thị output ngay dưới mỗi node — cực kỳ tiện để debug). Khi ổn, gạt công tắc Active để workflow tự chạy theo lịch.

Lỗi thường gặp & mẹo

Lỗi: Quên gắn volume, mất sạch workflow khi restart. Đây là cái bẫy kinh điển với người mới. Luôn dùng volume (-v n8n_data:/home/node/.n8n) hoặc database ngoài. Với môi trường production, hãy dùng PostgreSQL thay vì SQLite mặc định để ổn định hơn.

Lỗi: Webhook không nhận được request. Nếu bạn để n8n sau reverse proxy hoặc domain, phải set đúng biến WEBHOOK_URLN8N_HOST. Nếu không, n8n sẽ tạo URL webhook trỏ về localhost — bên ngoài không gọi tới được.

Lỗi: Code node trả về sai định dạng. Nếu bạn return một object thường thay vì mảng [{ json: {...} }], node sau sẽ báo lỗi hoặc nhận dữ liệu rỗng. Hãy nhớ: Code node phải trả về mảng các item, mỗi item có key json.

Mẹo: Dùng "Pin data" khi phát triển. n8n cho phép "ghim" (pin) output của một node để bạn không phải gọi lại API thật mỗi lần test node phía sau — vừa nhanh, vừa tránh tốn quota API.

Mẹo: Bật bảo mật ngay từ đầu. Đặt HTTPS, bật basic auth hoặc user management, và không bao giờ commit file credential lên Git. Vì bạn tự host, an ninh là trách nhiệm của bạn — khác với SaaS lo giúp.

Mẹo: Đừng tự host nếu team không có người vận hành. Sự thật thẳng thắn: self-host nghĩa là bạn phải lo backup, cập nhật phiên bản, xử lý khi server sập. Nếu team nhỏ và không có DevOps, n8n Cloud (hoặc thậm chí Make) có thể là lựa chọn khôn ngoan hơn về tổng chi phí sở hữu.

Mẹo: Cập nhật thường xuyên nhưng có kiểm soát. n8n ra bản mới rất nhanh. Hãy đọc changelog trước khi nâng cấp và luôn backup database trước — thỉnh thoảng có breaking change ở các node.

Bài tập thực hành

  • Cài đặt cơ bản: Dựng n8n bằng Docker trên máy local hoặc một VPS giá rẻ. Xác nhận bạn truy cập được giao diện tại cổng 5678 và tạo được tài khoản admin. Kiểm tra volume hoạt động bằng cách restart container và xem workflow còn không.
  • Workflow đầu tiên với Code node: Tạo workflow: Schedule Trigger (mỗi 1 giờ) → HTTP Request (gọi một API công khai, ví dụ API tỷ giá hoặc thời tiết) → Code node (dùng JavaScript để trích 2–3 trường bạn quan tâm và định dạng lại thành một câu tiếng Việt) → gửi kết quả qua Telegram hoặc email cho chính bạn.
  • So sánh chi phí: Lấy một quy trình bạn (hoặc công ty bạn) đang chạy trên Zapier/Make. Ước tính số task/execution mỗi tháng, tính chi phí hiện tại, rồi so với chi phí nếu tự host n8n (giả sử VPS 10 USD/tháng). Xác định "điểm hòa vốn" — mức khối lượng mà tại đó n8n bắt đầu rẻ hơn. Viết 3–4 dòng kết luận: trường hợp của bạn nên chọn công cụ nào và vì sao.
  • Nâng cao (tùy chọn): Thêm một nhánh xử lý lỗi (Error Trigger hoặc node IF) để khi API trả về lỗi, workflow gửi cảnh báo riêng thay vì âm thầm thất bại.

Tóm tắt

n8n là mảnh ghép "chủ quyền và chi phí" trong bộ công cụ automation. Ba điểm cần nhớ:

  • Open source & self-hosted nghĩa là dữ liệu ở server bạn — lợi thế quyết định với dữ liệu nhạy cảm và yêu cầu pháp lý như Nghị định 13.
  • Code-friendly với Code node cho phép viết JavaScript tùy ý, phá vỡ giới hạn UI mà Zapier hay Make đôi khi vướng phải.
  • Chi phí gần như bằng 0 ngoài tiền server, cực kỳ đáng giá khi khối lượng execution lớn.
Đánh đổi là bạn phải tự vận hành: backup, bảo mật, cập nhật. Vì vậy, quy tắc chọn công cụ đơn giản: cần dễ dùng nhanh gọn → Zapier; cần visual linh hoạt trên cloud → Make; cần kiểm soát dữ liệu, tiết kiệm ở quy mô lớn, và có người lo hạ tầng → n8n. Với nhiều team kỹ thuật ở Việt Nam, n8n thường là câu trả lời khi họ trưởng thành đủ để tự làm chủ hạ tầng automation của mình.