Hoàn thành bài "Lesson 4: Thêm Logic, Điều kiện và Xử lý Lỗi" trước để mở khoá bài này.Đến bài trước

Giới thiệu

Trong n8n, hầu hết các workflow có thể được xây dựng bằng các nút gốc — mỗi nút là một lớp bọc quanh một dịch vụ cụ thể. Nhưng tự động hóa kinh doanh thực sự hiếm khi giới hạn trong các ranh giới gọn gàng. Bạn sẽ gặp những trường hợp dịch vụ bạn cần không có nút dành riêng, hoặc nút của nó thiếu một điểm cuối cụ thể, hoặc bạn cần biến đổi dữ liệu theo cách mà các nút tích hợp sẵn khiến bạn đau đầu. Đó là lúc các nút HTTP Request và nút Code đảm nhận. Bài học này tập trung vào hai công cụ đó: cách gọi bất kỳ API bên ngoài nào, và cách nhảy vào JavaScript hoặc Python tùy chỉnh khi các nút trực quan của n8n không đủ.

Gọi API bên ngoài bằng HTTP Request

Nút HTTP Request là trình kết nối phổ quát của bạn. Nó nói REST ngay từ đầu và hoạt động với bất kỳ dịch vụ nào có một điểm cuối HTTP — thậm chí những dịch vụ không có nút n8n tương ứng.

Yêu cầu GET điển hình đến một API công khai trông như thế nào trong cấu hình nút của n8n:

bash
curl -X GET "https://api.example.com/v1/customers/42" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json"

Trong giao diện người dùng của nút HTTP Request, bạn thiết lập Phương thức là GET, dán URL và thêm hai tiêu đề ở mục Headers. Nút trả về thân phản hồi dưới dạng đối tượng JSON mà các nút ở phía sau có thể tham chiếu bằng các biểu thức n8n như `$json.fieldName`.

Đối với các yêu cầu POST gửi dữ liệu, hãy đổi Phương thức, đặt Send Body thành JSON và cung cấp thân gửi. Ví dụ, tạo một bản ghi trong một CRM bên ngoài:

json
{
"name": "Acme Corp",
"email": "contact@acme.com",
"source": "n8n-workflow"
}
đồ thị cho thấy luồng dữ liệu từ một nút kích hoạt thông qua một nút HTTP Request tới một API bên ngoài và quay lại các nút n8n ở phía sau

Các tùy chọn xác thực là rất quan trọng. Nhiều API doanh nghiệp sử dụng token Bearer, OAuth2, hoặc khóa API được truyền ở tham số truy vấn. n8n hỗ trợ tất cả những loại credential này, vì vậy bạn không bao giờ mã hóa bí mật trong nút — tham chiếu chúng qua phần Credentials. Đối với các dịch vụ dùng cơ chế xác thực tùy chỉnh, thiết lập Authentication thành Generic Credential Type và cung cấp các tên tiêu đề và giá trị tham chiếu đến thông tin đăng nhập đã lưu.

Khi nào nên dùng Code Nodes

Các nút tích hợp sẵn bao phủ 80% phổ biến — vòng lặp qua SplitInBatches, ánh xạ dữ liệu qua các nút Set, logic điều kiện qua các nút IF. 20% còn lại là nơi Code nodes thể hiện ưu thế: phân tích chuỗi phức tạp, tính toán thống kê, gọi đến thư viện helper, toán học ngày tháng mà nút Date của n8n xử lý một cách lúng túng, hoặc bất kỳ trường hợp nào mà chuỗi năm nút trực quan thành năm nút dễ xây dựng và đọc hơn bằng mười dòng mã.

Nút Code có hai chế độ. Chế độ JavaScript chạy bản địa bên trong runtime Node.js của n8n và cho phép bạn truy cập đầy đủ các gói npm đã được cài sẵn. Chế độ Python sử dụng Pyodide hoặc một worker Python được lưu trữ tuỳ thuộc vào cấu hình n8n của bạn.

Một trường hợp sử dụng phổ biến: làm sạch dữ liệu rối trong một webhook trước khi lưu trữ. Giả sử một mẫu gửi tên quốc gia với chữ hoa/thấp lẫn nhau và có khoảng trắng ở cuối dòng, và bạn cần mã ISO cho tra cứu bên ngoài:

javascript
const items = $input.all();
const countryMap = {
"united states": "US",
"united kingdom": "GB",
"vietnam": "VN",
"germany": "DE"
};
return items.map(item => {
const raw = (item.json.country || "").toLowerCase().trim();
const code = countryMap[raw] || "UNKNOWN";
return {
json: {
...item.json,
country_code: code
}
};
});

Phép tương đương trong chế độ Python sẽ có vẻ gần như giống hệt nhau, thay đổi cú pháp truy cập từ điển và danh sách comprehension. Nút này có thể xử lý cả hai ngôn ngữ — hãy chọn ngôn ngữ mà đội ngũ của bạn đọc hiểu dễ hơn.

luồng quyết định/ sơ đồ quyết định cho biết khi nào dùng một native node so với một HTTP Request node hay một Code node

Kết hợp HTTP Request và Code trong một Workflow duy nhất

Lợi ích thực sự xuất hiện khi bạn kết hợp chúng với nhau. Mẫu phổ biến: một Code node biến đổi dữ liệu đầu vào, một HTTP Request node gọi một dịch vụ bên ngoài để làm giàu dữ liệu, một Code node thứ hai tiền xử lý kết quả, và kết quả sẽ chảy đến mục tiêu cuối cùng của bạn.

Luồng ví dụ — bổ sung hóa đơn:

javascript
// Code node 1: normalize vendor names
const items = $input.all();
const cleaned = items.map(i => ({
json: {
invoice_id: i.json.id,
vendor: i.json.vendor_name.toLowerCase().replace(/[^a-z0-9]/g, "-")
}
}));
return cleaned;

Sau đó một HTTP Request node gọi API kế toán của bạn tại `GET /vendors/{vendor}` để lấy điều khoản thanh toán. Cuối cùng một Code node hợp nhất kết quả:

javascript
const items = $input.all();
return items.map(i => ({
json: {
invoice_id: i.json.invoice_id,
vendor: i.json.vendor,
payment_terms: i.json.payment_terms || "NET30",
flagged: !i.json.payment_terms
}
}));

Nút thứ ba này cũng đánh dấu các hóa đơn nơi điều khoản thanh toán trả về rỗng — một chút logic kinh doanh nhỏ mà nếu làm bằng trực quan sẽ cần thêm các nút IF.

Những sai lầm phổ biến

Một số rủi ro cần chú ý trước khi bạn xây dựng. Thứ nhất, không bao giờ đặt thông tin xác thực trực tiếp trong thân node hoặc URL — hãy luôn sử dụng hệ thống credential của n8n, nếu không bí mật sẽ nằm trong các export workflow và kiểm soát phiên bản. Thứ hai, node HTTP Request mặc định ở chế độ "JSON response" — nếu API của bạn trả về XML hoặc văn bản thuần, hãy chuyển đổi Response Format hoặc bạn sẽ gặp lỗi khi phân tích. Thứ ba, các lập trình Code xử lý từng mẻ một; nếu bạn cần trạng thái giữa các lần thực thi (điểm đếm, bộ đệm), đó là tác vụ của cơ sở dữ liệu hoặc dữ liệu tĩnh của n8n, không phải một Code node. Thứ tư, hãy cẩn thận với `await` bên trong JavaScript của Code node — nó được hỗ trợ nhưng cần được bọc trong một hàm async, điều này khiến nhiều người dùng lần đầu bị nhầm lẫn.

Tóm tắt

Các node HTTP Request cho n8n một cách thức phổ quát để giao tiếp với bất kỳ API HTTP nào. Các node Code lấp đầy các khoảng trống khi logic trực quan trở nên khó quản lý hoặc không thể. Các mẫu ở trên — gọi API bên ngoài, biến đổi dữ liệu và kết hợp cả hai — bao phủ xấp xỉ chín trên mười tích hợp tùy chỉnh bạn sẽ xây dựng trong sản xuất. Thành thạo hai loại node này và bạn sẽ không còn bị giới hạn bởi những gì các node dành riêng cho dịch vụ đó hỗ trợ.

Luyện tập sau buổi học

Bài kiểm tra cuối bài

Ôn lại kiến thức, thử sức và nhận góp ý cho bài làm.

0/1
Đã trả lời · 0/1