8
n8n ํ•œ๊ตญ์–ดamn8n.com

๐Ÿ’ฅ Veo 3.1 ๋ฐ Blotato๋ฅผ ์‚ฌ์šฉํ•œ AI ๋™์˜์ƒ ์ œ์ž‘ ๋ฐ ๋‹ค์ค‘ ํ”Œ๋žซํผ ๊ฒŒ์‹œ ์ž๋™ํ™” - ๋™์˜์ƒ

๊ณ ๊ธ‰

์ด๊ฒƒ์€Content Creation, Multimodal AI๋ถ„์•ผ์˜์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ๋กœ, 25๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.์ฃผ๋กœ Set, Code, Merge, GoogleDrive, HttpRequest ๋“ฑ์˜ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ. GPT-4, Veo 3.1 ๋ฐ Blotato๋ฅผ ์‚ฌ์šฉํ•œ AI ๋น„๋””์˜ค ์ œ์ž‘ ๋ฐ ๋‹ค์ค‘ ํ”Œ๋žซํผ ๊ฒŒ์‹œ ์ž๋™ํ™”

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ
  • โ€ขGoogle Drive API ์ธ์ฆ ์ •๋ณด
  • โ€ข๋Œ€์ƒ API์˜ ์ธ์ฆ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ
  • โ€ขGoogle Sheets API ์ธ์ฆ ์ •๋ณด
  • โ€ขOpenAI API Key
์›Œํฌํ”Œ๋กœ์šฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉฐ, ํ™•๋Œ€/์ถ•์†Œ ๋ฐ ์ด๋™์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค
์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด๋ณด๋‚ด๊ธฐ
๋‹ค์Œ JSON ๊ตฌ์„ฑ์„ ๋ณต์‚ฌํ•˜์—ฌ n8n์— ๊ฐ€์ ธ์˜ค๋ฉด ์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
{
  "id": "Zwz315okMu0UwtRQ",
  "meta": {
    "instanceId": "de822f81f3a2367cef7d9549771a77783236bc9596481be2ae65c05fbcc4b4fd",
    "templateCredsSetupCompleted": true
  },
  "name": "๐Ÿ’ฅ Automate AI Video Creation & Multi-Platform Publishing with Veo 3.1 & Blotato - vide",
  "tags": [],
  "nodes": [
    {
      "id": "f614b82e-a053-403d-afb5-b6c9cf9d6fd6",
      "name": "์›Œํฌํ”Œ๋กœ์šฐ ์„ค์ •",
      "type": "n8n-nodes-base.set",
      "position": [
        896,
        2000
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "openai_api_key",
              "type": "string",
              "value": "YOUR_OPENAI_API_KEY"
            },
            {
              "id": "id-2",
              "name": "min_idea_length",
              "type": "number",
              "value": 5
            },
            {
              "id": "id-3",
              "name": "required_photos",
              "type": "number",
              "value": 3
            },
            {
              "id": "id-5",
              "name": "fal_api_key",
              "type": "string",
              "value": "key YOUR_FAL_API_KEY"
            },
            {
              "id": "id-6",
              "name": "google_drive_folder_id",
              "type": "string",
              "value": "YOUR_GOOGLE_DRIVE_FOLDER_ID"
            },
            {
              "id": "id-7",
              "name": "google_sheet_id",
              "type": "string",
              "value": "YOUR_GOOGLE_SHEETS_ID"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "19a1188d-dbbd-48e5-a3ef-6da21410c3ec",
      "name": "GPT ์‘๋‹ต ํŒŒ์‹ฑ",
      "type": "n8n-nodes-base.code",
      "position": [
        1376,
        2000
      ],
      "parameters": {
        "jsCode": "// Parse OpenAI-style responses into { prompt, caption, hashtags[], hashtags_string }\nreturn $input.all().map(item => {\n  const data = item.json || {};\n  \n  // Try to locate \"content\" in the common places\n  let content =\n    data?.choices?.[0]?.message?.content ??\n    data?.message?.content ??\n    data?.content ??\n    null;\n\n  let prompt = \"\";\n  let caption = \"\";\n  let hashtagsArr = [];\n\n  // If content is an object (your current input case)\n  if (content && typeof content === \"object\") {\n    prompt = content.prompt ?? \"\";\n    caption = content.caption ?? \"\";\n    if (Array.isArray(content.hashtags)) {\n      hashtagsArr = content.hashtags;\n    } else if (typeof content.hashtags === \"string\") {\n      // Support comma/space separated string\n      hashtagsArr = content.hashtags.split(/[,\\s]+/).filter(Boolean);\n    }\n  }\n  // If content is a string (some models return JSON as string)\n  else if (typeof content === \"string\" && content.trim()) {\n    try {\n      const parsed = JSON.parse(content);\n      prompt = parsed.prompt ?? \"\";\n      caption = parsed.caption ?? \"\";\n      if (Array.isArray(parsed.hashtags)) {\n        hashtagsArr = parsed.hashtags;\n      } else if (typeof parsed.hashtags === \"string\") {\n        hashtagsArr = parsed.hashtags.split(/[,\\s]+/).filter(Boolean);\n      }\n    } catch {\n      // Not a JSON string โ€” leave fields empty\n      prompt = \"\";\n      caption = \"\";\n      hashtagsArr = [];\n    }\n  }\n\n  // Normalize hashtags: ensure leading '#', dedupe, no empties\n  const norm = Array.from(\n    new Set(\n      (hashtagsArr || [])\n        .map(h => (h ?? \"\").toString().trim())\n        .filter(Boolean)\n        .map(h => (h.startsWith(\"#\") ? h : `#${h}`))\n    )\n  );\n  const hashtags_string = norm.join(\" \");\n\n  return {\n    json: {\n      prompt,\n      caption,\n      hashtags: norm,\n      hashtags_string\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "b9dfa37c-082f-431d-9494-aa620892b134",
      "name": "Veo์šฉ ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™”",
      "type": "n8n-nodes-base.set",
      "position": [
        672,
        2224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "veo_prompt",
              "type": "string",
              "value": "={{ $json.prompt }} consistent character throughout, photorealistic quality, professional cinematography, 8 seconds duration, 9:16 aspect ratio, 24fps"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "f73ea354-b40b-4dac-9ecc-687b315a4a84",
      "name": "GPT-4 API ํ˜ธ์ถœ",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1072,
        2000
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "id",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are a viral video content creator"
            },
            {
              "content": "=Create viral video content for {{ $json.niche }} about {{ $json.idea }}. Return JSON with: prompt (150-200 word cinematic Veo 3.1 description), caption (50-100 word social media text with emojis), hashtags (array of 8-10 tags)"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "QmtwfFk8iBkuCXOX",
          "name": "n8n free OpenAI API credits"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "44c68f8d-0a12-4f9b-83fa-ca3b939bb223",
      "name": "๋น„๋””์˜ค ๋‹ค์šด๋กœ๋“œ",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        672,
        2464
      ],
      "parameters": {
        "url": "={{ $json.video_url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b8a019e2-af8d-4818-ad6d-86a31462e2a1",
      "name": "Google Drive ์—…๋กœ๋“œ",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        896,
        2464
      ],
      "parameters": {
        "name": "={{ 'AI_Video_' + $json.user_id + '_' + $json.timestamp + '.mp4' }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.google_drive_folder_id }}"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "odf7JAwyqVFVZBhQ",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "563e682a-708e-4268-953b-0cc2df993632",
      "name": "Google Sheets ์ถ”๊ฐ€",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1136,
        2464
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.google_sheet_id }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "YlIXFU6zUDsqwmRG",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2e1a8319-95b3-43c7-b279-94bfd3b4afaf",
      "name": "Google Sheets ํŠธ๋ฆฌ๊ฑฐ",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        464,
        2000
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyX",
              "unit": "minutes",
              "value": 30
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10yrKcdX92Yxauixzl58RDN6yNKfxAk0zX5avPy0uqAE/edit#gid=0",
          "cachedResultName": "Video_Requests"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "10yrKcdX92Yxauixzl58RDN6yNKfxAk0zX5avPy0uqAE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10yrKcdX92Yxauixzl58RDN6yNKfxAk0zX5avPy0uqAE/edit?usp=drivesdk",
          "cachedResultName": "Video_Requests"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "id": "76v1LGA3Gdhk2uFH",
          "name": "Google Sheets Trigger account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "76a152e7-6aa1-4859-94bf-4470fe79c51d",
      "name": "์‹œํŠธ ์ž…๋ ฅ ํŒŒ์‹ฑ",
      "type": "n8n-nodes-base.code",
      "position": [
        672,
        2000
      ],
      "parameters": {
        "jsCode": "// Parse Google Sheets Input (headers) and Validate for Veo 3.1 workflow\nconst items = $input.all();\nconst results = [];\n\n// Helper to read and trim a field safely\nfunction getField(data, key) {\n  const v = (data[key] ?? data[key?.toUpperCase?.()] ?? \"\").toString();\n  return v.trim();\n}\n\nfor (const item of items) {\n  const data = item.json || {};\n\n  // Read by header names\n  const id_video  = getField(data, \"id_video\");\n  const niche     = getField(data, \"niche\");\n  const idea      = getField(data, \"idea\");\n  const url_1     = getField(data, \"url_1\");\n  const url_2     = getField(data, \"url_2\");\n  const url_3     = getField(data, \"url_3\");\n  const url_final = getField(data, \"url_final\");   // peut รชtre vide au dรฉpart\n  const status    = getField(data, \"status\");      // ex: pending|processing|completed|failed\n  const row_number = data.row ?? data._row ?? \"\";\n\n  // Validation\n  const errors = [];\n\n  // niche & idea\n  if (!niche || niche.length <= 2) {\n    errors.push(\"niche must be longer than 2 characters\");\n  }\n  if (!idea || idea.length <= 5) {\n    errors.push(\"idea must be longer than 5 characters\");\n  }\n\n  // URLs images requises\n  if (!url_1 || !url_1.startsWith(\"http\")) {\n    errors.push(\"url_1 is missing or invalid - must start with http\");\n  }\n  if (!url_2 || !url_2.startsWith(\"http\")) {\n    errors.push(\"url_2 is missing or invalid - must start with http\");\n  }\n  if (!url_3 || !url_3.startsWith(\"http\")) {\n    errors.push(\"url_3 is missing or invalid - must start with http\");\n  }\n\n  // url_final si prรฉsent\n  if (url_final && !url_final.startsWith(\"http\")) {\n    errors.push(\"url_final is invalid - must start with http if provided\");\n  }\n\n  // status optionnel : normalisation (facultatif)\n  const allowedStatus = new Set([\"\", \"pending\", \"processing\", \"completed\", \"failed\", \"draft\"]);\n  if (!allowedStatus.has(status.toLowerCase?.() ?? \"\")) {\n    errors.push(`status '${status}' is not recognized (use: pending|processing|completed|failed|draft)`);\n  }\n\n  // Build output item\n  const image_urls = [url_1, url_2, url_3];\n\n  const out = {\n    json: {\n      id_video,\n      niche,\n      idea,\n      image_urls,\n      url_final: url_final || \"\",\n      status: (status || \"pending\").toLowerCase(),\n      row_number,\n      timestamp: new Date().toISOString(),\n    },\n  };\n\n  // Valid flag + errors\n  if (errors.length) {\n    out.json.valid = false;\n    out.json.validation_errors = errors;\n  } else {\n    out.json.valid = true;\n  }\n\n  results.push(out);\n}\n\nreturn results;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "65a7f4ed-10d7-44e0-8997-631991fc0bf3",
      "name": "Veo ์ƒ์„ฑ1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1136,
        2224
      ],
      "parameters": {
        "url": "https://fal.run/fal-ai/veo3.1/reference-to-video",
        "method": "POST",
        "options": {
          "timeout": 600000,
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "jsonBody": "={{ JSON.stringify($json.veo_request_body) }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ $('Workflow Configuration').item.json.fal_api_key }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a403778d-de47-4132-9e4a-4982dcd1f06e",
      "name": "Veo ์š”์ฒญ ๋ณธ๋ฌธ ์ค€๋น„",
      "type": "n8n-nodes-base.code",
      "position": [
        896,
        2224
      ],
      "parameters": {
        "jsCode": "const prompt = $input.item.json.veo_prompt || $input.item.json.prompt;\nlet imageUrls = $('Parse Sheet Input').item.json.image_urls;\n\nfunction convertGoogleDriveUrl(url) {\n  if (!url) return url;\n  if (url.includes('drive.google.com/file/d/')) {\n    const match = url.match(/\\/d\\/([a-zA-Z0-9_-]+)/);\n    if (match && match[1]) {\n      return `https://drive.google.com/uc?export=download&id=${match[1]}`;\n    }\n  }\n  return url;\n}\n\nif (!prompt || prompt.length < 10) {\n  throw new Error('Prompt required');\n}\n\nif (!Array.isArray(imageUrls) || imageUrls.length !== 3) {\n  throw new Error('Need 3 image URLs');\n}\n\nconst directImageUrls = imageUrls.map(url => convertGoogleDriveUrl(url));\n\ndirectImageUrls.forEach((url, index) => {\n  if (!url || !url.startsWith('http')) {\n    throw new Error('Invalid image URL at position ' + (index + 1));\n  }\n});\n\nreturn {\n  json: {\n    veo_request_body: {\n      prompt: prompt,\n      image_urls: directImageUrls,\n      duration: 8,\n      aspect_ratio: \"9:16\"\n    },\n    ...($input.item.json)\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "f65730da-04f6-4e63-9a38-b9b3354a3b02",
      "name": "๋น„๋””์˜ค ๋ฐ์ดํ„ฐ ์ถ”์ถœ",
      "type": "n8n-nodes-base.code",
      "position": [
        1376,
        2224
      ],
      "parameters": {
        "jsCode": "// Extract video data from Veo Generation response\nconst items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n  const data = item.json || {};\n  \n  // Extract video data from current node\n  const video_url = data.video?.url || '';\n  const video_content_type = data.video?.content_type || '';\n  const video_file_size = data.video?.file_size || 0;\n  const video_file_name = data.video?.file_name || '';\n  \n  // Preserve data from previous nodes\n  const niche = $('Parse Sheet Input').item.json.niche || '';\n  const idea = $('Parse Sheet Input').item.json.idea || '';\n  const caption = $('Parse GPT Response').item.json.caption || '';\n  const hashtags_string = $('Parse GPT Response').item.json.hashtags_string || '';\n  const veo_prompt = $('Optimize Prompt for Veo').item.json.veo_prompt || '';\n  const id_video = $('Parse Sheet Input').item.json.id_video || '';\n  const row_number = $('Parse Sheet Input').item.json.row_number || '';\n  \n  results.push({\n    json: {\n      video_url,\n      video_content_type,\n      video_file_size,\n      video_file_name,\n      generation_completed_at: new Date().toISOString(),\n      niche,\n      idea,\n      caption,\n      hashtags_string,\n      veo_prompt,\n      id_video,\n      row_number\n    }\n  });\n}\n\nreturn results;"
      },
      "typeVersion": 2
    },
    {
      "id": "3b65094d-10e0-42a2-af60-ce4110d81f35",
      "name": "5๋‹จ๊ณ„ - ๊ฒŒ์‹œ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1536,
        1376
      ],
      "parameters": {
        "color": 5,
        "width": 796,
        "height": 1316,
        "content": "# ๐Ÿ“ค STEP 5: PUBLISHING & TRACKING\n\n### Install the Blotato [Blotato](https://blotato.com/?ref=firas) Node in n8n (Community Nodes)\n1. In n8n, open **Settings โ†’ Community Nodes**.  \n2. Click **Install**, then add: `@blotato/n8n-nodes-blotato`.  \n3. Log in to **Blotato**.  \n4. Go to **Settings โ†’ API Keys**.  \n5. In n8n โ†’ **Credentials โ†’ New**.  \n6. Choose **Blotato API** \n(provided by the community node you installed).  \n\nโœ… **Activate Workflow:**\n- Toggle workflow to **Active** state\n- Ensure trigger is enabled\n\nโœ… **Monitor Executions:**\n- Check execution history regularly\n- Review error logs if failures occur\n"
      },
      "typeVersion": 1
    },
    {
      "id": "98ea7ae3-a917-42bf-9872-c9a212281224",
      "name": "BLOTATO์— ๋น„๋””์˜ค ์—…๋กœ๋“œ",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1376,
        2464
      ],
      "parameters": {
        "mediaUrl": "={{ $json.url_final }}",
        "resource": "media"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "950a3e4f-52d5-4124-8c70-bc1b0da6cc00",
      "name": "Youtube",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1856,
        2464
      ],
      "parameters": {
        "options": {},
        "platform": "youtube",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "8047",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/8047",
          "cachedResultName": "DR FIRASS (Dr. Firas)"
        },
        "postContentText": "={{ $('Save to Google Sheets').item.json.CAPTION }}",
        "postContentMediaUrls": "={{ $json.url }}",
        "postCreateYoutubeOptionTitle": "={{ $('Save to Google Sheets').item.json.IDEA }}",
        "postCreateYoutubeOptionPrivacyStatus": "private",
        "postCreateYoutubeOptionShouldNotifySubscribers": false
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "62cf18fb-818d-40a8-be61-b08aecdebdec",
      "name": "Tiktok",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1632,
        2000
      ],
      "parameters": {
        "options": {},
        "platform": "tiktok",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "9332",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/9332",
          "cachedResultName": "docteur.firas"
        },
        "postContentText": "={{ $('Save to Google Sheets').item.json.CAPTION }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f250b454-e081-49b6-abf8-9ebe04cd152f",
      "name": "Linkedin",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1840,
        2000
      ],
      "parameters": {
        "options": {},
        "platform": "linkedin",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1446",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1446",
          "cachedResultName": "Samuel Amalric"
        },
        "postContentText": "={{ $('Save to Google Sheets').item.json.CAPTION }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "6075fdc3-f2ae-43b8-9429-3f138f6a506c",
      "name": "Facebook",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1632,
        2224
      ],
      "parameters": {
        "options": {},
        "platform": "facebook",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1759",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759",
          "cachedResultName": "Firass Ben"
        },
        "facebookPageId": {
          "__rl": true,
          "mode": "list",
          "value": "101603614680195",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759/subaccounts/101603614680195",
          "cachedResultName": "Dr. Firas"
        },
        "postContentText": "={{ $('Save to Google Sheets').item.json.CAPTION }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "fb35a6e6-8d5b-44f8-894c-3cd64cf43009",
      "name": "Instagram",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1840,
        2224
      ],
      "parameters": {
        "options": {},
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1687",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1687",
          "cachedResultName": "acces.a.vie"
        },
        "postContentText": "={{ $('Save to Google Sheets').item.json.CAPTION }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "4177dca6-53a5-4b32-9796-b526302ecc17",
      "name": "Twitter (X)",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1632,
        2464
      ],
      "parameters": {
        "options": {},
        "platform": "twitter",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1289",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1289",
          "cachedResultName": "Docteur_Firas"
        },
        "postContentText": "={{ $('Save to Google Sheets').item.json.CAPTION }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "6d972b56-f5eb-423d-9215-21ce753564a3",
      "name": "๋ณ‘ํ•ฉ1",
      "type": "n8n-nodes-base.merge",
      "position": [
        2128,
        2160
      ],
      "parameters": {
        "mode": "chooseBranch",
        "numberInputs": 6
      },
      "typeVersion": 3.2
    },
    {
      "id": "21eedebf-5b84-4ee6-ac5d-9bdadaba1211",
      "name": "Google Sheets ์ถ”๊ฐ€1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2128,
        2464
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "Published",
            "id_video": "={{ $('Google Sheets Trigger').first().json.id_video }}"
          },
          "schema": [
            {
              "id": "id_video",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id_video",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "niche",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "niche",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "idea",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "idea",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "url_1",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "url_1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "url_2",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "url_2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "url_3",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "url_3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "url_final",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "url_final",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id_video"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/10yrKcdX92Yxauixzl58RDN6yNKfxAk0zX5avPy0uqAE/edit#gid=0",
          "cachedResultName": "Video_Requests"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=10yrKcdX92Yxauixzl58RDN6yNKfxAk0zX5avPy0uqAE"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "YlIXFU6zUDsqwmRG",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "a6cd7ba1-36a7-4807-9b47-1112da74a6ac",
      "name": "1๋‹จ๊ณ„ - ํ•„์ˆ˜ ์กฐ๊ฑด",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        1376
      ],
      "parameters": {
        "color": 5,
        "width": 598,
        "height": 1316,
        "content": "# ๐ŸŽฌ AI VIDEO GENERATOR - VEO 3.1\n\n**Workflow Steps:**\n1. Monitor Google Sheets for new video requests\n2. Generate content with GPT-4\n3. Create video with Veo 3.1\n4. Upload to Google Drive\n5. Publish to social media via Blotato\n# ๐Ÿ“‹ STEP 1: PREREQUISITES\n\n1. **OpenAI (GPT-4)**\n   - Sign up: [platform.openai.com](https://platform.openai.com)\n   - Get API key: [platform.openai.com/api-keys](https://platform.openai.com/api-keys)\n   - Estimated cost: ~$0.01-0.05 per video\n\n2. **fal.ai (Veo 3.1)**\n   - Sign up: [fal.ai](https://fal.ai)\n   - Get API key: [fal.ai/dashboard/keys](https://fal.ai/dashboard/keys)\n   - Estimated cost: ~$0.50-2.00 per video\n\n3. **Google Account**\n   - Google Sheets (trigger & tracking)\n   - Google Drive (video storage)\n   - Free tier available\n\n4. **Blotato (Social Media Publishing)**\n   - Sign up: [blotato.com](https://blotato.com)\n   - Get API key from Settings โ†’ API Keys\n   - Multi-platform publishing support\n\n# ๐Ÿ“Š STEP 2: GOOGLE SHEETS\n\n### Create Video_Requests Sheet\n1. Create a new Google Sheet named **Video_Requests**\n2. Add the following columns (A through H):\n   - **A: id_video** - Unique video ID (auto-generated or sequential)\n   - **B: niche** - Content niche or category (e.g. Tech, Fashion, Fitness)\n   - **C: idea** - Short video idea or concept (min 5 characters)\n   - **D: url_1** - First reference image (scene, product, or creator)\n   - **E: url_2** - Second reference image\n   - **F: url_3** - Third reference image\n   - **G: url_final** - Final generated video URL (auto-filled by n8n)\n   - **H: status** - Processing status (pending / processing / completed / failed)\n\n\n### Image URL Requirements\n- All image URLs must start with `http://` or `https://`\n- Google Drive URLs will be automatically converted to direct download links\n- Minimum 3 images required per video request\n\n### Google Drive Setup\n1. Create a folder in Google Drive for video storage\n2. Copy the folder ID from the URL\n3. Update the `google_drive_folder_id` in Workflow Configuration node"
      },
      "typeVersion": 1
    },
    {
      "id": "d844cb16-6387-4745-8aaa-c5aa1b073c99",
      "name": "3๋‹จ๊ณ„ - API ํ‚ค ์„ค์ •",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        1376
      ],
      "parameters": {
        "color": 5,
        "width": 550,
        "height": 584,
        "content": "# ๐Ÿ”‘ STEP 3: API KEYS CONFIGURATION\n\n\n## โš ๏ธ Important Warnings\n\n**Timeout:** Veo video generation can take 5-10 minutes. HTTP request timeout is set to 10 minutes (600,000ms).\n\n**Estimated Costs Per Video:**\n- GPT-4 API call: ~$0.01-0.05\n- Fal.ai Veo 3.1 generation: ~$0.50-1.00\n- Total per video: ~$0.51-1.05\n\n**Rate Limits:** Be mindful of API rate limits for all services."
      },
      "typeVersion": 1
    },
    {
      "id": "12c2de0c-cfc0-4e9d-8508-eebb22c9b094",
      "name": "4๋‹จ๊ณ„ - ์›Œํฌํ”Œ๋กœ์šฐ ํ™œ์„ฑํ™”",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        1376
      ],
      "parameters": {
        "color": 6,
        "width": 550,
        "height": 582,
        "content": "# ๐Ÿš€ STEP 4: WORKFLOW ACTIVATION\n\n## Pre-Activation Checklist\n\nโœ… **Verify All Credentials:**\n- OpenAI API key configured\n- Fal.ai API key set\n- Google Sheets OAuth connected\n- Google Drive OAuth connected\n- Blotato API key added (if publishing)\n\nโœ… **Test Workflow:**\n1. Add a test row in your Google Sheets:\n   - id_video: TEST_001\n   - niche: Health\n   - idea: Benefits of morning exercise\n   - url_1, url_2, url_3: Valid image URLs\n   - status: pending\n2. Wait for trigger to fire (30 min polling)\n3. Monitor execution in n8n dashboard\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "3bc03c0c-d6bb-4851-b83b-9d6c223d02bb",
  "connections": {
    "6d972b56-f5eb-423d-9215-21ce753564a3": {
      "main": [
        [
          {
            "node": "21eedebf-5b84-4ee6-ac5d-9bdadaba1211",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "62cf18fb-818d-40a8-be61-b08aecdebdec": {
      "main": [
        [
          {
            "node": "6d972b56-f5eb-423d-9215-21ce753564a3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "950a3e4f-52d5-4124-8c70-bc1b0da6cc00": {
      "main": [
        [
          {
            "node": "6d972b56-f5eb-423d-9215-21ce753564a3",
            "type": "main",
            "index": 5
          }
        ]
      ]
    },
    "6075fdc3-f2ae-43b8-9429-3f138f6a506c": {
      "main": [
        [
          {
            "node": "6d972b56-f5eb-423d-9215-21ce753564a3",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "f250b454-e081-49b6-abf8-9ebe04cd152f": {
      "main": [
        [
          {
            "node": "6d972b56-f5eb-423d-9215-21ce753564a3",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "fb35a6e6-8d5b-44f8-894c-3cd64cf43009": {
      "main": [
        [
          {
            "node": "6d972b56-f5eb-423d-9215-21ce753564a3",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "4177dca6-53a5-4b32-9796-b526302ecc17": {
      "main": [
        [
          {
            "node": "6d972b56-f5eb-423d-9215-21ce753564a3",
            "type": "main",
            "index": 4
          }
        ]
      ]
    },
    "44c68f8d-0a12-4f9b-83fa-ca3b939bb223": {
      "main": [
        [
          {
            "node": "b8a019e2-af8d-4818-ad6d-86a31462e2a1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f73ea354-b40b-4dac-9ecc-687b315a4a84": {
      "main": [
        [
          {
            "node": "19a1188d-dbbd-48e5-a3ef-6da21410c3ec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "65a7f4ed-10d7-44e0-8997-631991fc0bf3": {
      "main": [
        [
          {
            "node": "f65730da-04f6-4e63-9a38-b9b3354a3b02",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "76a152e7-6aa1-4859-94bf-4470fe79c51d": {
      "main": [
        [
          {
            "node": "f614b82e-a053-403d-afb5-b6c9cf9d6fd6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f65730da-04f6-4e63-9a38-b9b3354a3b02": {
      "main": [
        [
          {
            "node": "44c68f8d-0a12-4f9b-83fa-ca3b939bb223",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "19a1188d-dbbd-48e5-a3ef-6da21410c3ec": {
      "main": [
        [
          {
            "node": "b9dfa37c-082f-431d-9494-aa620892b134",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b8a019e2-af8d-4818-ad6d-86a31462e2a1": {
      "main": [
        [
          {
            "node": "563e682a-708e-4268-953b-0cc2df993632",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "563e682a-708e-4268-953b-0cc2df993632": {
      "main": [
        [
          {
            "node": "98ea7ae3-a917-42bf-9872-c9a212281224",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2e1a8319-95b3-43c7-b279-94bfd3b4afaf": {
      "main": [
        [
          {
            "node": "76a152e7-6aa1-4859-94bf-4470fe79c51d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f614b82e-a053-403d-afb5-b6c9cf9d6fd6": {
      "main": [
        [
          {
            "node": "f73ea354-b40b-4dac-9ecc-687b315a4a84",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b9dfa37c-082f-431d-9494-aa620892b134": {
      "main": [
        [
          {
            "node": "a403778d-de47-4132-9e4a-4982dcd1f06e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "98ea7ae3-a917-42bf-9872-c9a212281224": {
      "main": [
        [
          {
            "node": "62cf18fb-818d-40a8-be61-b08aecdebdec",
            "type": "main",
            "index": 0
          },
          {
            "node": "f250b454-e081-49b6-abf8-9ebe04cd152f",
            "type": "main",
            "index": 0
          },
          {
            "node": "6075fdc3-f2ae-43b8-9429-3f138f6a506c",
            "type": "main",
            "index": 0
          },
          {
            "node": "fb35a6e6-8d5b-44f8-894c-3cd64cf43009",
            "type": "main",
            "index": 0
          },
          {
            "node": "4177dca6-53a5-4b32-9796-b526302ecc17",
            "type": "main",
            "index": 0
          },
          {
            "node": "950a3e4f-52d5-4124-8c70-bc1b0da6cc00",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a403778d-de47-4132-9e4a-4982dcd1f06e": {
      "main": [
        [
          {
            "node": "65a7f4ed-10d7-44e0-8997-631991fc0bf3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜์š”?

์œ„์˜ JSON ๊ตฌ์„ฑ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ n8n ์ธ์Šคํ„ด์Šค์—์„œ ์ƒˆ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  "JSON์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ"๋ฅผ ์„ ํƒํ•œ ํ›„, ๊ตฌ์„ฑ์„ ๋ถ™์—ฌ๋„ฃ๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ธ์ฆ ์„ค์ •์„ ์ˆ˜์ •ํ•˜์„ธ์š”.

์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ํ•ฉํ•œ๊ฐ€์š”?

๊ณ ๊ธ‰ - ์ฝ˜ํ…์ธ  ์ œ์ž‘, ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ AI

์œ ๋ฃŒ์ธ๊ฐ€์š”?

์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์™„์ „ํžˆ ๋ฌด๋ฃŒ์ด๋ฉฐ ์ง์ ‘ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์‚ฌ ์„œ๋น„์Šค(์˜ˆ: OpenAI API)๋Š” ์‚ฌ์šฉ์ž ์ง์ ‘ ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ฒœ

๐Ÿ’ฅ NanoBanana, Seedream 4, ChatGPT Image ๋ฐ Veo 3๋ฅผ ์‚ฌ์šฉํ•œ ๋™์˜์ƒ ๊ด‘๊ณ  ์ž๋™ํ™” - VIDE
AI(NanoBanana, Seedream, GPT-4o, Veo 3)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋””์˜ค ๊ด‘๊ณ  ์บ ํŽ˜์ธ ์ž๋™ํ™” ๋ฐ ๊ฒŒ์‹œ
Set
Code
Wait
+
Set
Code
Wait
63 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
๋ฐ”์ด๋Ÿด TikTok ๋น„๋””์˜ค ์ƒ์„ฑ๊ธฐ: VEED ์•„๋ฐ”ํƒ€๋ฅผ ์‚ฌ์šฉํ•œ UGC ๋น„๋””์˜ค ์ž๋™ ์ƒ์„ฑ
VEED.io AI ์•„๋ฐ”ํƒ€, ElevenLabs, GPT-4๋กœ TikTok ๋น„๋””์˜ค ์ž๋™ ์ƒ์„ฑ
Set
Code
Wait
+
Set
Code
Wait
35 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
๐Ÿ’ฅ HeyGen II - ๋‚˜๋ฅผ ๋ณต์ œํ•˜๋ผ - ์•„์ด๋””์–ด๋ถ€ํ„ฐ ๊ฒŒ์‹œ๊นŒ์ง€: YouTube, TikTok, Instagram์„ ์œ„ํ•œ GPT-5 ๋น„๋””์˜ค ์ž๋™ํ™” - ๋น„๋””์˜ค
HeyGen, GPT-5 ๋ฐ ์†Œ์…œ ๊ฒŒ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ ์Œ์„ฑ ์ž…๋ ฅ ๋น„๋””์˜ค ์ œ์ž‘ ์ž๋™ํ™”
If
Set
Wait
+
If
Set
Wait
41 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
๐Ÿ’ฅ ๋น„๋””์˜ค ๋งํฌ์—์„œ YouTube ์ธ๋„ค์ผ ์ž๋™ ์ƒ์„ฑ
Templated.io ๋ฐ Blotato๋ฅผ ์‚ฌ์šฉํ•œ YouTube ์ธ๋„ค์ผ ์ƒ์„ฑ ๋ฐ ์†Œ์…œ ๋ฏธ๋””์–ด ๊ฒŒ์‹œ ์ž๋™ํ™”
Set
Code
Wait
+
Set
Code
Wait
25 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
HeyGen๊ณผ Google Sheets ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๊ฐ€์ƒ ์ด๋ฏธ์ง€ ๋น„๋””์˜ค ์ƒ์„ฑ
GPT-5์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๊ฐ€์ƒ ์ธ๋ฌผ ๋น„๋””์˜ค ์ƒ์„ฑ ๋ฐ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์— ๊ฒŒ์‹œ
If
Set
Wait
+
If
Set
Wait
41 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
๐Ÿ’ฅ NanoBanana์™€ VEO3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ฐ”์ด๋Ÿฌ์Šค ๋น„๋””์˜ค ์ƒ์„ฑํ•˜๊ณ  Blotato๋ฅผ ํ†ตํ•ด ์†Œ์…œ ํ”Œ๋žซํผ์— ๊ณต์œ  - ๋น„๋””์˜ค
NanoBanana์™€ VEO3์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ฐ”์ด๋Ÿฌ์Šค ๋น„๋””์˜ค ์ƒ์„ฑํ•˜๊ณ  Blotato๋ฅผ ํ†ตํ•ด ์†Œ์…œ ๋ฏธ๋””์–ด์—์„œ ๊ณต์œ 
Set
Code
Wait
+
Set
Code
Wait
47 ๋…ธ๋“œDr. Firas
๊ธฐํƒ€
์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด
๋‚œ์ด๋„
๊ณ ๊ธ‰
๋…ธ๋“œ ์ˆ˜25
์นดํ…Œ๊ณ ๋ฆฌ2
๋…ธ๋“œ ์œ ํ˜•10
๋‚œ์ด๋„ ์„ค๋ช…

๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ 16+๊ฐœ ๋…ธ๋“œ์˜ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ

์ €์ž
Dr. Firas

Dr. Firas

@drfiras

Automation expert and certified trainer. I create hands-on courses to master automation with n8n. Contact me to access my exclusive training and start building powerful workflows today. ๐Ÿš€

์™ธ๋ถ€ ๋งํฌ
n8n.io์—์„œ ๋ณด๊ธฐ โ†’

์ด ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ 

์นดํ…Œ๊ณ ๋ฆฌ

์นดํ…Œ๊ณ ๋ฆฌ: 34