AutomationFlowsEmail & Gmail › Route Equipment Purchase Approvals with Slack, Google Sheets, and Email

Route Equipment Purchase Approvals with Slack, Google Sheets, and Email

ByShohei Sawada @dtosh-sawada on n8n.io

This template automates internal equipment and supply purchase requests for operations, HR, and IT teams. Requests are submitted via a built-in n8n form, automatically approved for small amounts, and routed to the manager via Slack for larger ones — with full logging to Google…

Event trigger★★★★☆ complexity22 nodesForm TriggerGoogle SheetsSlackGmail
Email & Gmail Trigger: Event Nodes: 22 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #15009 — we link there as the canonical source.

This workflow follows the Form Trigger → Gmail recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "29b08624-7397-44b3-98b6-751f9a6a0066",
      "name": "Purchase Request Form",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        0,
        96
      ],
      "parameters": {
        "options": {},
        "formTitle": "\u5099\u54c1\u30fb\u8cfc\u8cb7\u7533\u8acb / Equipment Purchase Request",
        "formFields": {
          "values": [
            {
              "fieldName": "applicant_name",
              "fieldLabel": "\u7533\u8acb\u8005\u540d / Applicant Name",
              "requiredField": true
            },
            {
              "fieldName": "applicant_email",
              "fieldType": "email",
              "fieldLabel": "\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 / Email",
              "requiredField": true
            },
            {
              "fieldName": "department",
              "fieldLabel": "\u90e8\u7f72 / Department",
              "requiredField": true
            },
            {
              "fieldName": "item_name",
              "fieldLabel": "\u54c1\u540d / Item Name",
              "requiredField": true
            },
            {
              "fieldName": "quantity",
              "fieldType": "number",
              "fieldLabel": "\u6570\u91cf / Quantity",
              "requiredField": true
            },
            {
              "fieldName": "unit_price",
              "fieldType": "number",
              "fieldLabel": "\u5358\u4fa1\uff08\u5186\uff09/ Unit Price (JPY)",
              "requiredField": true
            },
            {
              "fieldName": "reason",
              "fieldType": "textarea",
              "fieldLabel": "\u8cfc\u5165\u7406\u7531 / Reason",
              "requiredField": true
            },
            {
              "fieldName": "desired_delivery",
              "fieldType": "date",
              "fieldLabel": "\u5e0c\u671b\u7d0d\u671f / Desired Delivery Date",
              "requiredField": true
            }
          ]
        }
      },
      "typeVersion": 2.5
    },
    {
      "id": "307f2877-b29e-4f5f-aba8-5fd6f48ddb97",
      "name": "Set Request Data",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        96
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9cc74f65-62a6-4663-8c77-a625aeab0be2",
              "name": "request_id",
              "type": "string",
              "value": "={{ $json.submittedAt.toDateTime().toMillis() + '-' + $json.applicant_name.replace(/\\s/g, '') }}"
            },
            {
              "id": "38b67b69-19f1-49da-950f-70d64f45b216",
              "name": "requested_at",
              "type": "string",
              "value": "={{ $json.submittedAt.toDateTime().format('yyyy-MM-dd HH:mm:ss') }}"
            },
            {
              "id": "a25b3ac6-5fc8-4635-9c89-cd7b633f4deb",
              "name": "applicant_name",
              "type": "string",
              "value": "={{ $json.applicant_name }}"
            },
            {
              "id": "9047337e-d68a-40c1-a285-983dd4dfd24e",
              "name": "applicant_email",
              "type": "string",
              "value": "={{ $json.applicant_email }}"
            },
            {
              "id": "8dc98deb-adc7-446a-8844-5cd772d7ac1f",
              "name": "department",
              "type": "string",
              "value": "={{ $json.department }}"
            },
            {
              "id": "42a371db-7250-45ac-875a-8786393a61d3",
              "name": "item_name",
              "type": "string",
              "value": "={{ $json.item_name }}"
            },
            {
              "id": "bdf43e2e-44b0-4c29-819a-c8693d5ef4d0",
              "name": "quantity",
              "type": "number",
              "value": "={{ $json.quantity }}"
            },
            {
              "id": "481a995e-d9ba-44d7-a743-714d0e6af297",
              "name": "unit_price",
              "type": "number",
              "value": "={{ $json.unit_price }}"
            },
            {
              "id": "231eb1b7-65b8-41f4-9e8a-888e468b20a3",
              "name": "total_price",
              "type": "number",
              "value": "={{ $json.quantity * $json.unit_price }}"
            },
            {
              "id": "32e8ab00-12d6-4bb4-90a0-403d8d5d953e",
              "name": "reason",
              "type": "string",
              "value": "={{ $json.reason }}"
            },
            {
              "id": "28f11e51-7575-40e0-ae2a-cef7a6c66ed3",
              "name": "desired_delivery",
              "type": "string",
              "value": "={{ $json.desired_delivery }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "3a470973-df4b-485b-b11e-371635db50bc",
      "name": "Get Manager Info",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        448,
        96
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.department }}",
              "lookupColumn": "department"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Manager Mapping"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc/edit?usp=drivesdk",
          "cachedResultName": "Equipment Purchase Request - Workflow"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e2c9dc0e-2fa0-4a2e-8a0e-3d0d24dde9b1",
      "name": "Log Request",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        672,
        96
      ],
      "parameters": {
        "columns": {
          "value": {
            "reason": "={{ $('Set Request Data').first().json.reason }}",
            "status": "\u7533\u8acb\u4e2d",
            "quantity": "={{ $('Set Request Data').first().json.quantity }}",
            "item_name": "={{ $('Set Request Data').first().json.item_name }}",
            "department": "={{ $('Set Request Data').first().json.department }}",
            "request_id": "={{ $('Set Request Data').first().json.request_id }}",
            "unit_price": "={{ $('Set Request Data').first().json.unit_price }}",
            "total_price": "={{ $('Set Request Data').first().json.total_price }}",
            "requested_at": "={{ $('Set Request Data').first().json.requested_at }}",
            "applicant_name": "={{ $('Set Request Data').first().json.applicant_name }}",
            "applicant_email": "={{ $('Set Request Data').first().json.applicant_email }}",
            "desired_delivery": "={{ $('Set Request Data').first().json.desired_delivery }}"
          },
          "schema": [
            {
              "id": "request_id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "request_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "requested_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "requested_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applicant_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "applicant_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applicant_email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "applicant_email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "department",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "department",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "item_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "item_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "quantity",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "unit_price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "unit_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "total_price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "total_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reason",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "desired_delivery",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "desired_delivery",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "approved_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "approved_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "approver_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "approver_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "rejection_comment",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "rejection_comment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Purchase Requests"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc/edit?usp=drivesdk",
          "cachedResultName": "Equipment Purchase Request - Workflow"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "49e4cb28-c984-4a56-b916-32da78ee4116",
      "name": "Check Amount Threshold",
      "type": "n8n-nodes-base.if",
      "position": [
        896,
        96
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "91683f90-974e-4b60-8952-bb050c953bbb",
              "operator": {
                "type": "number",
                "operation": "lte"
              },
              "leftValue": "={{ $('Set Request Data').first().json.total_price }}",
              "rightValue": 10000
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "ef44db1c-90d9-400f-91ef-7e55c7cc9c30",
      "name": "Update Status (Auto Approved)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1120,
        -96
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "\u81ea\u52d5\u627f\u8a8d",
            "request_id": "={{ $json.request_id }}",
            "approved_at": "={{ $now.format('yyyy-MM-dd HH:mm:ss') }}"
          },
          "schema": [
            {
              "id": "request_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "request_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "requested_at",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "requested_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applicant_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "applicant_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applicant_email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "applicant_email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "department",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "department",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "item_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "item_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "quantity",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "unit_price",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "unit_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "total_price",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "total_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reason",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "desired_delivery",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "desired_delivery",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "approved_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "approved_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "approver_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "approver_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "rejection_comment",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "rejection_comment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "request_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Purchase Requests"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc/edit?usp=drivesdk",
          "cachedResultName": "Equipment Purchase Request - Workflow"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "b6ba4ec4-d121-40e5-8f2c-e3d2ede4e8c6",
      "name": "Notify Purchasing (Auto)",
      "type": "n8n-nodes-base.slack",
      "position": [
        1344,
        -96
      ],
      "parameters": {
        "text": "=\ud83d\udce6 \u3010\u81ea\u52d5\u627f\u8a8d\u3011\u5099\u54c1\u8cfc\u5165\u4f9d\u983c\u304c\u5c4a\u304d\u307e\u3057\u305f\n\n\u7533\u8acb\u8005\uff1a{{ $('Set Request Data').first().json.applicant_name }}\uff08{{ $('Set Request Data').first().json.department }}\uff09\n\u54c1\u540d\uff1a{{ $('Set Request Data').first().json.item_name }}\n\u6570\u91cf\uff1a{{ $('Set Request Data').first().json.quantity }}\n\u5358\u4fa1\uff1a{{ $('Set Request Data').first().json.unit_price }}\u5186\n\u5408\u8a08\uff1a{{ $('Set Request Data').first().json.total_price }}\u5186\n\u7406\u7531\uff1a{{ $('Set Request Data').first().json.reason }}\n\u5e0c\u671b\u7d0d\u671f\uff1a{{ $('Set Request Data').first().json.desired_delivery }}\n\u7533\u8acbID\uff1a{{ $('Set Request Data').first().json.request_id }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0AKZ7S8ZR7",
          "cachedResultName": "n8n-test"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "8a99d565-77a1-4046-bbf3-7af3dab1aec4",
      "name": "Send Auto Approval Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1568,
        -96
      ],
      "parameters": {
        "sendTo": "={{ $('Set Request Data').first().json.applicant_email }}",
        "message": "={{ $('Set Request Data').first().json.applicant_name }} \u69d8\n\n\u4ee5\u4e0b\u306e\u5099\u54c1\u8cfc\u5165\u7533\u8acb\u304c\u81ea\u52d5\u627f\u8a8d\u3055\u308c\u307e\u3057\u305f\u3002\n\n\u25a0 \u7533\u8acb\u5185\u5bb9\n\u54c1\u540d\uff1a{{ $('Set Request Data').first().json.item_name }}\n\u6570\u91cf\uff1a{{ $('Set Request Data').first().json.quantity }}\n\u5408\u8a08\u91d1\u984d\uff1a{{ $('Set Request Data').first().json.total_price }}\u5186\n\u5e0c\u671b\u7d0d\u671f\uff1a{{ $('Set Request Data').first().json.desired_delivery }}\n\n\u7dcf\u52d9\u62c5\u5f53\u3088\u308a\u767a\u6ce8\u624b\u7d9a\u304d\u3092\u9032\u3081\u307e\u3059\u3002",
        "options": {},
        "subject": "\u3010\u81ea\u52d5\u627f\u8a8d\u3011\u5099\u54c1\u8cfc\u5165\u7533\u8acb\u304c\u627f\u8a8d\u3055\u308c\u307e\u3057\u305f",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "b25656da-dbe8-4fa4-b6d4-b83f22972914",
      "name": "Check Approval Result",
      "type": "n8n-nodes-base.if",
      "position": [
        1344,
        192
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "37b106c0-a3b2-47c4-aa0b-d615608e1b51",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.decision }}",
              "rightValue": "approve"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "f8176d42-d337-4c49-866b-3d7a27512fc4",
      "name": "Update Status (Approved)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1568,
        96
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "\u627f\u8a8d\u6e08\u307f",
            "request_id": "={{ $('Set Request Data').first().json.request_id }}",
            "approved_at": "={{ $now.format('yyyy-MM-dd HH:mm:ss') }}",
            "approver_name": "={{ $('Get Manager Info').first().json.manager_name }}"
          },
          "schema": [
            {
              "id": "request_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "request_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "requested_at",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "requested_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applicant_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "applicant_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applicant_email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "applicant_email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "department",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "department",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "item_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "item_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "quantity",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "unit_price",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "unit_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "total_price",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "total_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reason",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "desired_delivery",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "desired_delivery",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "approved_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "approved_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "approver_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "approver_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "rejection_comment",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "rejection_comment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "request_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Purchase Requests"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc/edit?usp=drivesdk",
          "cachedResultName": "Equipment Purchase Request - Workflow"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "04ef2601-0d7a-4f66-a175-bed414051356",
      "name": "Notify Purchasing (Approved)",
      "type": "n8n-nodes-base.slack",
      "position": [
        1792,
        96
      ],
      "parameters": {
        "text": "=\ud83d\udce6 \u3010\u627f\u8a8d\u6e08\u3011\u5099\u54c1\u8cfc\u5165\u4f9d\u983c\u304c\u5c4a\u304d\u307e\u3057\u305f\n\n\u7533\u8acb\u8005\uff1a{{ $('Set Request Data').first().json.applicant_name }}\uff08{{ $('Set Request Data').first().json.department }}\uff09\n\u54c1\u540d\uff1a{{ $('Set Request Data').first().json.item_name }}\n\u6570\u91cf\uff1a{{ $('Set Request Data').first().json.quantity }}\n\u5358\u4fa1\uff1a{{ $('Set Request Data').first().json.unit_price }}\u5186\n\u5408\u8a08\uff1a{{ $('Set Request Data').first().json.total_price }}\u5186\n\u7406\u7531\uff1a{{ $('Set Request Data').first().json.reason }}\n\u5e0c\u671b\u7d0d\u671f\uff1a{{ $('Set Request Data').first().json.desired_delivery }}\n\u627f\u8a8d\u8005\uff1a{{ $('Get Manager Info').first().json.manager_name }}\n\u7533\u8acbID\uff1a{{ $('Set Request Data').first().json.request_id }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0AKZ7S8ZR7",
          "cachedResultName": "n8n-test"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "a4601ba0-041e-4361-81e7-1c375377b24e",
      "name": "Send Approval Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2016,
        96
      ],
      "parameters": {
        "sendTo": "={{ $('Set Request Data').first().json.applicant_email }}",
        "message": "={{ $('Set Request Data').first().json.applicant_name }} \u69d8\n\n\u4ee5\u4e0b\u306e\u5099\u54c1\u8cfc\u5165\u7533\u8acb\u304c\u627f\u8a8d\u3055\u308c\u307e\u3057\u305f\u3002\n\n\u25a0 \u7533\u8acb\u5185\u5bb9\n\u54c1\u540d\uff1a{{ $('Set Request Data').first().json.item_name }}\n\u6570\u91cf\uff1a{{ $('Set Request Data').first().json.quantity }}\n\u5408\u8a08\u91d1\u984d\uff1a{{ $('Set Request Data').first().json.total_price }}\u5186\n\u5e0c\u671b\u7d0d\u671f\uff1a{{ $('Set Request Data').first().json.desired_delivery }}\n\u627f\u8a8d\u8005\uff1a{{ $('Get Manager Info').first().json.manager_name }}\n\n\u7dcf\u52d9\u62c5\u5f53\u3088\u308a\u767a\u6ce8\u624b\u7d9a\u304d\u3092\u9032\u3081\u307e\u3059\u3002",
        "options": {},
        "subject": "\u3010\u627f\u8a8d\u3011\u5099\u54c1\u8cfc\u5165\u7533\u8acb\u304c\u627f\u8a8d\u3055\u308c\u307e\u3057\u305f",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "b7df2ae9-fd82-4bd7-bf09-128613bd36ef",
      "name": "Update Status (Rejected)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1568,
        288
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "\u5374\u4e0b",
            "request_id": "={{ $('Set Request Data').first().json.request_id }}",
            "approved_at": "={{ $now.format('yyyy-MM-dd HH:mm:ss') }}",
            "rejection_comment": "={{ $json.data.comment }}"
          },
          "schema": [
            {
              "id": "request_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "request_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "requested_at",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "requested_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applicant_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "applicant_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applicant_email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "applicant_email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "department",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "department",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "item_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "item_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "quantity",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "unit_price",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "unit_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "total_price",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "total_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reason",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "desired_delivery",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "desired_delivery",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "approved_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "approved_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "approver_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "approver_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "rejection_comment",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "rejection_comment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "request_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Purchase Requests"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc/edit?usp=drivesdk",
          "cachedResultName": "Equipment Purchase Request - Workflow"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "1e1ed2e7-dbea-47a3-bb89-f7a5a81c8e34",
      "name": "Send Rejection Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1792,
        288
      ],
      "parameters": {
        "sendTo": "={{ $('Set Request Data').first().json.applicant_email }}",
        "message": "={{ $('Set Request Data').first().json.applicant_name }} \u69d8\n\n\u4ee5\u4e0b\u306e\u5099\u54c1\u8cfc\u5165\u7533\u8acb\u304c\u5374\u4e0b\u3055\u308c\u307e\u3057\u305f\u3002\n\n\u25a0 \u5374\u4e0b\u30b3\u30e1\u30f3\u30c8\n{{ $('Send Approval Request').first().json.data.comment }}\n\n\u25a0 \u7533\u8acb\u5185\u5bb9\n\u54c1\u540d\uff1a{{ $('Set Request Data').first().json.item_name }}\n\u6570\u91cf\uff1a{{ $('Set Request Data').first().json.quantity }}\n\u5408\u8a08\u91d1\u984d\uff1a{{ $('Set Request Data').first().json.total_price }}\u5186\n\n\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u627f\u8a8d\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002",
        "options": {},
        "subject": "\u3010\u5374\u4e0b\u3011\u5099\u54c1\u8cfc\u5165\u7533\u8acb\u304c\u5374\u4e0b\u3055\u308c\u307e\u3057\u305f",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "0141f6ca-1768-4617-93a2-ca0d7c452662",
      "name": "Send Approval Request",
      "type": "n8n-nodes-base.slack",
      "position": [
        1120,
        192
      ],
      "parameters": {
        "user": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Get Manager Info').item.json.manager_slack_id }}"
        },
        "message": "=\ud83d\udccb \u3010\u627f\u8a8d\u4f9d\u983c\u3011\u5099\u54c1\u8cfc\u5165\u7533\u8acb\u304c\u5c4a\u3044\u3066\u3044\u307e\u3059\n\n\u7533\u8acb\u8005\uff1a{{ $('Set Request Data').first().json.applicant_name }}\uff08{{ $('Set Request Data').first().json.department }}\uff09\n\u54c1\u540d\uff1a{{ $('Set Request Data').first().json.item_name }}\n\u6570\u91cf\uff1a{{ $('Set Request Data').first().json.quantity }}\n\u5358\u4fa1\uff1a{{ $('Set Request Data').first().json.unit_price }}\u5186\n\u5408\u8a08\uff1a{{ $('Set Request Data').first().json.total_price }}\u5186\n\u7406\u7531\uff1a{{ $('Set Request Data').first().json.reason }}\n\u5e0c\u671b\u7d0d\u671f\uff1a{{ $('Set Request Data').first().json.desired_delivery }}\n\u7533\u8acbID\uff1a{{ $('Set Request Data').first().json.request_id }}",
        "options": {},
        "operation": "sendAndWait",
        "formFields": {
          "values": [
            {
              "fieldName": "decision",
              "fieldType": "radio",
              "fieldLabel": "\u627f\u8a8d\u30fb\u5374\u4e0b / Approval Decision",
              "fieldOptions": {
                "values": [
                  {
                    "option": "approve"
                  },
                  {
                    "option": "reject"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldName": "comment",
              "fieldType": "textarea",
              "fieldLabel": "\u30b3\u30e1\u30f3\u30c8 / Comment"
            }
          ]
        },
        "responseType": "customForm",
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "25aa1ff5-acae-45d0-bb33-94e687f149ca",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1184,
        240
      ],
      "parameters": {
        "width": 1120,
        "height": 976,
        "content": "## \ud83d\uded2 \u5099\u54c1\u30fb\u8cfc\u8cb7\u7533\u8acb \u2014 Slack & Google Sheets\u306b\u3088\u308b\u627f\u8a8d\u30d5\u30ed\u30fc\n\n**\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc**\n\u793e\u5185\u306e\u5099\u54c1\u30fb\u6d88\u8017\u54c1\u8cfc\u5165\u7533\u8acb\u3092\u81ea\u52d5\u5316\u3057\u305f\u3044\u3001\u65e5\u672c\u4f01\u696d\u306e\u7dcf\u52d9\u30fbHR\u30fb\u60c5\u5831\u30b7\u30b9\u30c6\u30e0\u62c5\u5f53\u8005\u5411\u3051\u3067\u3059\u3002\u5c11\u984d\u306f\u81ea\u52d5\u627f\u8a8d\u3001\u9ad8\u984d\u306f\u4e0a\u9577\u3078\u306eSlack\u627f\u8a8d\u4f9d\u983c\u3068\u3001\u91d1\u984d\u306b\u5fdc\u3058\u305f\u67d4\u8edf\u306a\u30d5\u30ed\u30fc\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\n\n**\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u3067\u304d\u308b\u3053\u3068**\n- n8n\u30d5\u30a9\u30fc\u30e0\u3067\u8cfc\u5165\u7533\u8acb\u3092\u53d7\u3051\u4ed8\u3051\u308b\uff08\u5916\u90e8\u30c4\u30fc\u30eb\u4e0d\u8981\uff09\n- Google Sheets\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u627f\u8a8d\u8005\u3092\u81ea\u52d5\u53d6\u5f97\n- \u5168\u7533\u8acb\u3092Google Sheets\u306b\u30ed\u30b0\u3068\u3057\u3066\u8a18\u9332\n- \u8a2d\u5b9a\u3057\u305f\u95be\u5024\u4ee5\u4e0b\u306e\u7533\u8acb\u3092\u81ea\u52d5\u627f\u8a8d\u3057\u3001\u7dcf\u52d9\u30c1\u30fc\u30e0\u306bSlack\u901a\u77e5\n- \u95be\u5024\u8d85\u3048\u306e\u7533\u8acb\u306f\u4e0a\u9577\u306bSlack DM\u3067\u627f\u8a8d\u4f9d\u983c\u30d5\u30a9\u30fc\u30e0\u3092\u9001\u4fe1\uff08\u627f\u8a8d/\u5374\u4e0b\uff0b\u30b3\u30e1\u30f3\u30c8\u5165\u529b\uff09\n- \u627f\u8a8d\u6642\uff1a\u30ed\u30b0\u66f4\u65b0\u30fb\u7dcf\u52d9\u30c1\u30e3\u30f3\u30cd\u30eb\u3078Slack\u901a\u77e5\u30fb\u7533\u8acb\u8005\u306bGmail\u3067\u901a\u77e5\n- \u5374\u4e0b\u6642\uff1a\u5374\u4e0b\u30b3\u30e1\u30f3\u30c8\u4ed8\u304d\u3067\u30ed\u30b0\u66f4\u65b0\u30fb\u7533\u8acb\u8005\u306bGmail\u3067\u901a\u77e5\n\n**\u51e6\u7406\u306e\u6d41\u308c**\n1. Purchase Request Form \u2014 \u7533\u8acb\u8005\u304cn8n\u30d5\u30a9\u30fc\u30e0\u3067\u5099\u54c1\u60c5\u5831\u3092\u5165\u529b\n2. Set Request Data \u2014 \u30c7\u30fc\u30bf\u6574\u5f62\u30fb\u7533\u8acbID\u306e\u751f\u6210\n3. Get Manager Info \u2014 Manager Mapping\u30b7\u30fc\u30c8\u304b\u3089\u4e0a\u9577\u306eSlack ID\u3092\u53d6\u5f97\n4. Log Request \u2014 Purchase Requests\u30b7\u30fc\u30c8\u306b\u30b9\u30c6\u30fc\u30bf\u30b9\u3092Append\n5. Check Amount Threshold \u2014 \u95be\u5024\u4ee5\u4e0b\u306f\u81ea\u52d5\u627f\u8a8d\u30eb\u30fc\u30c8\u3001\u8d85\u3048\u306f\u4e0a\u9577\u627f\u8a8d\u30eb\u30fc\u30c8\u3078\n6. \u81ea\u52d5\u627f\u8a8d\u30eb\u30fc\u30c8 \u2014 \u30b9\u30c6\u30fc\u30bf\u30b9\u66f4\u65b0\u30fbSlack\u901a\u77e5\u30fb\u7533\u8acb\u8005\u3078\u30e1\u30fc\u30eb\n7. Send Approval Request \u2014 \u4e0a\u9577\u306bSlack DM\u3067\u627f\u8a8d\u30d5\u30a9\u30fc\u30e0\u3092\u9001\u4fe1\uff08\u627f\u8a8d/\u5374\u4e0b\uff0b\u30b3\u30e1\u30f3\u30c8\uff09\n8. Check Approval Result \u2014 \u4e0a\u9577\u306e\u5224\u65ad\u306b\u5fdc\u3058\u3066\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\n9. \u627f\u8a8d\u30eb\u30fc\u30c8 \u2014 \u30b9\u30c6\u30fc\u30bf\u30b9\u66f4\u65b0\u30fbSlack\u901a\u77e5\u30fb\u7533\u8acb\u8005\u3078\u30e1\u30fc\u30eb\n10. \u5374\u4e0b\u30eb\u30fc\u30c8 \u2014 \u5374\u4e0b\u30b3\u30e1\u30f3\u30c8\u4ed8\u304d\u3067\u30b9\u30c6\u30fc\u30bf\u30b9\u66f4\u65b0\u30fb\u7533\u8acb\u8005\u3078\u30e1\u30fc\u30eb\n\n**\u4e3b\u306a\u7279\u5fb4**\n- n8n\u7d44\u307f\u8fbc\u307f\u30d5\u30a9\u30fc\u30e0\u3092\u4f7f\u7528 \u2014 \u5916\u90e8\u30d5\u30a9\u30fc\u30e0\u30c4\u30fc\u30eb\u4e0d\u8981\n- \u4e0a\u9577\u306fGoogle Sheets\u3067\u7ba1\u7406 \u2014 \u30d5\u30a9\u30fc\u30e0\u3078\u306eSlack ID\u5165\u529b\u4e0d\u8981\n- \u81ea\u52d5\u627f\u8a8d\u95be\u5024\u306f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\uff1a10,000\u5186\uff09\n- Slack\u306e\u30ab\u30b9\u30bf\u30e0\u30d5\u30a9\u30fc\u30e0\u3067\u5374\u4e0b\u30b3\u30e1\u30f3\u30c8\u3092\u53ce\u96c6\u30fbSheets\u306b\u8a18\u9332\n- \u5168\u7533\u8acb\u306e\u30d5\u30eb\u76e3\u67fb\u30ed\u30b0\u3092Google Sheets\u3067\u7ba1\u7406\n\n**\u524d\u63d0\u6761\u4ef6**\n- Google Sheets\uff08\u4e0b\u8a18\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u30b3\u30d4\u30fc\u7528\u30ea\u30f3\u30af\u3092\u4f7f\u7528\uff09\n- DM\u9001\u4fe1\u6a29\u9650\u3092\u6301\u3064Slack App\n- n8n\u306b\u63a5\u7d9a\u6e08\u307f\u306eGmail\u30a2\u30ab\u30a6\u30f3\u30c8"
      },
      "typeVersion": 1
    },
    {
      "id": "e7184118-52f3-49e0-a3e6-02cd5641695f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        448
      ],
      "parameters": {
        "color": 5,
        "width": 960,
        "height": 480,
        "content": "## \ud83d\udcca Google Sheets\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n\n1. \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\uff1a\n   \ud83d\udc49 https://docs.google.com/spreadsheets/d/1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc/copy\n\n2. \u30b3\u30d4\u30fc\u3057\u305f\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306eURL\u304b\u3089ID\u3092\u53d6\u5f97\uff1a\n   `https://docs.google.com/spreadsheets/d/\u3010\u3053\u3053\u304cID\u3011/edit`\n\n3. \u4ee5\u4e0b\u306e\u30ce\u30fc\u30c9\u306e\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8ID\u3092\u30b3\u30d4\u30fc\u5148\u306eID\u306b\u5909\u66f4\u3059\u308b\uff1a\n   - Get Manager Info\n   - Log Request\n   - Update Status (Auto Approved)\n   - Update Status (Approved)\n   - Update Status (Rejected)\n\n4. Manager Mapping\u30b7\u30fc\u30c8\u306bSlack ID\u3092\u8ffd\u52a0\u3059\u308b\uff1a\n   | department | manager_name | manager_slack_id |\n   |------------|--------------|-----------------|\n   | \u55b6\u696d\u90e8      | \u7530\u4e2d\u592a\u90ce      | U0XXXXXXXXX     |\n   | IT\u90e8        | \u9234\u6728\u82b1\u5b50      | U0YYYYYYYYY     |\n\n   Slack User ID\u306e\u78ba\u8a8d\u65b9\u6cd5\uff1aSlack\u3067\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u3092\u958b\u304f \u2192 \u22ee \u2192 \u300c\u30e1\u30f3\u30d0\u30fcID\u3092\u30b3\u30d4\u30fc\u300d"
      },
      "typeVersion": 1
    },
    {
      "id": "54454c1c-6d31-4a01-9a18-21654a6fcb4d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1872,
        -416
      ],
      "parameters": {
        "color": 5,
        "width": 1216,
        "height": 448,
        "content": "## \ud83d\udd11 Credentials & Settings Checklist\n\nReplace all placeholders before publishing:\n\n| Placeholder | Type | Node(s) |\n|---|---|---|\n| YOUR_GOOGLE_SHEETS_CREDENTIAL | Google Sheets OAuth2 | Get Manager Info, Log Request, Update Status (\u00d73) |\n| YOUR_SLACK_CREDENTIAL | Slack OAuth2 | Send Approval Request, Notify Purchasing (Auto), Notify Purchasing (Approved) |\n| YOUR_GMAIL_CREDENTIAL | Gmail OAuth2 | Send Auto Approval Email, Send Approval Email, Send Rejection Email |\n| YOUR_PURCHASING_CHANNEL_ID | Slack Channel ID | Notify Purchasing (Auto), Notify Purchasing (Approved) |\n| YOUR_ALERT_EMAIL_ADDRESS | Email address | Send Auto Approval Email, Send Approval Email, Send Rejection Email \u2192 sendTo field |\n\n**Auto-approval threshold**\nThe default threshold is \u00a510,000. To change it, update the value in the Check Amount Threshold node.\n\n---\n\n## \ud83d\udd11 \u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u30fb\u8a2d\u5b9a\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\n\nPublish\u3059\u308b\u524d\u306b\u5168\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\uff1a\n\n| \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc | \u7a2e\u5225 | \u5bfe\u8c61\u30ce\u30fc\u30c9 |\n|---|---|---|\n| YOUR_GOOGLE_SHEETS_CREDENTIAL | Google Sheets OAuth2 | Get Manager Info\u3001Log Request\u3001Update Status\uff08\u00d73\uff09 |\n| YOUR_SLACK_CREDENTIAL | Slack OAuth2 | Send Approval Request\u3001Notify Purchasing\uff08Auto/Approved\uff09 |\n| YOUR_GMAIL_CREDENTIAL | Gmail OAuth2 | Send Auto Approval Email\u3001Send Approval Email\u3001Send Rejection Email |\n| YOUR_PURCHASING_CHANNEL_ID | Slack\u30c1\u30e3\u30f3\u30cd\u30ebID | Notify Purchasing\uff08Auto/Approved\uff09 |\n\n**\u81ea\u52d5\u627f\u8a8d\u95be\u5024**\n\u30c7\u30d5\u30a9\u30eb\u30c8\u306f10,000\u5186\u3067\u3059\u3002\u5909\u66f4\u3059\u308b\u5834\u5408\u306fCheck Amount Threshold\u30ce\u30fc\u30c9\u306eValue 2\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002"
      },
      "typeVersion": 1
    },
    {
      "id": "2ebea5fb-43be-4437-8b64-1ae250536217",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        -384
      ],
      "parameters": {
        "color": 5,
        "width": 624,
        "height": 464,
        "content": "## \ud83d\udcac Slack App Setup\n\nThis workflow uses Slack's \"Send and Wait for Response\" feature, which requires specific Slack App configuration.\n\n**Required permissions (OAuth Scopes)**\n- chat:write\n- im:write\n- users:read\n\n**Enable Interactivity**\n1. Go to your Slack App settings \u2192 Features \u2192 Interactivity & Shortcuts\n2. Turn Interactivity ON\n3. Set the Request URL to:\n   `https://YOUR-N8N-INSTANCE.app.n8n.cloud/rest/waiting-webhook/`\n\nWithout this setting, the approval form buttons will not work.\n\n**Find a user's Slack ID**\nOpen the user's profile in Slack \u2192 click \u22ee (More) \u2192 Copy member ID\nFormat: U0XXXXXXXXX"
      },
      "typeVersion": 1
    },
    {
      "id": "d3e01a92-6449-4a55-a7b8-8531b1e9464d",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1184,
        -752
      ],
      "parameters": {
        "width": 1120,
        "height": 944,
        "content": "## \ud83d\uded2 Equipment Purchase Request \u2014 Approval Flow with Slack & Google Sheets\n\n**Who this is for**\nOperations, HR, and IT teams at Japanese companies who want to automate internal equipment and supply purchase requests \u2014 with automatic approval for small amounts and manager approval via Slack for larger ones.\n\n**What this workflow does**\n- Accepts purchase requests via an n8n form (no external tools required)\n- Looks up the approving manager from a Google Sheets mapping table\n- Logs every request to Google Sheets\n- Auto-approves requests under the configured threshold and notifies the purchasing team via Slack\n- For requests above the threshold: sends a Slack DM to the manager with a custom approval form (approve/reject + comment)\n- On approval: updates the log, notifies the purchasing team via Slack, and emails the applicant\n- On rejection: updates the log with the rejection comment and emails the applicant\n\n**How it works**\n1. Purchase Request Form \u2014 applicant submits item details via n8n form\n2. Set Request Data \u2014 formats data and generates a unique request ID\n3. Get Manager Info \u2014 looks up the manager's Slack ID from the Manager Mapping sheet\n4. Log Request \u2014 appends the request to the Purchase Requests sheet with status \"\u7533\u8acb\u4e2d\"\n5. Check Amount Threshold \u2014 routes to auto-approval (\u2264 threshold) or manager approval (> threshold)\n6. Auto-approval route \u2014 updates status, notifies purchasing team via Slack, emails applicant\n7. Send Approval Request \u2014 sends a Slack DM to the manager with a custom form (approve/reject + comment)\n8. Check Approval Result \u2014 routes based on manager's decision\n9. Approval route \u2014 updates status, notifies purchasing team via Slack, emails applicant\n10. Rejection route \u2014 updates status with rejection comment, emails applicant\n\n**Key features**\n- No external form tools required \u2014 uses n8n's built-in form\n- Manager lookup via Google Sheets \u2014 no need to enter Slack IDs in the form\n- Auto-approval threshold is configurable (default: \u00a510,000)\n- Rejection comments are collected via Slack's custom form and logged to Google Sheets\n- Full audit trail in Google Sheets for every request\n\n**Prerequisites**\n- Google Sheets (copy link provided in the Setup section below)\n- Slack App with DM permissions\n- Gmail account connected to n8n"
      },
      "typeVersion": 1
    },
    {
      "id": "9cf29fec-0420-49a7-9567-2169d3e55948",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        -384
      ],
      "parameters": {
        "color": 5,
        "width": 624,
        "height": 464,
        "content": "## \ud83d\udcac Slack App\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n\n\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306fSlack\u306e\u300cSend and Wait for Response\u300d\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001Slack App\u306e\u8ffd\u52a0\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059\u3002\n\n**\u5fc5\u8981\u306a\u6a29\u9650\uff08OAuth Scopes\uff09**\n- chat:write\n- im:write\n- users:read\n\n**Interactivity\u306e\u6709\u52b9\u5316**\n1. Slack App\u306eSettings \u2192 Features \u2192 Interactivity & Shortcuts \u3092\u958b\u304f\n2. Interactivity\u3092ON\u306b\u3059\u308b\n3. Request URL\u306b\u4ee5\u4e0b\u3092\u8a2d\u5b9a\u3059\u308b\uff1a\n   `https://YOUR-N8N-INSTANCE.app.n8n.cloud/rest/waiting-webhook/`\n\n\u3053\u306e\u8a2d\u5b9a\u304c\u306a\u3044\u3068\u3001\u627f\u8a8d\u30d5\u30a9\u30fc\u30e0\u306e\u30dc\u30bf\u30f3\u304c\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3002\n\n**Slack User ID\u306e\u78ba\u8a8d\u65b9\u6cd5**\nSlack\u3067\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u3092\u958b\u304f \u2192 \u22ee\uff08\u305d\u306e\u4ed6\uff09\u2192\u300c\u30e1\u30f3\u30d0\u30fcID\u3092\u30b3\u30d4\u30fc\u300d\n\u5f62\u5f0f\uff1aU0XXXXXXXXX"
      },
      "typeVersion": 1
    },
    {
      "id": "5248e112-9355-409e-93fd-6da1267e528d",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        448
      ],
      "parameters": {
        "color": 5,
        "width": 960,
        "height": 480,
        "content": "## \ud83d\udcca Google Sheets Setup\n\n1. Make a copy of the template spreadsheet:\n   \ud83d\udc49 https://docs.google.com/spreadsheets/d/1n9gRUOrz_oLC0S5fq9NQXJFodfT50JL8mTyS6XuVVKc/copy\n\n2. Copy the Spreadsheet ID from your copied sheet's URL:\n   `https://docs.google.com/spreadsheets/d/\u3010THIS IS THE ID\u3011/edit`\n\n3. Replace the Spreadsheet ID in the following nodes with your copied sheet's ID:\n   - Get Manager Info\n   - Log Request\n   - Update Status (Auto Approved)\n   - Update Status (Approved)\n   - Update Status (Rejected)\n\n4. Add your department-to-manager mappings to the Manager Mapping sheet:\n   | department | manager_name | manager_slack_id |\n   |------------|--------------|-----------------|\n   | Sales      | \u7530\u4e2d\u592a\u90ce      | U0XXXXXXXXX     |\n   | IT         | \u9234\u6728\u82b1\u5b50      | U0YYYYYYYYY     |\n\n   To find a Slack User ID: open the user's profile in Slack \u2192 click \u22ee \u2192 Copy member ID"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Log Request": {
      "main": [
        [
          {
            "node": "Check Amount Threshold",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Manager Info": {
      "main": [
        [
          {
            "node": "Log Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Request Data": {
      "main": [
        [
          {
            "node": "Get Manager Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Approval Result": {
      "main": [
        [
          {
            "node": "Update Status (Approved)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update Status (Rejected)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Purchase Request Form": {
      "main": [
        [
          {
            "node": "Set Request Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Approval Request": {
      "main": [
        [
          {
            "node": "Check Approval Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Amount Threshold": {
      "main": [
        [
          {
            "node": "Update Status (Auto Approved)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Approval Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Purchasing (Auto)": {
      "main": [
        [
          {
            "node": "Send Auto Approval Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Status (Approved)": {
      "main": [
        [
          {
            "node": "Notify Purchasing (Approved)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Status (Rejected)": {
      "main": [
        [
          {
            "node": "Send Rejection Email",
            "type": "main",
            "index": 0
          }
        ]
    

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This template automates internal equipment and supply purchase requests for operations, HR, and IT teams. Requests are submitted via a built-in n8n form, automatically approved for small amounts, and routed to the manager via Slack for larger ones — with full logging to Google…

Source: https://n8n.io/workflows/15009/ — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

Stop chasing blurry receipts and manually typing expense data. This workflow creates an intelligent, "snap-and-submit" reimbursement pipeline that hosts photos via UploadToURL, extracts deep data via

Form Trigger, N8N Nodes Uploadtourl, HTTP Request +3
Email & Gmail

Generate personalized concert ticket PDFs with QR codes using PDF Generator API, then email them to attendees, log sales to Google Sheets, and notify organizers via Slack — all triggered from a simple

Form Trigger, @Pdfgeneratorapi/N8N Nodes Pdf Generator Api, Gmail +2
Email & Gmail

This workflow is triggered when the contact form is submitted.

Form Trigger, Slack, Google Sheets +2
Email & Gmail

n8n Recruitment. Uses gmailTrigger, openAi, googleSheets, gmail. Event-driven trigger; 20 nodes.

Gmail Trigger, OpenAI, Google Sheets +4
Email & Gmail

Loan eligibility workflow. Uses formTrigger, googleSheets, gmail. Event-driven trigger; 53 nodes.

Form Trigger, Google Sheets, Gmail