자동화된 다단계 비용 승인 및 환급
고급
이것은자동화 워크플로우로, 21개의 노드를 포함합니다.주로 If, Set, Code, Gmail, Slack 등의 노드를 사용하며. JotForm, Slack 및 Google Sheets를 사용한 다단계 비용 승인 및 환급 자동 처리
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •Slack Bot Token 또는 Webhook URL
- •Google Sheets API 인증 정보
카테고리
-
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "2eb6d9f2-7f9d-453f-a548-cf2660f7248c",
"name": "JotForm 트리거",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
-1120,
-16
],
"webhookId": "expense-submission",
"parameters": {
"form": "252860582136459"
},
"credentials": {
"jotFormApi": {
"id": "W7O1b225FpOwkwDT",
"name": "JotForm account-Deepanshi"
}
},
"typeVersion": 1
},
{
"id": "0798c2b1-7ed5-45ce-a26c-2e8f7ada6a43",
"name": "폼 데이터 파싱",
"type": "n8n-nodes-base.code",
"position": [
-864,
-16
],
"parameters": {
"jsCode": "// Parse form data and prepare for processing\nconst formData = $input.first().json;\n\nreturn {\n json: {\n submissionId: formData.submissionID || Date.now().toString(),\n employeeName: formData.employeeName || formData.q3_employeeName,\n employeeEmail: formData.employeeEmail || formData.q4_employeeEmail,\n employeeId: formData.employeeId || formData.q5_employeeId,\n amount: parseFloat(formData.amount || formData.q6_amount),\n category: formData.category || formData.q7_category,\n merchant: formData.merchant || formData.q8_merchant,\n date: formData.date || formData.q9_date,\n description: formData.description || formData.q10_description,\n receiptUrl: formData.receiptUrl || formData.q11_receipt,\n submittedAt: new Date().toISOString()\n }\n};"
},
"typeVersion": 2
},
{
"id": "df2085e9-dc08-4f25-a99e-009e2340b47c",
"name": "정책 검증",
"type": "n8n-nodes-base.code",
"position": [
-672,
-16
],
"parameters": {
"jsCode": "// Company policy rules and validation\nconst data = $input.first().json;\n\nconst policy = {\n maxAmounts: {\n meals: 75,\n travel: 500,\n office_supplies: 200,\n software: 1000,\n entertainment: 150,\n other: 100\n },\n approvedCategories: ['meals', 'travel', 'office_supplies', 'software', 'entertainment'],\n autoApproveThreshold: 100,\n managerApprovalThreshold: 500\n};\n\nconst amount = data.amount;\nconst category = data.category;\n\nlet policyViolations = [];\nlet requiresApproval = 'auto';\n\nif (!policy.approvedCategories.includes(category)) {\n policyViolations.push('Category not approved');\n}\n\nif (policy.maxAmounts[category] && amount > policy.maxAmounts[category]) {\n policyViolations.push('Amount exceeds category limit');\n}\n\nif (amount < policy.autoApproveThreshold && policyViolations.length === 0) {\n requiresApproval = 'auto';\n} else if (amount >= policy.autoApproveThreshold && amount < policy.managerApprovalThreshold) {\n requiresApproval = 'manager';\n} else if (amount >= policy.managerApprovalThreshold) {\n requiresApproval = 'director';\n}\n\nreturn {\n json: {\n ...data,\n policyViolations: policyViolations,\n isCompliant: policyViolations.length === 0,\n requiresApproval: requiresApproval,\n status: 'pending'\n }\n};"
},
"typeVersion": 2
},
{
"id": "4ac52b34-7a64-49f5-b368-43d8b99bcab3",
"name": "위반 사항 확인",
"type": "n8n-nodes-base.if",
"position": [
-464,
-16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "condition1",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.policyViolations.length }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2
},
{
"id": "9d132c2f-7f99-4b36-b543-27131702460c",
"name": "거부 설정",
"type": "n8n-nodes-base.set",
"position": [
-272,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "status",
"name": "status",
"type": "string",
"value": "rejected"
},
{
"id": "rejectionReason",
"name": "rejectionReason",
"type": "string",
"value": "=Policy violations: {{ $json.policyViolations.join(', ') }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "47566677-5342-4b26-9974-793526a59bd9",
"name": "자동 라우팅",
"type": "n8n-nodes-base.if",
"position": [
-272,
-176
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "condition1",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.requiresApproval }}",
"rightValue": "auto"
}
]
}
},
"typeVersion": 2
},
{
"id": "c0b971bc-a5ce-48b6-978c-54ae02112505",
"name": "자동 승인",
"type": "n8n-nodes-base.set",
"position": [
-64,
-272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "status",
"name": "status",
"type": "string",
"value": "approved"
},
{
"id": "approvedBy",
"name": "approvedBy",
"type": "string",
"value": "System (Auto-Approved)"
},
{
"id": "approvedAt",
"name": "approvedAt",
"type": "string",
"value": "={{ new Date().toISOString() }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "eef387ab-bee8-4570-8cca-26ccbd30abeb",
"name": "관리자 라우팅",
"type": "n8n-nodes-base.if",
"position": [
-64,
-80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "condition1",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.requiresApproval }}",
"rightValue": "manager"
}
]
}
},
"typeVersion": 2
},
{
"id": "74152681-2cf6-4e76-aabb-87ae00a86048",
"name": "Slack 관리자",
"type": "n8n-nodes-base.slack",
"position": [
144,
-224
],
"webhookId": "61c90b37-cd59-4332-b0c6-0f8f15004d43",
"parameters": {
"text": "=New Expense Approval Required\nEmployee: {{ $json.employeeName }}\nAmount: ${{ $json.amount }}\nCategory: {{ $json.category }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C01234567"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "piPcLxWbLrndcGhp",
"name": "Slack account - Deepanshi"
}
},
"typeVersion": 2.1
},
{
"id": "e05fba8b-60e5-4438-9f7a-cd828bace8b8",
"name": "Slack 이사",
"type": "n8n-nodes-base.slack",
"position": [
144,
-16
],
"webhookId": "eba016eb-5ad8-4d29-822e-9038e73a0733",
"parameters": {
"text": "=High-Value Expense - Director Approval\nEmployee: {{ $json.employeeName }}\nAmount: ${{ $json.amount }}\nCategory: {{ $json.category }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C98765432"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "piPcLxWbLrndcGhp",
"name": "Slack account - Deepanshi"
}
},
"typeVersion": 2.1
},
{
"id": "b7a58104-fc21-485a-8c93-edb1dc253b2b",
"name": "Sheets에 기록",
"type": "n8n-nodes-base.googleSheets",
"position": [
336,
-64
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"submissionId"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "Kz2DdSp11rxqwlFt",
"name": "Google Sheets account - Deepanshi"
}
},
"typeVersion": 4.4
},
{
"id": "1af29bbe-b3ee-42ee-91a9-388b70659c48",
"name": "승인 여부",
"type": "n8n-nodes-base.if",
"position": [
544,
-64
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "condition1",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "approved"
}
]
}
},
"typeVersion": 2
},
{
"id": "0e8c5d12-fee3-4c7d-bc16-77a79e39befe",
"name": "거부 이메일",
"type": "n8n-nodes-base.gmail",
"position": [
752,
0
],
"webhookId": "fe2cb3ee-3c0f-4429-ac5c-9482a923f808",
"parameters": {
"sendTo": "={{ $json.employeeEmail }}",
"message": "=Hi, Your expense for {{ $json.amount}} has been rejected as it did not matches with the company's validation policy.",
"options": {},
"subject": "=Expense Rejected - ${{ $json.amount }}"
},
"credentials": {
"gmailOAuth2": {
"id": "PIMDNhXNj8Zyiz3G",
"name": "Gmail account - Deepanshi"
}
},
"typeVersion": 2.1
},
{
"id": "1b5d88c6-fe8f-4984-9e9e-19789ba76c60",
"name": "승인됨",
"type": "n8n-nodes-base.gmail",
"position": [
752,
-192
],
"webhookId": "fe2cb3ee-3c0f-4429-ac5c-9482a923f808",
"parameters": {
"sendTo": "={{ $json.employeeEmail }}",
"message": "Hi, Your expense for {{ $json.Amount }} has been approved",
"options": {},
"subject": "=Expense Approved - ${{ $json.amount }}"
},
"credentials": {
"gmailOAuth2": {
"id": "PIMDNhXNj8Zyiz3G",
"name": "Gmail account - Deepanshi"
}
},
"typeVersion": 2.1
},
{
"id": "6382a19b-08de-4466-9013-696d5ffac4db",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1200,
-208
],
"parameters": {
"height": 432,
"content": "📩 Trigger: New Expense Submission\nCaptures employee expense details \nand receipt upload from JotForm.\nCreate your form for free on [JotForm using this link](https://www.jotform.com/?partner=mediajade) \n"
},
"typeVersion": 1
},
{
"id": "5b890f09-277e-41e6-9628-dd6907b14e5f",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-912,
-160
],
"parameters": {
"width": 192,
"content": "🧾 Parse & Normalize Data\nExtracts key fields (name, email, amount, \ncategory, merchant, receipt URL) \nfor further processing.\n"
},
"typeVersion": 1
},
{
"id": "fe3ea799-b6f3-48f4-bbc4-96623e1e8256",
"name": "스티키 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-720,
112
],
"parameters": {
"width": 208,
"height": 192,
"content": "⚙️ Policy Validation\nChecks compliance against company rules:\n- Allowed categories\n- Max amount limits\n- Auto/Manager/Director approval routing\n"
},
"typeVersion": 1
},
{
"id": "11112b1f-af67-4c7c-86cc-b4ccfe83a249",
"name": "스티키 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-512,
-160
],
"parameters": {
"width": 176,
"content": "🚫 Compliance Check\nIf violations exist → reject\nElse → continue for approval routing\n"
},
"typeVersion": 1
},
{
"id": "054e826f-590f-4de0-8ccd-d299d2f6e044",
"name": "스티키 노트4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-288,
-368
],
"parameters": {
"width": 576,
"height": 496,
"content": "⚡ Routing Decision\nDetermines if expense should be:\n- Auto-approved\n- Sent for manager approval\n- Sent for director approval\n"
},
"typeVersion": 1
},
{
"id": "6ebce30b-f8d7-4bf2-bdf3-6f33b8363a55",
"name": "스티키 노트5",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
-224
],
"parameters": {
"width": 208,
"height": 384,
"content": "📊 Audit Logging\nAppends expense status, \napprover details, and decision \nto Google Sheets for tracking.\n"
},
"typeVersion": 1
},
{
"id": "f5e44753-7705-41e1-bdac-0158deea26ab",
"name": "스티키 노트6",
"type": "n8n-nodes-base.stickyNote",
"position": [
544,
-384
],
"parameters": {
"width": 384,
"height": 576,
"content": "🔍 Approval Check\nBranches workflow to send \napproval or rejection emails \nbased on final status.\n"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"47566677-5342-4b26-9974-793526a59bd9": {
"main": [
[
{
"node": "c0b971bc-a5ce-48b6-978c-54ae02112505",
"type": "main",
"index": 0
}
],
[
{
"node": "eef387ab-bee8-4570-8cca-26ccbd30abeb",
"type": "main",
"index": 0
}
]
]
},
"1af29bbe-b3ee-42ee-91a9-388b70659c48": {
"main": [
[
{
"node": "1b5d88c6-fe8f-4984-9e9e-19789ba76c60",
"type": "main",
"index": 0
}
],
[
{
"node": "0e8c5d12-fee3-4c7d-bc16-77a79e39befe",
"type": "main",
"index": 0
}
]
]
},
"c0b971bc-a5ce-48b6-978c-54ae02112505": {
"main": [
[
{
"node": "b7a58104-fc21-485a-8c93-edb1dc253b2b",
"type": "main",
"index": 0
}
]
]
},
"b7a58104-fc21-485a-8c93-edb1dc253b2b": {
"main": [
[
{
"node": "1af29bbe-b3ee-42ee-91a9-388b70659c48",
"type": "main",
"index": 0
}
]
]
},
"eef387ab-bee8-4570-8cca-26ccbd30abeb": {
"main": [
[
{
"node": "74152681-2cf6-4e76-aabb-87ae00a86048",
"type": "main",
"index": 0
}
],
[
{
"node": "e05fba8b-60e5-4438-9f7a-cd828bace8b8",
"type": "main",
"index": 0
}
]
]
},
"9d132c2f-7f99-4b36-b543-27131702460c": {
"main": [
[
{
"node": "b7a58104-fc21-485a-8c93-edb1dc253b2b",
"type": "main",
"index": 0
}
]
]
},
"74152681-2cf6-4e76-aabb-87ae00a86048": {
"main": [
[
{
"node": "b7a58104-fc21-485a-8c93-edb1dc253b2b",
"type": "main",
"index": 0
}
]
]
},
"e05fba8b-60e5-4438-9f7a-cd828bace8b8": {
"main": [
[
{
"node": "b7a58104-fc21-485a-8c93-edb1dc253b2b",
"type": "main",
"index": 0
}
]
]
},
"2eb6d9f2-7f9d-453f-a548-cf2660f7248c": {
"main": [
[
{
"node": "0798c2b1-7ed5-45ce-a26c-2e8f7ada6a43",
"type": "main",
"index": 0
}
]
]
},
"0798c2b1-7ed5-45ce-a26c-2e8f7ada6a43": {
"main": [
[
{
"node": "df2085e9-dc08-4f25-a99e-009e2340b47c",
"type": "main",
"index": 0
}
]
]
},
"df2085e9-dc08-4f25-a99e-009e2340b47c": {
"main": [
[
{
"node": "4ac52b34-7a64-49f5-b368-43d8b99bcab3",
"type": "main",
"index": 0
}
]
]
},
"4ac52b34-7a64-49f5-b368-43d8b99bcab3": {
"main": [
[
{
"node": "47566677-5342-4b26-9974-793526a59bd9",
"type": "main",
"index": 0
}
],
[
{
"node": "9d132c2f-7f99-4b36-b543-27131702460c",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
청구서 첨부 파일이 있나요?
GPT-4o 사기 감지와 QuickBooks로 인voice 자동 추출 및 승인
If
Code
Gmail
+
If
Code
Gmail
22 노드Jitesh Dugar
GPT-4 분석 및 JotForm을 사용한 퇴사 면담으로 직원 퇴사 프로세스 자동화
GPT-4 분석과 JotForm 퇴사 면담을 사용한 직원 퇴사 프로세스 자동화
If
Set
Code
+
If
Set
Code
20 노드Jitesh Dugar
JotForm, GPT-4o-mini 및 Google Workspace를 사용한 직원 온보딩 자동화
JotForm, GPT-4o-mini, Google Workspace를 사용한 직원 온보딩 자동화
If
Set
Code
+
If
Set
Code
14 노드Jitesh Dugar
Jotform, GPT-4 분석 및 Gmail 알림을 사용한 대출 사전 승인 자동화
Jotform, GPT-4 분석 및 Gmail 알림을 사용한 자동화된 대출 사전 승인
If
Set
Code
+
If
Set
Code
21 노드Jitesh Dugar
GPT-4o-mini, JotForm 및 Gmail을 사용한 자산 관리 요청 자동화
GPT-4o-mini, JotForm 및 Gmail을 사용한 자산 관리 요청 자동화
If
Set
Code
+
If
Set
Code
21 노드Jitesh Dugar
차량 점검 및 유지보수 워크플로우 자동화
OpenAI 및 JotForm을 사용한 차량 점검 및 유지보수 워크플로 자동화
If
Set
Code
+
If
Set
Code
20 노드Jitesh Dugar
워크플로우 정보
난이도
고급
노드 수21
카테고리-
노드 유형8
저자
Jitesh Dugar
@jiteshdugarAI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유