マルチレベル費用承認と経費精算の自動化
上級
これは自動化ワークフローで、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 で領支付宝を自動抽出して承認
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で表示 →
このワークフローを共有