워크플로 관리
n8n v2.25이 섹션의 내용은 원문 문서를 참조하세요. 팀 또는 조직에 걸친 n8n OEM 배포를 관리할 때 여러 사용자를 위해 동일하거나 유사한 워크플로를 실행해야 할 가능성이 높습니다. 이 문서에서 참조하는 API는 언제든지 변경될 수 있습니다.
이 섹션의 내용은 원문 문서를 참조하세요. (oem-agreement.md)
팀 또는 조직에 걸친 n8n OEM 배포를 관리할 때 여러 사용자를 위해 동일하거나 유사한 워크플로를 실행해야 할 가능성이 높습니다. 이를 위한 두 가지 사용 가능한 옵션이 있습니다:
| 솔루션 | 장점 | 단점 |
|---|---|---|
| 각 사용자에 대한 워크플로 생성 | 워크플로 시작 방법에 제한 없음(모든 트리거 사용 가능) | 여러 워크플로 관리 필요. |
| 단일 워크플로 생성, 실행 시 사용자 자격증명 전달 | 간소화된 워크플로 관리(하나의 워크플로만 변경 필요). | 워크플로를 실행하려면 제품이 호출해야 함 |
이 문서에서 참조하는 API는 언제든지 변경될 수 있습니다. 각 버전 업그레이드 시 지속적인 기능을 확인하세요.
사용자별 워크플로#
따라야 할 세 가지 일반적인 단계가 있습니다:
- 각 사용자의 자격증명과 워크플로를 기반으로 필요할 수 있는 추가 파라미터를 얻습니다.
- 이 사용자에 대한 n8n 자격증명을 생성합니다.
- 워크플로를 생성합니다.
1. 사용자 자격증명 얻기#
여기서 이 사용자가 인증해야 하는 모든 노드/서비스에 대한 모든 자격증명과 특정 워크플로에 필요한 추가 파라미터를 캡처해야 합니다. 필요한 자격증명 및 파라미터는 워크플로와 수행하려는 작업에 따라 다릅니다.
2. 사용자 자격증명 생성#
관련 자격증명 세부 정보를 모두 얻은 후 n8n에서 관련 서비스 자격증명을 생성할 수 있습니다. 에디터 UI 또는 API 호출을 사용하여 수행할 수 있습니다.
에디터 UI 사용#
- 메뉴에서 자격증명 > 신규를 선택합니다.
- 드롭다운을 사용하여 생성할 자격증명 유형을 선택합니다(예: Airtable).

- 새 자격증명 생성 모달에서 사용자의 해당 자격증명 세부 정보를 입력하고 이 자격증명에 접근할 수 있는 노드를 선택합니다.

- 만들기를 클릭하여 완료하고 저장합니다.
API 사용#
에디터 UI에서 사용하는 프론트엔드 API를 호출하여 동일한 결과를 얻을 수 있습니다. API 엔드포인트 형식은 https://<n8n-domain>/rest/credentials입니다.
예를 들어 위의 에디터 UI 예시에서 자격증명을 생성하려면 요청은 다음과 같습니다:
POST https://<n8n-domain>/rest/credentials
요청 본문:
{
"name":"MyAirtable",
"type":"airtableApi",
"nodesAccess":[
{
"nodeType":"n8n-nodes-base.airtable"
}
],
"data":{
"apiKey":"q12we34r5t67yu"
}
}
응답에는 이 사용자의 워크플로를 생성할 때 사용할 새 자격증명의 ID가 포함됩니다:
{
"data":{
"name":"MyAirtable",
"type":"airtableApi",
"data":{
"apiKey":"q12we34r5t67yu"
},
"nodesAccess":[
{
"nodeType":"n8n-nodes-base.airtable",
"date":"2021-09-10T07:41:27.770Z"
}
],
"id":"29",
"createdAt":"2021-09-10T07:41:27.777Z",
"updatedAt":"2021-09-10T07:41:27.777Z"
}
}
3. 워크플로 생성#
모범 사례는 "기본" 워크플로를 만든 다음 각 새 사용자의 자격증명(및 기타 세부 정보)으로 복제하고 커스터마이징하는 것입니다.
에디터 UI 또는 API 호출을 사용하여 템플릿 워크플로를 복제하고 커스터마이징할 수 있습니다.
에디터 UI 사용#
-
메뉴에서 워크플로 > 열기를 선택하여 복제할 템플릿 워크플로를 엽니다.
-
워크플로 > 복제를 선택하고 새 워크플로의 이름을 입력한 후 저장을 클릭합니다.

-
관련 노드를 모두 업데이트하여 이 사용자의 자격증명(위에서 생성)을 사용하도록 합니다.
-
이 워크플로를 저장하고 오른쪽 상단의 토글을 사용하여 활성으로 설정합니다.
API 사용#
- 엔드포인트를 사용하여 템플릿 워크플로의 JSON을 가져옵니다:
https://<n8n-domain>/rest/workflows/<workflow_id>
GET https://<n8n-domain>/rest/workflows/1012
응답에는 선택한 워크플로의 JSON 데이터가 포함됩니다:
{
"data": {
"id": "1012",
"name": "Nathan's Workflow",
"active": false,
"nodes": [
{
"parameters": {},
"name": "Start",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [
130,
640
]
},
{
"parameters": {
"authentication": "headerAuth",
"url": "https://internal.users.n8n.cloud/webhook/custom-erp",
"options": {
"splitIntoItems": true
},
"headerParametersUi": {
"parameter": [
{
"name": "unique_id",
"value": "recLhLYQbzNSFtHNq"
}
]
}
},
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1,
"position": [
430,
300
],
"credentials": {
"httpHeaderAuth": "beginner_course"
}
},
{
"parameters": {
"operation": "append",
"application": "appKBGQfbm6NfW6bv",
"table": "processingOrders",
"options": {}
},
"name": "Airtable",
"type": "n8n-nodes-base.airtable",
"typeVersion": 1,
"position": [
990,
210
],
"credentials": {
"airtableApi": "Airtable"
}
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json[\"orderStatus\"]}}",
"value2": "processing"
}
]
}
},
"name": "IF",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
630,
300
]
},
{
"parameters": {
"keepOnlySet": true,
"values": {
"number": [
{
"name": "=orderId",
"value": "={{$json[\"orderID\"]}}"
}
],
"string": [
{
"name": "employeeName",
"value": "={{$json[\"employeeName\"]}}"
}
]
},
"options": {}
},
"name": "Set",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [
800,
210
]
},
{
"parameters": {
"functionCode": "let totalBooked = items.length;\nlet bookedSum = 0;\n\nfor(let i=0; i < items.length; i++) {\n bookedSum = bookedSum + items[i].json.orderPrice;\n}\nreturn [{json:{totalBooked, bookedSum}}]\n"
},
"name": "Function",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
800,
400
]
},
{
"parameters": {
"webhookUri": "https://discord.com/api/webhooks/865213348202151968/oD5_WPDQwtr22Vjd_82QP3-_4b_lGhAeM7RynQ8Js5DzyXrQEnj0zeAQIA6fki1JLtXE",
"text": "=This week we have {{$json[\"totalBooked\"]}} booked orders with a total value of {{$json[\"bookedSum\"]}}. My Unique ID: {{ $(\"HTTP Request\").params.headerParameters.parameters[0].value }}"
},
"name": "Discord",
"type": "n8n-nodes-base.discord",
"typeVersion": 1,
"position": [
1000,
400
]
},
{
"parameters": {
"triggerTimes": {
"item": [
{
"mode": "everyWeek",
"hour": 9
}
]
}
},
"name": "Cron",
"type": "n8n-nodes-base.cron",
"typeVersion": 1,
"position": [
220,
300
]
}
],
"connections": {
"HTTP Request": {
"main": [
[
{
"node": "IF",
"type": "main",
"index": 0
}
]
]
},
"Start": {
"main": [
[]
]
},
"IF": {
"main": [
[
{
"node": "Set",
"type": "main",
"index": 0
}
],
[
{
"node": "Function",
"type": "main",
"index": 0
}
]
]
},
"Set": {
"main": [
[
{
"node": "Airtable",
"type": "main",
"index": 0
}
]
]
},
"Function": {
"main": [
[
{
"node": "Discord",
"type": "main",
"index": 0
}
]
]
},
"Cron": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
}
},
"createdAt": "2021-07-16T11:15:46.066Z",
"updatedAt": "2021-07-16T12:05:44.045Z",
"settings": {},
"staticData": null,
"tags": []
}
}
-
반환된 JSON 데이터를 저장하고 새 사용자를 위해 관련 자격증명 및 필드를 업데이트합니다.
-
업데이트된 JSON을 요청 본문으로 사용하여 엔드포인트에서 새 워크플로를 생성합니다:
https://<n8n-domain>/rest/workflows
POST https://<n8n-domain>/rest/workflows/
응답에는 다음 단계에서 사용할 새 워크플로의 ID가 포함됩니다.
- 마지막으로 새 워크플로를 게시합니다:
PATCH https://<n8n-domain>/rest/workflows/1012
JSON 페이로드에 추가 값 active를 전달합니다:
// ...
"active":true,
"settings": {},
"staticData": null,
"tags": []
단일 워크플로#
이 방법을 구현하기 위해 따라야 할 네 가지 단계가 있습니다:
- 각 사용자의 자격증명과 워크플로를 기반으로 필요할 수 있는 추가 파라미터를 얻습니다. 위의 사용자 자격증명 얻기를 참조하세요.
- 이 사용자에 대한 n8n 자격증명을 생성합니다. 위의 사용자 자격증명 생성을 참조하세요.
- 워크플로를 생성합니다.
- 필요에 따라 워크플로를 호출합니다.
워크플로 생성#
이 워크플로의 세부 사항과 범위는 개별 사용 사례에 따라 크게 다르겠지만, 염두에 두어야 할 몇 가지 설계 구현 사항이 있습니다:
- 이 워크플로는 웹훅 노드로 트리거되어야 합니다.
- 수신 웹훅 호출에는 사용자의 자격증명과 필요한 기타 워크플로 파라미터가 포함되어야 합니다.
- 사용자 자격증명이 필요한 각 노드는 웹훅 호출에서 제공된 자격증명을 읽도록 노드의 자격증명 필드에 표현식을 사용해야 합니다.
- 워크플로를 저장하고 게시하여 웹훅 노드에 대한 프로덕션 URL이 선택되어 있는지 확인합니다. 자세한 내용은 웹훅 노드를 참조하세요.
워크플로 호출#
각 새 사용자 또는 필요에 따라 기존 사용자의 경우, 워크플로 트리거로 정의된 웹훅을 호출하고 필요한 자격증명(및 기타 워크플로 파라미터)을 제공합니다.