Series learn AI from 0: Cách mình build luồng Automation đầu tiên trên n8n
Hì hục từ chiều đến giờ cuối cùng mình cũng build được chiếc luồng Automation đầu tiên trên n8n, hào hứng quá nên mình phải ngoi lên share luôn ko quên ^^
Trong post này mình sẽ sharing lại chiếc task đầu tiên mình làm với n8n.
Bạn có thể đọc các post khác của mình trong series learn AI from 0 & tham khảo templates n8n mình đã build.
Trước hết để mình nói qua một chút về chiếc task mình đang làm ha ^^
Bài toán mình cần giải quyết
Chẳng là cuối tháng 11 công ty mình sẽ tổ chức một cuộc thi TM Business Analytics & Consulting Case Competition 2025 (đang trong quá trình chuẩn bị ^^ ai tò mò có thể xem tạm có thể xem tạm LDP của cuộc thi này năm ngoái ở đây nha), nên trong meeting sáng nay mình có được giao cho một nhiệm vụ là:
“Làm thế nào để giảm bớt phần thủ công, sai sót khi thu thập thông tin đội thi?”
Năm ngoái, quy trình diễn ra khá phức tạp. Mỗi đội (3 người) sẽ có một đội trưởng thay mặt cả team điền form đăng ký tham gia. Sau đó, BTC sẽ thu thêm thông tin cá nhân của từng thành viên, mà khúc này bắt đầu loạn: bạn thì điền nhầm tên đội, bạn thì viết sai chính tả, rồi thỉnh thoảng mấy đội tên còn trùng nhau,… nói chung là sau đấy team mình phải cleaning data khá là mệt trước khi import thông tin vào hệ thống.
Nên năm nay chị sếp muốn làm khác đi chút, ý tưởng là:
Khi đội trưởng đăng ký, hệ thống sẽ tự động cấp cho mỗi đội một mã ID duy nhất. Sau đó, các thành viên chỉ cần nhập Team ID này vào form cá nhân của họ, thay vì gõ tay tên đội (vốn dễ sai chính tả hoặc trùng nhau).
Về cơ bản, giống như mình thiết kế cơ sở dữ liệu:
Form đăng ký của đội trưởng là bảng “Teams” (Team Table)
Còn Form thông tin của từng thành viên là bảng “Members” (Member Table)
Trong đó, mỗi đội (Team) sẽ có một Team ID hoạt động giống như primary key.
Team ID này sẽ được dùng để join với các bản ghi trong bảng Members, giúp biết ai thuộc đội nào.
Oke đấy là bài toán, còn đây là cách mình giải quyết.
Mình đã build luồng Automation trên n8n để giải quyết bài toán trên thế nào?
Thực ra lúc đầu mình cũng chưa nghĩ ra là dùng n8n đâu, mình cứ nghĩ là mình sẽ tìm 1 cái tool auto generate ra id cho từng đội xong tìm cách nào đấy để gửi cho họ.
Nhưng mà sáng chị Sếp lại demo thêm phát nữa về AI Agent mà chị ấy đã build nên mình tự dưng mình lại hứng lên đi tìm hiểu về n8n. Bạn có thể đọc bài blog của mình về n8n tại đây hoặc tham khảo khóa học này về automation & n8n.
Sau khi hiểu căn bản, mình đã thử làm chiếc task này luôn.
Bước 1: Hình dung về flow mà mình muốn làm & cách để giải quyết các thành phần trong đó.
Giống như những gì mình đã share trong bài Input → Black Box → Output - Tư duy “xương sống” giúp bạn làm việc với AI hiệu quả, điều cần làm đầu tiên khi bắt đầu bất cứ task nào chính là hình dung được output mà mình mong muốn.
Flow của mình đơn giản là:
Người dùng điền form → n8n nhận dữ liệu → sinh ra mã số thứ tự tự động tăng → gửi email xác nhận (chứa số thứ tự đó).
Mình chia nhỏ:
Input: dữ liệu từ form mà đội trưởng điền.
Black Box: quá trình n8n xử lý (nhận data → sinh mã → gửi mail).
Output: email xác nhận gửi lại cho người đăng ký, có chứa Team ID duy nhất.
Sau khi vẽ được flow ra, mình nhận ra gần như mọi phần trong chuỗi này bao gồm: form submission, lưu dữ liệu, gửi mail đều có thể xử lý dễ dàng trong n8n.
Chỉ có một điểm hơi đâu đầu:
Làm sao để mỗi lần có người mới điền form, hệ thống tự động tạo một Team ID duy nhất, và ID đó phải tăng dần đúng thứ tự?
Cái này mình không biết n8n có hay không, nên mình hỏi thêm ChatGPT.
Và nó suggest một phương pháp khá ổn đó là mình dùng luôn hàm trong Google Sheet. Mình có mò thêm một lúc và cuối cùng dùng hàm:
=ARRAYFORMULA(
IF(B2:B=”“, “”, ROW(B2:B)-1)
)Với hàm này, mỗi khi có một dòng mới được thêm vào sheet (tức là khi có đội mới đăng ký), Google Sheet sẽ tự động tạo ra một ID tăng dần. Mình thấy khá ổn, không cần add thêm gì trong n8n, sau đấy chỉ cần lấy id sẵn trong đó gửi email xác nhận là xong.
Mình cũng tạo sẵn 1 file Excel và add luôn hàm này vào:
Bước 2: Thiết kế flow trên n8n
Vậy là phần khó nhất đã xong, đoạn sau chỉ có bưng nguyên cái flow này depoy lên n8n thôi (bạn có thể tải template mình làm sẵn tại đây)
Đầu tiên mình deploy flow đơn giản trước bao gồm các node:
Node #1: Submit info
Do mình đang testing thôi chứ chưa triển khai thật nên mình có dùng luôn form của n8n cho nhanh. Phần này setup cũng khá đơn giản, mình chỉ add thêm 2 trường mình muốn thu thập như trong file GG Sheet mình có tạo sẵn:
Tên đội của bạn
Email của trưởng nhóm
Note chút là cột timestampt trong Google Sheet chính là submittedAt trong hình (trường này được tạo tự động).
Set up xong khi chạy test mình sẽ có được 1 cái form thế này để điền thông tin vào:
Node #2: Append row in sheet:
Node này để n8n ghi dữ liệu mới vào Google Sheet. Đơn giản là mình chỉ đang kéo các trường từ form vào các cột tương ứng trong Google Sheet mình đã tạo thôi.
Ngay khi dòng mới được thêm, công thức trong Sheet sẽ tự sinh ra Team ID mới.
Node #3: Read new row by email:
Việc dùng hàm trong Google Sheet để tạo ID có một hạn chế nhỏ đó là khi gửi email xác nhận, mình không thể kéo trực tiếp trường ID ra, vì tại thời điểm n8n ghi dữ liệu vào Google Sheet chưa có ID, mà sau đó Google Sheet mới xử lý thêm để tạo ra.
Để giải quyết, mình thêm một bước nhỏ: đọc lại dòng dữ liệu của người vừa đăng ký, dựa theo email mà họ nhập trong form. Cách này giúp n8n lấy lại đầy đủ thông tin mới nhất, bao gồm ID vừa được tạo, để dùng cho bước gửi email xác nhận sau đó.
Node #4: Send confirm email with ID
Sau khi đã đọc lại được dòng dữ liệu mới (bao gồm Team ID), n8n sẽ thực hiện bước cuối cùng là gửi email xác nhận cho người đăng ký.
Email này bao gồm thông tin cơ bản là tên đội, và quan trọng nhất là Team ID duy nhất mà hệ thống vừa sinh ra.
Bằng cách này, mỗi đội khi nhận email đều có thể lưu lại Team ID của mình để dùng cho các bước tiếp theo.
Đến đây thì toàn bộ quy trình đã được tự động hóa 100%.
Mình cũng test thử và đã nhận được email thế này.
Bước 3: Tinh chỉnh luồng Automation
Luồng ở trên thì cũng ổn áp lắm rồi, nhưng trên thực tế thì sẽ có khá nhiều chuyện xảy ra khi mọi người điền form :)))
Ví dụ: một người có thể điền form 2 lần, dẫn đến việc một team có 2 ID khác nhau.
Để tránh lỗi này, mình có add thêm một vài bước vào automation.
Cụ thể, sau khi người dùng nhập thông tin vào form, trước khi n8n ghi dữ liệu vào Google Sheet, mình thêm bước check email của đội trưởng có trùng với email đã có sẵn trong Google Sheet không:
Nếu trong sheet đã có email này → hệ thống gửi ngay một email thông báo rằng địa chỉ này đã được đăng ký trước đó, và dừng quy trình tại đây.
Nếu trong sheet chưa có email nào như vậy → quy trình tiếp tục như bình thường: ghi dữ liệu mới → tạo Team ID → gửi email xác nhận.
Đây là full luồng sau khi mình đã add thêm vài bước tinh chỉnh:
Nhờ bước này, luồng automation trở nên linh động hơn, biết cách xử lý thêm những tình huống phát sinh thực tế. Đương nhiên đây chỉ là đặt điều kiện đơn giản thôi để mình mò thêm cái phần AI Agent thì chắc cái flow này sẽ còn thông minh hơn nữa ^^
Tạm kết
Bài học lớn nhất mình rút ra được sau chiếc task nhỏ này chính là mình cần biết cách framework hóa những việc mình đang muốn làm.
Trước khi bắt tay vào làm, hãy thử tách công việc thành các bước nhỏ, bước 1 là gì, bước 2, bước 3,… rồi với mỗi bước, xác định rõ:
Input là gì?
Black Box (quy trình xử lý) là gì?
Output mong muốn là gì?
Như chị Sếp mình nói, nó khá giống giao diện của n8n ^^
Khi đã quen với cách tư duy này, nhìn mọi thứ theo Input → Black Box → Output, và framework hóa được từng bước, mình tin cả mình và bạn đều sẽ có thể làm được nhiều hơn rất nhiều. Không chỉ tạo ra những luồng automation đơn giản như mình viết trong post này đâu, mà còn có thể build được các quy trình phức tạp hơn, thậm chí là AI Agent có thể tự động làm việc cho mình.
Bài này cũng siêu dài, hy vọng bạn sẽ thấy những gì mình sharing đủ hay ho ^^
Bạn có thể đọc các post khác của mình trong series learn AI from 0 & tham khảo templates n8n khác mình đã build.
À nếu bạn hứng thú với một chương trình đào tạo về AI ứng dụng trong Marketing có thể thử tham khảo khóa AI Marketing mà công ty mình đang cung cấp nha ^^
Chúc bạn có một cuối tuần vui vẻ!
















Trùng hợp quá, mình vừa viết xong một bài về quản lý tài chính bằng AI & n8n thì đọc được bài của bạn luôn. Cảm ơn bạn đã chia sẻ!
Cho mình hỏi là tại sao đội trưởng không điền luôn thông tin của các thành viên mà quy trình lại là đội trường đăng ký rồi thành viên vào điền thông tin vậy ạ