Quick Overview
This workflow collects home-service quote requests via an n8n Form, uses OpenAI and a Google Sheets price book to estimate effort and a price range, then dispatches the job to the best matching serviceman in Slack and logs every request back to Google Sheets.
How it works
- Receives a job request submitted through an n8n Form (name, contact details, postcode, service type, urgency, description, and optional photo).
- Loads business and dispatch settings, then reads the “Price book” tab from Google Sheets.
- Sends the request plus the price book to OpenAI to extract a matching job category, an hours estimate, an urgency level, and a short customer-facing summary (without prices).
- If OpenAI cannot produce an estimate, posts the full request to a Slack dispatch channel for a human to quote.
- Otherwise, reads the “Servicemen” tab from Google Sheets, calculates an estimate range from the matching price book row, and selects the best serviceman based on skills, postcode coverage, and on-call status.
- If a serviceman is selected, sends them a direct Slack message with the job details and posts a dispatch confirmation to the Slack channel; if not, posts the job to the Slack channel as unassigned with the reason.
- Optionally emails the customer the generated response and estimate via Gmail, then appends a row with the outcome and key fields to the “Jobs log” tab in Google Sheets.
Setup
- Create a Google Sheet with three tabs named “Price book”, “Servicemen”, and “Jobs log”, and ensure the “Jobs log” header columns match the fields appended by the workflow (date, customer, phone, email, postcode, category, urgency, estimate_low, estimate_high, needs_site_visit, assigned_to, status, why).
- Add Google Sheets credentials in n8n and paste your spreadsheet ID into the Dispatch Settings value for
jobsSheetId.
- Add an OpenAI API key credential for the chat model used to categorize jobs and estimate hours.
- Add Slack credentials with permission to post to your dispatch channel and DM users, set the target channel (for example
#dispatch), and store each serviceman’s Slack user ID in the “Servicemen” tab.
- (Optional) Add Gmail credentials and set
emailCustomer to true in Dispatch Settings to enable customer estimate emails.