Cấu hình chi tiết các Node trong n8n Workflow

Trang này cung cấp cấu hình chi tiết cho từng node trong workflow. Bạn có thể sao chép các cấu hình này để áp dụng vào workflow của mình.

1. Schedule Trigger

Node Schedule Trigger là điểm bắt đầu của workflow, nó sẽ kích hoạt workflow vào 9h sáng hàng ngày.

JSON
{
  "parameters": {
    "triggerTimes": {
      "item": [
        {
          "mode": "everyDay",
          "hour": 9,
          "minute": 0
        }
      ]
    }
  }
}

2. Google Sheets - Lấy dữ liệu

Node Google Sheets sẽ đọc dữ liệu từ bảng tính đã chỉ định. Nó sẽ lấy tất cả các hàng từ phạm vi A:C.

JSON
{
  "parameters": {
    "operation": "read",
    "sheetName": "Trang tính1",
    "range": "A:C",
    "options": {
      "headerRow": true
    },
    "documentId": "11IZ1G-2ekIePE-hVcPXKu4uBnUczhLtdi3KwW7Lfc_o"
  }
}

3. Function - Chọn hàng ngẫu nhiên

Node Function sẽ thực thi mã JavaScript để chọn một hàng ngẫu nhiên từ dữ liệu Google Sheets.

JavaScript
// Lấy dữ liệu từ Google Sheets
const rows = items[0].json.rows;

// Bỏ qua hàng tiêu đề
if (rows.length <= 1) {
  return [];
}

// Chọn một hàng ngẫu nhiên (trừ hàng tiêu đề)
const randomIndex = Math.floor(Math.random() * (rows.length - 1)) + 1;
const selectedRow = rows[randomIndex];

// Trả về dữ liệu của hàng được chọn
return [
  {
    json: {
      STT: selectedRow.STT,
      noidung: selectedRow["Nội dung bài đăng"],
      folderName: selectedRow.folderName,
      rowIndex: randomIndex + 1 // +1 vì Google Sheets bắt đầu từ 1, không phải 0
    }
  }
];

4. Google Drive - Tìm ảnh

Node Google Drive Search sẽ tìm tất cả các file ảnh trong thư mục có tên tương ứng với giá trị folderName.

JSON
{
  "parameters": {
    "operation": "search",
    "query": "mimeType contains 'image/' and 'image/{{$node[\"Function\"].json[\"folderName\"]}}' in parents",
    "options": {
      "fields": [
        "id",
        "name",
        "webViewLink",
        "mimeType"
      ],
      "orderBy": {
        "fields": [
          {
            "field": "name",
            "direction": "asc"
          }
        ]
      }
    }
  }
}

5. Split In Batches - Xử lý nhiều ảnh

Node Split In Batches sẽ chia mảng các file ảnh thành các batch nhỏ, mỗi batch chứa một file.

JSON
{
  "parameters": {
    "batchSize": 1,
    "options": {
      "reset": true
    }
  }
}

6. Google Drive - Tải ảnh

Node Google Drive Download sẽ tải file ảnh từ Google Drive dựa trên ID file.

JSON
{
  "parameters": {
    "operation": "download",
    "fileId": "={{$json[\"id\"]}}",
    "options": {}
  }
}

7. SplitInBatches - Xử lý nhiều Facebook Pages

Node SplitInBatches thứ hai này sẽ chia workflow thành nhiều nhánh, mỗi nhánh xử lý một Facebook Page.

JSON
{
  "parameters": {
    "batchSize": 1,
    "options": {
      "reset": false
    },
    "batches": {
      "batch": [
        {
          "json": {
            "pageId": "YOUR_PAGE_ID_1",
            "pageName": "Page 1"
          }
        },
        {
          "json": {
            "pageId": "YOUR_PAGE_ID_2",
            "pageName": "Page 2"
          }
        },
        {
          "json": {
            "pageId": "YOUR_PAGE_ID_3",
            "pageName": "Page 3"
          }
        }
      ]
    }
  }
}

Lưu ý: Thay thế YOUR_PAGE_ID_1, YOUR_PAGE_ID_2, YOUR_PAGE_ID_3 bằng ID thực tế của các Facebook Pages của bạn.

8. Facebook Graph API - Đăng bài với ảnh

Node Facebook Graph API sẽ đăng bài với ảnh lên Facebook Page.

JSON
{
  "parameters": {
    "graphApiVersion": "v18.0",
    "resource": "={{$json[\"pageId\"]}}/photos",
    "httpMethod": "POST",
    "additionalFields": {
      "message": "={{$node[\"Function\"].json[\"noidung\"]}}",
      "published": true
    },
    "options": {
      "bodyContentType": "multipart-form-data",
      "enableBatching": false
    },
    "dataPropertyName": "source",
    "binaryPropertyName": "data"
  }
}

9. Wait - Chờ đăng bài hoàn tất

Node Wait sẽ tạm dừng workflow trong 2 giây để đảm bảo bài đăng đã được Facebook xử lý hoàn tất.

JSON
{
  "parameters": {
    "amount": 2,
    "unit": "seconds"
  }
}

10. Facebook Graph API - Lấy thông tin bài đăng

Node Facebook Graph API thứ hai này sẽ lấy thông tin chi tiết của bài đăng đã tạo, bao gồm permalink URL.

JSON
{
  "parameters": {
    "graphApiVersion": "v18.0",
    "resource": "={{$json[\"id\"]}}",
    "httpMethod": "GET",
    "additionalFields": {
      "fields": "id,permalink_url"
    }
  }
}

11. Function - Chuẩn bị dữ liệu cập nhật

Node Function thứ hai này sẽ chuẩn bị dữ liệu để cập nhật vào Google Sheets.

JavaScript
// Lấy thông tin từ các node trước đó
const postInfo = items[0].json;
const selectedRow = $node["Function"].json;

// Chuẩn bị dữ liệu cập nhật
return [
  {
    json: {
      rowNumber: selectedRow.rowIndex,
      values: {
        "D": "Đã đăng",
        "E": postInfo.permalink_url
      },
      pageInfo: {
        pageId: $json.pageId,
        pageName: $json.pageName
      }
    }
  }
];

12. Google Sheets - Cập nhật trạng thái

Node Google Sheets Update sẽ cập nhật trạng thái và link bài đăng vào Google Sheets.

JSON
{
  "parameters": {
    "operation": "update",
    "documentId": "11IZ1G-2ekIePE-hVcPXKu4uBnUczhLtdi3KwW7Lfc_o",
    "sheetName": "Trang tính1",
    "range": "={{$json[\"rowNumber\"]}}:{{$json[\"rowNumber\"]}}",
    "options": {
      "valueInputMode": "RAW"
    },
    "valueInputOption": "RAW",
    "dataMode": "autoMap"
  }
}

Xử lý lỗi và trường hợp đặc biệt

Xử lý khi không tìm thấy ảnh

Thêm một node IF sau node Google Drive - Tìm ảnh để kiểm tra xem có tìm thấy ảnh không:

JSON
{
  "parameters": {
    "conditions": {
      "boolean": [
        {
          "value1": "={{$json.files.length}}",
          "operation": "larger",
          "value2": 0
        }
      ]
    }
  }
}

Nếu không tìm thấy ảnh, thêm node Function để cập nhật Google Sheets với trạng thái lỗi:

JavaScript
// Lấy thông tin từ node Function trước đó
const selectedRow = $node["Function"].json;

// Chuẩn bị dữ liệu cập nhật với trạng thái lỗi
return [
  {
    json: {
      rowNumber: selectedRow.rowIndex,
      values: {
        "D": "Lỗi",
        "E": "Không tìm thấy ảnh trong thư mục " + selectedRow.folderName
      }
    }
  }
];

Xử lý lỗi khi đăng bài

Thêm node Error Trigger để bắt lỗi từ node Facebook Graph API - Đăng bài với ảnh:

JSON
{
  "parameters": {
    "errorDescription": "Error when posting to Facebook",
    "continueOnFail": true
  }
}

Sau đó kết nối với một node Function để cập nhật Google Sheets với trạng thái lỗi:

JavaScript
// Lấy thông tin lỗi
const error = $input.all()[0].json.error;
const selectedRow = $node["Function"].json;

// Chuẩn bị dữ liệu cập nhật với trạng thái lỗi
return [
  {
    json: {
      rowNumber: selectedRow.rowIndex,
      values: {
        "D": "Lỗi",
        "E": "Lỗi khi đăng bài: " + error.message
      }
    }
  }
];

Hướng dẫn kết nối các Node

  1. Schedule TriggerGoogle Sheets - Lấy dữ liệu
  2. Google Sheets - Lấy dữ liệuFunction - Chọn hàng ngẫu nhiên
  3. Function - Chọn hàng ngẫu nhiênGoogle Drive - Tìm ảnh
  4. Google Drive - Tìm ảnhSplit In Batches - Xử lý nhiều ảnh
  5. Split In Batches - Xử lý nhiều ảnhGoogle Drive - Tải ảnh
  6. Google Drive - Tải ảnhSplitInBatches - Xử lý nhiều Facebook Pages
  7. SplitInBatches - Xử lý nhiều Facebook PagesFacebook Graph API - Đăng bài với ảnh
  8. Facebook Graph API - Đăng bài với ảnhWait - Chờ đăng bài hoàn tất
  9. Wait - Chờ đăng bài hoàn tấtFacebook Graph API - Lấy thông tin bài đăng
  10. Facebook Graph API - Lấy thông tin bài đăngFunction - Chuẩn bị dữ liệu cập nhật
  11. Function - Chuẩn bị dữ liệu cập nhậtGoogle Sheets - Cập nhật trạng thái
Tiếp theo: So sánh với Make