n8n là công cụ tự động hóa workflow mã nguồn mở đang dần trở thành một trong những nền tảng mạnh nhất để xây dựng automation tích hợp AI. Khác với Zapier hay Make, bạn có thể tự host, kiểm tra từng bước biến đổi dữ liệu, và chèn AI model vào bất kỳ điểm nào trong workflow. Bài hướng dẫn này sẽ xây dựng một automation thực tế từ đầu bằng các AI node của n8n.
Bạn Sẽ Xây Dựng Gì
Một workflow theo dõi hộp thư Gmail dùng chung, dùng LLM để phân loại và tóm tắt từng email đến, sau đó chuyển kết quả vào kênh Slack hoặc database Notion tùy theo danh mục. Đây là dạng use case phổ biến nhất khi kết hợp n8n với AI: đọc dữ liệu, xử lý bằng AI model, ghi vào đúng đích.
Yêu Cầu Trước Khi Bắt Đầu
- n8n đã cài local (Docker) hoặc tài khoản n8n Cloud
- Tài khoản Google (để truy cập Gmail)
- API key của OpenAI hoặc Anthropic
- Hiểu cơ bản về JSON
Bước 1: Cài Đặt n8n
Cách nhanh nhất để chạy n8n local là dùng Docker:
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
docker.n8n.io/n8nio/n8nMở http://localhost:5678 trên trình duyệt. Nếu muốn dùng bản managed, n8n Cloud cung cấp giao diện tương tự mà không cần lo hạ tầng.
Để tự host production với lưu trữ bền vững và database, dùng Docker Compose:
# Tạo file docker-compose.yml
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- N8N_ENCRYPTION_KEY=your-random-key-here
volumes:
- n8n_data:/home/node/.n8n
postgres:
image: postgres:16
environment:
- POSTGRES_DB=n8n
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
n8n_data:
postgres_data:Bước 2: Kết Nối Thông Tin Đăng Nhập
Trước khi xây workflow, hãy thiết lập credentials. Trong n8n, credentials được mã hóa và dùng lại xuyên suốt các workflow.
- Vào Settings > Credentials > New Credential
- Thêm Gmail OAuth2 credentials (theo hướng dẫn Google Cloud Console trong tài liệu n8n)
- Thêm OpenAI API credential (hoặc Anthropic nếu muốn dùng Claude)
- Thêm Slack Bot Token và Notion Integration Token
Đặt tên cho OpenAI key kiểu như OpenAI Production để dễ tham chiếu lại khi làm workflow khác.
Bước 3: Tạo Workflow
Nhấn New Workflow, rồi bắt đầu thêm các node.
Trigger: Gmail
Thêm node Gmail Trigger làm điểm khởi đầu. Cấu hình:
- Theo dõi nhãn
INBOX - Poll mỗi phút (hoặc dùng webhook push nếu n8n của bạn có URL public)
- Trả về toàn bộ email bao gồm nội dung, người gửi và tiêu đề
AI Node: Phân Loại và Tóm Tắt
Đây là phần cốt lõi của workflow. Thêm node OpenAI Chat Model kết nối với node Basic LLM Chain.
Cấu hình Basic LLM Chain với system prompt như sau:
You are an email classifier. Given an email, return a JSON object with two fields:
- "category": one of "support", "sales", "billing", "other"
- "summary": a 1-2 sentence plain-English summary of what the sender needs
Return only valid JSON, no extra text.
Đặt user message dùng expression của n8n:
Subject: {{ $json.subject }}
From: {{ $json.from.value[0].address }}
Body: {{ $json.text }}
Node Basic LLM Chain sẽ tự động truyền prompt vào chat model được kết nối và trả về kết quả dạng text.
Xử Lý Kết Quả JSON
Thêm node Code sau LLM chain để parse output:
const raw = $input.first().json.text;
let parsed;
try {
parsed = JSON.parse(raw);
} catch (e) {
// Dự phòng nếu model trả về JSON bọc trong markdown
const match = raw.match(/```json\s*([\s\S]*?)```/);
parsed = match ? JSON.parse(match[1]) : { category: "other", summary: raw };
}
return [{ json: { ...parsed, originalEmail: $input.first().json } }];Phân Luồng Theo Danh Mục
Thêm node Switch với hai nhánh:
- Nếu
categorylàsupporthoặcbilling→ chuyển đến Slack - Còn lại → chuyển đến Notion
Đích Đến: Slack
Thêm node Slack, đăng lên kênh #support-inbox với mẫu tin nhắn:
*Email {{ $json.category }} mới*
Từ: {{ $json.originalEmail.from.value[0].address }}
Tóm tắt: {{ $json.summary }}
Tiêu đề: {{ $json.originalEmail.subject }}
Đích Đến: Notion
Thêm node Notion chọn hành động Create Page trong database. Gán các trường:
- Title →
$json.originalEmail.subject - Category →
$json.category - Summary →
$json.summary - Sender →
$json.originalEmail.from.value[0].address - Date →
$json.originalEmail.date
Bước 4: Xử Lý Lỗi
Mặc định, workflow n8n sẽ dừng âm thầm khi gặp lỗi. Hãy thêm xử lý lỗi ở hai điểm.
Đầu tiên, bật Continue on Fail trên node LLM để một phản hồi API lỗi không làm hỏng toàn bộ lần chạy. Đoạn fallback trong node Code bên trên đã xử lý trường hợp model trả về output không đúng format.
Thứ hai, tạo workflow Error Trigger:
- Tạo workflow mới với node Error Trigger
- Kết nối với node Slack để gửi thông báo vào kênh
#alerts - Trong workflow chính, vào Workflow Settings > Error Workflow và chọn workflow xử lý lỗi vừa tạo
Từ đây, mọi lỗi chưa được xử lý trong workflow chính sẽ tự động thông báo vào Slack kèm tên workflow, nội dung lỗi và run ID.
Bước 5: Kiểm Tra và Kích Hoạt
Trước khi kích hoạt, hãy kiểm tra từng node thủ công:
- Nhấn Gmail trigger rồi chọn Fetch Test Event để lấy một email thực
- Chạy từng node tiếp theo để xác nhận dữ liệu truyền đúng
- Kiểm tra node Switch phân luồng đúng với từng giá trị category
- Xác nhận tin nhắn Slack và trang Notion xuất hiện như mong muốn
Khi đã hài lòng, bật toggle Active. n8n sẽ tự động poll Gmail mỗi phút.
Mở Rộng Thêm
Cùng cấu trúc này có thể áp dụng cho các automation phức tạp hơn:
- Thay Gmail bằng RSS feed hoặc webhook để xử lý bất kỳ đầu vào dạng text nào
- Thêm node Pinecone hoặc Qdrant vector store trước bước LLM để tìm kiếm ngữ nghĩa trong dữ liệu lịch sử, cung cấp context liên quan cho model
- Nối nhiều lần gọi LLM: một lần phân loại, lần hai soạn thảo câu trả lời, lần ba kiểm tra giọng văn
- Dùng node n8n AI Agent cho các tác vụ cần model tự quyết định gọi tool nào, thay vì đi theo luồng cố định
Giao diện trực quan của n8n giúp bạn thấy rõ dữ liệu vào từ đâu, biến đổi thế nào, và đi ra chỗ nào. Đó là lợi thế thực tế lớn nhất so với giải pháp thuần code.
Mẹo Thực Tế
-
Ghim dữ liệu test. Sau khi lấy được test event, hãy ghim nó vào node để mỗi lần chạy lại đều dùng cùng đầu vào. Tránh tốn API credit mỗi khi điều chỉnh node phía sau.
-
Dùng expression thay vì giá trị cứng. Các expression như
{{ $json.subject }}được tính toán lúc runtime và giúp workflow linh hoạt hơn. Giá trị cứng sẽ bị lỗi khi schema đầu vào thay đổi. -
Giới hạn độ dài output LLM. Đặt
max_tokenstrên node OpenAI ở mức hợp lý (512 cho tác vụ phân loại). Output không giới hạn tốn tiền hơn và khó parse hơn. -
Quản lý phiên bản workflow. n8n lưu snapshot tự động mỗi lần bạn save. Trong môi trường nhóm, export workflow ra JSON và lưu vào Git.
-
Tự host cho dữ liệu nhạy cảm. Nếu email chứa thông tin cá nhân hay dữ liệu nội bộ, chạy n8n trên hạ tầng của mình đảm bảo dữ liệu không rời khỏi mạng của bạn.
Try n8n
n8n Cloud cung cấp instance managed với OAuth sẵn cho tất cả dịch vụ lớn, cập nhật tự động và ghi log từng lần thực thi — không cần cài Docker hay cấu hình database.