n8n là một nền tảng tự động hóa trực quan . Bạn chỉ cần kéo các nút vào canvas, kết nối chúng và nhấn chạy. Đằng sau là n8n kết nối các ứng dụng của bạn, di chuyển dữ liệu và kích hoạt các hành động phù hợp vào đúng thời điểm. Đó là cách báo cáo được viết, bảng điều khiển được cập nhật và các tác vụ được xử lý trước cả khi bạn đăng nhập. Cho dù bạn là người sáng lập đang mở rộng quy mô một mình, là nhà phân tích chán ngán những công việc lặp đi lặp lại hay chỉ là người muốn tự động hóa những công việc nhàm chán — thì đây chính là công cụ dành cho bạn.
Bạn nên học được những kiến thức cơ bản, xem các ví dụ thực tế và nhận được các mẹo thiết kế và khắc phục sự cố thiết thực chỉ có được khi thực sự bắt tay vào làm việc.
Tham khảo thêm: Tôi đã để n8n tự động hóa cuộc sống của mình trong 7 ngày
Bước 1: Thiết lập môi trường n8n của bạn
Trước khi bắt đầu xây dựng, quyết định đầu tiên là quy trình làm việc của bạn sẽ thực sự diễn ra ở đâu.
Bạn có hai lựa chọn chính:
n8n Cloud: Cách nhanh nhất để bắt đầu. Không cần cài đặt phức tạp, chỉ cần đăng ký và bắt đầu. Quy trình làm việc của bạn chạy trên máy chủ của n8n, hoạt động tốt với hầu hết người dùng.
Tự lưu trữ: Chạy n8n trên máy tính hoặc máy chủ của riêng bạn. Điều này cho phép bạn kiểm soát hoàn toàn quyền riêng tư và tùy chỉnh. Hoàn hảo nếu bạn là nhà phát triển, thành viên nhóm hoặc cần thiết lập bảo mật, sẵn sàng cho môi trường sản xuất.
Sau khi thiết lập môi trường, bạn sẽ đến phần Tổng quan. Chỉ cần nhấp vào nút Tạo quy trình công việc màu cam ở góc trên bên phải để bắt đầu xây dựng quy trình tự động hóa của bạn.
Sau đây là hướng dẫn nhanh để hiểu về Bảng thông tin trạng thái:
- Thực hiện sản xuất: Quy trình làm việc của bạn đã chạy bao nhiêu lần
- Thực hiện không thành công: Tần suất xảy ra sai sót
- Tỷ lệ thất bại: Tỷ lệ phần trăm thất bại (0% nghĩa là bạn đang thất bại)
- Thời gian tiết kiệm: Ước tính sơ bộ về lượng thời gian mà hoạt động tự động hóa của bạn đã giải phóng
- Thời gian chạy trung bình: Thời gian thông thường để hoàn thành nhiệm vụ của bạn
Nếu mọi thứ đều hiển thị số 0, đừng lo lắng, điều đó hoàn toàn bình thường khi tài khoản của bạn còn mới.
Các tab cần biết:
- Quy trình làm việc: Đây là nơi chứa tất cả các công thức tự động hóa của bạn
- Thông tin đăng nhập: Nơi lưu trữ thông tin đăng nhập đã lưu của bạn cho các ứng dụng được kết nối
- Thực hiện: Nhật ký mọi lần tự động hóa của bạn chạy
Bước 2: Làm quen với Workflow Canvas
Bạn bắt đầu bằng cách lấy các nút từ thanh bên và kéo chúng vào khung vẽ. Sau đó, kết nối chúng bằng các đường thẳng để thiết lập thứ tự chạy của chúng.
Mỗi nút có cài đặt riêng, nơi bạn có thể thêm lời nhắc, cắm điểm cuối API, nhập thông tin xác thực hoặc thiết lập điều kiện.
Khi quy trình làm việc của bạn chạy, mỗi nút sẽ truyền dữ liệu của nó sang nút tiếp theo, giúp mọi thứ vận hành trơn tru. Về cơ bản, tất cả dữ liệu đều được lưu dưới dạng JSON — nhưng bạn không cần phải lo lắng về điều đó. Chỉ cần tập trung vào việc xây dựng quy trình làm việc, n8n sẽ lo phần còn lại.
Bước 3: Hiểu các loại nút
Trong n8n, các nút được chia thành năm loại chính:
1 — Nút kích hoạt
Đây là những yếu tố khởi động quy trình làm việc của bạn. Chúng quyết định cách khởi động tác nhân AI của bạn. Ví dụ: bạn có thể sử dụng Webhook Trigger để lắng nghe các yêu cầu HTTP, Chat Trigger cho các bot đàm thoại, Schedule Trigger để chạy các tác vụ theo bộ đếm thời gian, các trigger dành riêng cho ứng dụng như sự kiện Gmail hoặc Slack, hoặc thậm chí là Manual Trigger khi bạn muốn thử nghiệm.
2 — Nút hành động
Các nút này thực hiện mọi việc. Chúng cho phép tác nhân của bạn kết nối với các dịch vụ khác và thực hiện các tác vụ. Điều này có thể bao gồm việc sử dụng các nút LLM như OpenAI hoặc Google Gemini để phân tích dữ liệu và lập luận, tạo yêu cầu HTTP đến các API bên ngoài, làm việc với cơ sở dữ liệu hoặc gửi thông báo. Bất cứ khi nào quy trình làm việc của bạn cần thực hiện hành động, các nút này sẽ thực hiện.
3— Các nút logic
Hãy coi chúng như những bộ điều khiển lưu lượng cho quy trình làm việc của bạn. Chúng quyết định đường dẫn tiếp theo dựa trên các điều kiện bạn đặt ra. Các nút như If, Switch, Merge và Loop Over Items giúp bạn kiểm soát luồng. Chúng cũng xử lý các tùy chọn dự phòng và lỗi, đảm bảo mọi thứ diễn ra suôn sẻ.
4 —Nút mã
Các nút này cho phép bạn tự do sáng tạo và chính xác. Cho dù đó là tạo yêu cầu HTTP tùy chỉnh, thiết lập webhooks hay chạy mã JavaScript hoặc Python, chúng đều cho phép bạn định hình dữ liệu, xây dựng logic tùy chỉnh hoặc lấp đầy khoảng trống khi không có tùy chọn tích hợp sẵn. Và nếu bạn đang sử dụng n8n Cloud, bạn sẽ có trợ lý AI hỗ trợ tạo và gỡ lỗi mã — giúp việc hoàn thiện mọi thứ dễ dàng hơn.
5 — Nút tác nhân AI
Đây chính là nơi phép màu xảy ra. Nút Tác nhân AI tiếp nhận thông tin từ các trình kích hoạt, sử dụng Mô hình Ngôn ngữ Lớn (LLM) để hiểu và suy luận thông qua chúng, sau đó chọn đúng công cụ để hoàn thành công việc. Bạn có thể thiết lập cách nó suy nghĩ từng bước, những gì nó ghi nhớ và những công cụ nào nó có thể truy cập. Về cơ bản, nó là bộ não của quy trình làm việc, giúp bạn xây dựng các tác nhân thông minh có khả năng hiểu các yêu cầu, đưa ra quyết định và hành động — tất cả tại một nơi.
Bước 4: Thêm trí thông minh
Để quy trình làm việc của bạn thực sự thông minh, bạn cần kết hợp lý luận, trí nhớ và khả năng truy cập công cụ.
Sau đây là cách các nút đó phù hợp với ba lớp chính này:
Các nút LLM là lớp lý luận . Chúng tiếp nhận thông tin đầu vào, suy nghĩ thấu đáo, tạo ra phản hồi và đưa ra quyết định dựa trên gợi ý và dữ liệu. Về cơ bản, chúng là “bộ não” thực hiện những suy nghĩ phức tạp.
Các Nút Bộ nhớ tạo thành lớp bộ nhớ . Chúng lưu trữ các cuộc trò chuyện, ngữ cảnh hoặc trạng thái trước đó, để tác nhân của bạn có thể nhớ những gì đã xảy ra trước đó và duy trì cuộc trò chuyện hoặc quy trình diễn ra suôn sẻ.
Nút Công cụ cho phép tác nhân của bạn truy cập vào thế giới bên ngoài. Chúng kết nối với API, cơ sở dữ liệu, trình thu thập dữ liệu hoặc dịch vụ tùy chỉnh — cho phép quy trình làm việc của bạn thực hiện các hành động thực tế, chứ không chỉ là lời nói suông.
Thêm quyền truy cập công cụ
Bước 5: Kiểm tra, theo dõi và khắc phục sự cố
Khi xây dựng một tác nhân trong n8n, bạn cần kiểm tra nó để đảm bảo mọi thứ hoạt động. Sau đây là cách thực hiện mà không bị lạc đề:
Kiểm tra từng bước một.
Chạy từng nút riêng lẻ thay vì toàn bộ quy trình làm việc. Điều này giúp bạn xác định chính xác vị trí lỗi.
Sử dụng dữ liệu ghim
Bạn có thể “đóng băng” dữ liệu đầu vào để thử nghiệm, nhờ đó bạn luôn thử nghiệm với cùng một giá trị. Bằng cách này, kết quả của bạn có thể dự đoán được và lỗi cũng dễ tìm hơn.
Đọc nhật ký
n8n ghi lại những gì xảy ra ở mỗi bước. Xem lại các nhật ký này để xem dữ liệu nào đã vào, dữ liệu nào đã ra và có lỗi nào xuất hiện không.
Thêm trình trợ giúp gỡ lỗi.
Sử dụng NoOpcác nút để tạm dừng và tập trung vào phần cụ thể trong quy trình làm việc của bạn. Thêm Consolecác nút để in giá trị để kiểm tra.
Xử lý lỗi đúng cách.
Thiết lập trình xử lý lỗi toàn cục để phát hiện sự cố. Nhờ đó, bạn có thể đăng nhập vào hệ thống, nhận cảnh báo hoặc khôi phục hệ thống một cách bình thường thay vì quy trình làm việc bị sập.
Bước 6: Giữ cho nó có tính mô-đun, giữ cho nó hợp lý
Vấn đề là: quy trình làm việc AI của bạn sẽ không giữ được sự nhỏ gọn lâu dài. Chúng sẽ phát triển thêm nhiều bước, nhiều công cụ hơn, phức tạp hơn. Nếu không có một cấu trúc vững chắc, mọi thứ sẽ nhanh chóng trở nên lộn xộn.
Giải pháp là gì? Hãy bắt đầu với tính mô-đun ngay từ đầu.
Bạn không chỉ tự động hóa một tác vụ. Bạn đang xây dựng một hệ thống cần thích ứng và phát triển. Điều đó có nghĩa là thiết kế phải chú trọng đến khả năng tái sử dụng, tính rõ ràng và khả năng bảo trì.
Sau đây là cách thực hiện:
Chia luồng công việc thành các luồng con.
Sử dụng nút Thực thi luồng công việc để gọi các luồng công việc khác. Nó giúp luồng chính của bạn gọn gàng và cho phép bạn tái sử dụng logic trên nhiều dự án.
Tạo các thành phần có thể tái sử dụng.
Đừng xây dựng lại cùng một logic nhiều lần. Hãy đóng gói nó một lần, sử dụng nó ở mọi nơi. Điều này giúp mở rộng quy mô mà không gặp rắc rối.
Đặt tên rõ ràng, nhất quán. Đặt
tên cho các nút và quy trình làm việc của bạn một cách đơn giản. Khi có sự cố (và chắc chắn sẽ xảy ra), việc đặt tên rõ ràng sẽ giúp bạn tiết kiệm thời gian và tránh phiền phức.
Thêm ghi chú vào những chỗ cần thiết.
Hãy để lại bình luận cho chính bạn trong tương lai. Một vài ghi chú đúng chỗ có thể giúp bạn tiết kiệm hàng giờ khi xem lại hoặc điều chỉnh luồng công việc.
Kiểm soát phiên bản bằng Git
Xuất quy trình làm việc của bạn dưới dạng tệp JSON và lưu trữ chúng trong Git để bạn có thể theo dõi các thay đổi, khôi phục mọi thứ và ngừng đoán xem lỗi gì đã xảy ra.
Mục tiêu là xây dựng các hệ thống dễ theo dõi, dễ cập nhật và sẵn sàng mở rộng.
Tiếp theo, chúng ta sẽ chuyển từ tự động hóa cơ bản sang xây dựng quy trình làm việc của tác nhân.
Quy trình làm việc của Agentic
Thiên nhiên đã hình thành nên quy trình làm việc của các tác nhân từ rất lâu trước khi chúng ta làm được điều đó. Hãy lấy một đàn kiến làm ví dụ.
Không có một ông chủ trung tâm nào chỉ đạo từng con kiến phải làm gì. Thay vào đó, chúng hoạt động với một mục tiêu chung: sinh tồn, kiếm thức ăn, xây tổ, và mỗi con kiến sẽ điều chỉnh hành vi của mình dựa trên những gì chúng nhìn thấy, ngửi thấy hoặc va phải. Một con kiến tìm thấy thức ăn, để lại dấu vết, và những con khác sẽ đi theo. Nếu dấu vết không còn hiệu quả? Chúng sẽ thích nghi. Thử một con đường khác. Giao tiếp thông qua hóa chất. Định tuyến lại.
Nó lộn xộn và phi tập trung, nhưng lại cực kỳ hiệu quả.
Đây chính là bản chất của quy trình làm việc tác nhân: các bộ phận riêng lẻ cảm nhận, quyết định và hành động độc lập mà không cần một kịch bản cố định. Chúng phản hồi và điều chỉnh theo thời gian thực, giống như loài kiến.
Đó chính là loại trí thông minh mà công nghệ tự động hóa hiện đại muốn sao chép.
Nhấn enter hoặc nhấp để xem hình ảnh ở kích thước đầy đủ
Một nhóm các tác nhân AI làm việc cùng nhau để suy nghĩ, hành động và tiến hóa
Quy trình làm việc của Agentic: Những gì diễn ra sau Tự động hóa cơ bản
Nói một cách trung thực thì hầu hết tự động hóa đều là kịch bản được tô vẽ.
Bạn thiết lập một trình kích hoạt, xác định một số bước và cầu nguyện thế giới đừng thay đổi quá nhiều. Việc này hữu ích, đúng vậy, nhưng ngay khi có điều gì bất ngờ xảy ra, “tự động hóa” của bạn sẽ biến thành một phiếu yêu cầu hỗ trợ.
Quy trình làm việc truyền thống giống như công thức nấu ăn.
Bạn lấy một số thông tin đầu vào, tuân theo một trình tự cố định và hy vọng mọi thứ sẽ ổn. Nhưng nếu thiếu một yếu tố, hoặc tình hình thay đổi, bạn sẽ bế tắc. Mọi thứ sẽ đổ vỡ.
Đó chính là lúc quy trình làm việc của tác nhân phát huy tác dụng.
Thay vì tuân theo một tập hợp hướng dẫn cố định, quy trình làm việc của tác nhân sẽ xem xét tình huống, hiểu bối cảnh và quyết định việc cần làm tiếp theo.
Đó là sự tự động hóa không bị đóng băng theo thời gian.
Ví dụ, giả sử quy trình làm việc của bạn đang xử lý phiếu hỗ trợ. Phiên bản cơ bản có thể định tuyến chúng dựa trên từ khóa hoặc danh mục. Một nhân viên hỗ trợ sẽ đọc vấn đề thực tế, kiểm tra lịch sử khách hàng, cân nhắc mức độ ưu tiên, thậm chí có thể tạo ra phản hồi tùy chỉnh hoặc đánh dấu để nhân viên xem xét — dựa trên ngữ cảnh , chứ không chỉ dựa trên dữ liệu đầu vào.
Đây chính là bước chuyển đổi then chốt: từ phản ứng với thông tin đầu vào… sang lý luận dựa trên bối cảnh. Và đó chính là điều mở ra sự linh hoạt, đặc biệt là khi môi trường không thể đoán trước, biến động nhanh hoặc hỗn loạn (tức là thế giới thực).
Điều này không có nghĩa là chúng hoàn hảo. Hay chúng có khả năng “suy nghĩ” một cách kỳ diệu. Nhưng chúng đưa ra quyết định dựa trên ngữ cảnh, điều này đặt chúng ở đâu đó giữa tự động hóa cứng nhắc và tự động hóa hoàn toàn — đúng như nhu cầu của hầu hết các hệ thống thực tế.
Các hệ thống Agentic đang phát triển từ quy trình làm việc đơn giản thành hệ sinh thái phức tạp. Những gì bắt đầu từ một tác vụ tự động đơn lẻ thường phát triển thành một mạng lưới các quy trình làm việc được kết nối, giao tiếp, tự tối ưu hóa và ngày càng có nhiều khả năng hơn theo thời gian.
Khi mạng lưới này phát triển, giá trị của nó sẽ tăng lên. Càng nhiều mảnh ghép được kết nối, hệ thống càng trở nên mạnh mẽ hơn. Đó chính là hiệu ứng mạng lưới đang hoạt động, nhưng trong tự động hóa.
Sự phát triển này cũng thay đổi vai trò của bạn. Bạn không còn chỉ là người thiết lập quy trình làm việc nữa. Bạn trở thành kiến trúc sư của một hệ thống thông minh, thích ứng. Bạn quyết định cách các tác nhân giao tiếp với nhau, khi nào con người nên can thiệp và những công nghệ tự động hóa mới nào có thể khai phá giá trị.
Trớ trêu thay, khi máy móc trở nên thông minh hơn, công việc của bạn lại trở nên nhân văn hơn. Đó là việc điều khiển con tàu, phát hiện những thiếu sót, đưa ra phán đoán và tạo ra các vòng phản hồi giúp toàn bộ hệ thống ngày càng tốt hơn theo thời gian.
Tóm lại: quy trình làm việc của agentic không loại bỏ nhu cầu về con người — chúng nâng cao những gì con người tập trung vào. Bạn càng thành thạo ngôn ngữ tự động hóa mới này, bạn càng có nhiều đòn bẩy trong việc định hình tương lai.
Ví dụ về quy trình làm việc của Agentic trong N8n
Hãy thực hành ngay. Sau đây là cách xây dựng quy trình làm việc của agentic trong n8n — những ví dụ thực tế cho thấy cách biến ý tưởng thành hiện thực.
Ví dụ 1: Tự động hóa việc xử lý hóa đơn từ email
//www.datacamp.com/tutorial/n8n-ai
Ví dụ 2: Xây dựng một tác nhân RAG
Ví dụ: xây dựng hệ thống AI tạo video lan truyền tự động
(n8n + Sora 2 + Gemini + Kie AI)
Ví dụ 3: Thu thập dữ liệu web
Để trích xuất dữ liệu từ các trang web, bạn sẽ cần khóa API của Bright Data. Sau khi đăng ký trên trang web của Bright Data, hãy điều hướng đến bảng điều khiển của bạn và sao chép khóa API. Khóa này cho phép bạn truy cập các dịch vụ thu thập dữ liệu và vượt qua các rào cản như CAPTCHA hoặc các hệ thống phát hiện bot khác.
Nút đầu tiên bạn cần là nút “Manual Trigger”. Nút này cho phép bạn bắt đầu quy trình làm việc khi bạn đã sẵn sàng. Nó rất hữu ích cho việc kiểm thử vì bạn có thể kiểm soát thời điểm bắt đầu thu thập dữ liệu. Để thêm nút này, hãy nhấp vào nút “+” và tìm kiếm “Manual Trigger”, sau đó kéo nó vào canvas.
Tiếp theo, thêm nút “Yêu cầu HTTP”. Nút này chịu trách nhiệm gửi yêu cầu thực tế đến API thu thập dữ liệu web (trong trường hợp này là Bright Data). Sau khi kết nối nút này với nút Kích hoạt Thủ công, hãy nhấp vào nút Yêu cầu HTTP và cấu hình nó. Trong cài đặt cấu hình, chọn “GET” làm phương thức và nhập URL: //app.Bright Data.com/api/v1/
Để xác thực, hãy chọn “Không có”. Bạn sẽ cần thêm bốn tham số truy vấn để yêu cầu hoạt động:
api_key : [Khóa API Dữ liệu Bright của bạn]
url : URL của trang web bạn muốn thu thập dữ liệu (ví dụ: //brightdata.com/blog).
ai_query : Đây là mô tả về dữ liệu bạn muốn Bright Data trích xuất, chẳng hạn như “Trích xuất tiêu đề H1 và liên kết đến từng bài đăng trên blog”.
ai_extract_rules : Tại đây, bạn sẽ xác định dữ liệu cụ thể mà bạn muốn trích xuất. Ví dụ:
{
“h1_heading” : { “type” : “string” , “description” : “Tiêu đề H1 chính từ trang blog” } ,
“blog_post_links” : { “type” : “list” , “description” : “URL liên kết đến từng bài đăng trên blog trên trang web này” }
}
Thêm nút mã để xử lý dữ liệu. Bây giờ, bạn sẽ thêm nút “Mã” để xử lý dữ liệu đã thu thập. Đây là nơi bạn có thể thao tác dữ liệu trước khi chuyển sang giai đoạn tiếp theo.
Nhấp vào nút Mã và thêm mã JavaScript sau:
// Trích xuất phản hồi từ Bright Data
const response = $input. first (). json ;
const blogPostLinks = response. blog_post_links || [];
console . log ( “Trang chính H1:” , response. h1_heading );
console . log ( `Đã tìm thấy ${blogPostLinks.length} liên kết bài đăng trên blog` );
// Lọc các URL bài đăng trên blog thực tế và lấy 5 URL đầu tiên
const linksToScrape = blogPostLinks
. filter ( link => link. includes ( ‘/blog/’ ) && !link. includes ( ‘#’ ))
. slice ( 0 , 5 );
console . log ( “Chúng tôi sẽ trích xuất các bài đăng trên blog:” , linksToScrape);
// Chuyển đổi URL tương đối thành URL đầy đủ
trả về linksToScrape. bản đồ ( liên kết => {
const fullUrl = liên kết. startsWith ( ‘http’ ) ? liên kết: `//www.Bright Data.com ${link} ` ;
trả về { url : fullUrl, loại : ‘blog_post’ };
});
Mã này sẽ trích xuất các liên kết bài đăng trên blog từ phản hồi của Bright Data, lọc ra các liên kết không cần thiết và chuyển đổi URL tương đối thành URL đầy đủ.
Thêm nút yêu cầu HTTP thứ hai (The Spider). Để thu thập dữ liệu từ từng bài đăng trên blog, hãy thêm nút “Yêu cầu HTTP” thứ hai sau nút Mã. Nút này sẽ tự động thu thập dữ liệu từ từng URL bài đăng trên blog.
Cấu hình nút này như sau:
Phương pháp : GET
URL : //app.brightdata.com/api/v1/
Tham số truy vấn :
api_key : [Khóa API Dữ liệu Bright của bạn]
url : {{ $json.url }} (Điều này sử dụng động các URL được đầu ra bởi nút Mã)
ai_query : “Trích xuất tiêu đề H1 chính từ bài đăng trên blog này”
ai_extract_rules : {“h1_title”: {“type”: “string”, “description”: “Tiêu đề H1 chính của bài đăng trên blog này”}}
Kiểm tra quy trình thu thập dữ liệu web của bạn. Bây giờ quy trình làm việc của bạn đã được thiết lập, đã đến lúc kiểm tra nó. Nhấp vào nút “Thực thi quy trình làm việc” để bắt đầu quá trình thu thập dữ liệu. Bạn sẽ thấy quy trình làm việc tiến triển qua từng bước, trích xuất dữ liệu từ trang chính và từng bài đăng trên blog.
Phân tích kết quả của bạn. Sau khi chạy quy trình làm việc, hãy nhấp vào từng nút để xem kết quả:
Yêu cầu HTTP đầu tiên : Bạn sẽ thấy tiêu đề H1 được trích xuất và các liên kết đến từng bài đăng trên blog.
Yêu cầu HTTP thứ hai (Spider) : Bạn sẽ thấy các tiêu đề H1 từ các bài đăng trên blog mà bạn đã thu thập.
Nếu mọi thứ được thiết lập chính xác, bạn sẽ thu thập thành công nhiều trang và trích xuất tiêu đề H1 bằng nền tảng không cần mã.
Lấy thông tin từ hầu hết mọi trang web thông qua Puppeteer.
### 🚀 Công cụ Puppeteer là gì?
Puppeteer là một trình duyệt tự động hóa (automation Browser).
Nó giải quyết các vấn đề mà HTTP Request thông thường trong n8n không thể xử lý:
- Nhiều trang web không trả về toàn bộ nội dung trong phản hồi (response) đầu tiên.
- Trang web chạy các đoạn mã (code) để tải thêm nội dung sau đó (thường là JavaScript).
- Trang web chặn truy cập nếu phát hiện không đến từ một trình duyệt thực (do khác biệt về fingerprint hoặc User-Agent).
Các khả năng của Puppeteer bao gồm:
- Mở một trang web.
- Chờ trang web tải xong (hoặc chờ theo thời gian/sự kiện).
- Điều khiển cuộn con trỏ chuột đến vị trí cụ thể.
- Chụp ảnh màn hình (screenshot) của trang web.
- Lấy thông tin dựa trên các thẻ HTML trên trang.
Chạy Puppeteer trên thiết bị ARM (như Orange Pi)
Ubuntu trên Orange Pi thường đã có sẵn package này: sudo apt install -y chromium-browser
🔍 Nếu bị lỗi “package not found”, thử: sudo apt install -y chromium
Kiểm tra đường dẫn thực tế: which chromium-browser
# hoặc which chromium
Kết quả ví dụ: /usr/bin/chromium-browser
Cài Puppeteer (bỏ qua tải Chromium x86 mặc định):
PUPPETEER_SKIP_DOWNLOAD=true npm install puppeteer
4️⃣ Test chạy Puppeteer với Chromium của hệ thống
Tạo file test.js:
const puppeteer = require(‘puppeteer’);
(async () => {
const browser = await puppeteer.launch({
executablePath: ‘/usr/bin/chromium-browser’, // hoặc /usr/bin/chromium
headless: true,
args: [
‘–no-sandbox’,
‘–disable-setuid-sandbox’,
‘–disable-dev-shm-usage’,
‘–disable-gpu’
],
});
const page = await browser.newPage();
await page.goto(‘//example.com’);
console.log(await page.title());
await browser.close();
})();
Chạy thử: node test.js
Nếu thấy in ra Example Domain → thành công. Trường hợp Puppeteer báo lỗi “Failed to launch browser process”
Điều này có thể do thiếu thư viện hệ thống. Khắc phục bằng cách cài thêm:
sudo apt install -y \
libasound2 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libgbm1 \
libnspr4 libnss3 libx11-xcb1 libxcomposite1 libxdamage1 libxrandr2 \
xdg-utils fonts-liberation wget
+ Thiết lập memlock không giới hạn cho người dùng, CL xử lý giới hạn memlock thông qua systemd chứ không phải PAM.
Do đó, để tăng giới hạn, tôi đã sửa đổi cả hai /etc/systemd/system.conf và /etc/systemd/user.conf, bao gồm:
Sau khi khởi động lại, tôi có:
$ ulimit -l
unlimited
ulimit -n
Tăng giới hạn 512MB: sudo nano /etc/security/limits.conf
# Cấp quyền memlock 512MB cho người dùng
<user> hard memlock 524288
<user> soft memlock 524288
Thay thế <user> bằng tên người dùng bạn dùng để chạy n8n/Node.js (ví dụ: orangepi).
sudo reboot
Sau khi khởi động lại và đăng nhập, hãy kiểm tra lại giới hạn:
ulimit -l
Nếu kết quả trả về là 524288 (hoặc unlimited), giới hạn đã được áp dụng.
+ Tạo thư mục profile riêng cho Chrome headless
sudo mkdir -p /var/lib/chrome-headless
sudo chown -R $USER:$USER /var/lib/chrome-headless
Tạo file systemd service nano /etc/systemd/system/chrome-headless.service
sudo bash -c “cat > $SERVICE_FILE” <<‘EOF’ [Unit] Description=Headless Chromium Server for Puppeteer After=network.target [Service] ExecStart=/usr/bin/chromium-browser \ –headless \ –no-sandbox \ –disable-gpu \ –disable-dev-shm-usage \ –remote-debugging-address=0.0.0.0 \ –remote-debugging-port=9222 \ –user-data-dir=/var/lib/chrome-headless Restart=always RestartSec=3 [Install] WantedBy=multi-user.target EOF
Kích hoạt và khởi chạy sudo systemctl daemon-reload
sudo systemctl enable chrome-headless
sudo systemctl restart chrome-headless
sudo systemctl status chrome-headless –no-pager
Tạo file cấu hình toàn hệ thống để Puppeteer bỏ qua download và trỏ tới Chromium hệ thống.
sudo nano /etc/environment
Thêm vào cuối file:
PUPPETEER_SKIP_DOWNLOAD=true
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
Lưu lại, rồi reload: source /etc/environment
Bây giờ mọi quy trình (n8n, Node.js, script thủ công, v.v.) đều sẽ mặc định chạy Chromium từ /usr/bin/chromium-browser. Nếu bạn muốn dọn dẹp cache của Puppeteer: rm -rf ~/.cache/puppeteer
### 🔗 Kết nối n8n với Puppeteer
– Không cần viết nhiều mã, người dùng chỉ cần tải gói **n8n-node-puppeteer** từ **npmjs** và dễ dàng cài đặt.
– Từ phiên bản n8n 0.187 trở lên, có thể cài đặt dễ dàng thông qua phần cài đặt trong n8n.
Cách cài đặt (áp dụng cho n8n bản 0.187 trở lên):
- Vào phần Settings.
- Chọn Community Node.
- Chọn Cài đặt (Install).
- Điền tên package: n8n-node-puppeteer.
### 📊 Các chức năng của Puppeteer
– Có bốn hành động chính:
1. **Get Page Content**: Lấy nội dung của trang web.
2. **Get PDF**: Lưu nội dung trang thành file PDF.
3. **Get Screenshot**: Chụp ảnh toàn bộ trang web.
4. **Run Custom Script**: Thực hiện mã tùy chỉnh.
Ví dụ trang web mục tiêu là bảng giá chứng khoán iBS.com.vn.
Thử nghiệm với HTTP Request:
- Kết quả: Bị chặn, yêu cầu xác thực (credential).
- Thử nghiệm với Postman: Báo cần bật JavaScript, sau đó bị Block.
Thử nghiệm với Puppeteer:
- Sử dụng Get Page Content với link iBS.
- Kết quả: Puppeteer truy cập thành công và trả về nội dung trang web (HTML body) mà không bị lỗi chặn.
- Sử dụng Get Screenshot: Chụp được ảnh bảng giá (ví dụ: thời gian 20:54:26/20:54:50), xác nhận truy cập thành công.
⏳ Quản lý thời gian tải
Các tùy chọn này nằm trong phần Add Option để kiểm soát thời gian tải và hành vi trình duyệt:
1. Kiểm soát Thời gian Chờ:
- Timeout: Thời gian tối đa (tính bằng mili giây) mà kết nối sẽ chờ trước khi bị ngắt.
- Wait Until: Chờ theo sự kiện của trang (thay vì thời gian cố định). Có bốn sự kiện chính:
- load: Chờ cho đến khi toàn bộ nội dung (HTML, CSS, JavaScript) tải xong.
- domcontentloaded: Chờ khi cấu trúc DOM (HTML) được tải xong (có thể bỏ qua JavaScript tải sau).
- networkidle0: Chờ cho đến khi không có thêm kết nối mạng nào trong vòng 500 mili giây.
- networkidle2: Chờ cho đến khi không có nhiều hơn hai kết nối mạng trong vòng 500 mili giây (thường dùng cho các trang tải liên tục các thành phần nhỏ).
2. Tùy chọn Nâng cao:
- Browser Size (website): Số lượng trang tối đa có thể mở liên tục trong phiên trình duyệt tự động hóa.
- Headless Mode: Chế độ chạy không cần giao diện trình duyệt (tốt hơn cho hiệu suất và chạy nhiều tác vụ).
- Emulate Device: Giả lập truy cập từ một thiết bị cụ thể (ví dụ: iPad Pro 11, landscape) để qua mặt cơ chế chặn bot.
- Stealth Mode: Giúp Puppeteer khó bị các hệ thống chống bot phát hiện hơn.
- Proxy Server: Dùng để đổi IP khi bị trang web chặn do thu thập dữ liệu quá nhiều từ một địa chỉ IP.
- Extra Headers: Thêm các tiêu đề (header) tùy chỉnh (ví dụ: User-Agent thực) để giả lập trình duyệt tốt hơn.
🛡️ Vượt qua các biện pháp chống bot
– Puppeteer có thể vượt qua một số biện pháp chặn bot bằng cách **giả lập trình duyệt** và **sử dụng user agent** thích hợp.
– Có thể thiết lập để thay đổi **device emulation** nhằm giảm khả năng nhận diện bot.
Vấn đề: Trang web phát hiện bot và yêu cầu thao tác thủ công (“giữ nút” hoặc xác nhận).
Giải pháp Emulate Device:
- Giả lập truy cập bằng iPad Pro 11, landscape.
- Kết quả: Vượt qua được màn hình chặn bot ban đầu.
- Vấn đề tiếp theo: Chạm màn hình yêu cầu chấp nhận Cookie.
- Xử lý Cookie: Cấu hình bot để ấn vào nút chấp nhận hoặc lưu Cookie cho các lần truy cập sau.
Sử dụng Run Custom Script
Hành động Run Custom Script cho phép thực thi mã Puppeteer tùy chỉnh.
1. Cấu trúc Mã Cơ bản trong n8n:
- Cần sử dụng cú pháp async/await (bất đồng bộ) do Puppeteer là trình duyệt tự động hóa.
- Các đối tượng Puppeteer trong n8n được gọi bằng dấu $ (ví dụ: $page, $browser).
- Mã mẫu luôn bắt đầu bằng await $page.goto(‘URL’).
- Sử dụng await $page.evaluate(() => { … }) để thực thi mã JavaScript trong ngữ cảnh trình duyệt (để đọc/thao tác DOM).
- Dữ liệu trả về (Return) phải tuân theo định dạng JSON của n8n: một mảng chứa một đối tượng (ví dụ: [ { “data”: value } ]).
### 📈Kỹ thuật Lấy Dữ liệu SSI (Chứng khoán):
Có hai cách chính để lấy dữ liệu từ các trang chứng khoán (ví dụ: SSI):
Cách 1: Đọc Thẻ HTML (DOM Scraping)
- Dùng công cụ Inspect của trình duyệt để tìm các thẻ HTML có cấu trúc tương đồng (ví dụ: các class như AgCell).
- Sử dụng tính năng Ask AI (trong Console của Chrome) để nhờ viết mã JavaScript (ví dụ: document.querySelectorAll) nhằm trích xuất giá trị theo class.
- Đưa mã JavaScript này vào $page.evaluate() trong Run Custom Script.
- Kết quả: Trích xuất được các giá trị số hiển thị trên bảng giá.
Cách 2: Chặn và Lấy Response API (JSON)
- Quan sát thẻ Network (XHR/Fetch) trong trình duyệt khi trang tải.
- Trang web tải khung trước, sau đó gửi các request API để lấy dữ liệu chứng khoán dưới dạng JSON.
- Dữ liệu JSON chứa các thông tin chi tiết (ví dụ: IndexValue, PreviousIndexValue, giá sàn/trần, Open/High/Low).
- Vấn đề: Thử dùng HTTP Request trực tiếp đến link API này vẫn bị chặn/cấm (Forbidden).
- Giải pháp Puppeteer: Sử dụng Run Custom Script để truy cập trực tiếp link API (ví dụ: link VN30, HNX30).
- Code: await $page.goto(‘API_URL’) và dùng $page.evaluate() để lấy nội dung JSON thô.
- Kết quả: Lấy được dữ liệu JSON thô (ví dụ: VN30, HNX30) và trả về n8n.
### 🔍 Kết luận
– Puppeteer kết hợp với n8n mang lại khả năng tự động hóa mạnh mẽ cho việc thu thập dữ liệu, giúp lập trình viên giảm thiểu việc viết mã phức tạp.
Ví dụ 4:Tạo trợ lý email
Xây dựng ứng dụng email AI, một ứng dụng email hoạt động có thể đọc danh sách liên hệ, tìm ra người bạn muốn gửi email và gửi tin nhắn thay mặt bạn.
Những gì làm:
Lấy thông tin liên hệ từ Google Doc.
Lưu trữ và tìm kiếm các liên hệ đó trong Pinecone, một cơ sở dữ liệu vector.
Sử dụng OpenAI để hiểu ý bạn khi bạn nói những câu như “Gửi email cho Phil để hỏi thăm tình hình”.
Thực tế, hãy gửi email qua Gmail, tất cả đều được điều phối bởi n8n, một công cụ tự động hóa quy trình làm việc không cần mã.
Đây là kết quả cuối cùng khi mình làm:
Bạn nhập: “Gửi email cho Kevin hỏi xem anh ấy có muốn đi ăn trưa không.”
Nhân viên tìm thấy địa chỉ email của Kevin trong cơ sở dữ liệu.
Nó tạo ra một tin nhắn lịch sự.
Gmail sẽ gửi nó.
Bước 1: Tạo dữ liệu liên hệ của bạn trong Google Docs
Mở Google Docs và tạo một bảng danh bạ:
Tên | Email
———— |——————-
Kevi Levin | kevin @example .com
Gwen Tennyson | Gwen @example .com
2. Sao chép ID tài liệu . Đó là chuỗi dài trong URL:
//docs.google.com/document/d/THIS_PART_IS_THE_ID/edit
Chúng ta sẽ cần ID này khi kết nối Google Docs trong n8n.
Bước 2: Thiết lập Pinecone (Cơ sở dữ liệu Vector)
Nhấn enter hoặc nhấp để xem hình ảnh ở kích thước đầy đủ
Giao diện Pinecone hiển thị việc tạo chỉ mục và không gian tên mới
Tạo và cấu hình chỉ mục Pinecone.
Truy cập Pinecone và tạo một tài khoản miễn phí.
Tạo một chỉ mục mới :
Tên:sample
Mẫu: chọn 3-nhỏ (hoặc text-embedding-ada-002)
Cài đặt kích thước → giữ nguyên mặc định
3. Sao chép Khóa API của bạn (từ bảng điều khiển Pinecone).
Mục lục này là nơi lưu trữ danh bạ của bạn, để sau này nhân viên có thể hỏi: “Kevin là ai thế?”
Bước 3: Đẩy danh bạ từ Google Docs → Pinecone qua n8n
Các nút n8n được kết nối từ Google Docs đến Pinecone với các nhúng ở giữa.
Quy trình làm việc n8n để đẩy dữ liệu liên hệ vào Pinecone.
Bây giờ chúng ta hãy kết nối các điểm lại với nhau và tải danh bạ của bạn vào Pinecone.
Trong n8n, tạo một quy trình làm việc mới .
Thêm Kích hoạt thủ công → cho phép bạn chạy quy trình làm việc theo yêu cầu.
Thêm một nút Google Docs :
Thông tin xác thực: Google Cloud → bật Docs API → tạo OAuth Client ID + Secret.
Màn hình đồng ý: thêm email của bạn làm người dùng thử nghiệm và dán URI chuyển hướng n8n khi được yêu cầu.
Hành động: Lấy tài liệu .
Dán ID tài liệu của bạn (từ URL Google Doc).
Kiểm tra → bạn sẽ thấy dữ liệu liên lạc của mình được kéo vào.
4. Thêm nút Data Loader → cài đặt mặc định là ổn. Thao tác này chuẩn bị tài liệu để phân đoạn.
5. Thêm nút Token Splitter :
Kích thước khối:200
Sự chồng chéo của khối:0
Thao tác này sẽ chia văn bản thành các phần nhỏ để nhúng vào.
6. Thêm nút OpenAI Embeddings :
Người mẫu:text-embedding-3-small
Thông tin xác thực: khóa API OpenAI của bạn.
Phải khớp với mô hình bạn đã sử dụng khi tạo chỉ mục Pinecone!
7. Thêm một nút Pinecone :
Thao tác: Chèn tài liệu .
Khóa API: từ bảng điều khiển Pinecone của bạn.
Mục lục: sample(mục lục bạn đã tạo trước đó).
Không gian tên: contacts.
8. Kết nối các nút như thế này
Kích hoạt thủ công → Google Docs → Trình tải dữ liệu → Bộ chia mã thông báo → Nhúng OpenAI → Pinecone
9. Chạy quy trình làm việc → làm mới bảng điều khiển Pinecone → bạn sẽ thấy contactskhông gian tên của mình đã được điền.
Bước 4: Xây dựng công cụ “Gửi email”
Cấu hình nút Gmail và nút OpenAI phân tích cú pháp truy vấn thành JSON.
Quy trình làm việc n8n để gửi email bằng Gmail và phân tích cú pháp OpenAI.
Bây giờ chúng ta hãy tạo công cụ mà tác nhân sẽ sử dụng để gửi email.
Tạo quy trình làm việc mới trong n8n.
Kích hoạt: Khi được gọi bởi một quy trình công việc khác .
Thêm một nút Gmail :
Bật Gmail API trong Google Cloud.
Tạo thông tin xác thực OAuth (ID máy khách + Bí mật).
Kết nối với Gmail trong n8n.
Hành động: Gửi tin nhắn .
Các trường → đặt chúng dưới dạng biểu thức (để chúng trở nên động):
ĐẾN
Chủ thể
Tin nhắn
Tùy chọn: CC / BCC có thể để trống.
Tắt tùy chọn “Thêm n8n” trong tùy chọn.
{
” đến “: “…” ,
“chủ đề” : “…” ,
“tin nhắn” : “…”
}
Sau đó, nhân viên sẽ tự động điền vào các trường này.
Thêm một nút OpenAI (mô hình Trò chuyện hoặc Văn bản):
Mục đích: phân tích lệnh tự nhiên (ví dụ: “Gửi email cho kevin hỏi thăm chuyện gì”) thành các trường JSON cho Gmail.
Thêm hướng dẫn: “Phân tích truy vấn thành các tham số ở trên và trả về JSON.”
Bao bọc truy vấn trong JSON.stringify(…)→ nếu không n8n sẽ báo lỗi (“mong đợi chuỗi nhưng lại nhận được đối tượng”).
6. Thêm một nút tập hợp
Cánh đồng: response = “sent”.
Thao tác này sẽ gửi thông báo thành công trở lại quy trình làm việc của Agent.
Lưu và kiểm tra → Gmail thực sự sẽ gửi tin nhắn.
Bước 5: Lắp ráp quy trình làm việc của tác nhân
Bây giờ là phần thú vị: kết hợp mọi thứ vào một tác nhân.
Sơ đồ quy trình làm việc n8n hiển thị tác nhân đã lắp ráp cùng với các công cụ.
Quy trình làm việc của tác nhân AI đầy đủ kết nối đầu vào trò chuyện, nút tác nhân, công cụ Pinecone và công cụ Gmail.
Tạo quy trình làm việc mới trong n8n.
Kích hoạt: Trên tin nhắn trò chuyện .
Thêm một nút Agent (AI nâng cao → Tools Agent).
Đầu vào: json.chatInput(để biết người dùng đã nhập gì).
Yêu cầu định dạng đầu ra cụ thể
Trả về các bước ngay lập tức (hữu ích cho việc gỡ lỗi).
Thông báo hệ thống:
Bạn là trợ lý email.
Sử dụng công cụ Pinecone để tìm thông tin liên hệ.
Sử dụng công cụ Gửi Email để gửi tin nhắn.
Luôn kết thúc email bằng “Trân trọng, [Tên của bạn]” .
4. Thêm Công cụ Lưu trữ Vector :
Cửa hàng Vector: Pinecone.
Khóa API + Chỉ mục: sử dụng thông tin đăng nhập Pinecone của bạn.
Không gian tên: contacts.
Mô hình nhúng: text-embedding-3-small(phải khớp với chỉ số Pinecone).
Mô tả: “Gọi công cụ này để lấy thông tin liên lạc như địa chỉ email.”
5. Thêm Công cụ Gửi Email (quy trình làm việc bạn đã xây dựng trước đó).
Liên kết nó như một quy trình làm việc có thể gọi được.
Mô tả: “Gọi công cụ này để gửi email.”
Trường phản hồi: response(trường chúng ta đã thiết lập “sent”trước đó).
6. Kết nối: Chat Trigger → Agent → (Công cụ lưu trữ Vector + Công cụ gửi email).
Gỡ lỗi trong n8n
Nhấn enter hoặc nhấp để xem hình ảnh ở kích thước đầy đủ
Email cuối cùng do AI tạo ra đã được gửi thành công.
Nếu có gì đó bị hỏng:
Vào Thực thi → Tất cả thực thi .
Nhấp vào lần chạy không thành công → kiểm tra đầu vào/đầu ra của từng nút.
Ví dụ:
nếu công cụ Gửi Email không thành công, bạn sẽ thấy trường chủ đề hoặc người nhận có trống không.
Nếu Gmail thông báo “Quyền bị từ chối” → hãy kiểm tra thiết lập màn hình chấp thuận OAuth.
Nếu Pinecone không trả về kết quả → hãy kiểm tra lại không gian tên ( contacts) và mô hình nhúng.
Nếu OpenAI báo lỗi → hãy đảm bảo bạn đã sử dụng JSON.stringifytrong quá trình phân tích cú pháp.
Tiếp theo là gì?
Hiện tại, bạn đã xây dựng được phiên bản đơn giản nhất của một tác nhân email AI:
Không có ký ức,
Chỉ có hai công cụ (danh bạ + email),
Lời nhắc hệ thống cơ bản.
Nhưng khả năng thì vô tận:
Thêm Google Calendar → cho phép nhân viên lên lịch họp.
Thêm Google Drive → để nó kéo tài liệu.
Thêm quy tắc quản lý Hộp thư đến → cho phép lưu trữ hoặc gắn nhãn email tự động.
Mỗi công cụ mới giúp nhân viên của bạn thông minh hơn.
Down video bằng n8n với puppeteer
Ví dụ download videovideo
Ví dụ tải video Douyin, bạn có thể thực hiện theo các bước sau:
1. Lấy liên kết video Douyin
Có hai cách chính để lấy liên kết video:
* **Cách 1: Sử dụng công cụ nhà phát triển của trình duyệt**
1. Mở Douyin và chọn một video bất kỳ.
2. Mở công cụ nhà phát triển (Developer Tools) của trình duyệt (thường là F12) và chuyển đến tab “Network”.
3. Lọc các yêu cầu mạng theo tên “video” trong phần “Fetch/XHR”.
4. Tìm kiếm URL yêu cầu có chứa video cần tải. Liên kết này thường có định dạng tương tự nhau, chỉ khác tham số cuối cùng.
5. Kiểm tra URL này bằng cách dán vào một yêu cầu HTTP trong N8N để đảm bảo nó có thể xem và tải xuống mà không cần cookie hay quyền hạn đặc biệt.
* **Cách 2: Sử dụng đối tượng `player` trong console**
1. Mở công cụ nhà phát triển và chuyển đến tab “Console”.
2. Nhập `player` và nhấn Enter để xem thông tin về đối tượng player.
3. Tru cập `player.videoList[0].playAddr[0].src` để lấy liên kết tải xuống trực tiếp của video.
—
2. Kết nối Puppeteer với trình duyệt đang mở
Dùng node puppeteer dạng Run Custom Script. Vì Douyin có thể yêu cầu đăng nhập hoặc giải captcha khi sử dụng trình duyệt ẩn danh, bạn nên kết nối Puppeteer với một trình duyệt Chrome/Chromium đang mở và đã được xác thực.
1. **Chạy Chrome/Chromium với chế độ gỡ lỗi từ xa:**
* Mở terminal Debian và chạy lệnh sau (thay thế đường dẫn profile của bạn):
google-chrome –remote-debugging-port=9222 –user-data-dir=”đường_dẫn_đến_profile_của_bạn”
(Lưu ý: trên Debian, sử dụng `google-chrome` thay vì `chrome`).
* Lệnh này sẽ mở Chrome/Chromium và hiển thị một URL `DevTools listening on ws://…`. Sao chép URL này.
Mac thì:/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome –remote-debugging-port=9222 –user-data-dir=”lấy từ Profile Path”
- Mở Chrome và gõ
chrome://versionvào thanh địa chỉ, sau đó nhấn Enter. - Tìm dòng “Profile Path” hoặc “User Data Dir” và sao chép đường dẫn này. Đây là thư mục chứa dữ liệu người dùng của trình duyệt của bạn.
- Sau khi chạy lệnh, bạn sẽ thấy một thông báo trong Terminal tương tự như DevTools listening on ws://127.0.0.1:9222/devtools/browser/<id> s . Sao chép URL ws://… này, đây là điểm cuối WebSocket mà bạn sẽ sử dụng để kết nối Puppeteer.
Khi bạn bật Chrome Remote Debugging, mặc định nó chỉ lắng nghe trên localhost (127.0.0.1), nên máy khác trong LAN không thể kết nối.
# Trên macOS, đóng Chrome hoàn toàn trước (Cmd+Q)
# Sau đó chạy từ Terminal:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
–remote-debugging-port=9222 \
–remote-debugging-address=0.0.0.0
lắng nghe trên tất cả các địa chỉ IP, bao gồm cả địa chỉ LAN.
⚠️ Lưu ý bảo mật: Việc mở cổng debug trên mạng LAN có thể gây rủi ro nếu mạng không tin cậy. Chỉ nên dùng trong môi trường phát triển nội bộ.
Lấy địa chỉ IP LAN của máy Mac: ipconfig getifaddr en0
chỉ cho phép một IP cụ thể bằng cách dùng --remote-debugging-address=192.168.1.10 (nhưng vẫn phải đảm bảo Chrome lắng nghe trên IP đó, không phải chỉ 127.0.0.1).
bạn có thể kết nối từ máy khác dùng Puppeteer như sau: const browser = await puppeteer.connect({
browserWSEndpoint: ‘ws://192.168.1.10:9222/devtools/browser/…’
});
2. **Cấu hình Puppeteer trong N8N:**
* Trong N8N, thêm một node “Run Custom Script” và chọn tùy chọn “Browser Web Socket Endpoint”.
* Dán URL `ws://…` đã sao chép ở trên vào trường này.
Viết mã Puppeteer để lấy liên kết tải xuống
Sử dụng mã Puppeteer để điều hướng đến trang video Douyin và trích xuất liên kết tải xuống:
“`javascript
const videoPageUrl = ‘LIÊN_KẾT_VIDEO_DOUYIN’; // Sẽ được thay thế bằng input từ node trước
const browser = await puppeteer.connect({ browserWSEndpoint: ‘ĐIỂM_CUỐI_WEBSOCKET_TRÌNH_DUYỆT’ }); // Thay thế bằng URL websocket đã sao chép
const page = await browser.newPage();
try {
await page.goto(videoPageUrl, { waitUntil: ‘domcontentloaded’, timeout: 30000 });
await page.waitForFunction(() =>
window.player && window.player.videoList && window.player.videoList.length > 0,
{ timeout: 20000 }
);
const videoDownloadUrl = await page.evaluate(() => {
try {
return window.player.videoList[0].playAddr[0].src;
} catch (e) {
return null;
}
});
if (!videoDownloadUrl) {
throw new Error(‘Không tìm thấy liên kết tải xuống video.’);
}
await page.close();
return [{ json: { link: videoDownloadUrl } }];
} catch (error) {
await page.close();
return [{ json: { error: error.message } }];
}
“`
* **`videoPageUrl`**: Đây là URL của trang video Douyin mà bạn muốn tải xuống.
* **`browserWSEndpoint`**: Đây là điểm cuối WebSocket của trình duyệt Chrome/Chromium đang chạy mà bạn đã sao chép ở bước 2.1.
* **`page.goto()`**: Điều hướng đến trang video Douyin và chờ cho đến khi nội dung DOM được tải hoàn toàn.
* **`page.waitForFunction()`**: Chờ cho đến khi đối tượng `window.player` và `videoList` của nó có sẵn và chứa ít nhất một video.
* **`page.evaluate()`**: Thực thi mã JavaScript trong ngữ cảnh của trang để trích xuất liên kết tải xuống từ `window.player.videoList[0].playAddr[0].src`.
* **Xử lý lỗi**: Nếu không tìm thấy liên kết hoặc có lỗi xảy ra, nó sẽ trả về lỗi.
—
Cuối cùng: Tải video bằng yêu cầu HTTP
Sau khi có được liên kết tải xuống từ Puppeteer, bạn có thể sử dụng một node HTTP Request trong N8N để tải video.
1. Kéo liên kết tải xuống từ node Puppeteer vào node HTTP Request.
2. Thực thi node HTTP Request để tải video.
—
Mở rộng: Tạo API linh hoạt (Tùy chọn)
Để tạo một API linh hoạt cho phép người dùng nhập liên kết Douyin và nhận liên kết tải xuống, bạn có thể:
1. Thêm một trigger “Webhook” vào đầu workflow của N8N.
2. Cấu hình Webhook để nhận URL video làm tham số truy vấn (ví dụ: `URL=link_douyin`).
3. Sử dụng giá trị URL từ Webhook để cung cấp cho node Puppeteer.
4. Kết nối kết quả từ node HTTP Request đến một node “Respond to Webhook” để trả về liên kết tải xuống cho người dùng.
Sử dụng Tool AI Agent
Để sử dụng công cụ AI Agent trong N8N một cách chuẩn xác và ít lỗi, bạn cần quan tâm đến các yếu tố sau:
### 1. Tiêu chuẩn của công cụ và mô hình AI
– **Cách viết prompt:** Đảm bảo bạn viết prompt để AI sử dụng công cụ một cách chuẩn xác.
– **Độ thông minh của mô hình:** Mô hình AI của bạn có đủ thông minh để hiểu và thực thi các yêu cầu hay không.
### 2. Hạn chế kiến thức của AI (AI Cut-off Knowledge)
– **Bản chất AI:** AI chỉ được đào tạo đến một thời điểm nhất định và không lưu trữ kiến thức liên tục.
– **Giải pháp:** Để AI trả lời các câu hỏi về thông tin cập nhật hoặc thay đổi liên tục (ví dụ: thời gian hiện tại, nội dung tài liệu vừa tải lên), bạn cần cung cấp cho nó các công cụ hoặc chức năng để lấy thông tin đó.
### 3. Cách thức gọi hàm với AI (Function Call)
– **Logic cơ bản:** Bạn sẽ viết các công cụ, hàm, hoặc code để lấy thông tin, sau đó đính kèm thông tin đó vào prompt để AI có thể trả lời.
– **Ví dụ:** Nếu bạn hỏi AI “Bây giờ là mấy giờ?”, AI sẽ trả lời là không có đồng hồ. Tuy nhiên, nếu bạn cung cấp thông tin thời gian vào system prompt (ví dụ: “Bây giờ là 10:20”), AI sẽ trả lời chính xác thời gian đó.
—
### 4. Hai cách tiếp cận để AI sử dụng công cụ
#### a. Cách 1: Luôn chạy công cụ và đẩy kết quả vào prompt
– **Quy trình:** Bạn sẽ luôn thực thi một công cụ nhất định (ví dụ: gọi API lấy thời gian hiện tại) và đẩy kết quả vào system prompt trước khi hỏi AI.
– **Ưu điểm:** Đảm bảo AI luôn có kiến thức đó để trả lời.
– **Hạn chế:**
– **Không linh hoạt:** Nếu bạn muốn hỏi nhiều loại câu hỏi khác nhau (thời gian, thời tiết), bạn sẽ phải chạy nhiều công cụ tương ứng, làm cho prompt trở nên lớn và tốn token.
– **Giới hạn token:** Input token có giới hạn, đặc biệt với các mô hình AI có input thấp hơn.
#### b. Cách 2: Để AI tự chọn công cụ phù hợp (MCP – Multi-tool Co-Pilot)
– **Quy trình:**
1. **Hỏi AI trước:** Bạn hỏi AI một câu hỏi (ví dụ: “Bây giờ là mấy giờ?”). AI sẽ trả lời là không biết.
2. **Sử dụng System Prompt để hướng dẫn AI:** Bạn đưa vào system prompt các hướng dẫn để AI chọn công cụ. Ví dụ: “Nếu người dùng hỏi về thời gian, trả lời 1. Nếu hỏi về thời tiết, trả lời 2”.
3. **Sử dụng Switch Node:** Dựa vào câu trả lời của AI (ví dụ: 1 hoặc 2), bạn sẽ sử dụng một switch node để điều hướng đến công cụ tương ứng (ví dụ: công cụ lấy thời gian nếu AI trả lời 1, công cụ lấy thời tiết nếu AI trả lời 2).
4. **Thực thi công cụ và đưa kết quả vào AI:** Công cụ được chọn sẽ thực thi (ví dụ: gọi API thời gian), lấy dữ liệu và sau đó dữ liệu này sẽ được đưa trở lại vào AI thông qua một system prompt để AI trả lời câu hỏi ban đầu.
– **Ưu điểm:** AI tự động chọn công cụ phù hợp dựa trên câu hỏi của người dùng, giúp prompt gọn gàng và hiệu quả hơn.
– **Lưu ý khi cấu hình công cụ:**
– **Mô tả công cụ:** Bạn cần mô tả rõ ràng công cụ đó dùng để làm gì (ví dụ: “Đây là công cụ để phản hồi thời gian khi AI trả lời 1”).
– **Xử lý lỗi:** Lỗi `status code 400` thường xảy ra khi bạn gọi công cụ mà không truyền đúng tham số. Bạn có thể khắc phục bằng cách tạo các workflow riêng cho từng công cụ (ví dụ: workflow riêng cho thời gian, workflow riêng cho thời tiết) và gọi chúng thông qua N8N Workflow Tool.
—
### 5. Các yếu tố khác ảnh hưởng đến việc chạy công cụ
– **Prompt không chuẩn:** Nếu system prompt hoặc user prompt không đủ cụ thể, AI có thể không chọn đúng công cụ.
– **Giải pháp:** Cần làm cho system message cụ thể hơn để AI biết khi nào nên sử dụng công cụ nào.
– **Mô hình AI không đủ thông minh:** Một số mô hình AI cũ hoặc nhỏ (ví dụ: Phi Olama 2.7 tỷ tham số) có thể không đủ thông minh để hiểu và kích hoạt công cụ một cách chính xác, dẫn đến việc trả lời sai hoặc không gọi công cụ.
– **Kiểm tra:** Các mô hình mới như GPT, Dipsic, Gemini được đào tạo tốt hơn để trả lời và sử dụng công cụ.
– **Tự code khi không có node:** Trong trường hợp không có node có sẵn, bạn sẽ phải tự code các HTTP request để gọi API, sau đó đưa kết quả vào prompt để AI lựa chọn và trả về kết quả tương ứng.
Tóm lại, việc sử dụng công cụ AI Agent hiệu quả đòi hỏi sự kết hợp giữa việc viết prompt chuẩn, lựa chọn mô hình AI phù hợp và cấu hình công cụ một cách chính xác.
Mẫu n8n
n8n cung cấp một tính năng hữu ích có thể tăng tốc đáng kể quá trình tạo quy trình làm việc của chúng ta: thư viện mẫu n8n .
Thư viện này là tập hợp các quy trình làm việc được xây dựng sẵn, do cộng đồng và các chuyên gia n8n tạo ra. Cho dù chúng ta đang cố gắng tự động hóa các tác vụ đơn giản hay các quy trình phức tạp hơn, rất có thể ai đó đã xây dựng một quy trình làm việc phù hợp với nhu cầu của chúng ta.
Việc nhập quy trình làm việc vào thiết lập n8n của chúng tôi đồng nghĩa với việc chúng tôi không phải lúc nào cũng phải bắt đầu lại từ đầu. Thay vào đó, chúng tôi có thể tận dụng các giải pháp sáng tạo mà những người dùng khác đã phát triển. Sau khi nhập quy trình làm việc, tất cả những gì chúng tôi cần làm là cấu hình nó bằng thông tin đăng nhập của mình và tinh chỉnh nó cho phù hợp với yêu cầu cụ thể.
Đối với bất kỳ tác vụ nào chúng ta muốn tự động hóa, từ xử lý email đến quản lý phương tiện truyền thông xã hội, rất có thể sẽ có mẫu có sẵn trong thư viện.
Ngoài ra xem video học hỏi theo //docs.n8n.io/video-courses/
Cần tìm hiểu các kiến thức CSS select
Tạo và đăng video AI lên TikTok, YouTube Shorts và Instagram với Seedance + Blotato
10.000 Tự động hóa n8n miễn phí
Sau đây là4 nguồn tài nguyên tuyệt vờivề cơ bản cung cấp cho bạncác tính năng tự động hóa được xây dựng sẵn một cách dễ dàng:
- Kho mẫu miễn phí n8n
Kho lưu trữ lớn do cộng đồng điều hành với hàng nghìn quy trình làm việc có thể cắm và chạy. - Thư viện quy trình làm việc chính thức của n8n
Bộ sưu tập chính thức của nhóm n8n từ các tính năng tự động hóa Gmail cơ bản đến các quy trình AI nâng cao. - Kho lưu trữ quy trình làm việc của Zie619
Kho báu GitHub chứa các tính năng tự động hóa độc đáo (như thu thập dữ liệu, cảnh báo, báo cáo). - Mẫu n8n tuyệt vời
Danh sách tuyển chọn các công cụ tự động hóatốt nhất trên internet.n8n - Workflow Collection 2025, nguồn //github.com/zie619/n8n-workflows?tab=readme-ov-file
- Template //n8nworkflows.xyz/categories/HR
- N8N Premium Workflow: zie619.github.io/n8n-workflows Github: //github.com/Zie619/n8n-workflows
- //github.com/gyoridavid/ai_agents_az/tree/main
Hơn10.000 quy trình làm việc sẵn sàng cho bạn tiết kiệm đượchàng giờ mỗi tuần(và đôi khi là cả một doanh nghiệp được xây dựng dựa trên tự động hóa).
Hãy thửAnotherWrapper, nó giống như mộtgói tăng cường cho n8n. Hãy coi nó như một công cụ tăng cường tự động hóa của bạn vậy.
Xây dựng một nhân viên bán hàng AI có sự tham gia của con người bằng cách sử dụng n8n chỉ trong vài phút
Việc xử lý khách hàng tiềm năng mới theo cách thủ công có thể tốn thời gian và dễ xảy ra lỗi, đặc biệt là khi phải xử lý nhiều công cụ, biểu mẫu và quy trình theo dõi. Để giải quyết vấn đề này, chúng tôi đã thiết kế một quy trình làm việc tự động, hợp lý hóa cả việc xử lý dữ liệu CRM và tương tác bán hàng bằng AI và các công cụ không cần lập trình. Trong dự án demo này, chúng tôi đã tạo ra một agency hư cấu có tên làGOALFRAME, một agency sáng tạo chuyên về nội dung video bóng đá.GOALFRAMEđóng vai trò là trường hợp sử dụng để minh họa cách tự động hóa và AI có thể phối hợp với nhau để tối ưu hóa quy trình tạo và theo dõi khách hàng tiềm năng.
Quy trình làm việc được chia thành hai phần: Tự động hóa CRM và Nhân viên bán hàng AI. Đầu tiên, khi khách hàng tiềm năng gửi biểu mẫu qua Typeform, hệ thống sẽ làm giàu dữ liệu bằng cách tìm kiếm trang web và hồ sơ LinkedIn của công ty bằng Tavily. Sau đó, dựa trên câu trả lời của khách hàng tiềm năng cho câu hỏi “Khi nào bạn dự định bắt đầu chiến dịch nội dung tiếp theo?”, AI sẽ phân loại họ thành Cold (Lạnh), Warm (Ấm) hoặc Hot (Nóng). Dữ liệu khách hàng tiềm năng đã được làm giàu và phân loại sau đó sẽ được lưu trữ trong Airtable, và thông báo Slack sẽ được gửi để cảnh báo nhóm.
Tiếp theo, Nhân viên Bán hàng AI sẽ tiếp quản. Nó tự động lấy hồ sơ đại lýcủa GOALFRAMEtừ Google Docs và tạo email theo dõi được cá nhân hóa dựa trên trạng thái của khách hàng tiềm năng. Trước khi email được gửi, email sẽ trải qua quy trình Human in the Loop (Con người trong Vòng lặp) trên Slack, nơi một thành viên trong nhóm có thể xem xét, phê duyệt hoặc yêu cầu sửa đổi. Nếu cần, Nhân viên Chỉnh sửa sẽ tinh chỉnh email dựa trên phản hồi cho đến khi đạt được giọng điệu và độ rõ ràng mong muốn. Sau khi được phê duyệt, email sẽ được gửi trực tiếp đến khách hàng tiềm năng. Sự kết hợp thông minh giữa tự động hóa và đánh giá của con người này đảm bảo không bỏ sót bất kỳ khách hàng tiềm năng nào, đồng thời cải thiện tốc độ, tính cá nhân hóa và tính nhất quán trên toàn bộ kênh bán hàng, tất cả chỉ với thao tác thủ công tối thiểu.
Nếu bạn đang xây dựng quy trình làm việc tiếp thị hoặc khám phá cách AI có thể thúc đẩy quy trình bán hàng của mình, xem bài gốc. Quy trình làm việc n8n đầy đủ và các tài nguyên
Xây dựng Chatbot RAG có khả năng lập kế hoạch, suy nghĩ và trả lời
Mặc dù có khả năng ấn tượng của Retrieval-Augmented Generation (RAG), các chatbot truyền thống dựa trên RAG vẫn gặp phải những hạn chế nghiêm trọng trong các ứng dụng thực tế. Các hệ thống RAG tiêu chuẩn thường trích xuất các khối tài liệu và cố gắng tạo ra câu trả lời dựa trên ngữ cảnh tĩnh, hạn chế. Điều này thường dẫn đến suy luận hời hợt, xử lý dữ liệu số hoặc dữ liệu bảng kém, và không thể kết nối thông tin chi tiết từ nhiều tài liệu. Tệ hơn nữa, RAG truyền thống thiếu khả năng ra quyết định động — nó xử lý mọi câu hỏi giống nhau, mà không lựa chọn đúng công cụ hoặc chiến lược dựa trên ý định của người dùng.
Hãy hình dung RAG truyền thống như một thủ thư thông minh, có thể nhanh chóng tìm sách dựa trên từ khóa — nhưng lại không thực sự hiểu câu hỏi của bạn. Ngược lại, RAG đặc biệt giống như một trợ lý đắc lực, không chỉ tập hợp đúng sách mà còn đọc chúng, lên kế hoạch trả lời, so sánh thông tin và thậm chí sử dụng các công cụ (như máy tính hoặc tìm kiếm trên web) để đưa ra câu trả lời phù hợp và chu đáo nhất.
Agentic RAG mang đến một giải pháp đầy hứa hẹn cho những hạn chế nêu trên. Bằng cách đưa việc lập kế hoạch, ghi nhớ, suy luận và lựa chọn công cụ vào quy trình làm việc, Agentic RAG trao quyền cho các hệ thống AI hoạt động giống như các tác nhân thông minh hơn — không chỉ truy xuất nội dung mà còn quyết định cách truy xuất, phân tích và phản hồi trong một quy trình chu đáo, nhiều bước.
Bài hướng dẫn bạn cách tự xây dựng Agentic RAG từ đầu bằng n8n. tải xuống mẫu quy trình
Execute Command n8n
Việc dùng “Execute Command” node trong n8n để SSH vào máy khác và gửi/nhận file — đây là một cách mạnh mẽ và linh hoạt, đặc biệt khi bạn đã quen với CLI và hệ thống Unix/Linux.
Vì Execute Command trong n8n không hỗ trợ nhập mật khẩu tương tác, bạn bắt buộc phải dùng SSH key.
Đầu tiên hãy tạo một key pair trên máy client (có thể là máy tính riêng): ssh-keygen -t rsa
Khi nhập lệnh Gen Key, bạn sẽ nhận được một số câu hỏi:
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Nhấn Enter, lưu file vào user home (trong bài viết này sẽ sử dụng tên của user là demo để làm mẫu).
Enter passphrase (empty for no passphrase):
Passphrase được sử dụng hay không thì tùy thuộc vào người dùng. Việc sử dụng passphrase mang lại một số lợi ích: tính bảo mật của key không bao giờ được hiển thị với bất kỳ ai khác, cho dù nó được mã hóa như thế nào. Nếu private key được bảo vệ bằng passphrase rơi vào tay user trái phép, họ sẽ không thể đăng nhập vào các tài khoản cho đến khi tìm ra được passphrase. Tất nhiên, nhược điểm duy nhất của passphrase là phải nhập nó mỗi khi sử dụng key pair. Vậy nên nhấn enter cho qua.
Enter same passphrase again:
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 @a
The key’s randomart image is:
+–[ RSA 2048]—-+
| .oo. |
| . o.E |
| + . o |
| . = = . |
| = S = . |
| o + = + |
| . o + o . |
| . o |
| |
+—————–+
Public key hiện nằm trong /home/demo/.ssh/id_rsa.pub. Private key (identification) hiện nằm trong /home/demo/.ssh/id_rsa.
Khi key pair đã được tạo, hãy đặt public key trên server mà chúng ta muốn sử dụng.
Sao chép public key vào file authorized_keys của máy bằng lệnh ssh-copy-id. Đảm bảo thay thế username và địa chỉ IP như mẫu bên dưới.
ssh-copy-id demo@198.51.100.0
Lưu ý: Nếu sử dụng Mac, ssh-copy-id sẽ không được cài đặt trên hệ thống. Tuy nhiên có thể cài đặt nó bằng Homebrew: brew install ssh-copy-id
Ngoài ra còn có thể dán các key bằng SSH:
cat ~/.ssh/id_rsa.pub | ssh demo@198.51.100.0 “mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys”
Cho dù chọn sử dụng lệnh nào thì các dòng sau sẽ vẫn hiển thị:
The authenticity of host ‘198.51.100.0 (198.51.100.0)’ can’t be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘198.51.100.0’ (RSA) to the list of known hosts.
user@198.51.100.0’s password:
Thông báo này đảm bảo rằng không có extra key nào được thêm vô.
Nếu ssh-copy-id không có, bạn có thể copy thủ công:copy file ~/.ssh/id_ed25519.pub rồi dán nội dung vào file ~/.ssh/authorized_keys trên Mac. Trên Mac đảm bảo thư mục ~/.ssh có quyền: chmod 700 ~/.ssh &&
chmod 600 ~/.ssh/authorized_keys
Thử SSH từ Orange Pi → Mac (trước khi dùng n8n): ssh yourname@192.168.1.101 “echo ‘Kết nối thành công!'”
Bây giờ hãy tiếp tục và đăng nhập vào user profile mà không cần phải nhập mật khẩu. Tuy nhiên, nếu đặt passphrase khi tạo SSH key, sẽ có yêu cầu nhập passphrase tại thời điểm đó (cũng như cho mọi lần đăng nhập kế tiếp). Nếu không hỏi mật khẩu và in ra dòng text thì sẵn sàng cho n8n.
Cách dùng trong n8n: “Execute Command” node
1. Gửi file .txt từ n8n → Mac
Giả sử bạn có file .txt trong binary data của n8n (sau khi tạo hoặc đọc).
Bước 1: Lưu file tạm trên Orange Pi
Dùng node “Write Binary File” để ghi file ra đĩa, VD: Path: /tmp/message.txt
Bước 2: Dùng “Execute Command” dùng scp hoặc ssh + cat
scp /tmp/message.txt yourname@192.168.1.101:/Users/yourname/Desktop/
cat /tmp/message.txt | ssh yourname@192.168.1.101 “cat > /Users/yourname/Documents/received.txt”
Lưu ý: Đường dẫn trên Mac phải đầy đủ và user có quyền ghi (tránh /root, /var, v.v.)
2. Lấy file .wav từ Mac → n8n
Giả sử file trên Mac: /Users/yourname/Records/audio.wav
scp yourname@192.168.1.101:/Users/yourname/Records/audio.wav /tmp/
Sau đó, dùng node “Read Binary File” trong n8n để đọc /tmp/audio.wav vào binary data → xử lý tiếp (gửi webhook, lưu cloud, v.v.)
Zalo Node
Zalo Node là một node không chính thức trên nền tảng n8n, giúp kết nối và tương tác với Zalo từ các workflow automation của n8n. Node này cho phép người dùng thực hiện các tác vụ như gửi tin nhắn, trả lời tự động và quản lý thông tin khách hàng qua Zalo mà không cần lập trình. Tuy mặc dù không phải node chính thức từ Zalo, nhưng nó vẫn rất hữu ích trong việc tự động hóa các quy trình chăm sóc khách hàng.
Lợi ích khi tích hợp Zalo Node với n8n:
Hiểu rõ và áp dụng đúng cách tích hợp Zalo Node vào n8n mang lại nhiều lợi ích, giúp doanh nghiệp vừa tiết kiệm thời gian vận hành vừa tối ưu chăm sóc khách hàng hiệu quả:
Tự động hóa quy trình chăm sóc khách hàng: Giúp gửi tin nhắn, thông báo hoặc trả lời câu hỏi tự động trên Zalo.
Tiết kiệm thời gian và công sức: Hạn chế việc thực hiện thủ công các tác vụ liên quan đến tương tác khách hàng qua Zalo.
Nâng cao hiệu quả giao tiếp: Giúp duy trì mối quan hệ với khách hàng một cách hiệu quả và chuyên nghiệp.
Quản lý khách hàng dễ dàng: Tích hợp Zalo giúp lưu trữ và quản lý thông tin khách hàng trực tiếp trên n8n.
Tích hợp linh hoạt với các công cụ khác: n8n hỗ trợ kết nối Zalo với nhiều nền tảng khác, giúp bạn xây dựng các workflow tự động hóa phức tạp.
Mở cài đặt và truy cập mục Community Nodes.
Trong giao diện n8n, hãy nhấn vào dấu ba chấm ở góc dưới bên trái màn hình, gần tên người dùng của bạn. Chọn Settings để vào phần cài đặt. Trong phần cài đặt, tìm và chọn mục Community nodes. Tại đây, bạn sẽ có thể cài đặt các node cộng đồng, bao gồm cả node Zalo. Trong mục Community nodes, chọn Install a community node. Nhập tên gói node Zalo vào ô npm Package Name: n8n-nodes-zalos- Lưu ý: Mặc dù node này được nhiều người sử dụng, nó không phải là node chính thức từ Zalo. Việc sử dụng node này có thể tiềm ẩn rủi ro, chẳng hạn như việc tài khoản bị khóa. Hãy chắc chắn rằng bạn đã hiểu và đồng ý với các rủi ro này trước khi cài đặt. Tích vào ô I understand the risks… và nhấn Install để tiến hành cài đặt.
Tạo và quản lý API Key trong n8n
Quay lại mục Settings, chọn n8n API. Nhấn vào Create API Key để tạo một API Key mới. Đặt tên cho API Key, tuỳ chỉnh thời gian hết hạn (nếu cần), sau đó nhấn Save. Sau khi API Key được tạo thành công, hãy lưu lại thông tin này để sử dụng trong các bước tiếp theo.
Tich hop Zalo Node vao n8n
Create a workflow và chọn Create Credential. Tìm kiếm từ khóa Zalo và chọn Zalo User Credentials API, sau đó nhấn Continue.
Để xác thực tài khoản Zalo, bạn cần tạo một Zalo Official Account và điền các thông tin sau: Access Token, App ID, Secret Key, Official Account ID
Các thông tin này có thể lấy từ Zalo Developer Portal. Sau khi điền đầy đủ và kiểm tra thành công, bạn có thể tiếp tục với bước tiếp theo.
Tạo workflow và kiểm tra chức năng node Zalo
Tạo một workflow mới trong n8n và thêm node Zalo vào workflow này.
Kiểm tra các chức năng của node Zalo, ví dụ như gửi tin nhắn, nhận dữ liệu từ Zalo, hay tự động trả lời khách hàng.
Đảm bảo rằng kết nối giữa n8n và Zalo hoạt động bình thường và các tác vụ tự động được thực hiện chính xác.
Những lưu ý quan trọng khi tích hợp Zalo Node vào n8n
Mỗi 1 tài khoản zalo chỉ dùng 1 điện thoại, 1 web. Vậy nên quét QAcode là đăng nhập trên web rôi.
Zalo là một nền tảng có yêu cầu nghiêm ngặt về bảo mật và quyền riêng tư của người dùng. Việc sử dụng node không chính thức từ cộng đồng có thể tiềm ẩn nguy cơ bị khóa tài khoản nếu không được cấu hình và sử dụng đúng cách. Hãy cẩn trọng khi thao tác với dữ liệu người dùng.
Lưu ý khi sử dụng API Key: Khi tạo API Key trong n8n, hãy chắc chắn rằng bạn đã bảo vệ đúng mức API của mình và không để lộ thông tin này ra ngoài. API Key là chìa khóa kết nối Zalo với n8n, vì vậy việc bảo mật thông tin này rất quan trọng.
Zalo cá nhân
Node dành riêng cho n8n này được thiết kế hoạt động hoàn toàn bên trong instance n8n của bạn. Không cần sử dụng API của bên thứ ba hay phụ thuộc ngoại vi nào — chỉ có sự tự động hóa quy trình thuần túy, đảm bảo dữ liệu của bạn luôn được giữ riêng tư và an toàn.
Node này mô phỏng trình duyệt để tương tác trực tiếp với Zalo Web, cho phép tự động hóa liền mạch ngay trong n8n. Đây là dự án mã nguồn mở, mở rộng cơ hội cho cộng đồng cùng đóng góp ý kiến và phát triển thêm các tính năng mới, nhằm xây dựng hệ thống tự động hóa Zalo tiên tiến, hiệu quả và an toàn hơn.
Mở trình soạn thảo n8n của bạn.
Vào Settings > Community Nodes.
Tìm kiếm “n8n-nodes-zalo-tools”.
Nhấp vào Install.
Tải lại trình soạn thảo.
Cài đặt thủ công
Bạn cũng có thể cài đặt node này theo cách thủ công:
cd YOUR_N8N_INSTALLATION_DIRECTORY
npm install n8n-nodes-zalo-tools
Tính năng
Zalo Login By QR Node cho phép đăng nhập vào Zalo thông qua mã QR.
Zalo Group Node quản lý các hoạt động nhóm. Operations: createGroup: Tạo nhóm mới getGroupInfo: Lấy thông tin nhóm addGroupDeputy: Thêm phó nhóm addUserToGroup: Thêm thành viên changeGroupAvatar: Đổi avatar nhóm changeGroupName: Đổi tên nhóm getGroupMembers: Lấy danh sách thành viên getAllGroups: Lấy tất cả nhóm removeUserFromGroup: Xóa thành viên
Zalo User Node quản lý người dùng và bạn bè. Operations: acceptFriendRequest: Chấp nhận lời mời kết bạn sendFriendRequest: Gửi lời mời kết bạn blockUser: Chặn người dùng unblockUser: Bỏ chặn người dùng changeAccountAvatar: Đổi ảnh đại diện changeAccountSetting: Thay đổi cài đặt tài khoản getUserInfo: Lấy thông tin người dùng getAllFriends: Lấy danh sách bạn bè findUser: Tìm kiếm người dùng qua số điện thoại
Zalo Send Message Node gửi tin nhắn tới người dùng hoặc nhóm. Features: Gửi tin nhắn văn bản
Zalo Message Trigger Node lắng nghe và xử lý các sự kiện tin nhắn. Events: Tin nhắn mới Tin nhắn nhóm Thay đổi trạng thái tin nhắn.
//www.npmjs.com/package/n8n-nodes-zalo-nnt
//github.com/nguyenngothuong/zalo-node
//github.com/hiennguyen270995/n8n-nodes-zalo-ca-nhan
Zalo bot
Mỗi tài khoản tạo được 3 bot. Chạy domain n8n qua cloudfare thì zalo bot không gửi tin về webhook do nó chặn.
Từ văn bản đến lời nói: Xây dựng chatbot AI hỗ trợ giọng nói với n8n
Bằng cách kết hợp sức mạnh của Mô hình Ngôn ngữ Lớn (LLM) với công nghệ Chuyển văn bản thành giọng nói (TTS) tiên tiến, chúng tôi có thể tạo ra một trợ lý giọng nói đa năng tương tự như các nền tảng như ChatGPT Voice, nhưng được tùy chỉnh theo nhu cầu cụ thể của chúng tôi. Chúng tôi sẽ xây dựng toàn bộ giải pháp này bằng n8n, một nền tảng tự động hóa quy trình làm việc nguồn mở giúp mọi người đều có thể kết nối các API mạnh mẽ, bất kể kinh nghiệm lập trình.
Giải pháp của chúng tôi tích hợp ba công nghệ chính:
n8n : Một công cụ tự động hóa quy trình làm việc mạnh mẽ đóng vai trò là xương sống của dự án của chúng tôi, kết nối tất cả các thành phần thông qua giao diện trực quan
OpenAI : Cung cấp trí thông minh đàm thoại thông qua các mô hình ngôn ngữ của họ
ElevenLabs : Cung cấp khả năng tổng hợp giọng nói chân thực, tự nhiên cho phản hồi của chatbot
Cho dù bạn đang tìm cách nâng cao các ứng dụng dịch vụ khách hàng, tạo nội dung dễ tiếp cận hay phát triển các công cụ giáo dục, sự tích hợp này sẽ mở ra những khả năng thú vị. Đến cuối hướng dẫn này, bạn sẽ có một nguyên mẫu chức năng minh họa cách các công nghệ này có thể hoạt động liền mạch cùng nhau.
Biến 2 ảnh sản phẩm thành ảnh chụp AI hoàn chỉnh (Nano Banana)
cách người bán làm giả ảnh chuyên nghiệp – từng bước một

Bài viết liên quan: