Hoàn thành bài "Lesson 5: Gộp và kết hợp các luồng dữ liệu" trước để mở khoá bài này.Đến bài trước

Giới thiệu

Đây là bài học kết thúc khóa học. Bạn đã học cách sử dụng nút Code, nút Set, nút IF, nút Merge và cách định hình dữ liệu bằng các biểu thức. Giờ đây bạn sẽ kết nối tất cả các thành phần đó lại với nhau thành một quy trình làm việc duy nhất có thực sự làm được điều gì đó: kéo dữ liệu từ hai nguồn, làm sạch và lọc nó, biến đổi nó thành một hình dạng đích, ghép các luồng và tạo ra một đầu ra cuối cùng sẵn sàng cho việc sử dụng ở phía sau.

Kịch bản được sử dụng xuyên suốt bài học này mang tính thực tế và đại diện cho những gì bạn gặp phải trong sản xuất: bạn có một danh sách đơn hàng từ một điểm cuối HTTP và danh sách khách hàng từ một điểm cuối khác. Mục tiêu là tạo ra một báo cáo đơn hàng được làm giàu, chỉ chứa các đơn hàng đã thanh toán, gắn tên khách hàng và email, và định dạng ngày tháng để hiển thị.

đồ thị quy trình end-to-end cho thấy 6 nút lần lượt: Yêu cầu HTTP (Đơn hàng) và Yêu cầu HTTP (Khách hàng) cùng chạy song song, đổ vào các nút Lọc/Chuyển đổi riêng biệt, sau đó một nút Merge, rồi một nút Code để định hình cuối cùng, sau đó là một nút đầu ra cuối cùng

Thu thập dữ liệu từ hai nguồn song song

Bắt đầu với hai nút Yêu cầu HTTP chạy song song. Cả hai được kích hoạt bởi cùng một Nút Trigger thủ công hoặc Nút Trigger Lịch. Đầu tiên lấy đơn hàng, thứ hai lấy khách hàng. Trong n8n, bạn chia tách luồng bằng cách kết nối một trigger với cả hai nút HTTP Request.

Đối với điểm cuối đơn hàng, hãy thiết lập URL và đảm bảo định dạng phản hồi ở dạng JSON. Phản hồi thô thường trông như thế này:

json
[
{"id": 101, "customer_id": 5, "status": "paid", "amount": 149.99, "created_at": "2024-03-15T10:22:00Z"},
{"id": 102, "customer_id": 8, "status": "pending", "amount": 89.00, "created_at": "2024-03-16T08:05:00Z"}
]

Đối với điểm cuối khách hàng:

json
[
{"id": 5, "name": "Alice Martin", "email": "alice@example.com"},
{"id": 8, "name": "Bob Chen", "email": "bob@example.com"}
]

Cả hai nút đều cho ra các mảng các mục. n8n tự động tách các mảng thành các mục riêng lẻ, vì vậy mỗi đơn hàng và mỗi khách hàng sẽ trở thành một mục riêng đang flow qua phần còn lại của quy trình làm việc.

Lọc và Chuyển đổi Mỗi Dòng dữ liệu

Trước khi ghép lại, hãy làm sạch mỗi stream độc lập. Điều này giúp logic được cô lập và dễ gỡ lỗi hơn.

Với các đơn hàng, kết nối một nút IF sau yêu cầu HTTP của đơn hàng. Đặt điều kiện để kiểm tra trường trạng thái bằng chuỗi "paid". Chỉ nhánh đúng được tiếp tục. Việc này loại bỏ các đơn hàng đang chờ xử lý, bị hủy hoặc được hoàn tiền trước khi chúng đến giai đoạn ghép.

Tiếp theo, kết nối một nút Code sau đầu ra IF đúng để biến đổi lại mục đơn hàng và định dạng ngày:

javascript
const items = $input.all();
return items.map(item => {
const d = new Date(item.json.created_at);
const formatted = d.toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' });
return {
json: {
order_id: item.json.id,
customer_id: item.json.customer_id,
amount: item.json.amount,
order_date: formatted
}
};
});

Với khách hàng, kết nối một nút Set sau yêu cầu HTTP của khách hàng. Sử dụng nó để chỉ giữ lại đúng các trường cần thiết và đổi tên chúng cho rõ ràng. Thiết lập customer_key bằng biểu thức tham chiếu trường id, giữ lại tên và email. Việc này loại bỏ nhiễu và làm cho khóa ghép nối trở nên rõ ràng.

sơ đồ so sánh hai nhánh biến đổi song song: Nhánh Đơn hàng (lọc IF → biến đổi bằng Code) và Nhánh Khách hàng (dọn dẹp bằng nút Set), cả hai đều đưa vào nút Merge

Kết hợp hai luồng dữ liệu

Kết nối hai luồng đã biến đổi vào một nút Merge. Sử dụng chế độ Merge by Key. Đặt khóa cho input 1 (orders) là customer_id và khóa cho input 2 (customers) là customer_key. n8n sẽ ghép mỗi đơn hàng với hồ sơ khách hàng tương ứng và xuất ra một mục ghép có các trường từ cả hai bên.

Mục ghép ở thời điểm này chứa order_id, customer_id, amount, order_date, customer_key, name và email ở mức top-level của item.json. Có thể có các trường dư thừa như customer_key mà bạn đã thêm chỉ để ghép nối. Loại bỏ chúng ở bước tiếp theo.

Định hình và Đầu ra cuối cùng

Thêm một nút Code nữa sau nút Merge. Đây là bước biến đổi cuối cùng nơi bạn tạo ra hợp đồng đầu ra chính xác mà bạn hứa với người tiêu dùng phía sau:

javascript
const items = $input.all();
return items.map(item => {
return {
json: {
order_id: item.json.order_id,
order_date: item.json.order_date,
amount_usd: item.json.amount,
customer_name: item.json.name,
customer_email: item.json.email
}
};
});

Nút này loại bỏ các khóa ghép nối nội bộ, đổi tên amount thành amount_usd cho rõ ràng, và tạo ra một mảng các bản ghi đơn hàng được làm giàu sạch. Kết nối nó với bất kỳ nút cuối cùng nào bạn cần: một HTTP Request để POST kết quả đến webhook, một nút Google Sheets để thêm hàng, hoặc chỉ giữ nó như nút kết thúc trong quá trình phát triển và kiểm tra đầu ra trong trình chỉnh sửa n8n.

Tóm tắt

Bạn đã xây dựng một workflow bao phủ toàn bộ vòng đời biến đổi: nhập dữ liệu song song từ hai nguồn HTTP, lọc độc lập với IF, tái cấu trúc theo luồng với các nút Code và Set, ghép nối dựa trên khóa và bước làm sạch cuối cùng. Mỗi nút có một trách nhiệm rõ ràng duy nhất, điều này khiến workflow dễ đọc và dễ gỡ lỗi. Khi có sự cố trong môi trường sản xuất, bạn có thể ghim dữ liệu tại bất kỳ nút nào và chạy lại từ điểm đó mà không động tới các nút ở phía nguồn. Cấu trúc ghép nhịp này, chứ không phải bất kỳ nút đơn lẻ nào, là kỹ năng cốt lõi mà khóa học này đang hướng tới.

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
Bản dịch đoạn 1