{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "c98f4dee-831a-4de6-b2df-d44cf320a7f4",
      "name": "info",
      "type": "n8n-nodes-base.set",
      "position": [
        -1472,
        48
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5ca53588-a5fd-47fe-a9db-5e8b42e88a19",
              "name": "Token",
              "type": "string",
              "value": "<token>"
            },
            {
              "id": "0fc539bd-e223-4f1a-86b2-15e4b2a34df6",
              "name": "Id Page",
              "type": "string",
              "value": "<id page>"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5dee332a-6319-419c-9fe2-2ed3f4b7639b",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1696,
        48
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 30
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f0a8f95d-88f8-41b6-8a38-2ae55a4ce3ec",
      "name": "Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1456,
        384
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Get Row Sheet').first().json['File ID'] }}"
        },
        "options": {
          "binaryPropertyName": "data"
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 3,
      "alwaysOutputData": false
    },
    {
      "id": "4424daa9-14d9-47d5-b78b-2b2fda283540",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1360,
        656
      ],
      "parameters": {
        "unit": "minutes"
      },
      "typeVersion": 1.1
    },
    {
      "id": "e8db21a1-9a82-4c4b-a50e-af406a12bb8d",
      "name": "Step 1: Initialize an Upload Session",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1664,
        384
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/{{ $('info').first().json['Id Page'] }}/video_reels\n",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "upload_phase",
              "value": "start"
            },
            {
              "name": "access_token",
              "value": "={{ $('info').first().json.Token }}"
            }
          ]
        }
      },
      "executeOnce": true,
      "typeVersion": 4.2
    },
    {
      "id": "62cef400-c3fb-439e-a0ab-3c8f77e4c158",
      "name": "Step 2: Upload the Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1040,
        384
      ],
      "parameters": {
        "url": "={{ $('Step 1: Initialize an Upload Session').first().json.body.upload_url }}",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "offset",
              "value": "0"
            },
            {
              "name": "file_size",
              "value": "={{ $('Get the size file').first().json.actualSize }}"
            },
            {
              "name": "=Authorization",
              "value": "=OAuth {{ $('info').first().json.Token }}"
            }
          ]
        },
        "inputDataFieldName": "=data"
      },
      "typeVersion": 4.2
    },
    {
      "id": "547c52ee-7883-432d-8485-2a7c1f3b92c9",
      "name": "Step 3: Publish the Reel",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1664,
        752
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/{{ $('info').first().json['Id Page'] }}/video_reels",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "video_id",
              "value": "={{ $('Step 1: Initialize an Upload Session').first().json.body.video_id }}"
            },
            {
              "name": "upload_phase",
              "value": "finish"
            },
            {
              "name": "access_token",
              "value": "={{ $('info').first().json.Token }}"
            },
            {
              "name": "video_state",
              "value": "PUBLISHED"
            },
            {
              "name": "description",
              "value": "={{ $('Get Row Sheet').first().json['Caption'] }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "91e05176-b3a8-44de-a819-32a0575e288a",
      "name": "Get Row Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1248,
        48
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit#gid=0",
          "cachedResultName": "Trang t\u00ednh1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit?usp=drivesdk",
          "cachedResultName": "Publish a reel on a Facebook Page"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.5
    },
    {
      "id": "ea72e8eb-6685-4e91-93cd-a9bdf276ad95",
      "name": "Get the size file",
      "type": "n8n-nodes-base.code",
      "position": [
        -1248,
        384
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const size = item.binary.data.fileSize;\n  const contentLength = Buffer.from(item.binary.data.data, 'base64').length;\n\n  item.json = {\n    declaredSize: size,\n    actualSize: contentLength\n  };\n\n  return item;\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bfb4edf0-3c25-4e88-9bf6-16657f977d59",
      "name": "Update status",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1360,
        832
      ],
      "parameters": {
        "columns": {
          "value": {
            "Link post": "x",
            "row_number": "={{ $('Get Row Sheet').first().json.row_number }}"
          },
          "schema": [
            {
              "id": "File ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "File ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "File name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Caption",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link Share",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Link Share",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link post",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Link post",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit#gid=0",
          "cachedResultName": "Trang t\u00ednh1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit?usp=drivesdk",
          "cachedResultName": "Publish a reel on a Facebook Page"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "ac97c446-241f-4306-bdb8-5d6768fcffa5",
      "name": "Create comment post",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -1040,
        656
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v23.0/115432036514099_{{ $('Step 1: Initialize an Upload Session').first().json.body.video_id }}/comments",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "access_token",
              "value": "={{ $('info').first().json.Token }}"
            },
            {
              "name": "message",
              "value": "=Mua h\u00e0ng t\u1ea1i Shopee: {{ $('Get Row Sheet').item.json['Link Aff 1'] }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d6e2986d-25da-47aa-b73e-6766b0ac6ba1",
      "name": "Search files and folders",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1424,
        -288
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "list",
            "value": "16tm-jSUaz4B4Xk8Dc0h-jxxKVydzwHKJ",
            "cachedResultUrl": "https://drive.google.com/drive/folders/16tm-jSUaz4B4Xk8Dc0h-jxxKVydzwHKJ",
            "cachedResultName": "n8n creator"
          }
        },
        "options": {
          "fields": [
            "id",
            "name"
          ]
        },
        "resource": "fileFolder",
        "returnAll": true,
        "queryString": "mimeType = 'video/mp4'",
        "searchMethod": "query"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "74566e2f-e8b3-408b-8b7b-b4f6aa5907b4",
      "name": "Schedule Trigger1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1712,
        -288
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "162ef463-3032-4744-bfea-60a02b441dc9",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1072,
        -288
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $json.name }}",
            "File ID": "={{ $json.id }}",
            "Link Share": "=https://drive.google.com/uc?id={{ $json.id }}&export=download"
          },
          "schema": [
            {
              "id": "Stories",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Stories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "File ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link Share",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Link Share",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "File ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/YOUR_AWS_SECRET_KEY_HERE-EZ3OE-Uc3OWFbDohYI/edit#gid=0",
          "cachedResultName": "Trang t\u00ednh1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1RnE5O06l7W6TLCLKkwEH5Oyl-EZ3OE-Uc3OWFbDohYI",
          "cachedResultUrl": "https://docs.google.com/YOUR_AWS_SECRET_KEY_HERE-EZ3OE-Uc3OWFbDohYI/edit?usp=drivesdk",
          "cachedResultName": "Video stories facebook"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "33b6589f-a47e-45e1-a914-2796db631b35",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2400,
        -336
      ],
      "parameters": {
        "color": 3,
        "width": 1536,
        "height": 272,
        "content": "## Automated Google Drive Video List Update to Google Sheet\n\nThis workflow is designed to **periodically search for new MP4 video files** \n\nin a specific Google Drive folder and **update the file details** \n\n(Name, File ID, Share Link) into a Google Sheet.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e715160f-c6be-4daf-a27b-addcfe315b63",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -1040,
        48
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "960b3395-7df1-4cdd-ac7a-2a738c812cc9",
              "operator": {
                "type": "number",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json[\"File ID\"] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9b3751d2-558e-46f7-991a-474279e09b50",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2400,
        16
      ],
      "parameters": {
        "color": 4,
        "width": 1536,
        "height": 992,
        "content": "## Publish a Reel on a Facebook Page\n\nThis advanced workflow is designed to\n\n **automatically publish a Reel on a Facebook Page** by following the platform's \n\nmulti-step uploading process, based on data pulled from a Google Sheet.\n\n#### 1. Google Sheets (required)\n\nYou can also duplicate this ready-to-use template:\n\ud83d\udc49 [Google Sheet example](https://docs.google.com/spreadsheets/d/1JMT2BpWxfcG-d_XEWRppdSr_ZkG0XvtiaGaB8Lzdl78/edit?usp=sharing)\n\n#### 2. Google Drive\n\nThe uploaded video must:\n\n* Be in **.mp4 format**\n* Be stored inside a **shared folder** (accessible to your connected Google account in n8n)\n\n#### 3. Facebook Page & Token\n\nYou\u2019ll need:\n\n* Your **Page ID**\n* A valid **Page Access Token** with permissions to manage and publish Reels\n\nFor detailed instructions on obtaining the Page ID and access token, see:\n\ud83d\udc49 [n8n workflow example \u2013 Publish a Reel on a Facebook Page](https://n8n.io/workflows/10038)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d54a3372-22ce-4802-80eb-3616fc0d91c2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2992,
        -336
      ],
      "parameters": {
        "width": 544,
        "height": 1344,
        "content": "# \ud83d\ude80 **About the Creator**: \n## This workflow is crafted by [**\u0110\u1ed7 Th\u00e0nh Nguy\u00ean**](https://hub.dothanhnguyen.com), \n### an automation architect and creator behind [**hub.dothanhnguyen.com**](https://hub.dothanhnguyen.com) \u2014 a space dedicated to smart workflows, content automation, and no-code productivity systems.\n\n## \ud83d\udca1 Passionate about connecting ideas with execution, Nguy\u00ean builds practical automations that bridge **Airtable, Telegram, n8n, and AI tools** into seamless ecosystems.\n\n# \ud83e\udde9 Deploy your own n8n instance via [**Tino.vn VPS**](https://tino.vn/vps-n8n?affid=388) \u2014 around **$65/year**, use code **VPSN8N** for up to **39% off** *(affiliate link)*.\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Step 1: Initialize an Upload Session",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Row Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Create comment post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "info": {
      "main": [
        [
          {
            "node": "Get Row Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive": {
      "main": [
        [
          {
            "node": "Get the size file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Row Sheet": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get the size file": {
      "main": [
        [
          {
            "node": "Step 2: Upload the Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger1": {
      "main": [
        [
          {
            "node": "Search files and folders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search files and folders": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 2: Upload the Video": {
      "main": [
        [
          {
            "node": "Step 3: Publish the Reel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 3: Publish the Reel": {
      "main": [
        [
          {
            "node": "Update status",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 1: Initialize an Upload Session": {
      "main": [
        [
          {
            "node": "Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}