Chia sẻ bởi Little Excel
Trong thế giới tự động hóa quy trình làm việc, n8n nổi lên như một công cụ mạnh mẽ và linh hoạt. Tuy nhiên, không phải lúc nào chúng ta cũng có thể để máy móc tự quyết định 100%. Sẽ có những tình huống đòi hỏi sự can thiệp, đánh giá, hoặc bổ sung thông tin từ con người để đảm bảo tính chính xác và hiệu quả. Đây chính là lúc tính năng Human in the Loop trong n8n phát huy vai trò của mình. Bài viết này sẽ hướng dẫn bạn chi tiết cách tận dụng Human in the Loop để đưa yếu tố con người vào các luồng công việc tự động của bạn một cách thông minh.
Giới thiệu Human in the Loop trong n8n: Tại sao cần và điều kiện sử dụng?
Trước khi đi sâu vào cách thiết lập, hãy cùng tìm hiểu xem tại sao chúng ta lại cần đến sự can thiệp của con người trong một quy trình tự động hóa và những điều kiện cần thiết để sử dụng tính năng này trên n8n.
Vấn đề đặt ra: Khi nào cần sự can thiệp của con người?
Hãy tưởng tượng bạn có một luồng công việc tự động nhận phản hồi từ khách hàng qua một form, hoặc xử lý dữ liệu từ một nguồn bên ngoài, thậm chí là nhận kết quả từ một mô hình AI.
- Phân loại và phê duyệt: Dữ liệu đầu vào cần được phân loại hoặc phê duyệt trước khi đi tiếp. Ví dụ, một yêu cầu hỗ trợ cần được người quản lý xem xét trước khi giao cho nhân viên.
- Quyết định phức tạp: Có những quyết định không thể dựa hoàn toàn vào logic máy móc, mà cần sự đánh giá chủ quan của con người dựa trên ngữ cảnh hoặc kinh nghiệm. Chẳng hạn, quyết định chấp nhận hay từ chối một đề xuất dựa trên nhiều yếu tố không định lượng được.
- Bổ sung thông tin: Dữ liệu tự động thu thập có thể thiếu sót và cần con người bổ sung thông tin quan trọng trước khi xử lý.
- Kiểm soát chất lượng: Đảm bảo độ chính xác cao cho những tác vụ quan trọng, tránh sai sót do máy móc hiểu sai hoặc dữ liệu đầu vào không chuẩn.
Trước đây, để giải quyết những trường hợp này, chúng ta có thể phải dùng các node điều kiện phức tạp (như Switch node) dựa trên các quy luật định sẵn. Tuy nhiên, cách này tốn thời gian và không phải lúc nào cũng bao quát hết các tình huống, đặc biệt khi dữ liệu đầu vào đa dạng và khó lường.
Human in the Loop là gì và lợi ích nó mang lại
Human in the Loop (HITL) trong n8n là một node cho phép luồng công việc tạm dừng tại một điểm nhất định, gửi thông báo đến người dùng được chỉ định, và chờ đợi phản hồi (phê duyệt, nhập liệu, lựa chọn) từ họ trước khi tiếp tục thực thi các bước tiếp theo.
Lợi ích của việc sử dụng Human in the Loop:
- Tăng tính linh hoạt: Cho phép con người dễ dàng can thiệp vào quy trình khi cần thiết.
- Nâng cao độ chính xác: Giảm thiểu sai sót bằng cách cho phép con người kiểm tra và xác thực dữ liệu hoặc quyết định.
- Xử lý các tác vụ phức tạp: Giải quyết các trường hợp mà logic tự động khó có thể bao quát hết.
- Cải thiện quy trình: Kết hợp sức mạnh của tự động hóa với khả năng phán đoán và kinh nghiệm của con người.
Yêu cầu về phiên bản n8n để sử dụng
Để sử dụng node Human in the Loop, bạn cần lưu ý về phiên bản n8n:
- n8n Cloud: Nếu bạn đang sử dụng phiên bản n8n Cloud, bạn sẽ tự động có được các cập nhật mới nhất, bao gồm cả node Human in the Loop.
- n8n Self-hosted: Nếu bạn tự host n8n, bạn cần đảm bảo phiên bản n8n của mình đã được cập nhật. Theo thông tin, tính năng này bắt đầu được hỗ trợ từ phiên bản
1.79.x
trở lên. Nếu phiên bản của bạn thấp hơn, hãy tiến hành cập nhật để có thể trải nghiệm Human in the Loop. (Ví dụ trong video gốc, người hướng dẫn đang dùng phiên bản1.11.4
).
Hướng dẫn chi tiết cách thiết lập Human in the Loop với Telegram
Node Human in the Loop hỗ trợ nhiều phương thức thông báo khác nhau như Discord, Gmail, Google Chat, Outlook, Microsoft Teams, Send Email, Slack và Telegram. Trong bài viết này, chúng ta sẽ tập trung vào việc demo với Telegram vì tính tiện lợi và dễ thiết lập của nó.
Giả sử chúng ta có một node "Set" để tạo dữ liệu mẫu, tượng trưng cho thông tin nhận được từ một nguồn nào đó.
// Node Set (Ví dụ)
{
"data": "Đây là thông tin cần xét duyệt"
}
Bây giờ, chúng ta sẽ thêm node "Human In The Loop" vào sau node "Set".
Thiết lập cơ bản: Chat ID và nội dung tin nhắn
- Chọn Resource (Phương thức): Trong node Human in the Loop, chọn "Telegram" từ danh sách các phương thức.
- Telegram API: Chọn hoặc tạo mới một credential cho Telegram Bot của bạn.
- Chat ID: Nhập Chat ID của người hoặc nhóm sẽ nhận thông báo và thực hiện xét duyệt. Bạn có thể lấy Chat ID của mình bằng cách tương tác với các bot như
@userinfobot
trên Telegram. - Text (Tin nhắn): Soạn nội dung tin nhắn sẽ được gửi đến người xét duyệt. Bạn có thể sử dụng các biểu thức (expressions) để chèn dữ liệu từ các node trước đó vào tin nhắn.
- Ví dụ:
Đây là thông tin vừa nhận được: {{$json["data"]}}. Xin vui lòng xét duyệt xem có tiếp tục không?
- Ví dụ:
Các loại phản hồi (Response Type) phổ biến
Node Human in the Loop cung cấp 3 loại phản hồi chính để người dùng tương tác:
1. Approval: Đồng ý/Từ chối luồng công việc
Đây là loại phản hồi đơn giản nhất, cho phép người dùng quyết định "Approve" (Đồng ý) hoặc "Disapprove" (Từ chối) một yêu cầu.
-
Thiết lập:
- Trong phần "Response Type", chọn "Approval".
-
Cách hoạt động:
- Khi luồng chạy đến node này, một tin nhắn sẽ được gửi qua Telegram với một nút (mặc định là "Approve").
- Người dùng nhấp vào nút. Một tab trình duyệt mới sẽ mở ra xác nhận hành động.
- Node Human in the Loop sẽ output ra một trường
approve
với giá trịtrue
(nếu đồng ý). - Bạn có thể dùng node "IF" sau đó để rẽ nhánh luồng công việc dựa trên giá trị của
approve
.
// Output của Human in the Loop (Approval - Approve Only) { "approve": true, "data": "Đây là thông tin cần xét duyệt" // Dữ liệu gốc vẫn được giữ lại }
-
Tùy chọn nâng cao cho Approval:
-
Approve and Disapprove: Trong "Approval Options", bạn có thể chọn "Approve and Disapprove". Lúc này, tin nhắn Telegram sẽ có hai nút: một nút để đồng ý và một nút để từ chối.
- Nếu người dùng chọn từ chối, output sẽ là
approve: false
.
// Output của Human in the Loop (Approval - Approve and Disapprove - Từ chối) { "approve": false, "data": "Đây là thông tin cần xét duyệt" }
- Nếu người dùng chọn từ chối, output sẽ là
-
Tùy chỉnh nhãn nút (thuần Việt): Bạn có thể thay đổi nhãn của các nút này cho thân thiện hơn. Ví dụ:
- Approve Button Label:
Đồng ý
- Disapprove Button Label:
Từ chối
- Approve Button Label:
-
2. Free Text: Cho phép người dùng nhập phản hồi tự do
Loại phản hồi này cho phép người dùng nhập một đoạn văn bản tự do làm phản hồi. Rất hữu ích khi bạn cần người dùng đưa ra nhận xét, lý do, hoặc thông tin bổ sung.
-
Thiết lập:
- Trong phần "Response Type", chọn "Free Text".
-
Cách hoạt động:
- Tin nhắn Telegram sẽ có một nút (mặc định là "Respond").
- Khi người dùng nhấp vào, một trang web sẽ mở ra với một ô để họ nhập văn bản.
- Sau khi submit, output của node Human in the Loop sẽ chứa trường
text
với nội dung người dùng đã nhập.
// Output của Human in the Loop (Free Text) { "text": "Thông tin này rất hữu ích, cần triển khai ngay.", "data": "Đây là thông tin cần xét duyệt" }
Bạn có thể sử dụng node "Set" hoặc "Code" để kết hợp dữ liệu gốc với phần comment này. Ví dụ, tạo một object mới chứa cả
rawData
vàcomment
.
3. Custom Form: Tạo biểu mẫu tùy chỉnh để thu thập thông tin chi tiết
Đây là loại phản hồi mạnh mẽ nhất, cho phép bạn tạo một biểu mẫu (form) với nhiều trường thông tin khác nhau để người dùng điền vào.
-
Thiết lập:
- Trong phần "Response Type", chọn "Custom Form".
- Nhấp vào "Add Form Element" để thêm các trường cho form. Mỗi trường có các tùy chọn:
- Field Name: Tên định danh cho trường dữ liệu (sẽ là key trong output JSON). Ví dụ:
coDuyetHayKhong
,commentThem
. - Display Name: Nhãn hiển thị cho người dùng trên form. Ví dụ: "Có duyệt hay không?", "Bạn có nhận xét gì thêm?".
- Field Type: Loại trường dữ liệu (Text, Text Area, Dropdown List, Boolean, Number, Date, Time).
- Options (cho Dropdown List): Danh sách các lựa chọn. Ví dụ, cho trường "Có duyệt hay không?", bạn có thể thêm options "Có" và "Không".
- Required Field: Đánh dấu nếu trường này là bắt buộc.
- Placeholder (cho Text, Text Area): Văn bản gợi ý hiển thị mờ trong ô nhập liệu.
- Field Name: Tên định danh cho trường dữ liệu (sẽ là key trong output JSON). Ví dụ:
-
Cách hoạt động:
- Tương tự Free Text, người dùng nhấp nút "Respond" trên Telegram, một form tùy chỉnh sẽ hiện ra.
- Sau khi người dùng điền và submit form, output của node sẽ chứa các trường tương ứng với "Field Name" bạn đã định nghĩa, cùng với giá trị người dùng đã nhập.
// Output của Human in the Loop (Custom Form) { "form": { "coDuyetHayKhong": "Có", // Giá trị từ dropdown "commentThem": "Nội dung này phù hợp, nên ưu tiên." // Giá trị từ text area }, "data": "Đây là thông tin cần xét duyệt" }
Tương tự, bạn có thể dùng node "IF" để kiểm tra giá trị của
form.coDuyetHayKhong
và rẽ nhánh quy trình.
Tối ưu hóa trải nghiệm Human in the Loop trong n8n
Để quá trình tương tác của người dùng trở nên mượt mà và dễ hiểu hơn, n8n cung cấp một số tùy chọn cấu hình thêm trong phần "Options" của node Human in the Loop.
Tùy chỉnh giao diện thông báo và form
Các tùy chọn này giúp bạn "Việt hóa" hoặc tùy chỉnh các nhãn hiển thị cho phù hợp với ngữ cảnh của bạn:
- Message Button Label: Thay đổi nhãn của nút ban đầu được gửi trong tin nhắn Telegram (thay vì "Respond" mặc định).
- Ví dụ:
Đánh giá ngay
,Xem xét yêu cầu
.
- Ví dụ:
- Form Title: Đặt tiêu đề cho trang form khi người dùng nhấp vào nút phản hồi.
- Ví dụ:
Form Đánh Giá Nội Dung
,Phiếu Xác Nhận Thông Tin
.
- Ví dụ:
- Form Description: Thêm một đoạn mô tả ngắn gọn hiển thị bên dưới tiêu đề của form, cung cấp hướng dẫn hoặc ngữ cảnh thêm cho người dùng.
- Ví dụ:
Vui lòng điền đầy đủ thông tin bên dưới để hoàn tất quá trình xét duyệt.
- Ví dụ:
- Response Form Button Label: Tùy chỉnh nhãn của nút "Submit" trên chính form đó.
- Ví dụ:
Gửi phản hồi
,Hoàn tất
,Xác nhận
.
- Ví dụ:
Thiết lập giới hạn thời gian chờ (Limit Wait Time)
Trong nhiều trường hợp, bạn không thể để luồng công việc chờ đợi phản hồi của con người vô thời hạn, đặc biệt khi có nhiều yêu cầu cần xử lý.
- Limit Wait Time: Cho phép bạn đặt một khoảng thời gian tối đa (tính bằng phút) mà luồng công việc sẽ chờ đợi.
- Ví dụ: Đặt
0.2
phút (tương đương 12 giây) để thử nghiệm.
- Ví dụ: Đặt
- Cách hoạt động:
- Nếu người dùng phản hồi trong khoảng thời gian này, luồng sẽ tiếp tục với dữ liệu họ cung cấp.
- Nếu hết thời gian chờ mà không có phản hồi, node Human in the Loop sẽ tự động hoàn thành, và output của nó sẽ không chứa dữ liệu phản hồi (ví dụ, không có trường
approve
,text
, hoặcform
).
- Xử lý khi hết thời gian: Bạn cần thiết kế luồng công việc của mình để xử lý trường hợp này. Ví dụ, nếu sau khi hết giờ chờ mà không có
approve: true
, bạn có thể gửi một thông báo khác, gán cho một người khác, hoặc tự động từ chối yêu cầu.
Mở rộng Human in the Loop với các kênh thông báo khác
Như đã đề cập, Telegram chỉ là một trong tám phương thức mà Human in the Loop hỗ trợ. Các phương thức khác bao gồm:
- Discord
- Gmail
- Google Chat
- Outlook
- Microsoft Teams
- Send Email (generic)
- Slack
Nguyên tắc hoạt động chung của chúng khá tương đồng:
- Luồng công việc chạy đến node Human in the Loop.
- n8n sẽ gửi một tin nhắn/email/thông báo đến kênh và người dùng đã được cấu hình.
- Thông báo này thường chứa một liên kết.
- Người dùng nhấp vào liên kết đó, một trang web sẽ mở ra (tương tự như khi dùng với Telegram) để họ thực hiện hành động (approve/disapprove, nhập text, điền form).
- Kết quả phản hồi được gửi trở lại n8n để luồng công việc tiếp tục.
Việc lựa chọn kênh nào phụ thuộc vào công cụ giao tiếp mà đội nhóm của bạn đang sử dụng phổ biến nhất.
Kết luận
Tính năng Human in the Loop trong n8n là một cầu nối quan trọng giữa sức mạnh tự động hóa của máy móc và khả năng phán đoán, đánh giá tinh tế của con người. Bằng cách cho phép người dùng can thiệp đúng lúc, đúng chỗ, bạn có thể xây dựng các quy trình tự động hóa không chỉ hiệu quả mà còn linh hoạt, chính xác và đáng tin cậy hơn.
Từ việc phê duyệt đơn giản đến thu thập thông tin qua các biểu mẫu tùy chỉnh phức tạp, Human in the Loop mở ra nhiều khả năng để tối ưu hóa workflow của bạn. Hãy thử nghiệm và áp dụng tính năng này vào các kịch bản phù hợp trong tổ chức của bạn để thấy được sự khác biệt mà nó mang lại!