AutomationFlowsEmail & Gmail › Automate Installation Booking Approvals with Slack & Gmail Forms

Automate Installation Booking Approvals with Slack & Gmail Forms

ByChris Rudy @chrisrudy on n8n.io

Service businesses that handle installation appointments and need an efficient approval process. Perfect for HVAC companies, internet providers, appliance installers, or any business that requires team coordination before confirming customer appointments.

Event trigger★★★★☆ complexity13 nodesForm TriggerSlackGmail
Email & Gmail Trigger: Event Nodes: 13 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #8124 — 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
{
  "id": "F3ZBYce4AMuybZcF",
  "name": "Installation Booking Approval Workflow with Slack and Gmail",
  "tags": [],
  "nodes": [
    {
      "id": "57b8a226-402b-42cf-b6bb-090195a862d9",
      "name": "Form Trigger: Installation Booking",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -16,
        496
      ],
      "parameters": {
        "options": {},
        "formTitle": "Installation Schedule Booking Form",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Full Name",
              "requiredField": true
            },
            {
              "fieldType": "email",
              "fieldLabel": "Email Address",
              "requiredField": true
            },
            {
              "fieldLabel": "Phone Number",
              "requiredField": true
            },
            {
              "fieldType": "=date",
              "fieldLabel": "Booking Date",
              "fieldOptions": {
                "values": [
                  {}
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Preferred Time (PST)",
              "fieldOptions": {
                "values": [
                  {
                    "option": "09:00"
                  },
                  {
                    "option": "11:00"
                  },
                  {
                    "option": "14:00"
                  },
                  {
                    "option": "16:00"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "formDescription": "Installation Schedule Booking Form"
      },
      "typeVersion": 2.2
    },
    {
      "id": "9f165f71-d038-49d0-8277-41c42a8ab0af",
      "name": "Set Fields: Configuration Variables",
      "type": "n8n-nodes-base.set",
      "position": [
        240,
        496
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1c5bdf30-d39c-42ac-a780-dc5c35a6aa17",
              "name": "CUSTOMER_NAME",
              "type": "string",
              "value": "={{ $('Form Trigger: Installation Booking').item.json['Full Name'] }}"
            },
            {
              "id": "3b70d00a-c884-4721-b9cb-018ed47e4818",
              "name": "CUSTOMER_EMAIL",
              "type": "string",
              "value": "={{ $('Form Trigger: Installation Booking').item.json['Email Address'] }}"
            },
            {
              "id": "4c70d00a-c884-4721-b9cb-018ed47e4819",
              "name": "CUSTOMER_PHONE",
              "type": "string",
              "value": "={{ $('Form Trigger: Installation Booking').item.json['Phone Number'] }}"
            },
            {
              "id": "5c70d00a-c884-4721-b9cb-018ed47e4820",
              "name": "BOOKING_DATE",
              "type": "string",
              "value": "={{ $('Form Trigger: Installation Booking').item.json['Booking Date'] }}"
            },
            {
              "id": "6c70d00a-c884-4721-b9cb-018ed47e4821",
              "name": "BOOKING_TIME",
              "type": "string",
              "value": "={{ $('Form Trigger: Installation Booking').item.json['Preferred Time (PST)'] }}"
            },
            {
              "id": "7c70d00a-c884-4721-b9cb-018ed47e4822",
              "name": "SLACK_CHANNEL_ID",
              "type": "string",
              "value": "#installations"
            },
            {
              "id": "8c70d00a-c884-4721-b9cb-018ed47e4823",
              "name": "COMPANY_NAME",
              "type": "string",
              "value": "Your Company Name"
            },
            {
              "id": "9c70d00a-c884-4721-b9cb-018ed47e4824",
              "name": "CONTACT_PERSON",
              "type": "string",
              "value": "Your Name"
            },
            {
              "id": "10c70d00a-c884-4721-b9cb-018ed47e4825",
              "name": "RESCHEDULE_LINK",
              "type": "string",
              "value": "https://your-booking-form-url.com"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9242d614-bc41-4dd9-9b68-ff2938d128d4",
      "name": "Slack: Request Approval",
      "type": "n8n-nodes-base.slack",
      "position": [
        496,
        496
      ],
      "parameters": {
        "select": "channel",
        "message": "=\ud83d\udd27 **New Installation Request**\n\n\ud83d\udc64 **Customer:** {{ $json.CUSTOMER_NAME }}\n\ud83d\udce7 **Email:** {{ $json.CUSTOMER_EMAIL }}\n\ud83d\udcde **Phone:** {{ $json.CUSTOMER_PHONE }}\n\n\ud83d\udcc5 **Requested Date/Time:** {{ $json.BOOKING_DATE }} at {{ $json.BOOKING_TIME }} PST\n\n\u2753 **Do we have an available installer for this slot?**",
        "options": {},
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double",
            "disapproveLabel": "No installer available"
          }
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "7331465f-d0d0-47a2-8451-5aab04607305",
      "name": "If: Check Approval Status",
      "type": "n8n-nodes-base.if",
      "position": [
        736,
        496
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "d0117e5a-8b9a-407a-8412-1c7decbdd759",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": "Approve"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a751b5f3-ed2e-4a93-b061-539688520478",
      "name": "Gmail: Send Confirmation Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        992,
        384
      ],
      "parameters": {
        "sendTo": "={{ $('Set Fields: Configuration Variables').item.json.CUSTOMER_EMAIL }}",
        "message": "=Hi {{ $('Set Fields: Configuration Variables').item.json.CUSTOMER_NAME }},\n\nGreat news! We've confirmed your installation appointment.\n\n\ud83d\udcc5 **Date:** {{ $('Set Fields: Configuration Variables').item.json.BOOKING_DATE }}\n\u23f0 **Time:** {{ $('Set Fields: Configuration Variables').item.json.BOOKING_TIME }} PST\n\nOur installer will contact you shortly to confirm final details and provide any preparation instructions.\n\nIf you need to make any changes, please contact us as soon as possible.\n\nBest regards,\n{{ $('Set Fields: Configuration Variables').item.json.CONTACT_PERSON }}\n{{ $('Set Fields: Configuration Variables').item.json.COMPANY_NAME }}",
        "options": {},
        "subject": "=\u2705 Installation Confirmed - {{ $('Set Fields: Configuration Variables').item.json.BOOKING_DATE }}",
        "emailType": "text"
      },
      "typeVersion": 2.1
    },
    {
      "id": "852c2a56-3558-44ac-9af9-1cd28bedb52b",
      "name": "Gmail: Send Reschedule Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        992,
        592
      ],
      "parameters": {
        "sendTo": "={{ $('Set Fields: Configuration Variables').item.json.CUSTOMER_EMAIL }}",
        "message": "=Hi {{ $('Set Fields: Configuration Variables').item.json.CUSTOMER_NAME }},\n\nThank you for your interest in our installation services.\n\nUnfortunately, we don't have an installer available for your requested time slot:\n\ud83d\udcc5 **Date:** {{ $('Set Fields: Configuration Variables').item.json.BOOKING_DATE }}\n\u23f0 **Time:** {{ $('Set Fields: Configuration Variables').item.json.BOOKING_TIME }} PST\n\nPlease reschedule your appointment using this link:\n\ud83d\udd17 {{ $('Set Fields: Configuration Variables').item.json.RESCHEDULE_LINK }}\n\nWe apologize for any inconvenience and look forward to serving you at a different time.\n\nBest regards,\n{{ $('Set Fields: Configuration Variables').item.json.CONTACT_PERSON }}\n{{ $('Set Fields: Configuration Variables').item.json.COMPANY_NAME }}",
        "options": {},
        "subject": "=\u23f0 Please Reschedule Your Installation",
        "emailType": "text"
      },
      "typeVersion": 2.1
    },
    {
      "id": "665cac83-98f4-4789-ab7a-11754f9bc0fa",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -208
      ],
      "parameters": {
        "width": 736,
        "height": 672,
        "content": "## \ud83d\udd27 Installation Booking Approval Workflow\n\n**What this workflow does:**\nAutomates the approval process for installation bookings by collecting form submissions, requesting team approval via Slack, and sending automated email responses.\n\n**Who's it for:**\nService businesses that need to:\n- Collect installation booking requests\n- Get team approval before confirming appointments\n- Send automated email confirmations or reschedule requests\n\n**How it works:**\n1. Customer fills out installation booking form\n2. Team gets notified via Slack with approval buttons\n3. Based on approval/rejection, customer receives confirmation or reschedule email\n\n**Setup Requirements:**\n- Slack workspace with channel for notifications\n- Gmail account for sending emails\n- Form trigger URL to embed on your website\n\n**Configuration:**\nUpdate the variables in the \"Set Fields\" node:\n- SLACK_CHANNEL_ID: Your Slack channel\n- COMPANY_NAME: Your business name\n- CONTACT_PERSON: Your name\n- RESCHEDULE_LINK: Link to your booking form\n\n**Security Note:**\nNo API keys are hardcoded - all credentials are managed through n8n's secure connection system."
      },
      "typeVersion": 1
    },
    {
      "id": "0abbb78d-aaac-41ca-aab5-ca1653b43b2c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        672
      ],
      "parameters": {
        "width": 200,
        "height": 140,
        "content": "**Step 1**\nCustomer submits installation booking form with contact details and preferred date/time"
      },
      "typeVersion": 1
    },
    {
      "id": "faf5a165-9a69-42c9-be57-abb67e209269",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        672
      ],
      "parameters": {
        "width": 200,
        "height": 140,
        "content": "**Step 2**\nSet up configuration variables that can be easily customized for your business"
      },
      "typeVersion": 1
    },
    {
      "id": "a89a9974-8b5a-4c5c-b79f-88df7961493a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        672
      ],
      "parameters": {
        "width": 200,
        "height": 140,
        "content": "**Step 3**\nSend formatted message to Slack channel with approval buttons for the team"
      },
      "typeVersion": 1
    },
    {
      "id": "5cf683dc-bbdc-4f59-ac2b-aacb72efe823",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        672
      ],
      "parameters": {
        "width": 200,
        "height": 140,
        "content": "**Step 4**\nCheck if the team approved or rejected the booking request"
      },
      "typeVersion": 1
    },
    {
      "id": "4d48f4a4-d01b-4e39-b3f5-23e6d101bd06",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        272
      ],
      "parameters": {
        "width": 200,
        "height": 140,
        "content": "**Step 5A**\nSend confirmation email if approved with appointment details"
      },
      "typeVersion": 1
    },
    {
      "id": "c8f5c8fc-9fb0-481a-9070-5b4f285aa97e",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        768
      ],
      "parameters": {
        "width": 200,
        "height": 140,
        "content": "**Step 5B**\nSend reschedule email if rejected with link to book new time"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "bb882f11-e83f-4520-ae9a-c62690c0abf2",
  "connections": {
    "Slack: Request Approval": {
      "main": [
        [
          {
            "node": "If: Check Approval Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If: Check Approval Status": {
      "main": [
        [
          {
            "node": "Gmail: Send Confirmation Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gmail: Send Reschedule Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Form Trigger: Installation Booking": {
      "main": [
        [
          {
            "node": "Set Fields: Configuration Variables",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Fields: Configuration Variables": {
      "main": [
        [
          {
            "node": "Slack: Request Approval",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

Service businesses that handle installation appointments and need an efficient approval process. Perfect for HVAC companies, internet providers, appliance installers, or any business that requires team coordination before confirming customer appointments.

Source: https://n8n.io/workflows/8124/ — 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

This workflow automatically detects bounced or invalid email addresses from your Gmail inbox and updates their status in Google Sheets. It fetches bounce notifications, extracts failed email addresses

Google Sheets, Slack, Gmail
Email & Gmail

This template is built to be customized for your specific needs. This template has the core logic and n8n node specific references sorted to work with dynamic file names throughout the workflow. Store

Gmail, Slack, Gmail Trigger +3
Email & Gmail

This is an elite enterprise-grade solution for Talent Acquisition and HR Ops teams. It automates the high-volume task of resume screening by transforming unstructured PDF applications into structured

N8N Nodes Htmlcsstopdf, Postgres, HubSpot +4
Email & Gmail

This workflow streamlines accounts receivable management by automatically monitoring invoices in Google Sheets and sending scheduled payment reminders. It is designed for businesses using Gmail and Go

Form Trigger, Gmail, Google Sheets +1
Email & Gmail

📘 Description

HTTP Request, Gmail Trigger, ClickUp +3