Hoàn thành bài "Lesson 2: Xây dựng Workflow Đầu tiên của Bạn với Trigger và Action" trước để mở khoá bài này.Đến bài trước

Kết nối ứng dụng trong n8n — Bức tranh tổng quan

Trong n8n, mỗi workflow bắt đầu bằng một trigger (một nút khởi động) và tiếp tục với các nút hành động giao tiếp với các dịch vụ khác. Để làm cho hai ứng dụng nói chuyện với nhau, bạn cần ba yếu tố: một thông tin xác thực (để n8n được phép truy cập ứng dụng), loại nút phù hợp cho dịch vụ đó, và hiểu cách dữ liệu được hình thành khi di chuyển giữa các nút.

n8n truyền dữ liệu giữa các nút dưới dạng các đối tượng JSON. Mỗi nút nhận một mảng items, thực hiện một việc với chúng, và truyền một mảng mới đi tiếp. Cấu trúc nhất quán này cho phép bạn ghép nối gần như bất kỳ hai ứng dụng nào với nhau mà không cần viết mã dán ghép.

sơ đồ luồng cho thấy nút trigger truyền các mục JSON sang nút dịch vụ, sau đó sang nút biến đổi, rồi sang nút dịch vụ khác

Thông tin xác thực và Lựa chọn nút phù hợp

Trước khi n8n có thể đọc hoặc ghi vào ứng dụng bên ngoài, bạn phải thêm thông tin xác thực. Vào thanh bên trái, chọn Credentials, tạo một cái mới và chọn loại ứng dụng (ví dụ: Google Sheets OAuth2, Slack API token, hoặc Airtable PAT). Sau khi lưu, mọi nút cùng loại trong các workflow của bạn có thể tái sử dụng nó.

Mỗi ứng dụng trong n8n thường có vài nút. Đối với Google Sheets bạn có một nút "Google Sheets" duy nhất với nhiều thao tác (đọc hàng, thêm hàng, cập nhật hàng). Đối với CRM hoặc công cụ marketing bạn thường thấy một nút cho mỗi nguồn dữ liệu. Lựa chọn nút phù hợp chủ yếu dựa trên việc ghép nối thao tác bạn cần: đọc vs. ghi vs. cập nhật.

javascript
// Example: a credential reference shown in an n8n node (conceptual)
{
"node": "Google Sheets",
"operation": "readRows",
"credential": "Google Sheets account 1",
"sheetId": "1AbC...",
"range": "A1:D100"
}

Ánh xạ trường giữa các dịch vụ

Các ứng dụng khác nhau đặt tên cho khái niệm giống nhau differently. Một khách hàng trong Stripe được gọi là `customer.email`; trong HubSpot đó là `properties.email`; trong một Google Sheet có thể là cột `Email`. Khi bạn kéo kết quả của một nút vào trường input của nút khác, n8n sẽ build một **biểu thức** trích xuất giá trị từ JSON của mục trước đó.

Bạn có thể viết các biểu thức thủ công bằng cú pháp biểu thức n8n, cú pháp này đóng gói các tham chiếu trong `{{ }}`. Ví dụ, để lấy một email từ một node trước có tên "Stripe Trigger":

javascript
{{ $json.customer.email }}

Để lấy một giá trị từ một node được đặt tên cụ thể ở phía upstream (hữu ích khi node trước là Set hoặc Filter):

javascript
{{ $node["HTTP Request"].json["body"]["title"] }}

Hệ thống tham chiếu này là cốt lõi của việc ánh xạ các trường giữa các dịch vụ.

Chuyển đổi Dữ liệu với các Node Set và Code

Đôi khi dữ liệu bạn nhận được không khớp với những gì ứng dụng tiếp theo kỳ vọng. Bạn có thể cần đổi tên khóa, ghép nối các trường, loại bỏ các giá trị rỗng, hoặc tính toán một trường mới. Node **Set** xử lý các trường hợp đơn giản — đổi tên, chỉ giữ một số khóa nhất định, hoặc thêm các trường tĩnh mới hoặc dựa trên biểu thức.

javascript
// Set node "Edit Fields" configuration (conceptual)
{
"values": {
"string": [
{ "name": "fullName", "value": "{{ $json.firstName }} {{ $json.lastName }}" },
{ "name": "email", "value": "{{ $json.email }}" }
]
},
"options": { "keepOnlySet": true }
}

Khi bạn cần vòng lặp, điều kiện, hoặc bất kỳ logic thực sự nào, hãy chèn một node **Code**. Nó chạy JavaScript hoặc Python trên mỗi mục đầu vào và trả về một mảng mới.

javascript
// Code node (JavaScript mode) — keep only paying customers
const items = $input.all();
return items.map(item => {
if (item.json.plan !== 'free') {
return { json: { id: item.json.id, email: item.json.email } };
}
return null;
}).filter(Boolean);

Node Code là lối thoát khi các biểu thức và node Set không đủ.

Ví dụ thực tế: Stripe Thanh toán sang Thông báo Slack

Giả sử bạn muốn đăng một tin nhắn Slack mỗi khi một khách hàng trả tiền mới xuất hiện trong Stripe. Luồng có bốn node: Stripe Trigger (khi có khách hàng mới) → Set (định dạng lại dữ liệu) → Code (lọc các gói trả tiền) → Slack (đăng tin nhắn). Node Set xây dựng một chuỗi tin nhắn thân thiện, Node Code loại bỏ khách hàng miễn phí, và node Slack gửi một khối định dạng đến một kênh.

javascript
// Slack node "message" field, built from the Set node output
{{ $json.greeting }} — new paying customer!
Email: {{ $json.email }}
Plan: {{ $json.plan }}
biểu đồ luồng tuyến tính cho thấy Stripe Trigger đến Set đến Code đến Slack với các mũi tên được gắn nhãn dữ liệu được truyền

Những sai lầm phổ biến và các sửa nhanh

Lỗi phổ biến nhất là tham chiếu một trường không tồn tại trên mục đầu vào — n8n sẽ im lặng trả về `undefined`. Luôn mở bảng đầu ra của node trước đó và kiểm tra hình dạng JSON trước khi kết nối các biểu thức. Một cạm bẫy khác là quên rằng dữ liệu của n8n là một **mảng các mục**, không phải một đối tượng đơn, vì vậy `json‘thamchie^ˊutớimụcđa^ˋutie^nvaˋ‘json` tham chiếu tới mục đầu tiên và `input.all()` trả về toàn bộ mảng. Cuối cùng, hãy cảnh giác với giới hạn tốc độ: nhiều ứng dụng (Slack, Google Sheets, HubSpot) giới hạn bùng nổ yêu cầu, vì vậy hãy thêm một node **Wait** hoặc chia nhỏ từng lô khi đồng bộ hóa các tập dữ liệu lớn.

Tóm lược

Kết nối các ứng dụng trong n8n là ba kỹ năng: thêm thông tin xác thực và node đúng, ánh xạ trường bằng các biểu thức, và định hình lại dữ liệu với các nút Set hoặc Code khi các hình dạng không khớp. Thành thạo chúng, gần như mọi hai ứng dụng doanh nghiệp đều có thể trao đổi dữ liệu mà không cần mã tùy chỉnh.

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ài 3: Kết nối ứng dụng và làm việc với dữ liệu