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