Dựng workflow AI đầu tiên với n8n: đọc email, phân loại, trả lời nháp
Một playbook an toàn để biến email mới thành dữ liệu có thể xử lý: lọc thư, dùng AI phân loại theo JSON, tạo bản nháp và giữ người duyệt trong vòng kiểm soát.
Một inbox chung có thể nhanh chóng trở thành điểm nghẽn vận hành: thư hỏi giá, yêu cầu hỗ trợ, hóa đơn và email nội bộ cùng đổ về một chỗ. Người trực inbox phải đọc, phân loại, chuyển việc rồi lặp lại những câu trả lời tương tự.
Workflow AI đầu tiên không cần là một agent làm mọi thứ. Hãy bắt đầu bằng một luồng hẹp, dễ đo lường và ít rủi ro hơn:
> Đọc email mới → phân loại → tạo bản nháp → con người duyệt.
n8n phù hợp cho kiểu bài toán này vì cho phép kết hợp workflow trực quan với các mô hình ngôn ngữ, công cụ, bộ nhớ và logic điều kiện. Điều quan trọng không phải là để AI “tự quyết”, mà là biến kết quả AI thành dữ liệu có cấu trúc để các bước sau xử lý an toàn.
Mục tiêu: biến inbox thành luồng có thể điều phối
Quy tắc cố định vẫn hữu ích với các tình huống đơn giản, chẳng hạn thư từ một địa chỉ nhất định thì gắn nhãn. Nhưng email thực tế thường được viết tự do: cùng một vấn đề có nhiều cách diễn đạt, hoặc một thư vừa hỏi giá vừa báo lỗi.
Đây là điểm LLM có thể hỗ trợ tốt: hiểu nội dung, tóm tắt, nhận diện ý định và đề xuất bản nháp.
n8n hỗ trợ kết nối với các nhà cung cấp mô hình như OpenAI, Anthropic, Google và cả mô hình mã nguồn mở. Theo README của dự án, bạn có thể thay đổi nhà cung cấp mô hình mà không cần thay đổi toàn bộ kiến trúc workflow.
Tuy vậy, các hành động có hậu quả thực tế — gửi email, cập nhật CRM quan trọng, xử lý thanh toán hoặc xóa dữ liệu — nên được kiểm soát bằng logic rõ ràng và bước phê duyệt của con người.
Luồng mục tiêu:
text
Email mới
→ Lọc thư cần xử lý
→ AI phân loại và trích xuất dữ liệu dạng JSON
→ Rẽ nhánh theo loại thư và mức ưu tiên
→ AI soạn bản nháp
→ Người phụ trách duyệt
→ Gửi email hoặc lưu vào hệ thống liên quan
Chuẩn bị: bắt đầu nhỏ và không gửi tự động
n8n là nền tảng fair-code để xây dựng workflow và AI agent trên canvas trực quan. Bạn có thể dùng bản cloud hoặc tự triển khai. README của n8n cũng cho biết nền tảng có hơn 1.500 tích hợp, đồng thời cho phép kết hợp JavaScript, Python và gói npm khi cần mở rộng.
Nếu muốn chạy thử cục bộ bằng Docker, README cung cấp lệnh cài đặt nhanh sau:
sh
curl -fsSL https://get.n8n.io | sh
Hoặc chạy thủ công:
sh
docker volume create n8ndata
docker run -it --rm --name n8n -p 5678:5678 -v n8ndata:/home/node/.n8n docker.n8n.io/n8nio/n8n
Sau khi khởi động, mở trình biên tập tại:
text
http://localhost:5678
Trong vòng thử nghiệm đầu tiên, đừng nối workflow trực tiếp tới hành động gửi thư. Hãy dùng mailbox thử nghiệm, nhãn thư riêng hoặc chỉ tạo bản nháp. Mục tiêu là kiểm tra AI có hiểu email đúng hay không, trước khi tăng mức tự động hóa.
Thiết kế workflow theo từng bước
Tên node và trường dữ liệu sẽ thay đổi theo dịch vụ email bạn kết nối. Nhưng kiến trúc tổng thể có thể giữ ổn định.
1. Trigger: nhận email mới
Bắt đầu bằng trigger của dịch vụ email để nhận thư mới.
Dữ liệu nên giữ lại gồm:
Người gửi (from)
Tiêu đề (subject)
Nội dung thư (body)
Mã thư hoặc định danh tương đương, nếu dịch vụ cung cấp
Mã hội thoại, nếu có
Ngay sau trigger, thêm một bước lọc. Ví dụ:
Chỉ xử lý email gửi đến inbox vận hành.
Loại thư tự động hoặc thư không có nội dung.
Loại email nội bộ nếu chúng không thuộc phạm vi workflow.
Bỏ qua các loại thư không cần AI xử lý.
Bước lọc giúp giảm số lần gọi mô hình, giảm chi phí và hạn chế đưa dữ liệu không cần thiết vào luồng AI.
2. Phân loại bằng JSON, không bằng văn xuôi
n8n có các thành phần AI như agent, chain, tool, memory và vector database. Nhưng với workflow đầu tiên, bạn chưa cần dùng tất cả.
Một lời gọi mô hình để trả về dữ liệu có cấu trúc thường dễ kiểm soát hơn một agent có nhiều quyền hành động. Hãy yêu cầu AI trả về JSON để bước điều kiện phía sau có thể đọc trực tiếp.
Ví dụ prompt phân loại:
text
Bạn là bộ phân loại email cho <tên doanh nghiệp>.
Đọc email dưới đây và chỉ trả về một JSON hợp lệ.
Không dùng Markdown. Không thêm diễn giải ngoài JSON.
Quy tắc:
category chỉ được là: "sales", "support", "billing", "partnership", "spam", "other".
priority chỉ được là: "high", "normal", "low".
needshumanreview là true nếu email liên quan đến tiền,
cam kết pháp lý, dữ liệu nhạy cảm, khiếu nại nghiêm trọng
hoặc chưa đủ thông tin để trả lời.
draftgoal mô tả ngắn mục tiêu của thư trả lời.
extractedfields chỉ chứa dữ liệu thực sự xuất hiện trong email.
Nếu không chắc chắn, đặt category là "other"
và needshumanreview là true.
Email:
From: <from>
Subject: <subject>
Body:
<body>
JSON:
{
"category": "<category>",
"priority": "<priority>",
"summary": "<tóm tắt ngắn>",
"needshumanreview": true,
"draftgoal": "<mục tiêu trả lời>",
"extractedfields": {
"customername": "<nếu có>",
"orderreference": "<nếu có>"
}
}
JSON ở đây đóng vai trò như một “hợp đồng” giữa bước AI và phần còn lại của workflow. Thay vì cố suy luận từ một đoạn văn, node phía sau chỉ cần đọc các trường như category, priority và needshumanreview.
3. Rẽ nhánh và chặn các tình huống rủi ro
Dùng logic điều kiện hoặc switch để chia luồng theo kết quả phân loại.
Ví dụ thiết kế:
spam → gắn cờ để kiểm tra hoặc bỏ qua theo chính sách nội bộ.
billing → chuyển tới nhóm tài chính và luôn yêu cầu duyệt.
support có priority: high → gửi cảnh báo vào kênh vận hành.
Các nhóm thông thường → chuyển sang bước tạo bản nháp.
needshumanreview: true → tuyệt đối không gửi tự động.
Nếu workflow ghi kết quả vào CRM, bảng tính hoặc hệ thống quản lý công việc, nên lưu tối thiểu:
Định danh email gốc
Phân loại và mức ưu tiên
Tóm tắt do AI tạo
Trạng thái xử lý
Trạng thái duyệt
Dữ liệu này giúp đội vận hành truy vết một email khi cần sửa prompt, kiểm tra lỗi hoặc xử lý khiếu nại.
4. Soạn bản nháp với các giới hạn rõ ràng
Khi tạo bản nháp, chỉ gửi vào mô hình những dữ liệu cần thiết. Không nên đưa toàn bộ lịch sử khách hàng vào prompt nếu chưa có lý do vận hành rõ ràng.
Ví dụ prompt:
text
Bạn là nhân viên hỗ trợ của <tên doanh nghiệp>.
Viết bản nháp trả lời email bằng <ngôn ngữ mong muốn>.
Mục tiêu: <draftgoal>
Danh mục: <category>
Tóm tắt: <summary>
Thông tin đã trích xuất: <extractedfields>
Chữ ký: <chữ ký doanh nghiệp>
Yêu cầu:
Lịch sự, ngắn gọn và đúng trọng tâm.
Không tự tạo giá, thời hạn, chính sách, mã đơn hàng
hay cam kết không có trong dữ liệu.
Nếu thiếu thông tin, chỉ hỏi thông tin cần bổ sung.
Không nói rằng bạn là AI.
Chỉ trả về JSON hợp lệ.
{
"subject": "<tiêu đề trả lời>",
"body": "<nội dung bản nháp>",
"requiresapproval": true,
"reasonforapproval": "<lý do>"
}
Đầu ra có thể được dùng để tạo email nháp hoặc gửi tới kênh nội bộ để người phụ trách xem, chỉnh sửa và duyệt.
Ví dụ: một email hỗ trợ đi qua workflow
Email đầu vào:
text
From: <khachhang@example.com>
Subject: Cần hỗ trợ đơn hàng
Body: Tôi chưa nhận được hàng. Nhờ kiểm tra giúp mã <madon>.
Một kết quả phân loại hợp lý có thể là:
json
{
"category": "support",
"priority": "normal",
"summary": "Khách hàng báo chưa nhận hàng và cung cấp mã đơn.",
"needshumanreview": true,
"draftgoal": "Xác nhận đã tiếp nhận và yêu cầu kiểm tra trạng thái đơn hàng.",
"extractedfields": {
"customername": "",
"orderreference": "<madon>"
}
}
Workflow sẽ đi vào nhánh hỗ trợ, tạo một bản nháp để nhân sự kiểm tra tình trạng đơn hàng.
Điểm quan trọng: AI không nên tự khẳng định đơn đã giao, không nên hứa thời gian xử lý và không nên tự tạo thông tin vận chuyển. Những dữ kiện đó không có trong email đầu vào.
Kiểm tra chất lượng trước khi chạy thường xuyên
Trước khi bật workflow cho inbox thật, hãy chuẩn bị một tập email mẫu đã được che hoặc loại bỏ dữ liệu nhạy cảm. Sau đó kiểm tra thủ công:
AI phân loại đúng bao nhiêu email?
Có bỏ sót email khẩn không?
JSON có hợp lệ và nhất quán không?
Bản nháp có bịa giá, chính sách hoặc cam kết không?
Những loại thư nào thường bị đưa vào nhóm other?
Bạn cũng nên thiết kế nhánh xử lý lỗi tối thiểu:
Nếu mô hình hoặc API gặp lỗi, không thực hiện hành động tiếp theo.
Nếu JSON không đọc được, lưu kết quả thô để xem lại và chỉnh prompt.
Nếu AI không chắc chắn, chuyển email sang hàng chờ người xử lý.
Nếu chạy lại workflow, dùng định danh email để hạn chế tạo bản nháp hoặc gửi trùng.
Với hành động nhạy cảm, luôn giữ bước phê duyệt của con người.
Kiểm soát chi phí và dữ liệu
Chi phí AI không chỉ phụ thuộc vào mô hình. Email dài hơn, nhiều lần thử lại và nhiều nhánh gọi AI đều làm tăng mức sử dụng.
Một số cách kiểm soát đơn giản:
Lọc email trước khi gọi AI.
Giới hạn phần nội dung gửi vào mô hình.
Không gửi dữ liệu không cần thiết.
Theo dõi số lần gọi AI theo từng loại email.
Đánh giá định kỳ các trường hợp AI trả về other hoặc cần duyệt.
Về dữ liệu, hãy áp dụng nguyên tắc quyền tối thiểu: chỉ cấp cho workflow quyền truy cập cần thiết vào mailbox, CRM hoặc hệ thống liên quan. Không đặt khóa API trong prompt hay đoạn mã dùng chung. Nếu yêu cầu quản trị dữ liệu của tổ chức cao hơn, n8n cũng hỗ trợ tự triển khai; README đề cập các khả năng phục vụ môi trường có dữ liệu nhạy cảm như kiểm soát truy cập theo vai trò và audit trail.
Checklist trước khi chuyển từ draft sang gửi thật
[ ] Trigger chỉ theo dõi đúng inbox hoặc nhãn cần xử lý.
[ ] Có bước lọc trước khi gọi AI.
[ ] AI trả về JSON với các giá trị được giới hạn rõ ràng.
[ ] Có nhánh dự phòng khi JSON lỗi hoặc AI không chắc chắn.
[ ] Email thuộc nhóm rủi ro không được gửi tự động.
[ ] Bản nháp không tự tạo giá, chính sách hoặc lời hứa.
[ ] Có lưu trạng thái xử lý và liên kết tới email gốc.
[ ] Có bước phê duyệt của con người trước hành động quan trọng.
[ ] Quyền truy cập và dữ liệu khách hàng được giới hạn phù hợp.
Khi workflow đã ổn định, bạn mới nên cân nhắc mở rộng sang agent dùng nhiều công cụ. Nhưng ở bài toán đọc email và tạo bản nháp, một workflow cố định với JSON, rẽ nhánh điều kiện và bước duyệt thường dễ kiểm soát, dễ kiểm tra và phù hợp hơn để bắt đầu.