Hướng dẫn từng bước cho người mới bắt đầu dùng n8n

Nội dung

    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.

    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.

    //medium.com/data-science-collective/mastering-n8n-from-scratch-a-step-by-step-guide-for-beginners-its-easier-than-you-think-2d7ca5d47277

    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ụ 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.

    video

    ### 🚀 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:

    [Manager] DefaultLimitMEMLOCK=infinity

    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):

    1. Vào phần Settings.
    2. Chọn Community Node.
    3. Chọn Cài đặt (Install).
    4. Đ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:
      1. load: Chờ cho đến khi toàn bộ nội dung (HTML, CSS, JavaScript) tải xong.
      2. domcontentloaded: Chờ khi cấu trúc DOM (HTML) được tải xong (có thể bỏ qua JavaScript tải sau).
      3. 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.
      4. 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://version và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

    video

    Để 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ài liệu n8n tiếng việt

    Mẹo viếtHTML & CSSnhanh

    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:

    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.

    Để lại một bình luận

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Chat with us
    Hello! How can I help you today?