8
n8n 한국어amn8n.com

n8n에서 Webhook를 통해 워크플로우 생성

중급

이것은Engineering분야의자동화 워크플로우로, 11개의 노드를 포함합니다.주로 If, Set, Code, Webhook, HttpRequest 등의 노드를 사용하며. Webhook과 n8n API를 사용하여 프로그래밍 방식으로 동적 워크플로우를 생성하세요

사전 요구사항
  • HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
  • 대상 API의 인증 정보가 필요할 수 있음

카테고리

워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "mchujUnGa9RKf7dO",
  "meta": {
    "instanceId": "6f30db2c3fce1d1703bcd68e01088879e38bc7981b202c52c370fb8fb136ded4",
    "templateCredsSetupCompleted": true
  },
  "name": "Create Workflow via Webhook in n8n",
  "tags": [],
  "nodes": [
    {
      "id": "41cfbc58-c8d5-4a22-aec1-72a4b7db3d63",
      "name": "스티키 노트4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2360,
        -2100
      ],
      "parameters": {
        "width": 720,
        "height": 500,
        "content": "1. **Webhook**: it receives a POST at `/webhook/create-workflow` with the workflow JSON.\n2. **Validate JSON**: it runs code that checks the JSON has the fields `name` and `nodes`, and that each node has `id`, `name`, `type`, and `position`. It returns `{ success: true }` if everything is valid, or `{ success: false, message: \"…\" }` if there’s an error.\n3. **Validation Successful?**: it looks at the result from “Validate JSON” and, depending on whether `success` is `true` or `false`, decides to continue creating the workflow or return the error.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "62c4a402-1397-4aad-82de-c38672a382a7",
      "name": "스티키 노트6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1600,
        -1740
      ],
      "parameters": {
        "color": 3,
        "width": 820,
        "height": 360,
        "content": "1. **Validation Error**: Sets a JSON response with `success: false` and uses the incoming `$json.message` as the error message when the initial payload validation fails.\n\n2. **API Error**: Sets a JSON response with `success: false`, a fixed `message: \"Error creating workflow\"`, includes the full error payload (`error: JSON.stringify($json)`), and the HTTP `statusCode` from the failed API request.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "df771acf-ef37-49f9-8a9f-ec60fd955d86",
      "name": "스티키 노트7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1520,
        -2320
      ],
      "parameters": {
        "width": 720,
        "height": 500,
        "content": "1. **Create Workflow**: Sends a POST to `/api/v1/workflows` with the validated workflow payload, using header-based authentication.\n2. **API Successful?**: Checks if the HTTP response status code is ≤ 299.\n3. **Success Response**: If the API call succeeded, constructs the final JSON with `success: true`, `workflowId`, `workflowName`, `createdAt`, and the workflow `url`.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c798d2a9-577d-4f46-b269-ca2b4447560c",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -2280,
        -1880
      ],
      "webhookId": "baad3add-f74a-447a-9764-75967674fa9f",
      "parameters": {
        "path": "create-workflow",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "3ca95b00-83b2-4f75-874f-43a27e298bf1",
      "name": "JSON 유효성 검사",
      "type": "n8n-nodes-base.code",
      "position": [
        -2060,
        -1880
      ],
      "parameters": {
        "jsCode": "// Validate the received JSON\nconst payload = $input.item.json.body;\n\n// Check that required fields exist\nif (!payload) {\n  return {\n    json: {\n      success: false,\n      message: \"No payload received in the request\"\n    }\n  };\n}\n\n// Ensure correct format for a workflow\nconst requiredFields = ['name', 'nodes'];\nfor (const field of requiredFields) {\n  if (!payload[field]) {\n    return {\n      json: {\n        success: false,\n        message: `The field '${field}' is required in the workflow`\n      }\n    };\n  }\n}\n\n// Ensure connections and settings exist\nif (!payload.connections) payload.connections = {};\nif (!payload.settings) payload.settings = {};\n\n// Verify that there is at least one node\nif (!Array.isArray(payload.nodes) || payload.nodes.length === 0) {\n  return {\n    json: {\n      success: false,\n      message: \"The workflow must have at least one node\"\n    }\n  };\n}\n\n// Validate each node's required fields\nfor (const node of payload.nodes) {\n  const nodeRequiredFields = ['id', 'name', 'type', 'position'];\n  for (const field of nodeRequiredFields) {\n    if (!node[field]) {\n      return {\n        json: {\n          success: false,\n          message: `Node '${node.name || 'unknown'}' is missing required field '${field}'`\n        }\n      };\n    }\n  }\n  \n  // Ensure parameters exists\n  if (!node.parameters) node.parameters = {};\n  if (!node.typeVersion) node.typeVersion = 1;\n}\n\n// Prepare the workflow object for the API\nconst apiWorkflow = {\n  name: payload.name,\n  nodes: payload.nodes,\n  connections: payload.connections,\n  settings: payload.settings\n};\n\n// If everything is valid, proceed\nreturn {\n  json: {\n    success: true,\n    apiWorkflow: apiWorkflow\n  }\n};"
      },
      "typeVersion": 1
    },
    {
      "id": "b3894755-0583-4c00-b574-e993a6f0b08f",
      "name": "유효성 검사 성공?",
      "type": "n8n-nodes-base.if",
      "position": [
        -1840,
        -1880
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.success }}",
              "value2": true
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ef3a310b-7673-40cc-985a-4e87dc99de70",
      "name": "워크플로우 생성",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1440,
        -2080
      ],
      "parameters": {
        "url": "=http://{{ $('Webhook').item.json.headers.host }}/api/v1/workflows",
        "options": {},
        "authentication": "headerAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "TS0ZOhjrOm9oUaWR",
          "name": "N8N"
        }
      },
      "typeVersion": 1,
      "continueOnFail": true
    },
    {
      "id": "7e2c1a11-1d4c-4075-a03c-f6ed93307d19",
      "name": "API 성공?",
      "type": "n8n-nodes-base.if",
      "position": [
        -1220,
        -2080
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $response.statusCode }}",
              "value2": 299,
              "operation": "smallerEqual"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0371ce73-ccb6-4e87-8620-4aab8529b170",
      "name": "성공 응답",
      "type": "n8n-nodes-base.set",
      "position": [
        -960,
        -2180
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "success",
              "value": "true"
            },
            {
              "name": "message",
              "value": "Workflow created successfully"
            },
            {
              "name": "workflowId",
              "value": "={{ $json.data[0].id }}"
            },
            {
              "name": "workflowName",
              "value": "={{ $json.data[0].name }}"
            },
            {
              "name": "createdAt",
              "value": "={{ $json.data[0].createdAt }}"
            },
            {
              "name": "url",
              "value": "=http://localhost:5678/workflow/{{ $json.data[0].id }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "daec93d7-b9d8-4407-93ab-389b705b0c11",
      "name": "유효성 검사 오류",
      "type": "n8n-nodes-base.set",
      "position": [
        -1500,
        -1540
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "success",
              "value": "false"
            },
            {
              "name": "message",
              "value": "={{ $json.message }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "cd2cd403-63c2-42af-a715-9f080067f7d1",
      "name": "API 오류",
      "type": "n8n-nodes-base.set",
      "position": [
        -920,
        -1540
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "success",
              "value": "false"
            },
            {
              "name": "message",
              "value": "Error creating workflow"
            },
            {
              "name": "error",
              "value": "={{ JSON.stringify($json) }}"
            },
            {
              "name": "statusCode",
              "value": "={{ $response.statusCode }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "pinData": {
    "Webhook": [
      {
        "json": {
          "body": {
            "name": "Workflow Created by ID mchujUnGa9RKf7dO",
            "nodes": [
              {
                "id": "start-node",
                "name": "Start",
                "type": "n8n-nodes-base.manualTrigger",
                "position": [
                  100,
                  100
                ],
                "parameters": {},
                "typeVersion": 1
              },
              {
                "id": "set-node",
                "name": "Set",
                "type": "n8n-nodes-base.set",
                "position": [
                  300,
                  100
                ],
                "parameters": {
                  "values": {
                    "string": [
                      {
                        "name": "message",
                        "value": "This workflow was created using the webhook in mchujUnGa9RKf7dO!"
                      }
                    ]
                  }
                },
                "typeVersion": 1
              }
            ],
            "settings": {},
            "connections": {
              "Start": {
                "main": [
                  [
                    {
                      "node": "Set",
                      "type": "main",
                      "index": 0
                    }
                  ]
                ]
              }
            }
          },
          "query": {},
          "params": {},
          "headers": {
            "host": "127.0.0.1:5678",
            "connection": "keep-alive",
            "content-type": "application/json",
            "transfer-encoding": "chunked"
          },
          "webhookUrl": "http://localhost:5678/webhook/create-workflow",
          "executionMode": "production"
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "849462be-761a-455e-a99b-ffe52b2249d7",
  "connections": {
    "c798d2a9-577d-4f46-b269-ca2b4447560c": {
      "main": [
        [
          {
            "node": "3ca95b00-83b2-4f75-874f-43a27e298bf1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3ca95b00-83b2-4f75-874f-43a27e298bf1": {
      "main": [
        [
          {
            "node": "b3894755-0583-4c00-b574-e993a6f0b08f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7e2c1a11-1d4c-4075-a03c-f6ed93307d19": {
      "main": [
        [
          {
            "node": "0371ce73-ccb6-4e87-8620-4aab8529b170",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "cd2cd403-63c2-42af-a715-9f080067f7d1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ef3a310b-7673-40cc-985a-4e87dc99de70": {
      "main": [
        [
          {
            "node": "7e2c1a11-1d4c-4075-a03c-f6ed93307d19",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b3894755-0583-4c00-b574-e993a6f0b08f": {
      "main": [
        [
          {
            "node": "ef3a310b-7673-40cc-985a-4e87dc99de70",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "daec93d7-b9d8-4407-93ab-389b705b0c11",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 엔지니어링

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수11
카테고리1
노드 유형6
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
Mauricio Perera

Mauricio Perera

@rckflr

Automation consultant with over 10 years of experience specializing in AI, no-code, and workflow optimization. I’ve delivered tailored AI and NLP solutions across real estate, healthcare, and more, enhancing efficiency and customer experiences. Proficient in tools like Make, Airtable, and Zapier, I also integrate GPT models to create scalable, innovative automations. Contact me to discuss custom n8n workflows or advanced automations to streamline your processes.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34